はじめに
5/19(日本では5/20)に「DynamoDB local is now accessible on AWS CloudShell」というタイトルでアップデートがありました。
こちらはタイトルの通りCloudShell上でDynamoDB Localが使えるようになったとのことで、ものは試しで早速触ってみました。
DynamoDB localとは
そもそもDynamoDB localってなんやねん、という話から。AWSではNoSQLデータベースサービスであるDynamoDBが利用できますが、そのDynamoDBをローカル環境(個人PC上など)にDynamoDBを模擬したものを構築することができる優れものです。
共用で使ってる開発環境のDynamoDBを触りたくないけど、作っているアプリケーションのテストはしたい...みたいな時にローカルで動作確認できる点が良いですね。ローカルで動くものなので、コストがかからないのもメリットです。
CloudShellで試す
以下、デフォルトVPCのCloudShellで実施しています。
というわけでCloudShellからDynamoDB localを試してみます。
CloudShellを立ち上げたら、アップデートの記事にも記載がある通り、--endpoint-url
にlocalhost:8000を指定することで接続ができます。
記事によると、
You can now start DynamoDB local just by using dynamodb-local alias in CloudShell
とあるので、aliasコマンドで確認してみました。
一番上にある通り、dynamodb-localを叩くだけで起動ができそうです。
dynamodb-localで起動すると、この状態になりました。
コマンドを受け付ない(フォアグラウンドで立ち上がったままの)ようなので、別タブを立ち上げます。あとはaws cliコマンドを使ってDynamoDB localを操作します。(--endpoint-url
を忘れずに!)
今はDynamoDBテーブルが存在しないのでlist-tables
は空です。
テーブルを作成してみます。
~ $ aws dynamodb create-table --table-name Users --attribute-definitions AttributeName=UserId,AttributeType=S --key-schema AttributeName=UserId,KeyType=HASH --billing-mode PAY_PER_REQUEST --endpoint-url http://localhost:8000
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "UserId",
"AttributeType": "S"
}
],
"TableName": "Users",
"KeySchema": [
{
"AttributeName": "UserId",
"KeyType": "HASH"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2025-05-20T14:01:09.795000+00:00",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "1970-01-01T00:00:00+00:00",
"LastDecreaseDateTime": "1970-01-01T00:00:00+00:00",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 0,
"WriteCapacityUnits": 0
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/Users",
"BillingModeSummary": {
"BillingMode": "PAY_PER_REQUEST",
"LastUpdateToPayPerRequestDateTime": "2025-05-20T14:01:09.795000+00:00"
},
"DeletionProtectionEnabled": false
}
}
AWS CLIを使うことでテーブルが作成できました!せっかくなので、作ったテーブルに項目を追加するPythonコードを作成してみました。
import boto3
dynamodb = boto3.resource('dynamodb', endpoint_url='http://localhost:8000')
table_name = 'Users'
table = dynamodb.Table(table_name)
item = {
'UserId': '1',
'Name': 'Ryotaro Harada'
}
response = table.put_item(Item=item)
このコードを実行後、get-itemをしてみました。
~ $ python3 main.py
~ $ aws dynamodb get-item --table-name Users --key '{ "UserId": { "S": "1" } }' --endpoint-url http://localhost:8000
{
"Item": {
"UserId": {
"S": "1"
},
"Name": {
"S": "Ryotaro Harada"
}
}
}
ちゃんと処理されていそうですね!
--endpoint-url
を指定しないと、AWS上のリソースを操作をしてしまうので、同じテーブル名が存在する場合は注意が必要です。
まとめ
今回は簡単にDynamoDB localが使えるようになったCloudShellの紹介でした!
参考