LoginSignup
36

More than 5 years have passed since last update.

APIGatewayから直接DynamoDBのデータを取得する

Last updated at Posted at 2016-10-23

Developers.IOの記事を参考に進めていたのですが、個人的にハマったところがあるのでまとめていきたいと思います。

やりたいこと

APIGatewayから直接DynamoDBにあるデータを取得したい。

p1.png
今までAPIGatewayからDynamoDBのデータを取得する際、基本的にLambdaを挟む構成だったのですが、

p2.png
今回はAPIGatewayのAWS Proxy('AWS サービス'に呼び方変わった?)という機能を使い、Lambdaを挟まずにデータを取得したいと思います。

Lambdaを挟まない事により、コスト削減、レイテンシの低下を目指します。

DB作成

p3.png
idというキーを持ったTestというテーブルを作りました。

p4.png
読み込み1ユニット、書き込み1ユニットの最小構成です。

データ作成

p5.png
p6.png
上記のようなデータを作成しました。

p7.png
後ほど権限作成の際に使用するので、ARNを控えておきます。

ポリシー作成

s1.png
先ほど作成したDBに対し、GetItemができるロール「DynamoGetItem」を作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "dynamodb:GetItem"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:dynamodb:ap-northeast-1:**********:table/Test"
        }
    ]
}

ロール作成

p8.png
IAMから、ロールを作成します。今回は「GatewayDynamo」という名前で作成しました。

p9.png

p10.png
こんな感じになると思います。
のちの設定で使用するので、ARNを控えておきます。

s2.png
作成後、先ほどの「DynamoGetItem」ポリシーをアタッチしておきます。

APIGateway作成

p11.png
TestというAPI名で作成しました。

p12.png

p13.png
作成したAPIにGETのメソッドを追加します。

p14.png
今回はDynamoDBのGetItemという処理を呼びます。APIGateway自体を呼ぶ処理はGETで作りましたが、APIGatewayからDynamoDBのGetItemを呼ぶにはPOSTを使う必要があるのでこのような設定になりました。

メソッドリクエストの設定

p15.png
メソッドリクエストの設定を来ないます。
p16.png
URLクエリ文字列にidという文字列を追加します。

総合リクエストの設定

p17.png
APIGatewayに投げられたidという文字列を使ってDynamoDBへ投げるための設定を行います。

p18.png
APIGatewayがidという名前で受け取ったデータをDyanmoDBに対しidという名前で投げます。(テーブル名もここで指定しています。)

#set($item = $input.path('$.Item'))
{
#foreach($param in $item.keySet())
  $param : ${item.get($param).S}
#end
}

総合レスポンスの設定

p19.png
総合レスポンスから本文マッピングテンプレートを設定します。

p20.png
これはDynamoDBから帰ってきた値を整形してAPIGatewayへ返す際のマッピング設定です。

以上で全ての設定は完了です。

リクエストテスト

p21.png
idに「test.data」を入力してテストを行います。

{
body : テストデータ
id : test.data
}

無事、データが帰ってきました。

APIデプロイ

p22.png
p23.png
せっかくなのでAPIデプロイしてみます。

curl "https://**********.execute-api.ap-northeast-1.amazonaws.com/prod?id=test.data"

24.png

無事取得できました!!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36