他のデータベース管理システムと同様、Amazon DynamoDB はデータをテーブルに保存します。いくつかの基本的なオペレーションでテーブルを管理できます。
テーブルの作成
CreateTable
オペレーションを使用して、Amazon DynamoDB でテーブルを作成します。テーブルを作成するために、以下の情報を指定する必要があります。
-
テーブル名。名前は DynamoDB 命名規則に従う必要があります。また、現在の AWS アカウントとリージョンで一意である必要があります。たとえば、米国東部 (バージニア北部) に
People
テーブルを作成し、欧州 (アイルランド) に別のPeople
テーブルを作成できます。ただし、これらの 2 つのテーブルは互いにまったく異なっています。詳細については、「Amazon DynamoDB でサポートされるデータ型と命名規則」を参照してください。 -
プライマリキー。プライマリキーは 1 つの属性 (パーティションキー) または 2 つの属性で構成できます (パーティションキーとソートキー)。属性名、データタイプ、各属性のロール(パーティションキーでは
HASH
、ソートキーではRANGE
)を指定する必要があります。詳細については、「プライマリキー」を参照してください。 -
スループット設定 (プロビジョニングされたテーブルの場合)。プロビジョニングモードを使用している場合、最初の読み取りと書き込みのスループット設定をテーブルに指定する必要があります。これらの設定は後から変更できます。また、DynamoDB Auto Scaling を有効化して設定を管理することもできます。詳細については、DynamoDB プロビジョンドキャパシティモードおよびDynamoDB Auto Scaling によるスループットキャパシティの自動管理を参照してください。
例 1: オンデマンドテーブルを作成する
オンデマンドモードを使用して同じテーブル Music
を作成するには
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 \ --billing-mode=PAY_PER_REQUEST
CreateTable
オペレーションは、以下のようにテーブルにメタデータを返します。
{
"TableDescription": {
"TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
"AttributeDefinitions": [
{
"AttributeName": "Artist",
"AttributeType": "S"
},
{
"AttributeName": "SongTitle",
"AttributeType": "S"
}
],
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"WriteCapacityUnits": 0,
"ReadCapacityUnits": 0
},
"TableSizeBytes": 0,
"TableName": "Music",
"BillingModeSummary": {
"BillingMode": "PAY_PER_REQUEST"
},
"TableStatus": "CREATING",
"TableId": "12345678-0123-4567-a123-abcdefghijkl",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "Artist"
},
{
"KeyType": "RANGE",
"AttributeName": "SongTitle"
}
],
"ItemCount": 0,
"CreationDateTime": 1542397468.348
}
}
重要
オンデマンドテーブルで DescribeTable
を呼び出すと、読み込みキャパシティユニットと書き込みキャパシティユニットが 0 に設定されます。
例 2: プロビジョン済みテーブルを作成する
以下の AWS CLI サンプルは、テーブル (Music
) の作成方法を示しています。プライマリキーは、Artist
(パーティションキー) と SongTitle
(ソートキー) で構成されており、データ型はそれぞれ String
です。このテーブルの最大スループットは、読み取りキャパシティーユニット数が 10、書き込みキャパシティーユニット数が 5 です。
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=10,WriteCapacityUnits=5
CreateTable
オペレーションは、以下のようにテーブルにメタデータを返します。
{
"TableDescription": {
"TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
"AttributeDefinitions": [
{
"AttributeName": "Artist",
"AttributeType": "S"
},
{
"AttributeName": "SongTitle",
"AttributeType": "S"
}
],
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"WriteCapacityUnits": 5,
"ReadCapacityUnits": 10
},
"TableSizeBytes": 0,
"TableName": "Music",
"TableStatus": "CREATING",
"TableId": "12345678-0123-4567-a123-abcdefghijkl",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "Artist"
},
{
"KeyType": "RANGE",
"AttributeName": "SongTitle"
}
],
"ItemCount": 0,
"CreationDateTime": 1542397215.37
}
}
TableStatus
エレメントは、テーブルの現在の状態を示します(CREATING
)。ReadCapacityUnits
および WriteCapacityUnits
に指定した値によって、テーブルの作成にはしばらく時間がかかる場合があります。これらの値を大きくすると、DynamoDB はより多くのリソースをテーブルに割り当てなければならなくなります。
例 3: DynamoDB Standard-Infrequent Access テーブルクラスを使用してテーブルを作成する
DynamoDB Standard-Infrequent Access テーブルクラスを使用して同じ Music
テーブルを作成するには
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=10,WriteCapacityUnits=5 \ --table-class STANDARD_INFREQUENT_ACCESS
CreateTable
オペレーションは、以下のようにテーブルにメタデータを返します。
{
"TableDescription": {
"TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
"AttributeDefinitions": [
{
"AttributeName": "Artist",
"AttributeType": "S"
},
{
"AttributeName": "SongTitle",
"AttributeType": "S"
}
],
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"WriteCapacityUnits": 5,
"ReadCapacityUnits": 10
},
"TableClassSummary": {
"LastUpdateDateTime": 1542397215.37,
"TableClass": "STANDARD_INFREQUENT_ACCESS"
},
"TableSizeBytes": 0,
"TableName": "Music",
"TableStatus": "CREATING",
"TableId": "12345678-0123-4567-a123-abcdefghijkl",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "Artist"
},
{
"KeyType": "RANGE",
"AttributeName": "SongTitle"
}
],
"ItemCount": 0,
"CreationDateTime": 1542397215.37
}
}
表の説明
テーブルの詳細を表示するには、DescribeTable
オペレーションを使用します。テーブル名を入力する必要があります。DescribeTable
の出力は CreateTable
の出力と同じ形式です。このメタデータには、テーブル作成時のタイムスタンプ、キースキーマ、プロビジョンドスループット設定、推定サイズ、既存のすべてのセカンダリインデックスが含まれています。
重要
オンデマンドテーブルで DescribeTable
を呼び出すと、読み込みキャパシティーユニットと書き込みキャパシティーユニットが 0 に設定されます。
例
aws dynamodb describe-table --table-name Music
TableStatus
が CREATING
から ACTIVE
に変わると、テーブルは使用できる状態になります。
注記
DescribeTable
のリクエスト直後に CreateTable
リクエストを発行した場合、DynamoDB によってエラー (ResourceNotFoundException
) が返されることがあります。DescribeTable
で結果整合性のあるクエリが使用されており、テーブルのメタデータがその時点で使用できない可能性があるためです。数秒間待ってから、再び DescribeTable
リクエストを試してみてください。
請求目的上、DynamoDB ストレージコストには、100 バイトの項目あたりのオーバーヘッドが含まれます。(詳細は、DynamoDB 料金表DescribeTable
オペレーションでは使用されません。
テーブルの更新
UpdateTable
オペレーションを使用すると、以下のいずれかを実行できます。
-
テーブルのプロビジョニングされたスループット設定を変更します (プロビジョニングモードのテーブルの場合)。
-
テーブルの読み取り/書き込みキャパシティーモードを変更します。
-
テーブルでグローバルセカンダリインデックスを操作します (「DynamoDB のグローバルセカンダリインデックスの使用」を参照)。
-
テーブルの DynamoDB Streams を有効または無効にできます (DynamoDB Streams の変更データキャプチャ を参照)。
例
次の AWS CLI の例では、テーブルのプロビジョニングされたスループット設定を変更する方法を示します。
aws dynamodb update-table --table-name Music \ --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10
注記
UpdateTable
リクエストを発行すると、テーブルのステータスが AVAILABLE
から UPDATING
に変わります。テーブルは UPDATING
中も全面的に利用できます。この処理が完了すると、テーブルのステータスが UPDATING
から AVAILABLE
に変わります。
例
次の AWS CLI の例では、テーブルの読み取り/書き込みキャパシティーモードをオンデマンドモードに変更する方法を示します。
aws dynamodb update-table --table-name Music \ --billing-mode PAY_PER_REQUEST
テーブルの削除
DeleteTable
オペレーションで未使用のテーブルを削除できます。テーブルの削除は回復不可能な操作です。
例
次の AWS CLI の例で、テーブルを削除する方法について説明します。
aws dynamodb delete-table --table-name Music
DeleteTable
リクエストを発行すると、テーブルのステータスが ACTIVE
から DELETING
に変わります。使用しているリソース(テーブルに保存されたデータ、ストリーム、テーブルのインデックスなど)によって、テーブルの削除には時間がかかる場合があります。
DeleteTable
オペレーションが完了すると、テーブルは DynamoDB に存在しなくなります。
削除保護の使用
削除保護プロパティを使用すると、テーブルを誤って削除しないように保護できます。テーブルに対してこのプロパティを有効にすると、管理者が通常のテーブル管理オペレーションを行うときにテーブルが誤って削除されるのを防ぐことができます。これにより、通常業務が中断されるのを防ぐことができます。
テーブル所有者または権限のある管理者が、各テーブルの削除保護プロパティを制御します。すべてのテーブルで削除保護プロパティは、デフォルトでオフに設定されています。これには、グローバルレプリカやバックアップから復元されたテーブルが含まれます。テーブルの削除保護が無効になっている場合、Identity and Access Management (IAM) ポリシーによって承認されたすべてのユーザーがそのテーブルを削除できます。テーブルの削除保護が有効になっているときは、誰も削除できません。
この設定を変更するには、表の[Additional settings] (追加設定) に移動し、[Deletion Protection] (削除保護)パネルに移動して、[Enable delete protection] (削除保護を有効にする) を選択します。
削除保護プロパティは、DynamoDB コンソール、API、CLI/SDK、および AWS CloudFormation でサポートされています。CreateTable
API は、テーブル作成時の削除保護プロパティをサポートしており、UpdateTable
API は既存のテーブルに対する削除保護プロパティの変更をサポートしています。
注記
-
AWS アカウントを削除しても、テーブルを含むそのアカウントのすべてのデータは 90 日以内に削除されます。
-
DynamoDB は、テーブルを暗号化したカスタマーマネージドキーにアクセスできない場合、テーブルをアーカイブします。アーカイブには、テーブルのバックアップの作成と元のテーブルの削除が含まれます。
テーブル名のリスト化
ListTables
オペレーションは、現在の AWS アカウントやリージョンの DynamoDB テーブルの名前を返します。
例
次の AWS CLI の例は、DynamoDB テーブル名をリストする方法を示しています。
aws dynamodb list-tables
プロビジョニングされたスループットクォータの説明
DescribeLimits
オペレーションは、現在の AWS アカウントやリージョンの現在の読み取りおよび書き込みキャパシティーのクォータを返します。
例
次の AWS CLI の例では、現在のプロビジョニングされたスループットクォータを記述する方法を示します。
aws dynamodb describe-limits
出力は、現在の AWS アカウントやリージョンの読み取りおよび書き込みキャパシティーユニットの上限クォータを返します。
これらのクォータの詳細およびクォータの引き上げをリクエストする方法については、「スループットのデフォルトクォータ」を参照してください。