メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

AWS::DynamoDB::Table

DynamoDB テーブルを作成します。

注記

AWS CloudFormation は、通常、DynamoDB テーブルを並列に作成します。ただし、インデックスを持つ複数の DynamoDB テーブルがテンプレートに含まれている場合は、依存関係を宣言して、テーブルが順次作成されるようにする必要があります。DynamoDB は、作成中の状態にあるセカンダリインデックスを持つテーブルの数を制限します。インデックスを持つ複数のテーブルを同時に作成すると、DynamoDB はエラーを返し、スタック操作は失敗します。サンプルスニペットについては、「DependsOn 属性を含む DynamoDB テーブル」を参照してください。

構文

AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。

JSON

Copy
{ "Type" : "AWS::DynamoDB::Table", "Properties" : { "AttributeDefinitions" : [ AttributeDefinitions, ... ], "GlobalSecondaryIndexes" : [ GlobalSecondaryIndexes, ... ], "KeySchema" : [ KeySchema, ... ], "LocalSecondaryIndexes" : [ LocalSecondaryIndexes, ... ], "ProvisionedThroughput" : ProvisionedThroughput, "StreamSpecification" : StreamSpecification, "TableName" : String } }

YAML

Copy
Type: "AWS::DynamoDB::Table" Properties: AttributeDefinitions: - AttributeDefinitions GlobalSecondaryIndexes: - GlobalSecondaryIndexes KeySchema: - KeySchema LocalSecondaryIndexes: - LocalSecondaryIndexes ProvisionedThroughput: ProvisionedThroughput StreamSpecification: StreamSpecification TableName: String

プロパティ

AttributeDefinitions

テーブルとインデックスのキースキーマを記述する AttributeName オブジェクトと AttributeType オブジェクトのリスト。

必須: はい

: DynamoDB 属性定義 のリスト

更新に伴う要件: 置換。

GlobalSecondaryIndexes

テーブルに作成するグローバルセカンダリインデックス。最大で 5 個のグローバルセカンダリインデックスを作成できます。

重要

テーブルを更新して新しいグローバルセカンダリインデックスを含める場合、AWS CloudFormation はインデックス作成を開始し、スタックの更新を始めます。テーブルのサイズによってはバックフィリングフェーズに時間がかかることがあるため、AWS CloudFormation はインデックス作成の完了を待機しません。インデックスのステータスが ACTIVE になるまで、インデックスを使用したり、テーブルを更新したりすることはできません。DynamoDB DescribeTable コマンドを使用してステータスを追跡できます。

更新中にインデックスを追加または削除する場合、他のリソースは更新しないことをお勧めします。新しいインデックスの追加中にスタックが更新に失敗してロールバックされた場合、インデックスを手動で削除する必要があります。

必須: いいえ

: DynamoDB グローバルセカンダリインデックス のリスト

[Update requires]: アップデートはサポートされていません。 には次の例外があります。

  • グローバルセカンダリインデックスのプロビジョニングされたスループット値のみ更新した場合、中断せずにテーブルを更新できます。

  • グローバルセカンダリインデックスは、中断せずに削除または追加できます。同じ更新での両方の操作を行うと (インデックスの論理 ID を変更するなど)、更新は失敗します。

KeySchema

テーブルのプライマリキーを構成する属性を指定します。KeySchema プロパティの属性は、AttributeDefinitions プロパティにも定義する必要があります。

必須: はい

: DynamoDB キースキーマ のリスト

更新に伴う要件: 置換。

LocalSecondaryIndexes

テーブルに作成するローカルセカンダリインデックス。最大で 5 個のローカルセカンダリインデックスを作成できます。各インデックスの範囲は、特定のハッシュキー値に限定されます。各ハッシュキーのサイズは最大 10 GB です。

必須: いいえ

: DynamoDB ローカルセカンダリインデックス のリスト

更新に伴う要件: 置換。

ProvisionedThroughput

ReadCapacityUnits と WriteCapacityUnits の値で構成される、指定されたテーブルのスループット。プロビジョニングされたスループット構造のコンテンツについての詳細については、「DynamoDB プロビジョンドスループット」を参照してください。

必須: はい

タイプ: DynamoDB プロビジョンドスループット

更新に伴う要件: 中断はありません。

StreamSpecification

テーブルに保存された項目の変更をキャプチャする DynamoDB テーブルストリームの設定。

必須: いいえ

Type: DynamoDB Table StreamSpecification

テーブルへの 更新に伴う要件: 中断はありません。。ただし、ストリームは置き換えられます。

TableName

テーブルの名前。名前を指定しない場合、AWS CloudFormation は一意の物理 ID を生成し、その ID をテーブル名として使用します。詳細については、「Name タイプ」を参照してください。

重要

名前を指定すると、このリソースの置換が必要な更新はできません。中断が不要であるか、一定の中断が必要な更新であれば、行うことができます。リソースを置き換える必要がある場合は、新しい名前を指定します。

必須: いいえ

Type: String

更新に伴う要件: 置換。

注記

DynamoDB の制限については、Amazon DynamoDB 開発者ガイドの「Amazon DynamoDB の制限」を参照してください。

戻り値

参照番号

このリソースの論理 ID が Ref 組み込み関数に提供されると、Ref によりリソース名が返されます。 例:

Copy
{ "Ref": "MyResource" }

論理 ID myDynamoDBTable を持つリソースに対し、Ref は DynamoDB テーブル名を返します。

Ref 関数の使用方法の詳細については、「Ref」を参照してください。

Fn::GetAtt

Fn::GetAtt は、このタイプの指定された属性の値を返します。以下には、利用可能な属性とサンプル戻り値のリストが示されます。

StreamArn

arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000 など、DynamoDB ストリームの Amazon リソースネーム (ARN)。

注記

この属性を使用するには、StreamSpecification プロパティを指定する必要があります。

Fn::GetAtt の使用の詳細については、「Fn::GetAtt」を参照してください。

ローカルインデックスおよびセカンダリインデックスを持つ DynamoDB テーブル

次のサンプルは、AlbumArtistSales、および NumberOfSongs を属性として持つ DynamoDB テーブルを作成します。プライマリキーには、ハッシュキーとしての Album 属性と範囲キーとしての Artist 属性が含まれます。このテーブルには、2 つのグローバルインデックスと 1 つのセカンダリインデックスも含まれます。特定のアーティストの売上を照会するために、グローバルセカンダリインデックスではハッシュキーとしての Sales 属性と範囲キーとしての Artist 属性を使用します。

ソングの数に基づいて売上を照会するために、グローバルセカンダリインデックスではハッシュキーとしての NumberOfSongs 属性と範囲キーとしての Sales 属性を使用します。

アルバムの売上を照会するために、ローカルセカンダリインデックスでは、テーブルと同じハッシュキーを使用する一方で、範囲キーとして Sales 属性を使用します。

JSON

Copy
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "myDynamoDBTable" : { "Type" : "AWS::DynamoDB::Table", "Properties" : { "AttributeDefinitions" : [ { "AttributeName" : "Album", "AttributeType" : "S" }, { "AttributeName" : "Artist", "AttributeType" : "S" }, { "AttributeName" : "Sales", "AttributeType" : "N" }, { "AttributeName" : "NumberOfSongs", "AttributeType" : "N" } ], "KeySchema" : [ { "AttributeName" : "Album", "KeyType" : "HASH" }, { "AttributeName" : "Artist", "KeyType" : "RANGE" } ], "ProvisionedThroughput" : { "ReadCapacityUnits" : "5", "WriteCapacityUnits" : "5" }, "TableName" : "myTableName", "GlobalSecondaryIndexes" : [{ "IndexName" : "myGSI", "KeySchema" : [ { "AttributeName" : "Sales", "KeyType" : "HASH" }, { "AttributeName" : "Artist", "KeyType" : "RANGE" } ], "Projection" : { "NonKeyAttributes" : ["Album","NumberOfSongs"], "ProjectionType" : "INCLUDE" }, "ProvisionedThroughput" : { "ReadCapacityUnits" : "5", "WriteCapacityUnits" : "5" } }, { "IndexName" : "myGSI2", "KeySchema" : [ { "AttributeName" : "NumberOfSongs", "KeyType" : "HASH" }, { "AttributeName" : "Sales", "KeyType" : "RANGE" } ], "Projection" : { "NonKeyAttributes" : ["Album","Artist"], "ProjectionType" : "INCLUDE" }, "ProvisionedThroughput" : { "ReadCapacityUnits" : "5", "WriteCapacityUnits" : "5" } }], "LocalSecondaryIndexes" :[{ "IndexName" : "myLSI", "KeySchema" : [ { "AttributeName" : "Album", "KeyType" : "HASH" }, { "AttributeName" : "Sales", "KeyType" : "RANGE" } ], "Projection" : { "NonKeyAttributes" : ["Artist","NumberOfSongs"], "ProjectionType" : "INCLUDE" } }] } } } }

YAML

Copy
AWSTemplateFormatVersion: "2010-09-09" Resources: myDynamoDBTable: Type: "AWS::DynamoDB::Table" Properties: AttributeDefinitions: - AttributeName: "Album" AttributeType: "S" - AttributeName: "Artist" AttributeType: "S" - AttributeName: "Sales" AttributeType: "N" - AttributeName: "NumberOfSongs" AttributeType: "N" KeySchema: - AttributeName: "Album" KeyType: "HASH" - AttributeName: "Artist" KeyType: "RANGE" ProvisionedThroughput: ReadCapacityUnits: "5" WriteCapacityUnits: "5" TableName: "myTableName" GlobalSecondaryIndexes: - IndexName: "myGSI" KeySchema: - AttributeName: "Sales" KeyType: "HASH" - AttributeName: "Artist" KeyType: "RANGE" Projection: NonKeyAttributes: - "Album" - "NumberOfSongs" ProjectionType: "INCLUDE" ProvisionedThroughput: ReadCapacityUnits: "5" WriteCapacityUnits: "5" - IndexName: "myGSI2" KeySchema: - AttributeName: "NumberOfSongs" KeyType: "HASH" - AttributeName: "Sales" KeyType: "RANGE" Projection: NonKeyAttributes: - "Album" - "Artist" ProjectionType: "INCLUDE" ProvisionedThroughput: ReadCapacityUnits: "5" WriteCapacityUnits: "5" LocalSecondaryIndexes: - IndexName: "myLSI" KeySchema: - AttributeName: "Album" KeyType: "HASH" - AttributeName: "Sales" KeyType: "RANGE" Projection: NonKeyAttributes: - "Artist" - "NumberOfSongs" ProjectionType: "INCLUDE"

DependsOn 属性を含む DynamoDB テーブル

1 つのテンプレートにインデックスを持つ複数の DynamoDB テーブルを含める場合、テーブルが順次作成されるように依存関係を含める必要があります。DynamoDB は、作成中の状態にあるセカンダリインデックスを持つテーブルの数を制限します。インデックスを持つ複数のテーブルを同時に作成すると、DynamoDB はエラーを返し、スタック操作は失敗します。

次のサンプルでは、myFirstDDBTable テーブルが mySecondDDBTable テーブルと同じテンプレート内で宣言され、両方のテーブルにセカンダリインデックスが含まれていると想定しています。mySecondDDBTable テーブルには myFirstDDBTable テーブルへの依存関係が含まれるため、AWS CloudFormation はこれらのテーブルを一度に 1 つずつ作成します。

JSON

Copy
"mySecondDDBTable" : { "Type" : "AWS::DynamoDB::Table", "DependsOn" : "myFirstDDBTable" , "Properties" : { "AttributeDefinitions" : [ { "AttributeName" : "ArtistId", "AttributeType" : "S" }, { "AttributeName" : "Concert", "AttributeType" : "S" }, { "AttributeName" : "TicketSales", "AttributeType" : "S" } ], "KeySchema" : [ { "AttributeName" : "ArtistId", "KeyType" : "HASH" }, { "AttributeName" : "Concert", "KeyType" : "RANGE" } ], "ProvisionedThroughput" : { "ReadCapacityUnits" : {"Ref" : "ReadCapacityUnits"}, "WriteCapacityUnits" : {"Ref" : "WriteCapacityUnits"} }, "GlobalSecondaryIndexes" : [{ "IndexName" : "myGSI", "KeySchema" : [ { "AttributeName" : "TicketSales", "KeyType" : "HASH" } ], "Projection" : { "ProjectionType" : "KEYS_ONLY" }, "ProvisionedThroughput" : { "ReadCapacityUnits" : {"Ref" : "ReadCapacityUnits"}, "WriteCapacityUnits" : {"Ref" : "WriteCapacityUnits"} } }] } }

YAML

Copy
mySecondDDBTable: Type: "AWS::DynamoDB::Table" DependsOn: "myFirstDDBTable" Properties: AttributeDefinitions: - AttributeName: "ArtistId" AttributeType: "S" - AttributeName: "Concert" AttributeType: "S" - AttributeName: "TicketSales" AttributeType: "S" KeySchema: - AttributeName: "ArtistId" KeyType: "HASH" - AttributeName: "Concert" KeyType: "RANGE" ProvisionedThroughput: ReadCapacityUnits: Ref: "ReadCapacityUnits" WriteCapacityUnits: Ref: "WriteCapacityUnits" GlobalSecondaryIndexes: - IndexName: "myGSI" KeySchema: - AttributeName: "TicketSales" KeyType: "HASH" Projection: ProjectionType: "KEYS_ONLY" ProvisionedThroughput: ReadCapacityUnits: Ref: "ReadCapacityUnits" WriteCapacityUnits: Ref: "WriteCapacityUnits"