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

AWS::DynamoDB::Table

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

Note

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

構文

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

JSON

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

YAML

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 個のグローバルセカンダリインデックスを作成できます。

Important

テーブルを更新して新しいグローバルセカンダリインデックスを含める場合、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 タイプ」を参照してください。

Important

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

必須: いいえ

Type: String

更新に伴う要件: 置換。

Note

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

戻り値

参照番号

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

{ "Ref": "MyResource" }

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

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)。

Note

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

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

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

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

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

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

JSON

{
  "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

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

"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

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"