22
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS DynamoDB】基本構築

Last updated at Posted at 2020-07-05

##目標
AWSのDynamoDBを構築し、簡単なテーブル操作をAWSコンソール及びAWS CLI上で実行

##DynamoDBとは
AWSが提供するキーバリュー型のマネージドデータストアサービスです。
データが3つのAZに分散して格納されるため耐久性が高く、格納容量に上限がありません。
また、キーバリュー形式でレイテンシーが低いため、キャッシュやWEBセッションの格納先としても利用されます。

より詳しくは以下記事が参考になります。
【AWS】今更ながらDynamoDB入門

##参考AWSドキュメント
NoSQL テーブルを作成してクエリを実行する

##作業の流れ

項番 タイトル
1 DynamoDBを構築する
2 DynamoDBテーブルをAWSコンソール上から操作
3 DynamoDBテーブルをAWS CLIで操作

##手順
###1.DynamoDBを構築する
Amazon DynamoDBコンソールへアクセス

テーブルの作成をクリック

③DynamoDB テーブルのテーブル名とプライマリキーの設定
まず、DynamoDBのテーブル名とプライマリキー(※)の設定を行います。
サンプルとして以下のように設定

テーブル名: Music
パーティションキー: Artist
ソートキー(任意設定): SongTitle

tempsnip.png

※DynamoDBのプライマリキーに関して
プライマリキー
「パーティションキー」または「パーティションキーとソートキーの複合キー」のこと。
プライマリキーによってデータは一意に識別される。

パーティションキー(設定必須)
このキーへの格納値に従ってどのパーティションにデータが保存されるかが決まるため、
広範囲の値を持ちうるキーを設定することが推奨のようです(各パーティションへのアクセスが均等に分散され、性能向上につながる)。

ソートキー(設定任意)
設定することで、各パーティション内のデータをソートすることが可能となり、
かつAPIではソートキーを指定して取り出すデータの範囲をフィルタできるようです。

より詳しくは以下記事参考
DynamoDBのキー・インデックスについてまとめてみた

④スループットキャパシティのAutoScaling用ロール作成(任意設定)
設定は任意です。
DynamoDBではRCU(読み込みスループットキャパシティ)とWCU(書き込みスループットキャパシティ)という指標を利用して、
単位時間あたりの読み込み・書き込み量を決定しています。
そのRCUとWCUのAutoScaling機能(自動拡張・縮小)を利用するためのIAMロールがデフォルトでは存在しないため新規作成します。

まずはデフォルト設定の使用のチェックを外します。
tempsnip.png

DynamoDB Auto Scaling サービスにリンクされたロールにチェックされていること確認
tempsnip.png

他項目は今回は設定変更無しとします。
最後に作成をクリック

⑤テーブル作成確認
テーブル一覧に追加されたらOKです
キャプチャ.PNG

###2.DynamoDBテーブルをAWSコンソール上から操作
本記事では手順省略致します。
以下AWSドキュメントの「ステップ 2: NoSQL テーブルにデータを追加する」以降を参考に簡単なテーブル操作を試すことができます。
NoSQL テーブルを作成してクエリを実行する

###3.DynamoDBテーブルをAWS CLIで操作
いくつかサンプルとして実行してみます。
より詳しいコマンドは以下記事参照
aws cli で DynamoDB を使う
AWS CLIでDynamoDB操作(挿入, 取得, 更新, 削除)

put-item(データ格納)


$ aws dynamodb put-item --table-name Music --item '{ "Artist": { "S": "Ryosuke" }, "SongTitle": { "S": "FirstSong" }}'
$ aws dynamodb put-item --table-name Music --item '{ "Artist": { "S": "Ryosuke" }, "SongTitle": { "S": "SecondSong" }}'
$ aws dynamodb put-item --table-name Music --item '{ "Artist": { "S": "Michael" }, "SongTitle": { "S": "FirstSong" }}'

scan(データ一覧)


$ aws dynamodb scan --table-name Music
{
    "Count": 3,
    "Items": [
        {
            "SongTitle": {
                "S": "FirstSong"
            },
            "Artist": {
                "S": "Ryosuke"
            }
        },
        {
            "SongTitle": {
                "S": "SecondSong"
            },
            "Artist": {
                "S": "Ryosuke"
            }
        },
        {
            "SongTitle": {
                "S": "FirstSong"
            },
            "Artist": {
                "S": "Michael"
            }
        }
    ],
    "ScannedCount": 3,
    "ConsumedCapacity": null
}

get-item( 単一データ取得 )


$ aws dynamodb get-item --table-name Music  --key '{ "Artist": { "S": "Ryosuke" }, "SongTitle": { "S": "SecondSong" }}'
{
    "Item": {
        "SongTitle": {
            "S": "SecondSong"
        },
        "Artist": {
            "S": "Ryosuke"
        }
    }
}

query( 条件に一致するItem取得 )


[ec2-user@ip-172-31-34-150 ~]$ aws dynamodb query --table-name Music --key-condition-expression 'Artist = :Artist' --expression-attribute-values '{ ":Artist"
: { "S": "Ryosuke" }}'
{
    "Count": 2,
    "Items": [
        {
            "SongTitle": {
                "S": "FirstSong"
            },
            "Artist": {
                "S": "Ryosuke"
            }
        },
        {
            "SongTitle": {
                "S": "SecondSong"
            },
            "Artist": {
                "S": "Ryosuke"
            }
        }
    ],
    "ScannedCount": 2,
    "ConsumedCapacity": null
}

22
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?