ゼロからAWSでREST-APIを一気通貫で実装してみましたが、それなりの苦労があったため、次はもっと効率よく作りたいので、参考サイトをまとめておきたいと思います。
やってみたこと
超シンプルなREST-APIを作ってみました。シンプルですがいろいろ知る必要がありました。
- 一覧は、GETでパスパラメータがあり、パーテーションキーだけ渡す、レスポンスはJSONでBODYが配列
- 追加は、POSTでパスパラメータがあり、パーテーションキーだけ渡す、リクエスト本文はJSON、レスポンスもJSONでBODYが1件、ソートキーが採番される
- 更新は、PATCHでパスパラメータがある、パーテーションキー、ソートキーを渡す、リクエスト本文はJSON、レスポンスもJSONでBODYが1件
- 検索は、GETでパスパラメータがある、パーテーションキー、ソートキーを渡す、リクエスト本文はなし、レスポンスはJSONでBODYが1件
- 削除は、DELETEでパスパラメータがある、パーテーションキー、ソートキーを渡す、リクエスト本文はなし、レスポンスはJSONでBODYが0件
参考サイトまとめ
知る必要があった情報を使う順番に書いておきたいと思います。API GatewayとLambdaとの繋がりを確認することと、REST-APIを作るためにLambdaを使ってDynamoDBで必要な処理を実装すること、をそれぞれ行うこととなります。
API GatewayとLambdaとの繋がりを確認する
- APIGatewayとLambdaを使う場合、まずプロキシ統合が気になりますので確認しました
- https://rso.hateblo.jp/entry/2019/02/17/232229
- https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html
- https://qiita.com/takeh/items/3915e47f58939a6fab88
- APIGatewayとLambdaでの値の受け渡し方を理解するために、プロキシ統合を使わず、マッピングテンプレートを活用する方法を確認しました
- https://dev.classmethod.jp/articles/sugano-009-api-gateway/
- https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-custom-integrations.html
- https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
- https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#input-variable-reference
REST-APIを作るためにLambdaを使ってDynamoDBで必要な処理を実装する
- REST-APIを作るために、リソースとかメソッドの設定のあるべき姿を確認しました
- APIGatewayだけをとにかく動かして、REST-APIはどういうものかを実装したかったので、Mockを活用しました
- https://qiita.com/Keisuke69/items/0852d536110b2fa6e087
- https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-getting-started-mock.html
- 実際にコードを書いていくために、PythonとAPIGatewayとLambdaとDynamoDBを一気通貫で動かすために必要な処理を確認しました
- https://business.ntt-east.co.jp/content/cloudsolution/column-try-20.html#section-03-02
- http://blog.livedoor.jp/sce_info3-craft/archives/9288509.html
- ソートキーは自動採番したいのでDynamoDBのアトミックカウンターを利用する方法を理解しました
- Lambdaにて、リクエスト本文の値をそのまま利用する作りにしたため、最後に、パスパラメータとリクエスト本文をマッピングテンプレートで合体してリクエスト本文にする方法を確認しました
- https://qiita.com/minsu/items/c9e983f109b1cf5a516e
- https://qiita.com/keitakn/items/a409b1722956cb1d9487
まとめ
これくらい参考にすれば、基本的なREST-APIをAWSのAPI GatewayとLambdaとDynamoDBで一気通貫で作れました。参考サイトを一気に読んで、だいたいの作りをイメージしたものを、まとめてコードにできるようになれれば効率が良さそうです。
以上