Treasure Data - Support Engineering Team blog

トレジャーデータのサポートエンジニアリングチームのブログです。

TD Toolbelt でログインができないケースについて

この記事では、 TD Toolbelt を利用し始めたときに起こりやすい、ログインの失敗するときのトラブルシュートについて紹介します。

ログインの失敗というのは、たとえば以下のような、 td コマンドを実行したときに発生するエラーです。

% td db:list
Error: TreasureData::AuthError - List databases failed: Failed to Login

ログインができない、認証ができないなどの理由で td コマンドが使えない場合の原因は多くの場合、下記のうち上2つのパターンが多いです。

  1. ネットワークの問題
  2. エンドポイントの問題
  3. TD は Google SSO 認証により利用している

ネットワークの問題

このケースでは、途中でプロキシサーバが挟まっているために期待するレスポンスが受け取れない場合や、なんらかの変更によってプロキシサーバを挟まなくなった場合などでエラーが発生します。 もしプロキシサーバを運用している場合は、 HTTP_PROXY という環境変数を予めセットすることでログインの問題が解消することがほとんどです。

Windows ならば

set HTTP_PROXY=http://proxy_host:proxy_port

macOSLinux などの 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 では、以下の順序で優先度が高くなるように実装されています。

  1. コマンドライン引数
  2. 環境変数
  3. td.conf の値

たいていのケースでは、 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 を送ることも可能です。

github.com