前回はlambdaでeventを受け取るところまでやりました。
今回はAPI gatewayとの連携をやっていきます。(S3は次回で。。疲れちゃった。)
環境
- windows 10
- java11
- gradle
- intelij idea community
API gatewayからlambdaを呼び出す
API gatewayでAPIを構築する
-
API名は
CrudJsonFromS3
としました。他は変更しないでAPIの作成
を選択します。
API gatewayからlambdaを呼び出す
(気分が悪い方はとりあえずlambdaのコードをreturn "hogehoge"
だけにでもしておいてください、すぐ書き換えますが。。。)
API gatewayからクエリ文字列をlambdaに渡す
将来的にgetJsonFromS3
には指定したファイルをS3から取ってきてほしいので、そのためにS3のbucketName
とbucketKey
をlambdaに渡したい
今回はAPI gatewayのクエリ文字列を使ってbucketName
とbucketKey
をlambdaに渡す
(全部POSTにした方がいいのかなぁ。。。)
-
さらに下の方にある空欄に以下を記述して
保存
{
"bucketName":"$input.params('bucketName')",
"bucketKey":"$input.params('bucketKey')"
}
公式ガイドによるとここにかける言語はVelocity Template Languageといって結構複雑なこともできるようです。。。
ここまでやればAPI gatewayからクエリ文字列を渡せるようになります。
しかし、lambda側のコードが対応していないので対応するように書き直します。
public class GetEvent implements RequestHandler<Map<String, Object>, String> {
@Override
public String handleRequest(Map<String, Object> event, Context context) {
String bucketName = (String) event.get("bucketName");
String bucketKey = (String) event.get("bucketKey");
return "bucketName:" + bucketName + ",bucketKey:" + bucketKey;
}
}
コードを書き直したら、ビルドしてアップロードしてください
(もし名前を変えたりしたなら、lambdaのハンドラ名を編集することをお忘れなく)
テスト実行してみる
ここまで
- API gatewayからlambda関数を呼び出す
- API gatewayからlambda関数にクエリ文字列を渡す
ができるようになりました。
前回でS3とAPI gatewayをやるといったな。。あれは嘘だ。
S3をやろうと思ったのですが疲れたのでここまでで一旦終わります。
次回こそはS3をやります。。