この記事では、 TD Toolbelt を利用し始めたときに起こりやすい、ログインの失敗するときのトラブルシュートについて紹介します。
ログインの失敗というのは、たとえば以下のような、 td
コマンドを実行したときに発生するエラーです。
% td db:list Error: TreasureData::AuthError - List databases failed: Failed to Login
ログインができない、認証ができないなどの理由で td
コマンドが使えない場合の原因は多くの場合、下記のうち上2つのパターンが多いです。
- ネットワークの問題
- エンドポイントの問題
- TD は Google SSO 認証により利用している
ネットワークの問題
このケースでは、途中でプロキシサーバが挟まっているために期待するレスポンスが受け取れない場合や、なんらかの変更によってプロキシサーバを挟まなくなった場合などでエラーが発生します。
もしプロキシサーバを運用している場合は、 HTTP_PROXY
という環境変数を予めセットすることでログインの問題が解消することがほとんどです。
Windows ならば
set HTTP_PROXY=http://proxy_host:proxy_port
macOS や Linux などの OS を利用しているならば
export HTTP_PROXY=http://proxy_host:poxy_port
によって HTTP_PROXY
を設定することが可能です。恒久的にこの環境変数を利用する場合は .bashrc や .zshrc など、お使いのシェルの設定ファイルに上記設定を記述しておくとよいでしょう。
また、 HTTP_PROXY
という名前であっても HTTPS による通信は可能なので、 TD Toolbelt を利用する場合においてはプロキシサーバのプロトコルが HTTPS であっても HTTPS_PROXY
のような環境変数にする必要はありません。
エンドポイントの問題
そのほか、 TD Toolbelt の 0.16.9 以前のバージョンを使っている場合、以下のように ~/.td/td.conf
ファイルにエンドポイントの末尾にスラッシュ /
が入っている場合でもエラーが発生します。
[account] user = email@example.com apikey = ****** endpoint = https://api.treasuredata.com/
このとき、endpoint
の末尾 /
を削除でも解決はしますが、不具合修正や機能追加が行われた場合、新しいバージョンでリリースするという形をとっているため、ツール自体のアップデートをしてしまうとよいでしょう。
アップデートは td update
をすることで利用可能です。もし Ruby gem として TD Toolbelt を利用している場合は gem update td
でもアップデートを行えます。
もし td.conf が $HOME/.td/td.conf
にない場合、 td account -f
コマンドで作成することも可能なほか、
td -c /path/to/td.conf td job:list`
のように -c
/ --config
オプションを直接渡して実行可能なほか、 TREASURE_DATA_CONFIG_PATH
, TD_CONFIG_PATH
などの環境変数に任意の td.conf のファイルパスを渡すことでも td
コマンドは利用可能になります。
また、エンドポイントはドキュメントの Sites and Endpoints というページにリージョンごとに記載をしています。お使いのリージョンの API の欄にあるURL を endpoint
に指定してください。
Google SSO 認証を利用したログインをしている場合
TD Toolbelt はデフォルトではパスワード認証によって Treasure Data へアクセスを行います。そのため、Google SSO のようなパスワードによる認証を挟まないログイン形式の場合は認証を行うことができずログインに失敗したというエラーが発生します。
もし API key を生成していない場合は、Treasure Data コンソールから API key を取得して td.conf
ファイルを作成したり、
$ td -k {your_api_key} job:list
のようにコマンドライン引数に直接 API key を指定することで Toolbelt を利用できるようになります。
その他のチェックポイント
上記を踏まえても、まだ認証に失敗する、アクセスができないというケースもあるでしょう。そのときはトラブルシュートとして設定された環境変数を確認するという方法があります。
TD Toolbelt では、以下の順序で優先度が高くなるように実装されています。
たいていのケースでは、 td.conf の内容が正しいにも関わらず TD へアクセスができない場合は環境変数の設定が誤っている場合があります。 たとえば、東京リージョンを普段利用しているため以下のような td.conf を設定したとします。
[account] apikey=***/******** endpoint = https://api.treasuredata.co.jp
しかし、もし環境変数として
TD_API_SERVER=https://api.treasuredata.com
が設定されているとき、 Toolbelt は環境変数の値を優先するため US リージョンの Treasure Data を見に行きます。これではリージョンが異なるので当然認証には失敗します。 コマンドライン引数を設定することで回避は可能ですが、毎回入力したくないようなときは環境変数を消すか、環境変数を利用しているリージョンのエンドポイントに変えることが対策になります。
環境変数間での優先順位については API Key and API Server Search Order Reference というページに記載があるので、複数の環境変数を利用しているような場合はこちらでご確認ください。
利用可能な環境変数
変数名 | 説明 |
---|---|
TREASURE_DATA_CONFIG_PATH |
td.conf の設定箇所を任意の場所に指定する。 ~/.td/td.conf 以外のファイルパスを指定する場合は指定すると有効。 |
TD_CONFIG_PATH |
TREASURE_DATA_CONFIG_PATH の別名。 |
TREASURE_DATA_API_KEY |
Treasure Data の API key のための環境変数。 |
TD_API_KEY |
TREASURE_DATA_API_KEY の別名。 |
TREASURE_DATA_API_SERVER |
Treasure Data のエンドポイントを指定するための環境変数。 |
TD_API_SERVER |
TREASURE_DATA_API_SERVER の別名。 |
TREASURE_DATA_API_IMPORT_SERVER |
Stream Import 向けのエンドポイント (i.e. https://api-import.treasuredata.com )。td table:import がユースケース。 |
TD_API_IMPORT_SERVER |
TREASURE_DATA_API_IMPORT_SERVER の別名。 |
さて、この記事では TD Toolbelt を利用するときに生じるログインエラーのうち比較的多いケースのものについて紹介しました。 この記事に当てはまらないケースももちろん発生しうるので、そのような場合はお気軽にテクニカルサポートへお問い合わせください。
また、 Toolbelt は実装も公開しているので自身で実装を見たり、Issue を立てたり Pull Request を送ることも可能です。