やろうとすること
ほとんど、以下のサイトに書いてあることですが、自分用に書きます。
あと、こちらも参考にしました。
AWS DynamoDB
すでにDynamoDBにて、こんなDBがあると仮定
※DynamoDBの作成方法やセンサー値の保存の方法はこちらを参照
M5StackGRAYのセンサの値を3G拡張ボードを使ってDynamoDBに送ってみた
DynamoDB JSONで表示すると、
(普通のJSONと違います)
{
"id": {
"S": "1"
},
"payloads": {
"M": {
"gyroX": {
"N": "0.75"
},
"gyroY": {
"N": "11.3"
},
"gyroZ": {
"N": "-2.5"
}
}
}
}
IAM Role の作成
AWS マネジメントコンソールで、
[IAM] > [ポリシー] > [ポリシーの作成]
{
"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 概要の一番下に記載あり)
ポリシーの確認で、
好きな名前を入力し、
[ポリシーの作成]をクリック
ロール
ここ良く分かりませんが
一般的なユースケースとして、
EC2か Lambda を選択し、[次のステップ]
アクセス権限ポリシー
さっき作ったポリシーを選択し、「次のステップ」
タグの追加(オプション)
何もせずに「次のステップ」
これでロールを作ることができました。
次にAPI Gatewayにアクセスできるように、
[信頼関係] をクリック
"Service"を "apigateway.amazonaws.com" に変更 > [信頼ポリシーの更新]
信頼されらエンティティが apigateway.amazonaws.com に代わってればOK
Amazon API Gateway
API作成
Amazon API Gatewayにアクセス
[APIを作成]をクリック
リソース作成
リソース名、リソースパスを図のように入力し、[リソースの作成]
メソッドの作成
統合タイプ : AWS サービス
AWS リージョン: (DynamoDBのあるリージョン)
AWS サービス: DynamoDB
AWS サブドメイン: <空>
HTTP メソッド: POST
アクションの種類: アクション名の使用
アクション: GetItem
実行ロール: (ロールのARN)
コンテンツの処理: パススルー
デフォルトタイムアウトの使用: チェックをつける
統合リクエスト
JSONはこれ
{
"TableName": "M5Stack",
"Key": {
"id": {
"S": "$input.params('id')"
}
}
}
パス {id} に値を入力してみて
ここまでうまくいっとけば、こんな感じのJSONが出力される。
統合レスポンスの設定
DynamoDB JSONのままでは後々不便なので、普通に使うJSONに直す。
以下のように展開される。
Application/JSON をクリック
{
"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が出力された。
デプロイ
ステージ名を入力してデプロイ
[]
(https://gyazo.com/3f4d901c34afea2ff0e7a500c8ad4653)
こんな形の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
}
}
やったー、できた!!