CDK(Python)でDynamoDBのテーブルを作る
もくじ
CDKを使ってDynamoDBのテーブルをデプロイしてみます。のサンプルコードですね
全体だとこんなイメージ(↓)になると思います
前提
cdkのシリーズの続き。
公式のドキュメントはこのあたり、
https://docs.aws.amazon.com/cdk/api/latest/docs/aws-dynamodb-readme.html
では 作っていきましょう👻
と、Dynamoの実装から細かい設定を省いたら、記事にするのも憚られるくらいのコード量になってしまったという😅
requirements.txt
リソースはDynamoだけなので、必要なモジュールは下記の通りです👍
aws-cdk.core==1.72.0
aws-cdk.aws_dynamodb==1.72.0
スタックファイル
from aws_cdk import core
from aws_cdk.aws_dynamodb import Attribute, AttributeType, Table
class DynamoTableStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# DynamoDB
table = Table(
self,
"DynamoTableTable",
partition_key=Attribute(name="pk", type=AttributeType.NUMBER), # パーテーションキー
sort_key=Attribute(name="sk", type=AttributeType.STRING), # ソートキー
removal_policy=core.RemovalPolicy.DESTROY, # Stackの削除と一緒にテーブルを削除する(オプション)
)
いや、これでdynamoがデプロイされるなんて、本当にすごいですね😊
removal_policy
が最低限の設定に含まれるかは、好みですが、、、
※ S3とかもそうなんですけどね😅
エントリーポイントへ追記
...
from stacks.dynamo_table_stack import DynamoTableStack
...
DynamoTableStack(app, "dynamo-table-stack", env=env)
...
デプロイ🚀
$ cdk deploy dynamo-table-stack
動作確認
CRUD系の処理をさせてみます。(CDKの本題とは結構ずれる感ありますが😅)
定番ですが、まずデプロイしたテーブル名をコンソールなり、下記なりでとってきます。
$ aws dynamodb list-tables | grep dynamo-table-stack
今回はdynamo-table-stack-DynamoTableTable529948A5-14M0X7W8UAS0B
こんな名前でデプロイされました
可読性向上のために、dynamoのテーブル名下記のような変数に入れさせていただきます🙇
$ TABLE_NAME=dynamo-table-stack-DynamoTableTable529948A5-14M0X7W8UAS0B
Createのようなもの(put)
$ aws dynamodb put-item --table-name $TABLE_NAME --item '{"pk":{"N":"1234"},"sk":{"S":"hogehoge"}}'
Readのようなもの(scan)
動作確認のため、全アイテム取得のscan
を叩きます。
$ aws dynamodb scan --table-name $TABLE_NAME
{
"Items": [
{
"pk": {
"N": "1234"
},
"sk": {
"S": "hogehoge"
}
}
],
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
Update👍
$ aws dynamodb update-item --table-name $TABLE_NAME --key '{"pk":{"N":"1234"},"sk":{"S":"hogehoge"}}' --update-expression 'SET new_key = :hoge' --expression-attribute-values '{":hoge":{"S":"new_hogehoge"}}'
# ちなみに私はcliを改行したものをshellで叩くのが、、じつは好きじゃありません、
# が、流石にこれは可読性が悪いので↑のやつを改行したのを↓に書きます
$ aws dynamodb update-item --table-name $TABLE_NAME \
--key '{"pk":{"N":"1234"},"sk":{"S":"hogehoge"}}' \
--update-expression 'SET new_key = :hoge' \
--expression-attribute-values '{":hoge":{"S":"new_hogehoge"}}'
確認
$ aws dynamodb scan --table-name $TABLE_NAME
{
"Items": [
{
"pk": {
"N": "1234"
},
"sk": {
"S": "hogehoge"
},
"new_key": {
"S": "new_hogehoge"
}
}
],
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
Delete💣
デレてアイテム🥰
$ aws dynamodb delete-item --table-name $TABLE_NAME --key '{"pk":{"N":"1234"},"sk":{"S":"hogehoge"}}'
確認
% aws dynamodb scan --table-name $TABLE_NAME
{
"Items": [],
"Count": 0,
"ScannedCount": 0,
"ConsumedCapacity": null
}
まとめ
CDKでDynamoDBのテーブルを最低限の設定でデプロイしていました。
その後aws-cliでCRUD的な処理をして動作確認をしました。