1. 概要
前回はAmazon DynamoDBを「AWS Management Console」で操作する内容でした。今回は「DynamoDB API」で操作する内容となります。
次回は「PartiQL for DynamoDB」で操作する内容を予定してます。
2. AWSアカウントにサインアップ
2-1. 前提条件
3. AWSアクセスキーの取得
3-1. AWSアクセスキーの取得
- IAMユーザーグループを作成
- IAM ユーザーグループ – AWS Identity and Access Management (amazon.com)
- ポリシーに「AmazonDynamoDBFullAccess」を選択
- IAMユーザーを作成
- AWS アカウント での IAM ユーザーの作成 – AWS Identity and Access Management (amazon.com)
- 上記のユーザーグループを追加
- 作成後に「AWS Access Key ID」と「AWS Secret Access Key」を取得(メモしておく or CSVをダウンロード)
- credential.json
4. AWS CLI のインストール
AWS Command Line Interface とはどのようなものですか。 – AWS Command Line Interface (amazon.com)
4-1. インストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
4-2. 確認
aws --version
4-3. 設定
aws configure
AWS Access Key ID [None]: 上記3にて取得したもの
AWS Secret Access Key [None]: 上記3にて取得したもの
Default region name [None]: ap-northeast-1
Default output format [None]: json
5. テーブルを作成
5-1. テーブルを作成
【公式】Amazon DynamoDBとは(マネージド NoSQL データベース)| AWS
- 下記を入力し、作成
- テーブル名
- Music
- パーディションキー
- Artist
- ソートキー
- SongTitle
- テーブル名
aws dynamodb create-table \
--table-name Music \
--attribute-definitions \
AttributeName=Artist,AttributeType=S \
AttributeName=SongTitle,AttributeType=S \
--key-schema \
AttributeName=Artist,KeyType=HASH \
AttributeName=SongTitle,KeyType=RANGE \
--provisioned-throughput \
ReadCapacityUnits=5,WriteCapacityUnits=5 \
--table-class STANDARD
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "Artist",
"AttributeType": "S"
},
{
"AttributeName": "SongTitle",
"AttributeType": "S"
}
],
"TableName": "Music",
"KeySchema": [
{
"AttributeName": "Artist",
"KeyType": "HASH"
},
{
"AttributeName": "SongTitle",
"KeyType": "RANGE"
}
],
"TableStatus": "CREATING",
"CreationDateTime": "2024-04-27T10:15:35.266000+09:00",
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/Music",
"TableId": "5ec519df-c7af-4d3f-87c1-9d21eb872609",
"TableClassSummary": {
"TableClass": "STANDARD"
},
"DeletionProtectionEnabled": false
}
}
※TableStatusが「CREATING」⇒「ACTIVE」となる事を確認
aws dynamodb describe-table --table-name Music | grep TableStatus
6. データの書き込み
6-1. データの書き込み
- データを4つ(4レコード)作成
①
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "1"}}'
②
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Howdy"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "2"}}'
③
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}, "AlbumTitle": {"S": "Songs About Life"}, "Awards": {"N": "10"}}'
④
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "PartiQL Rocks"}, "AlbumTitle": {"S": "Another Album Title"}, "Awards": {"N": "8"}}'
7. データを読み込み
7-1. データの読み込み
aws dynamodb get-item --consistent-read \
--table-name Music \
--key '{ "Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}'
{
"Item": {
"AlbumTitle": {
"S": "Songs About Life"
},
"Awards": {
"N": "10"
},
"Artist": {
"S": "Acme Band"
},
"SongTitle": {
"S": "Happy Day"
}
}
}
8. データを更新
8-1. データの更新
aws dynamodb update-item \
--table-name Music \
--key '{ "Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}' \
--update-expression "SET AlbumTitle = :newval" \
--expression-attribute-values '{":newval":{"S":"Updated Album Title"}}' \
--return-values ALL_NEW
{
"Attributes": {
"AlbumTitle": {
"S": "Updated Album Title"
},
"Awards": {
"N": "10"
},
"Artist": {
"S": "Acme Band"
},
"SongTitle": {
"S": "Happy Day"
}
}
}
9. データをクエリ
9-1. データをクエリ
aws dynamodb query \
--table-name Music \
--key-condition-expression "Artist = :name" \
--expression-attribute-values '{":name":{"S":"Acme Band"}}'
{
"Items": [
{
"AlbumTitle": {
"S": "Updated Album Title"
},
"Awards": {
"N": "10"
},
"Artist": {
"S": "Acme Band"
},
"SongTitle": {
"S": "Happy Day"
}
},
{
"AlbumTitle": {
"S": "Another Album Title"
},
"Awards": {
"N": "8"
},
"Artist": {
"S": "Acme Band"
},
"SongTitle": {
"S": "PartiQL Rocks"
}
}
],
"Count": 2,
"ScannedCount": 2,
"ConsumedCapacity": null
}
10. グローバルセカンダリインデックスを作成
10-1. グローバルセカンダリインデックスを作成
- AlbumTitle
aws dynamodb update-table \
--table-name Music \
--attribute-definitions AttributeName=AlbumTitle,AttributeType=S \
--global-secondary-index-updates \
"[{\"Create\":{\"IndexName\": \"AlbumTitle-index\",\"KeySchema\":[{\"AttributeName\":\"AlbumTitle\",\"KeyType\":\"HASH\"}], \
\"ProvisionedThroughput\": {\"ReadCapacityUnits\": 10, \"WriteCapacityUnits\": 5 },\"Projection\":{\"ProjectionType\":\"ALL\"}}}]"
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "AlbumTitle",
"AttributeType": "S"
},
{
"AttributeName": "Artist",
"AttributeType": "S"
},
{
"AttributeName": "SongTitle",
"AttributeType": "S"
}
],
"TableName": "Music",
"KeySchema": [
{
"AttributeName": "Artist",
"KeyType": "HASH"
},
{
"AttributeName": "SongTitle",
"KeyType": "RANGE"
}
],
"TableStatus": "UPDATING",
"CreationDateTime": "2024-04-27T10:15:35.266000+09:00",
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/Music",
"TableId": "5ec519df-c7af-4d3f-87c1-9d21eb872609",
"GlobalSecondaryIndexes": [
{
"IndexName": "AlbumTitle-index",
"KeySchema": [
{
"AttributeName": "AlbumTitle",
"KeyType": "HASH"
}
],
"Projection": {
"ProjectionType": "ALL"
},
"IndexStatus": "CREATING",
"Backfilling": false,
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 10,
"WriteCapacityUnits": 5
},
"IndexSizeBytes": 0,
"ItemCount": 0,
"IndexArn": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/Music/index/AlbumTitle-index"
}
],
"TableClassSummary": {
"TableClass": "STANDARD"
},
"DeletionProtectionEnabled": false
}
}
※IndexStatusが「CREATING」⇒「ACTIVE」となる事を確認
aws dynamodb describe-table --table-name Music | grep IndexStatus
11. グローバルセカンダリインデックスをクエリ
11-1. グローバルセカンダリインデックスをクエリ
aws dynamodb query \
--table-name Music \
--index-name AlbumTitle-index \
--key-condition-expression "AlbumTitle = :name" \
--expression-attribute-values '{":name":{"S":"Somewhat Famous"}}'
{
"Items": [
{
"AlbumTitle": {
"S": "Somewhat Famous"
},
"Awards": {
"N": "1"
},
"Artist": {
"S": "No One You Know"
},
"SongTitle": {
"S": "Call Me Today"
}
},
{
"AlbumTitle": {
"S": "Somewhat Famous"
},
"Awards": {
"N": "2"
},
"Artist": {
"S": "No One You Know"
},
"SongTitle": {
"S": "Howdy"
}
}
],
"Count": 2,
"ScannedCount": 2,
"ConsumedCapacity": null
}
12. リソースをクリーンアップ
※必要に応じ削除
aws dynamodb delete-table --table-name Music
13. 備考
Amazon DynamoDBをAPIで操作する内容でした。次回はPartiQLで操作する内容を予定してます。
14. 参考
- Amazon DynamoDB とは – Amazon DynamoDB
- IAM ユーザーグループ – AWS Identity and Access Management (amazon.com)
- AWS アカウント での IAM ユーザーの作成 – AWS Identity and Access Management (amazon.com)
- AWS Command Line Interface とはどのようなものですか。 – AWS Command Line Interface (amazon.com)
投稿者プロフィール
-
開発好きなシステムエンジニアです。
卓球にハマってます。