先ずはLambda関数を作成
今回は与えらえた値を返すだけのtest_return_valuablesという
シンプルな関数をPythonで作成します。
APIGatewayでAPIを作成
REST APIを選択し構築。
これでPOSTメソッドをAPIとして使用できます。
Lambdaと統合
次にAPIGatewayから実行するLambdaを統合します。
リソースの画面からPOSTをクリック
統合タイプにデフォルトでLambdaが選択されているためそのまま統合したい関数を入力します。
Lambdaの統合はたったこれだけで完了します。
APIGatewayとの統合はシンプルで良いですね
それではこのAPIをデプロイして外部からアクセスできる様にしましょう。
デプロイを忘れるとエンドポイントが作成されていないため、外部からアクセスできません。
リソースを作成してるのにAPIが使えないのは直観ではわかりにくかったです…
ステージ選択→新しいステージを作成→わかりやすい名前で作成(今回はdefault)
それではコンソールからPOSTメソッド指定してリクエストを送ってみます。
ステージ作成時に表示されたAPIエンドポイントへリクエストを送ります
$ curl -X POST https://xxxxxxx.execute-api.us-east-2.amazonaws.com/default
>> {}
パラメーターが何もないため空欄が返されました。
APIGatewayとLambdaが正常に機能していることが分かります。
しかしこのままクエリパラメータを送ってもLambdaには引数として渡すことはできません。
$ curl -X POST https://xxxxxxx.execute-api.us-east-2.amazonaws.com/default?name=hoge
>> {}
パラメーターをマッピングしてAWS側で受け取れようにしましょう。
マッピング
リソースの画面で統合リクエストを選択
↓
マッピングテンプレート
新たにマッピングテンプレートを追加します。
application/jsonと入力
上記のように
{
"受け取るパラメーター名": "$input.params('送る際のパラメーター名')"
}
のように記載すると、Lambda関数でevent変数としてパラメーターを使用できるようになります。
$input.paramsはAPIGatewayを使用してパラメーターを送った際に自動的に格納される場所です。
最後にリソースを忘れずにデプロイしましょう!
デプロイされたリソースの反映には少し時間がかかるようなので、時間が経ってから再度更新されたエンドポイントへリクエストを送信
$ curl -X POST https://aj7i8pust1.execute-api.us-east-2.amazonaws.com/default?name=hoge
>> {"name": "hoge"}
無事パラメーターを送信できました。
アクセスを制限したい場合はapi-keyなども必須にすることもできます。
$ curl -X POST -H "x-api-key: correct_api_key" https://aj.execute-api.us-east-2.amazonaws.com/default?name=hoge
>> {"name": "hoge"}
key間違い
$ curl -X POST -H "x-api-key: incorrect_api_key" https://xxxxxxx.execute-api.us-east-2.amazonaws.com/default?name=hoge
>> {"message":"Forbidden"}
keyなし
$ curl -X POST -https://xxxxxxxx.execute-api.us-east-2.amazonaws.com/default?name=hoge
>> {"message":"Forbidden"}
>> APIキーの設定方法はこちら解説してますのでよろしければご覧くださいー