この記事でつまづいたAWS API Gatewayの設定方法の記録です。AWSのアカウントを持っていてLambda, CloudWatchが使えることを前提にしています。またLambdaはPythonで実装しました。
やりたいこと
DialogflowのFulfillment先にAPI Gatewayを使用してLambdaで処理をし、適切なレスポンスを返したい。
設定方法
Lambdaの作成
あらかじめAPIの処理に使いたいLambda関数を作成しておきましょう。ここではAPITest
というLambda関数を作成して、コードは以下のシンプルなものにしました。何かエラーが起きてよくわからないときはprint等の出力がAWS Cloud Watchにログとして記録されるのでそれを見てなんとかしましょう。
import json
def lambda_handler(event, context):
print(json.dumps(event))
return {'speech': 'ちわーっす'}
APIの作成
API Gatewayのページで+APIの作成
をクリックしてAPIを作成します。初回の場合は今すぐ始める
をクリックします。
新しいAPIを選択し、わかりやすいAPI名と説明を追加します。エンドポイントタイプは公式アナウンスを見ましたがよく分からなかったですしどっちを選んでも特に問題はなかったので好きな方を選びましょう。
アクションからリソースの作成をクリックし、
わかりやすいリソース名をつけてリソースの作成をクリックします。
そのリソースを選択した状態で「アクション」→「メソッドの作成」をクリックします。メソッドはDialogflowだとPOSTリクエストなのでPOSTを選択し、チェックボタンをクリックします。
ここでいう「統合」が何を統合しているのかはよく分かりませんが、POSTメソッドを投げたいLambda関数を指定します。LambdaリージョンはLambdaの編集ページの右上にあるARNというコードの中に書いてあります。「Lambdaプロキシ統合の使用」にデフォルトではチェックされていませんが、私は何を思ったかここにチェックを入れていたら何かの権限が無いとかで思うように動かず苦戦したので、チェックしないでください。Lambda関数が指定できたら保存→OKをクリックします。
そのPOSTメソッドのテストをクリックし、何も入力せずテストボタンをクリックします。
レスポンス本文に先ほどのLambda関数の返り値が入っていればOKです。
「アクション」→「APIのデプロイ」をクリックし、好きなステージ名でデプロイします。デプロイとは「使えるようにする」みたいな意味です。
これでデプロイしたステージのPOSTメソッドをクリックし、URLの呼び出し:https://~~
のURLにPOSTリクエストを投げるとLambdaで処理して返してくれます。
まとめ
色々謎な設定が多いAPI Gatewayでした。Lambda関数のトリガーからAPI Gatewayを設定するとメソッドがANYになって二度手間になったり面倒なのでAPI Gatewayのページから作成したほうが簡単だと思います。このURLをDialogflowのFulfillmentに使うことで、Google Assistantの処理としてLambdaを利用する準備ができました。
補足
今回は株式会社SmartHacksでの就業形インターンとして、この記事を作成しました。