Googleカレンダー用のAlexaスキルを構築しています。リンクを使用してローカルマシンを認証できるため、クライアントサイドのコードはローカルマシンで期待どおりに機能します。しかし、AWS Lambdaにコードをデプロイすると、AWSコンソールからコードを入力できないため、認証する方法がありません。
AWS Lambdaにデプロイすると、Google Calendar APIの認証の設定で問題が発生します。
このドキュメントは私にはあまり役に立ちません Google Implementing Server Side Authentication
サービスアカウントを作成する必要があります。これらは特にサーバー間の通信用に設計されています。ドキュメントはここにあります: https://developers.google.com/identity/protocols/OAuth2ServiceAccount
他の回答からのソリューションの問題は次のとおりです。
gcloud auth print-access-token
などで取得)の有効期限が切れています。 Lambdaはステートレスであるため、トークンを一時的に保存し、期限切れになったときに更新する方法はありません。here で指定された2つのステップを実行する必要があります。正しく従えば、これを実行できます。
まず、(初回のみ)プロジェクトを設定してGOOGLE APPLICATION CREDENTIALS
をダウンロードする必要があります。その結果、内部に認証情報を含む1つのjsonファイルが生成されます。project.jsonと呼ぶとしましょう
次に、いくつかのコマンドを実行してアクセストークンを取得し、それらのコマンドにアクセスするには Cloud SDK をダウンロードしてインストールする必要があります。
gcloud auth activate-service-account --key-file=/home/panchicore/project.json
その後
gcloud auth print-access-token
この時点でキーを取得します。次のステップで使用できます。
次に、翻訳APIリクエストを作成します:(私がどのようにしてpythonリクエストでテストしたか)
import requests
key = "KEY GOT WITH gcloud auth print-access-token"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(key)
}
url = 'https://translation.googleapis.com/language/translate/v2'
data = {
'q': 'The quick brown fox jumped over the lazy dog.',
'source': 'en',
'target': 'es',
'format': 'text'
}
res = requests.post(url, json=data, headers=headers)
print res.content
>>> El rápido zorro marrón saltó sobre el perro perezoso.
それが役に立てば幸い。