BBH
-Biz Branding Hub-
投稿日 : 
2020/05/06
更新日 : 
2020/05/06

【AWS】APIGatewayからDynamoDBに直接データを登録するチュートリアル

APIGatewayからDynamoDBにデータを挿入する際は、Lambdaを介して行うことが多いかと思います。
しかし、APIGatewayにはLambdaを介さず、直接AWSサービスを操作できるAWS統合という機能が存在します。
このAWS統合を使用してAPIGatewayからDynamoDBに直接データを登録する方法を解説していきます。

概要図

今回作成するAPIの概要図は以下になります。
API概要図

DynamoDBの作成

まずはデータの登録先であるDynamoDBを作っていきます。
今回はただデータを登録するだけなので以下のようなシンプルなスキーマにします。

テスト用DynamoDB構成
テーブル名 Test
プライマリキー id(文字列)
ソートキー なし

DynamoDBスキーマ設定

テーブルが作成されたら完了です。
DynamoDBスキーマ設定

APIGatewayの設定

DynamoDBの作成が完了したら、次にAPIGatewayの設定を行っていきます。
ここの設定が少し複雑です。
一つずつ見ていきましょう。

APIの作成

まずは任意の名前でAPIを作成しましょう。
作成手順については以下の記事を参照ください。

メソッドの作成

次にAPIにメソッドを作っていきます。
「/(ルート)」を選択した状態で、「アクション > メソッドの作成」を選択します。
APIGateway設定

登録処理なので、HTTPメソッドは「POST」を選択します。
APIGateway設定

メソッドのセットアップ画面が表示されるので、以下のように設定していきます。

メソッドのセットアップ
統合タイプ AWSサービス
AWSリージョン ap-northeast-1(東京)
※お使いのリージョンを適宜設定して下さい。
AWSサービス DyanamoDB
AWSサブドメイン なし
HTTPメソッド POST
アクションの種類 アクション名の使用
アクション PutItem
実行ロール DynamoDBへの書き込み権限のあるロール
コンテンツの処理 パススルー
デフォルトタイムアウトの使用 任意

APIGateway設定

クエリパラメータの設定

メソッドが作成されたら次はメソッドリクエストの設定を行っていきます。
「メソッドリクエスト」を選択します。
APIGateway メソッドの設定

次にクエリパラメタで登録するデータの内容を指定できるように設定します。
APIGatewayでidというクエリパラメタを受け取れるよう、「クエリ文字列の追加」からidを追加します。
APIGateway メソッドの設定

マッピングテンプレ―トの設定

次にクエリパラメタで受け取った値とDynamoDBのカラムを対応付ける設定をしていきます。
この設定のことをマッピングテンプレートと呼びます。

「統合リクエスト」から設定画面へ移れます。
APIGateway マッピングテンプレートの設定

画面下部「マッピングテンプレート」から「テンプレートが定義されていない場合(推奨)」にチェックを入れ、「マッピングテンプレートの追加」を選択します。
APIGateway マッピングテンプレートの設定

「Content-Type」は「application/json」を指定。
APIGateway マッピングテンプレートの設定

マッピングテンプレートに以下のように入力します。

マッピングテンプレート

{
  "TableName": "Test",
  "Item": {
    "id": {
      #if($input.params('id') != "")
      "S": "$input.params('id')"
      
      #else
      "S": "999"
      
      #end
    }
  }
}


クエリパラメタからidを取得し、無ければデフォルト値を使用しています。

マッピングテンプレートの記法については以下を参照ください。

テストリクエスト

以上で設定は完了です。
実際にDynamoDBにデータ登録ができるかをテストしてみましょう。

「テスト」を選択。
APIGateway テスト

クエリ文字列に「id=1」、「なし」でテストを行ってみましょう。
APIGateway テスト

DynamoDBにデータが登録されていればテスト成功です。
APIGateway テスト

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend