APIGatewayからDynamoDBにデータを挿入する際は、Lambdaを介して行うことが多いかと思います。
しかし、APIGatewayにはLambdaを介さず、直接AWSサービスを操作できるAWS統合という機能が存在します。
このAWS統合を使用してAPIGatewayからDynamoDBに直接データを登録する方法を解説していきます。
概要図
今回作成するAPIの概要図は以下になります。
DynamoDBの作成
まずはデータの登録先であるDynamoDBを作っていきます。
今回はただデータを登録するだけなので以下のようなシンプルなスキーマにします。
テーブル名 | Test |
---|---|
プライマリキー | id(文字列) |
ソートキー | なし |
テーブルが作成されたら完了です。
APIGatewayの設定
DynamoDBの作成が完了したら、次にAPIGatewayの設定を行っていきます。
ここの設定が少し複雑です。
一つずつ見ていきましょう。
APIの作成
まずは任意の名前でAPIを作成しましょう。
作成手順については以下の記事を参照ください。
メソッドの作成
次にAPIにメソッドを作っていきます。
「/(ルート)」を選択した状態で、「アクション > メソッドの作成」を選択します。
登録処理なので、HTTPメソッドは「POST」を選択します。
メソッドのセットアップ画面が表示されるので、以下のように設定していきます。
統合タイプ | AWSサービス |
---|---|
AWSリージョン | ap-northeast-1(東京) ※お使いのリージョンを適宜設定して下さい。 |
AWSサービス | DyanamoDB |
AWSサブドメイン | なし |
HTTPメソッド | POST |
アクションの種類 | アクション名の使用 |
アクション | PutItem |
実行ロール | DynamoDBへの書き込み権限のあるロール |
コンテンツの処理 | パススルー |
デフォルトタイムアウトの使用 | 任意 |
クエリパラメータの設定
メソッドが作成されたら次はメソッドリクエストの設定を行っていきます。
「メソッドリクエスト」を選択します。
次にクエリパラメタで登録するデータの内容を指定できるように設定します。
APIGatewayでidというクエリパラメタを受け取れるよう、「クエリ文字列の追加」からidを追加します。
マッピングテンプレ―トの設定
次にクエリパラメタで受け取った値とDynamoDBのカラムを対応付ける設定をしていきます。
この設定のことをマッピングテンプレートと呼びます。
「統合リクエスト」から設定画面へ移れます。
画面下部「マッピングテンプレート」から「テンプレートが定義されていない場合(推奨)」にチェックを入れ、「マッピングテンプレートの追加」を選択します。
「Content-Type」は「application/json」を指定。
マッピングテンプレートに以下のように入力します。
{ "TableName": "Test", "Item": { "id": { #if($input.params('id') != "") "S": "$input.params('id')" #else "S": "999" #end } } }
クエリパラメタからidを取得し、無ければデフォルト値を使用しています。
マッピングテンプレートの記法については以下を参照ください。
テストリクエスト
以上で設定は完了です。
実際にDynamoDBにデータ登録ができるかをテストしてみましょう。
「テスト」を選択。
クエリ文字列に「id=1」、「なし」でテストを行ってみましょう。
DynamoDBにデータが登録されていればテスト成功です。