背景
最近業務外でサーバレス系サービスに触れる機会が増えました。せっかくなので理解を深めようと考え、タイトルの3サービスを触ったのでそれについての備忘です。サクッと作成できるので、興味がある方はぜひお手元の環境でお試しください。なお、DynamoDBとLambdaの構築は慣れている方が多いので構築手順は省いています。本記事の内容は以下のUdemy講座を参考にしています。
構築する内容
DynamoDBの用意
テーブル名はusers
として、パーティションキーid
、文字列
のみ設定します。
Lambdaの用意
この後作成するAPI GWからデータを受け取り、DynamoDBに格納するコードです。
ランタイムはPython 3.9
で、LambdaのロールにはAWSLambdaBasicExecutionRole
とAmazonDynamoDBFullAccess
をアタッチしています。
import boto3
import json
dynamodb = boto3.client('dynamodb')
def post_users(requestJSON):
dynamodb.put_item(
TableName='users',
Item={
'id': {'S': requestJSON['id']},
'name': {'S': requestJSON['name']},
'age': {'N': requestJSON['age']}
}
)
def lambda_handler(event, context):
# 受け取ったデータを文字列でなくJSONだと解釈
requestJSON = json.loads(event['body'])
post_users(requestJSON)
API Gatewayの用意
API Gatewayはあまり経験がなかったので、細かく書いていきます。
REST API作成
リソースとメソッドの作成
統合リクエストの編集
画面が遷移しますので、統合リクエストの編集を行います。
クライアントから送るデータはそのままLambdaに受け渡すとエラーを吐いてしまうため、マッピングテンプレートを用いてLambda用にデータを整形します。
マッピングテンプレート名はapplication/json
とし、内容は以下のように記載します。これでLambdaにevent['body']
の形でデータを渡すことができ、KeyError
を回避できます。
{
"body" : "$util.escapeJavaScript($input.body)"
}
APIのデプロイ
作成したAPIはデプロイすることで、実際に使えるようになります。デプロイ後、サイドバーのPOST
を押します。画面に表示される、/users
で終わるURLはすぐ使うので、メモをお忘れなく。
これで全てのリソースの作成が完了しました。
curlコマンドでデータを送る
下記コマンドを入力します。
-d以降は最初と最後以外の"
に対して\
でエスケープ処理を加えています。ドメイン名
の部分は直前にコピーした/users
で終わるURLを張り付けてください。
curl -X POST -H "Content-Type: application/json" -d "{\"id\":\"1000\",\"name\":\"Taro\",\"age\":\"22\"}" /usersで終わるURL
# 出力結果(Lambdaで返す値を設定していないためnull)
null
データが格納されることを確認
作成したDynamoDBの項目の中身を見て、格納されていれば成功です。
最後に
今回はAPI Gateway、Lambda、DynamoDBとデータを受け渡す仕組みを構築しました。本記事では内容を省いていますがAPI Gatewayを構築する中で、REST APIについての理解も深まったので勉強できてよかったです。ここまでお読みいただきありがとうございました。