こんにちは、Michaelです。
今回は、AWS LambdaでDynamoDBのテーブルからデータを読み取ります。
今回の構成
Lambdaが起動されると、入力されたデータの「client_id」を基にDynamoDBのテーブル「device_properties」に登録されたデータを参照します。

IAMロールの設定
LambdaからDynamoDBにデータを登録するため、以下のポリシーを作成し、Lambdaに適用するIAMロールにアタッチします。このポリシーでは、テーブルの「読み取り」、「書き込み」、「更新」の最小限のポリシーのみ許可しています。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | {     "Version": "2012-10-17",     "Statement": [         {             "Action": [                 "dynamodb:GetItem",                 "dynamodb:PutItem",                 "dynamodb:UpdateItem",                 "dynamodb:DescribeTable"             ],             "Effect": "Allow",             "Resource": "*"         }     ] } | 
コード
コードは以下のようになります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # coding: utf-8 # ①ライブラリのimport import datetime import decimal import boto3 from boto3.dynamodb.conditions import Key, Attr # ②Functionのロードをログに出力 print('Loading function') # ③DynamoDBオブジェクトを取得 dynamodb = boto3.resource('dynamodb') # ④Lambdaのメイン関数 def lambda_handler(event, context):     # ⑤テーブル名を指定     table_name = "device_properties"     # ⑥参照データのキーの設定     partition_key = {"client_id": event["client_id"]}     # ⑦DynamoDBテーブルのオブジェクトを取得     dynamotable = dynamodb.Table(table_name)     # ⑧データの読み取り     res = dynamotable.get_item(Key=partition_key)     item = res["Item"]     return item | 
コードの説明
コードの内容は以下の通りです。
| 項番 | 項目 | 内容 | 
| ① | ライブラリのimport | 処理に必要なライブラリを指定してインポートします。 | 
| ② | Functionのロードをログに出力 | Lambdaのコードがロードされたことが分かるようにログにメッセージを出力します。 | 
| ③ | DynamoDBオブジェクトを取得 | DynamoDBと接続できるようにインスタンスを生成します。 | 
| ④ | Lambdaのメイン関数 | トリガーにより実行される関数。 | 
| ⑤ | テーブル名を指定 | データを参照するテーブル名を設定します。 | 
| ⑥ | 参照データのキーの設定 | 読み取るデータのキーを設定します。 | 
| ⑦ | DynamoDBテーブルのオブジェクトを取得 | DynamoDBのテーブルを操作できるようにインスタンスを生成します。 | 
| ⑧ | データの読み取り | DynamoDBのテーブルからデータを読み取ります。レスポンスのデータには、メタデータが含まれるため、「Item」のキーを指定してデータを抽出します。 | 
実行結果
テスト実行にあたり、テストイベントとして以下のJSONデータを登録しておきます。
| 1 2 3 | {   "client_id": "device012" } | 
DynamoDBの「device_properties」テーブルには以下のようなデータが入っています。参照する「device012」には千葉県庁の所在地が格納されています。

Lambdaのコードエディタの上部にある[テスト]をクリックすると、テスト実行されます。
テストを実行すると、テストイベントのデータに対応するデータを読み取れていることが確認できました。

まとめ
DynamoDBはKVSのため、テーブルとキーを指定するだけで簡単にデータを読み込みこむことができます。RDSのようにコネクションの確立やSELECT文のようなクエリが必要ないため、データストアとの連携がとてもシンプルに構成できます。
今回は以上となります。次回もお楽しみに!

