何をするか
外からAPIを叩いてデータをDBに保存してみたかったので試してみた。
プラットフォームはAWSオンリー。
以下のサービスを使って連携をしてみる。
- API Gateway
- Lambda
- DynamoDB
DynamoDBの用意
まずAWSでNoSQL DBサービスのDynamoDBの準備をする。
AWSのサービスはそれぞれテスト機能があるので一番深いところから用意していくとトントン進む気がする。
- サービス一覧からDynamoDBを選択する
- テーブルの作成ボタンを押す
- 好きなテーブル名、プライマリーキーを設定する。今回はtestテーブル、キーをidにした。
以上でDBの準備完了。簡単!
Lambda, APIの作成
LambdaはAWSで用意されているコードの実行サービス。
Java,Nodejs,Pythonコードを実行可能(今回はNodejs)。
なのでここには処理の実行部分を書く。
今後処理の内容を弄るときには基本的にここをでロジックを書く必要がある。
今回やりたいことはBlueprint(色々セットで作ってくれるテンプレートのようなもの)で用意されているのでそれを使う。
- サービス一覧からLambdaを選択
- Create lambda functionボタンを押す
- Select blueprintからmicroservice-http-endpointを選択
- Nameは好きな名前を入れる(今回はtestLambda)
- RoleでBasic with DynamoDBを選ぶと新規ページが開く
- そのまま右下の許可を押す
- Roleの選択肢にlambda_dynamoが追加されているの選択(今後は直接これを選ぶ)
- 右下のNextボタンを押す
- microservice-http-endpointで作成した場合にはそのままAPIが作成できるのでmethodをPOST,SecurityをOpenに変えてNext
- 確認画面でOKなら完了
これで準備完了なのでテストしてみる。
Lambdaのテスト機能を使う
Lambdaの左上のTestボタンを押すとeventの中身を直接入力してテストできる。
以下のJSONを入力してテストすると実際にレコードが登録される。
1 2 3 4 5 6 7 8 9 10 |
{ "operation":"create", "payload":{ "TableName":"test", "Item":{ "id":"firstRecoed", "name":"firstName" } } } |
DynamoDBのtestテーブルを見るとレコードが追加されているのが確認できる。
RESTクライアントを使ったテスト
ブラウザの拡張でREST APIテスト用のアドオンがあるのでそれで実際の動作を確かめる。
URL:APIエンドポイント
Method:POST
Body:
1 2 3 4 5 6 7 8 9 10 |
{ "operation":"create", "payload":{ "TableName":"test", "Item":{ "id":"secondRecoed", "name":"secondName" } } } |
結果
Dynamoのtestテーブルを見ると2つのテストで入れたレコードが確認できる。
このままだとURLをたたけば誰でもデータベース操作できてしまうのでLambdaの処理を絞ったり、APIに認証を設定したりする必要がある。