準備
LambdaからDynamoDBにテーブル作る事もできるけど、今回は事前にDynamoDBにアクセスしてtestと言う名前で以下のようなテーブルを作成した
LambdaからDynamoDBを読み込む
Lambdaで関数を作成する。Pythonは3.7。ロールは、DynamoDBにアクセスできるようにポリシーを割り当てておく。AmazonDynamoDBFullAccesswithDataPipeline を面倒だったので割り当てて適当に名前を付けて作成。
関数は以下。boto3 をimport すればdynamoDBを扱えるので、モジュールを用意してパッケージ化とか必要ない。
import boto3
dynamodb = boto3.resource('dynamodb') #使うリソースを選んでおく
def lambda_handler(event, context):
table_name = "test" #テーブル名
primary_key = {"primary": event["primary"]} #テーブル名
dynamotable = dynamodb.Table(table_name)
res = dynamotable.get_item(Key=primary_key) #指定したprymaryで検索して結果を取得
item = res["Item"] #要素を指定してないので全部
return item
テストイベントは helloworld のイベントテンプレでいいので適当に名前を付けて以下を設定
{
"primary": "みかん"
}
保存してテストをして、結果に以下が帰ってきていれば成功
Response:
{
"primary": "みかん",
"eat": "食べてない"
}
LambdaからDynamoDBを更新する
参照するときは get.item を使ったが、update_itemを使う。テストは参照の時に定めたものを使用
import boto3
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
table_name = "test"
primary_key = {"primary": event["primary"]}
dynamotable = dynamodb.Table(table_name)
response = dynamotable.update_item(
Key=primary_key,
UpdateExpression="set eat = :eat",#更新式 set 更新したい値 = :名前 を入れる 名前は:がついてればなんでもいい
ExpressionAttributeValues={
':eat': '食べた'#先ほどつけた名前と更新内容を記述
})
res = dynamotable.get_item(Key=primary_key)#更新されたかチェックするためデータを取得
item = res["Item"]
return item
保存してテストをして、結果に以下が帰ってきていれば成功
Response:
{
"primary": "みかん",
"eat": "食べた"
}
参考
いやぁ。。。疲れた。色々と記事を見てチャレンジしてたけど、いまいちうまくいかなくて、結局AWSのドキュメントを見てやったらうまくいった。lambdaからコピペで移してきてるけど、うまくいかない場合は、AWSの上記ページの例から作成するとうまくいくと思う