翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS::DynamoDB::Table
リソースは DynamoDB テーブルを作成します。詳細については、「Amazon DynamoDB CreateTable」を参照してください。
DynamoDB テーブルを操作するときは、以下の動作に注意してください。
-
AWS CloudFormation は通常、DynamoDB テーブルを並列で作成します。ただし、インデックスを持つ複数の DynamoDB テーブルがテンプレートに含まれている場合は、依存関係を宣言して、テーブルが順次作成されるようにする必要があります。Amazon DynamoDB は、作成中の状態にあるセカンダリインデックスを持つテーブルの数を制限します。インデックスを持つ複数のテーブルを同時に作成すると、DynamoDB はエラーを返し、スタックオペレーションは失敗します。例については、「DependsOn 属性を持つ DynamoDB テーブル」を参照してください。
重要
当社のガイダンスでは、 AWS CloudFormation テンプレートに文書化された最新のスキーマを使用します。このスキーマは、以下のテーブル設定すべてのプロビジョニングをサポートします。 AWS CloudFormation テンプレートでこのスキーマを使用する場合は、これらの設定の変更を承認できるように、Identity and Access Management (IAM) ポリシーが適切なアクセス許可で更新されていることを確認してください。
構文
AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。
JSON
{
"Type" : "AWS::DynamoDB::Table",
"Properties" : {
"AttributeDefinitions" : [ AttributeDefinition, ... ]
,
"BillingMode" : String
,
"ContributorInsightsSpecification" : ContributorInsightsSpecification
,
"DeletionProtectionEnabled" : Boolean
,
"GlobalSecondaryIndexes" : [ GlobalSecondaryIndex, ... ]
,
"ImportSourceSpecification" : ImportSourceSpecification
,
"KeySchema" : [ KeySchema, ... ]
,
"KinesisStreamSpecification" : KinesisStreamSpecification
,
"LocalSecondaryIndexes" : [ LocalSecondaryIndex, ... ]
,
"OnDemandThroughput" : OnDemandThroughput
,
"PointInTimeRecoverySpecification" : PointInTimeRecoverySpecification
,
"ProvisionedThroughput" : ProvisionedThroughput
,
"ResourcePolicy" : ResourcePolicy
,
"SSESpecification" : SSESpecification
,
"StreamSpecification" : StreamSpecification
,
"TableClass" : String
,
"TableName" : String
,
"Tags" : [ Tag, ... ]
,
"TimeToLiveSpecification" : TimeToLiveSpecification
,
"WarmThroughput" : WarmThroughput
}
}
YAML
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeDefinition
BillingMode: String
ContributorInsightsSpecification:
ContributorInsightsSpecification
DeletionProtectionEnabled: Boolean
GlobalSecondaryIndexes:
- GlobalSecondaryIndex
ImportSourceSpecification:
ImportSourceSpecification
KeySchema:
- KeySchema
KinesisStreamSpecification:
KinesisStreamSpecification
LocalSecondaryIndexes:
- LocalSecondaryIndex
OnDemandThroughput:
OnDemandThroughput
PointInTimeRecoverySpecification:
PointInTimeRecoverySpecification
ProvisionedThroughput:
ProvisionedThroughput
ResourcePolicy:
ResourcePolicy
SSESpecification:
SSESpecification
StreamSpecification:
StreamSpecification
TableClass: String
TableName: String
Tags:
- Tag
TimeToLiveSpecification:
TimeToLiveSpecification
WarmThroughput:
WarmThroughput
プロパティ
AttributeDefinitions
-
テーブルとインデックスのキースキーマを記述する属性のリスト。
このプロパティは、DynamoDB テーブルを作成するために必要です。
更新に伴う要件: 一時的な中断。既存の AttributeDefinition を編集する場合の置換。
必須: 条件に応じて異なります
タイプ: AttributeDefinition の配列
アップデートに関する要件: 中断はありません
BillingMode
-
読み取りと書き込みのスループットに対する課金方法と容量の管理方法を指定します。
有効な値を次に示します。
-
PAY_PER_REQUEST
- ほとんどの DynamoDB ワークロードPAY_PER_REQUEST
では、 を使用することをお勧めします。PAY_PER_REQUEST
は請求モードをオンデマンドキャパシティモードに設定します。 -
PROVISIONED
- キャパシティ要件を確実に予測できる、予測可能な増加を伴う安定したワークロードPROVISIONED
には、 を使用することをお勧めします。PROVISIONED
は請求モードをプロビジョンドキャパシティモードに設定します。
指定されなかった場合、デフォルト値は
PROVISIONED
です。必須: いいえ
型: 文字列
許可される値:
PROVISIONED | PAY_PER_REQUEST
アップデートに関する要件: 中断はありません
-
ContributorInsightsSpecification
-
指定したテーブルについて CloudWatch Contributor Insights を有効または無効にするために使用される設定。
必須: いいえ
Type: ContributorInsightsSpecification
アップデートに関する要件: 中断はありません
DeletionProtectionEnabled
-
テーブルが削除から保護されているかどうかを決定します。有効にすると、ユーザーまたはプロセスがテーブルを削除することはできません。この設定はデフォルトで無効になっています。 詳細については、「Amazon DynamoDBDeveloper DynamoDB デベロッパーガイド」の「削除保護の使用」を参照してください。
必須: いいえ
型: ブール
アップデートに関する要件: 中断はありません
GlobalSecondaryIndexes
-
テーブルに作成するグローバルセカンダリインデックス。最大で 20 個のグローバルセカンダリインデックスを作成できます。
重要
新しいグローバルセカンダリインデックスを含めるようにテーブルを更新すると、 はインデックスの作成 AWS CloudFormation を開始し、スタックの更新に進みます。 は、テーブルのサイズによってはバックフィルフェーズに時間がかかる場合があるため、インデックスの作成が完了するまで待機 AWS CloudFormation しません。インデックスのステータスが
ACTIVE
になるまで、インデックスを使用したり、テーブルを更新したりすることはできません。DynamoDBDescribeTable コマンドを使用してステータスを追跡できます。更新中にインデックスを追加または削除する場合、他のリソースは更新しないことをお勧めします。新しいインデックスの追加中にスタックが更新に失敗してロールバックされた場合、インデックスを手動で削除する必要があります。
アップデートはサポートされていません。以下の例外があります。
-
グローバルセカンダリインデックスの Contributor Insights の指定またはプロビジョニングされたスループット値を更新した場合、中断せずにテーブルを更新できます。
-
グローバルセカンダリインデックスは、中断せずに削除または追加できます。同じ更新での両方の操作を行うと (インデックスの論理 ID を変更するなど)、更新は失敗します。
必須: いいえ
タイプ: GlobalSecondaryIndex の配列
アップデートに関する要件: 中断はありません
-
ImportSourceSpecification
-
S3 バケットソースから「」テーブルにインポートされるデータのプロパティを指定します。
重要
ImportSourceSpecification
プロパティを指定し、、TableClass
プロパティStreamSpecification
、DeletionProtectionEnabled
プロパティ、またはWarmThroughput
プロパティも指定する場合、スタックを作成/更新する IAM エンティティには アクセスUpdateTable
許可が必要です。必須: いいえ
タイプ: ImportSourceSpecification
更新に伴う要件: 置換
KeySchema
-
テーブルのプライマリキーを構成する属性を指定します。
KeySchema
プロパティの属性は、AttributeDefinitions
プロパティにも定義する必要があります。必須: はい
更新に伴う要件: 一時的な中断
KinesisStreamSpecification
-
指定されたテーブルの Kinesis Data Streams 構成。
必須: いいえ
Type: KinesisStreamSpecification
アップデートに関する要件: 中断はありません
LocalSecondaryIndexes
-
テーブルに作成するローカルセカンダリインデックス。最大で 5 個のローカルセカンダリインデックスを作成できます。各インデックスの範囲は、特定のハッシュキー値に限定されます。各ハッシュキーのサイズは最大 10 GB です。
必須: いいえ
タイプ: LocalSecondaryIndex の配列
アップデートに関する要件: 中断はありません
OnDemandThroughput
-
指定されたオンデマンドテーブルの読み取りおよび書き込みユニットの最大数を設定します。このプロパティを使用する場合は、
MaxReadRequestUnits
、MaxWriteRequestUnits
、またはその両方を指定する必要があります。必須: いいえ
タイプ: OnDemandThroughput
アップデートに関する要件: 中断はありません
PointInTimeRecoverySpecification
-
ポイントインタイムリカバリを有効にするための設定。
必須: いいえ
タイプ: PointInTimeRecoverySpecification
アップデートに関する要件: 中断はありません
ProvisionedThroughput
-
指定したテーブルのスループット。
ReadCapacityUnits
とWriteCapacityUnits
の値で構成されます。プロビジョニングされたスループット構造のコンテンツについての詳細については、「Amazon DynamoDB テーブル ProvisionedThroughput」を参照してください。BillingMode
をPROVISIONED
として設定した場合は、このプロパティを指定する必要があります。BillingMode
をPAY_PER_REQUEST
として設定した場合は、このプロパティを指定できません。必須: 条件に応じて異なります
アップデートに関する要件: 中断はありません
ResourcePolicy
-
指定されたテーブルに追加するアクセス許可を含むリソースベースのポリシードキュメント。 CloudFormation テンプレートでは、ポリシーを JSON または YAML 形式で指定できます。 は YAML を JSON CloudFormation に変換してから に送信するためです DynamoDB。リソースベースのポリシーの詳細については、「 でのリソースベースのポリシー DynamoDBの使用」および「リソースベースのポリシーの例」を参照してください。
テーブルの作成時にリソースベースのポリシーをアタッチすると、ポリシーの作成に強力な整合性が保たれます。リソースベースのポリシーをアタッチする際に留意すべき考慮事項については、「リソースベースのポリシーに関する考慮事項」を参照してください。
必須: いいえ
タイプ: ResourcePolicy
アップデートに関する要件: 中断はありません
SSESpecification
-
サーバー側の暗号化を有効にする設定を指定します。
必須: いいえ
更新に伴う要件: 一時的な中断
StreamSpecification
-
テーブルに保存された項目の変更をキャプチャする DynamoDB テーブルストリームの設定。
必須: いいえ
Type: StreamSpecification
アップデートに関する要件: 中断はありません
TableClass
-
新しいテーブルのテーブルクラス。有効な値は、
STANDARD
およびSTANDARD_INFREQUENT_ACCESS
です。必須: いいえ
型: 文字列
許可される値:
STANDARD | STANDARD_INFREQUENT_ACCESS
アップデートに関する要件: 中断はありません
TableName
-
テーブルの名前。名前を指定しない場合、 は一意の物理 ID AWS CloudFormation を生成し、その ID をテーブル名として使用します。詳細については、「Name タイプ」を参照してください。
重要
名前を指定すると、このリソースの置換が必要な更新はできません。中断が不要であるか、一定の中断が必要な更新であれば、行うことができます。リソースを置き換える必要がある場合は、新しい名前を指定します。
必須: いいえ
タイプ: 文字列
最小:
1
最大:
1024
更新に伴う要件: 置換
-
このリソースに適用されるキーと値のペアの配列。
詳細については、「タグ」を参照してください。
必須: いいえ
タイプ: Tag の配列
アップデートに関する要件: 中断はありません
TimeToLiveSpecification
-
テーブルの有効期限 (TTL) 設定を指定します。
注記
DynamoDB の制限の詳細については、Amazon DynamoDB 開発者ガイドの「Amazon DynamoDB の制限」を参照してください。
必須: いいえ
Type: TimeToLiveSpecification
アップデートに関する要件: 中断はありません
WarmThroughput
-
テーブルを作成するためのウォームスループット (1 秒あたりの読み込み単位と 1 秒あたりの書き込み単位) を表します。
必須: いいえ
タイプ: WarmThroughput
更新に伴う要件: 中断なし
戻り値
参照番号
このリソースの論理 ID を組み込みの Ref
関数に渡すと、Ref
はリソース名を返します。例:
{ "Ref": "myDynamoDBTable" }
論理 ID myDynamoDBTable
を持つリソースに対し、Ref
は DynamoDB テーブル名を返します。
Ref
関数の使用方法の詳細については、「Ref
」を参照してください。
Fn::GetAtt
Fn::GetAtt
組み込み関数は、このタイプの指定された属性の値を返します。利用可能な属性とサンプル戻り値は以下のとおりです。
Fn::GetAtt
組み込み関数の使用方法の詳細については、「Fn::GetAtt
」を参照してください。
Arn
-
DynamoDB テーブルの Amazon リソースネーム (ARN) (
arn:aws:dynamodb:us-east-2:123456789012:table/myDynamoDBTable
など)。 StreamArn
-
arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000
などの DynamoDB ストリームの ARN。注記
この属性を使用するには、
StreamSpecification
プロパティを指定する必要があります。
例
ローカルおよびグローバルのセカンダリインデックスを持つ DynamoDB テーブル
次のサンプルは、Album
、Artist
、Sales
、および 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"} } }], "Tags": [ { "Key": "foo",
"Value": "bar" } ] } }
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" Tags: - Key: foo Value: bar
Application Auto Scaling を持つ DynamoDB テーブル
この例では、AWS::DynamoDB::Table
リソースの Application Auto Scaling をセットアップします。このテンプレートでは、テーブル向けに TargetTrackingScaling
スループットをスケールアップする WriteCapacityUnits
スケーリングポリシーを定義します。
JSON
{
"Resources": {
"DDBTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"AttributeDefinitions": [
{
"AttributeName": "ArtistId",
"AttributeType": "S"
},
{
"AttributeName": "Concert",
"AttributeType": "S"
},
{
"AttributeName": "TicketSales",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "ArtistId",
"KeyType": "HASH"
},
{
"AttributeName": "Concert",
"KeyType": "RANGE"
}
],
"GlobalSecondaryIndexes": [
{
"IndexName": "GSI",
"KeySchema": [
{
"AttributeName": "TicketSales",
"KeyType": "HASH"
}
],
"Projection": {
"ProjectionType": "KEYS_ONLY"
},
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
}
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
}
}
},
"WriteCapacityScalableTarget": {
"Type": "AWS::ApplicationAutoScaling::ScalableTarget",
"Properties": {
"MaxCapacity": 15,
"MinCapacity": 5,
"ResourceId": { "Fn::Join": [
"/",
[
"table",
{ "Ref": "DDBTable" }
]
] },
"RoleARN": {
"Fn::GetAtt": ["ScalingRole", "Arn"]
},
"ScalableDimension": "dynamodb:table:WriteCapacityUnits",
"ServiceNamespace": "dynamodb"
}
},
"ScalingRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"application-autoscaling.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "root",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:UpdateTable",
"cloudwatch:PutMetricAlarm",
"cloudwatch:DescribeAlarms",
"cloudwatch:GetMetricStatistics",
"cloudwatch:SetAlarmState",
"cloudwatch:DeleteAlarms"
],
"Resource": "*"
}
]
}
}
]
}
},
"WriteScalingPolicy": {
"Type": "AWS::ApplicationAutoScaling::ScalingPolicy",
"Properties": {
"PolicyName": "WriteAutoScalingPolicy",
"PolicyType": "TargetTrackingScaling",
"ScalingTargetId": {
"Ref": "WriteCapacityScalableTarget"
},
"TargetTrackingScalingPolicyConfiguration": {
"TargetValue": 50.0,
"ScaleInCooldown": 60,
"ScaleOutCooldown": 60,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "DynamoDBWriteCapacityUtilization"
}
}
}
}
}
}
YAML
Resources:
DDBTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
-
AttributeName: "ArtistId"
AttributeType: "S"
-
AttributeName: "Concert"
AttributeType: "S"
-
AttributeName: "TicketSales"
AttributeType: "S"
KeySchema:
-
AttributeName: "ArtistId"
KeyType: "HASH"
-
AttributeName: "Concert"
KeyType: "RANGE"
GlobalSecondaryIndexes:
-
IndexName: "GSI"
KeySchema:
-
AttributeName: "TicketSales"
KeyType: "HASH"
Projection:
ProjectionType: "KEYS_ONLY"
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
WriteCapacityScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 15
MinCapacity: 5
ResourceId: !Join
- /
- - table
- !Ref DDBTable
RoleARN: !GetAtt ScalingRole.Arn
ScalableDimension: dynamodb:table:WriteCapacityUnits
ServiceNamespace: dynamodb
ScalingRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Principal:
Service:
- application-autoscaling.amazonaws.com
Action:
- "sts:AssumeRole"
Path: "/"
Policies:
-
PolicyName: "root"
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action:
- "dynamodb:DescribeTable"
- "dynamodb:UpdateTable"
- "cloudwatch:PutMetricAlarm"
- "cloudwatch:DescribeAlarms"
- "cloudwatch:GetMetricStatistics"
- "cloudwatch:SetAlarmState"
- "cloudwatch:DeleteAlarms"
Resource: "*"
WriteScalingPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: WriteAutoScalingPolicy
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref WriteCapacityScalableTarget
TargetTrackingScalingPolicyConfiguration:
TargetValue: 50.0
ScaleInCooldown: 60
ScaleOutCooldown: 60
PredefinedMetricSpecification:
PredefinedMetricType: DynamoDBWriteCapacityUtilization