LambdaからDynamoDBの読み書きを行う
LambdaからDynamoDBの読み書きを行う:
先日、アマゾンで開催された「初めてのサーバーレス」ハンズオンの内容から LambdaからDynamoDB読み書きする部分をまとめておきます。Alexaスキルを作る上でも、DynamoDBの扱いを覚えたいと前々から思っていたので、有り難かったです。
・ まずDynamoDBに予めテーブルを作成しておきます。
・ DynamoDB管理画面にアクセスします。
・ 適当な名前でテーブルを作成します。(名前は仮に[hogehoge_dynamodb_table]とします)
・ プライマリーキーにTrackと入力し、データ種類は文字列を選択します。
・ ソートキーの追加をチェックします。
・ Timestampと入力し、データ種類は数値を選択します。
・ 右下の作成をクリックします。
・ Lambda管理画面にアクセスします。
・ 関数の作成から設計図を選択し、[simple-mobile-backend]を選択します。
・ 適当な関数名を入力します。
・ 新しいロールを作ります。(名前は例えば[lambda_dynamo]とします)
・ ポリシーテンプレートは[シンプルなマイクロサービスのアクセス権限]を選択します。
・ 右下の関数の作成をクリックします。
・ index.jsの中身を以下に置き換えて保存します。
注意:データ項目に、DynamoDBでテーブル作成時に定義したTrack、Timestamp以外に、Comment、Nameが加わっています。
・ テストイベントの設定ページに移ります。
・ [新しいテストイベントの作成]を選び、イベントテンプレート[Mobile Backend]を選択し、適当なイベント名を記入します。
・ イベント名の下の枠に書き込むデータを記入します。ここには自動で値の決まるTimestamp以外の全項目のデータが含まれてることが必要です。
・ 右下の作成ボタンを押し、Lambda関数のページに戻り、右上のテストをクリックします。
・ Execution Resultsで、Status:Succeededと表示されれば成功です。
・ DynamoDBに移り、作成したTable[hogehoge_dynamodb_table]、項目を選び、データが格納されていることを確認します。
・ Lambdaで書き込み関数を作った際に設定したロール[lambda_dynamo]に読み込み権限を追加します。
・ IAM管理画面でロール[lambda_dynamo]選択します。
・ MicroserviceExecutionRoleを含むポリシーを選択します。
・ JSONタブを選択してActionに”dynmodb:Query”を追加します。
・ ポリシーの確認を押します。
・ 変更の保存を押します。
・ Lambda管理画面にアクセスします。
・ 関数の作成から設計図を選択し、書込み関数作成時と同じ[simple-mobile-backend]を選択します。
・ 適当な関数名を入力します。
・ 既存ロール[serice-role/lambda_dynamo]を選択します。
・ 右下の関数の作成をクリックします。
・index.jsの中身を以下に置き換えて保存します。
・ テストイベントの設定ページに移ります。
・ [新しいテストイベントの作成]を選び、イベントテンプレート[Mobile Backend]を選択し、適当なイベント名を記入します。
・ イベント名の下の枠に読み込みたいデータの条件を記入します。
注意:条件にプライマリーキー”track”を含めることは必須です。
・ 右下の作成ボタンを押し、Lambda関数のページに戻り、右上のテストをクリックします。
・ Execution Resultsで、Status:Succeededと表示され、下枠に抽出結果が表示されれば成功です。
ハンズオンではAPI Gateway接続もやったので、自分で再現できたら記事にする予定です。
はじめに
先日、アマゾンで開催された「初めてのサーバーレス」ハンズオンの内容から LambdaからDynamoDB読み書きする部分をまとめておきます。Alexaスキルを作る上でも、DynamoDBの扱いを覚えたいと前々から思っていたので、有り難かったです。
LambdaからDynamoDBに書き込む
DynamoDBにテーブルを作成する
・ まずDynamoDBに予めテーブルを作成しておきます。・ DynamoDB管理画面にアクセスします。
・ 適当な名前でテーブルを作成します。(名前は仮に[hogehoge_dynamodb_table]とします)
・ プライマリーキーにTrackと入力し、データ種類は文字列を選択します。
・ ソートキーの追加をチェックします。
・ Timestampと入力し、データ種類は数値を選択します。
・ 右下の作成をクリックします。
Lambdaで書き込み専用の関数を作る
・ Lambda管理画面にアクセスします。・ 関数の作成から設計図を選択し、[simple-mobile-backend]を選択します。
・ 適当な関数名を入力します。
・ 新しいロールを作ります。(名前は例えば[lambda_dynamo]とします)
・ ポリシーテンプレートは[シンプルなマイクロサービスのアクセス権限]を選択します。
・ 右下の関数の作成をクリックします。
・ index.jsの中身を以下に置き換えて保存します。
注意:データ項目に、DynamoDBでテーブル作成時に定義したTrack、Timestamp以外に、Comment、Nameが加わっています。
console.log('Loading function'); var doc = require('dynamodb-doc'); var dynamo = new doc.DynamoDB(); exports.handler = function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); // TODO: テーブル名を確認してください var tableName = "hogehoge_dynamodb_table"; var item = { Track: event.track, Comment: event.comment, Name: event.name, Timestamp: Number(Math.floor(Date.now() / 1000)) }; var params = { TableName: tableName, Item: item }; dynamo.putItem(params, context.done); };
書き込みテストを行う
・ テストイベントの設定ページに移ります。・ [新しいテストイベントの作成]を選び、イベントテンプレート[Mobile Backend]を選択し、適当なイベント名を記入します。
・ イベント名の下の枠に書き込むデータを記入します。ここには自動で値の決まるTimestamp以外の全項目のデータが含まれてることが必要です。
{ "track": "Test", "comment": "Hello AWS Lambda", "name": "xxxx" }
・ Execution Resultsで、Status:Succeededと表示されれば成功です。
・ DynamoDBに移り、作成したTable[hogehoge_dynamodb_table]、項目を選び、データが格納されていることを確認します。
LamdaからDynamoDBを読みに行く
ロールに読み込み権限を追加する
・ Lambdaで書き込み関数を作った際に設定したロール[lambda_dynamo]に読み込み権限を追加します。・ IAM管理画面でロール[lambda_dynamo]選択します。
・ MicroserviceExecutionRoleを含むポリシーを選択します。
・ JSONタブを選択してActionに”dynmodb:Query”を追加します。
・ ポリシーの確認を押します。
・ 変更の保存を押します。
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Resource": "arn:aws:dynamodb:ap-northeast-1:999999999999:table/*" }
Lambdaで読み込み専用の関数を作る
・ Lambda管理画面にアクセスします。・ 関数の作成から設計図を選択し、書込み関数作成時と同じ[simple-mobile-backend]を選択します。
・ 適当な関数名を入力します。
・ 既存ロール[serice-role/lambda_dynamo]を選択します。
・ 右下の関数の作成をクリックします。
・index.jsの中身を以下に置き換えて保存します。
console.log('Loading function'); var doc = require('dynamodb-doc'); var docClient = new doc.DynamoDB(); exports.handler = function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); var params = {}; // TODO: テーブル名を確認してください params.TableName = "hogehoge_dynamodb_table"; params.KeyConditions = [docClient.Condition("Track", "EQ", event.track), docClient.Condition("Timestamp", "GT", 2000)]; params.Limit = 40; params.ScanIndexForward = false; console.log(params); docClient.query(params, context.done); };
読み込みテストを行う
・ テストイベントの設定ページに移ります。・ [新しいテストイベントの作成]を選び、イベントテンプレート[Mobile Backend]を選択し、適当なイベント名を記入します。
・ イベント名の下の枠に読み込みたいデータの条件を記入します。
注意:条件にプライマリーキー”track”を含めることは必須です。
{ "track": "Test", "comment": "Hello AWS Lambda", "name": "xxxx" }
・ Execution Resultsで、Status:Succeededと表示され、下枠に抽出結果が表示されれば成功です。
コメント
コメントを投稿