1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Amazon API Gateway】AWS DynamoDBの値をAPIで参照する

Posted at

やろうとすること

Image from Gyazo

ほとんど、以下のサイトに書いてあることですが、自分用に書きます。

あと、こちらも参考にしました。

AWS DynamoDB

すでにDynamoDBにて、こんなDBがあると仮定

※DynamoDBの作成方法やセンサー値の保存の方法はこちらを参照
M5StackGRAYのセンサの値を3G拡張ボードを使ってDynamoDBに送ってみた

Image from Gyazo

DynamoDB JSONで表示すると、
(普通のJSONと違います)

{
  "id": {
    "S": "1"
  },
  "payloads": {
    "M": {
      "gyroX": {
        "N": "0.75"
      },
      "gyroY": {
        "N": "11.3"
      },
      "gyroZ": {
        "N": "-2.5"
      }
    }
  }
}

IAM Role の作成

AWS マネジメントコンソールで、
[IAM] > [ポリシー] > [ポリシーの作成]
Image from Gyazo

JSONを編集 > [ポリシーの確認]
Image from Gyazo

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

Resource にはDynamoDBのARN(DynamoDB 概要の一番下に記載あり)

ポリシーの確認で、
好きな名前を入力し、
[ポリシーの作成]をクリック

Image from Gyazo

ロール

Image from Gyazo

ロールの作成
Image from Gyazo

ここ良く分かりませんが
一般的なユースケースとして、
EC2か Lambda を選択し、[次のステップ]
Image from Gyazo

アクセス権限ポリシー
さっき作ったポリシーを選択し、「次のステップ」
Image from Gyazo

タグの追加(オプション)
何もせずに「次のステップ」

ロール名を入力し、「ロールの作成」
Image from Gyazo

これでロールを作ることができました。

次にAPI Gatewayにアクセスできるように、
[信頼関係] をクリック
Image from Gyazo

[信頼関係の編集] をクリック
Image from Gyazo

"Service"を "apigateway.amazonaws.com" に変更 > [信頼ポリシーの更新]
Image from Gyazo

信頼されらエンティティが apigateway.amazonaws.com に代わってればOK

Image from Gyazo

Amazon API Gateway

API作成

Amazon API Gatewayにアクセス
[APIを作成]をクリック
Image from Gyazo

REST API構築
Image from Gyazo

[API入力] > [APIの作成]
Image from Gyazo

リソース作成

GET /items/{id} を作る
Image from Gyazo

[アクション] > [リソースの作成]
Image from Gyazo

リソース名、リソースパスを図のように入力し、[リソースの作成]
Image from Gyazo

そのまま、[アクション] > [リソースの作成]
Image from Gyazo

id ができた。
Image from Gyazo

メソッドの作成

[アクション] > [メソッドの作成]
Image from Gyazo

GETを選択して、右横のチェックマークをクリック
Image from Gyazo

下図のとおりに入力
Image from Gyazo

統合タイプ :   AWS サービス
AWS リージョン: (DynamoDBのあるリージョン)
AWS サービス: DynamoDB
AWS サブドメイン: <空>
HTTP メソッド: POST
アクションの種類: アクション名の使用
アクション: GetItem
実行ロール: (ロールのARN)
コンテンツの処理: パススルー
デフォルトタイムアウトの使用: チェックをつける

統合リクエスト

Image from Gyazo

下の方のマッピングテンプレートを以下のように
Image from Gyazo

JSONはこれ

{
  "TableName": "M5Stack",
  "Key": {
    "id": {
      "S": "$input.params('id')"
    }
  }
}

ここで、テストしてみる。
Image from Gyazo

パス {id} に値を入力してみて
ここまでうまくいっとけば、こんな感じのJSONが出力される。
Image from Gyazo

統合レスポンスの設定

DynamoDB JSONのままでは後々不便なので、普通に使うJSONに直す。
Image from Gyazo

下スクショの赤のところをクリック
Image from Gyazo

以下のように展開される。
マッピングテンプレートをクリック
Image from Gyazo

以下のように展開される。
Application/JSON をクリック
Image from Gyazo

以下のように展開される。
JSONを入力
Image from Gyazo

{
  "id": "$input.path('$').Item.id.S",
  "payloads": {
    "gyroX": $input.path('$').Item.payloads.M.gyroX.S,
    "gyroY": $input.path('$').Item.payloads.M.gyroY.S,
    "gyroZ": $input.path('$').Item.payloads.M.gyroZ.S
  }
}[

これでさっきと同じテストをすると、
おなじみのJSONが出力された。
Image from Gyazo

デプロイ

APIのデプロイ
Image from Gyazo

ステージ名を入力してデプロイ
[Image from Gyazo]
(https://gyazo.com/3f4d901c34afea2ff0e7a500c8ad4653)

以下スクショの赤で囲んだところが、呼び出しURL
Image from Gyazo

こんな形のURL

https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/XXXXX

curlで実行

$ curl -v  https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/M5Stack/items/1

(途中略)

{
  "id": "1",
  "payloads": {
    "gyroX": 0.75,
    "gyroY": 11.3,
    "gyroZ": -2.5
  }
}

やったー、できた!!

1
4
0

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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?