はじめに
Google Cloud Translation APIを、
Cloud Translate APIクライアントライブラリ使ったときに、
認証周りでめっちゃハマったので忘れないようにまとめておきます。
Google Cloud Translation API
結論
最初に結論を書きます。
以下の順番で強いです。
- コードからAPIキーや、サービス認証用のJSONファイルを指定する
- アプリが載っているPC、サーバでgcloud auth loginする
- アプリケーションのデフォルト認証情報をアプリが載っているPC、サーバの環境変数に設定しておく
何が起きたのか
検証時にバリバリ動いていた翻訳APIを使用するアプリが、突然全く動かなくなった。
エラーログを見ると以下のエラーを吐いている。
"error": {
"code": 403,
"message": "Daily Limit Exceeded",
"errors": [
{
"message": "Daily Limit Exceeded",
"domain": "usageLimits",
"reason": "dailyLimitExceeded"
}
]
}
}
このログの意味自体は、読んで字の如しで1日に使用できる上限超えてるってことです。
403:Daily Limit Exceededの発生条件
よくある質問でも紹介されていて、これ自体はよくあることのようです。
https://cloud.google.com/translate/faq?hl=ja
以下の条件を確認せよ、と書いてあります。
- API利用プロジェクトに、クレジットカード情報が登録してあること
- APIをちゃんと有効にしているか
- 本当に閾値超えてないか
残念ながら上記には該当していないと判断しドハマりすることに・・・
何が原因で起きていたのか
タイトルの通りで、自分が使用していると思っていた認証情報と異なっていた。
どう違ったか
検証時は、デフォルト認証情報でアプリを動かしまくっており、
プロダクトコードもその部分は一旦そのまま移植してたので、当然デフォルト認証情報を使っていると勝手に期待してました。
※検証時はクイックスタートのやり方通りに動かして、そこで終わらせた。
何故すぐに気づかなかったかというと、アプリを作ってたときはエラーが起きなかったからです。
別の機能作るときに、翻訳これ使お~って思ってぶっ叩いたら、突然エラーになって「ふぁっ!?」ってなった次第です。
何が起きていた?
よ~くデバッグしていくと、認証情報の種別が、「authorized_user」とかなってた。
つまり、デフォルト認証情報が使われなくなってしまっていたということです。
そういえば、gcloudで遊ぶために自分のGoogleアカウント紐づけて確かにloginしたな~という記憶が・・・
しかもクレジットカード登録してないし。
どうやって解決したのか
Cloud Translate APIクライアントライブラリで直接APIキーや、サービス認証用のJSONファイルを指定できるのでそうすることに。
(もうね、最初からPHPDocちゃんと見とけよボケナス!っていうレベルのちょんぼです。)
APIキーの方がインフラ的にも使いやすいので、こっちを採用しました。
コードにするとこんな感じです。
TranslateClientにkeyが無かったので付けました。
$translate = new TranslateClient([
'projectId' => 'xxxxxxx',
'key' => env('GOOGLE_API_KEY')
]);
$result = $translate->translate('I am playing Dragon Quest 11 ', [
'source' => 'en',
'target' => 'ja',
]);
まとめ
Google Cloud Translation APIの認証順は、
- コードからAPIキーや、サービス認証用のJSONファイルを指定する
- アプリが載っているPC、サーバでgcloud auth loginする
- アプリケーションのデフォルト認証情報をアプリが載っているPC、サーバの環境変数に設定しておく
Stackoverflowに質問出したけど、誰からも回答もらえず、そりゃこんな原因だったら、誰も判らんわな~という感じしかしなかった。
(質問の仕方も悪かった)
https://stackoverflow.com/questions/45429155/used-google-cloud-translation-api-when-return-response-403-daily-limit-exceeded?stw=2
皆様が利用するときにこの症状が出たときには、認証情報が意図したものをしっかり使えているかも確認してあげてください。