AWS::DynamoDB::Table - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWS::DynamoDB::Table

Die AWS::DynamoDB::Table-Ressource erstellt eine DynamoDB-Tabelle. Weitere Informationen finden Sie CreateTablein der Amazon DynamoDB DynamoDB-API-Referenz.

Sie sollten bei der Arbeit mit DynamoDB-Tabellen die folgenden Verhaltensweisen beachten:

  • AWS CloudFormation erstellt DynamoDB-Tabellen in der Regel parallel. Wenn Ihre Vorlage jedoch mehrere DynamoDB-Tabellen mit Indizes enthält, müssen Sie Abhängigkeiten deklarieren, sodass die Tabellen sequenziell erstellt werden. Amazon DynamoDB begrenzt die Anzahl der Tabellen mit sekundären Indizes, die sich im Status der Erstellung befinden. Wenn Sie gleichzeitig mehrere Tabellen mit Indizes erstellen, gibt DynamoDB einen Fehler zurück und der Stack-Vorgang schlägt fehl. Ein Beispiel finden Sie unter DynamoDB-Tabelle mit einem DependsOn Attribut.

Wichtig

Wir empfehlen Ihnen, das neueste Schema, das hier dokumentiert ist, für Ihre AWS CloudFormation Vorlagen zu verwenden. Dieses Schema unterstützt die Bereitstellung aller unten aufgeführten Tabelleneinstellungen. Wenn Sie dieses Schema in Ihren AWS CloudFormation Vorlagen verwenden, stellen Sie bitte sicher, dass Ihre Identity and Access Management (IAM) -Richtlinien mit den entsprechenden Berechtigungen aktualisiert werden, um die Autorisierung dieser Einstellungsänderungen zu ermöglichen.

Syntax

Verwenden Sie die folgende Syntax, um diese Entität in Ihrer AWS CloudFormation Vorlage zu deklarieren:

Eigenschaften

AttributeDefinitions

Eine Liste von Attributen, die das Schlüsselschema für die Tabelle und die Indizes beschreiben.

Diese Eigenschaft ist erforderlich, um eine DynamoDB-Tabelle zu erstellen.

Aktualisierung erfordert: Einige Unterbrechungen. Ersatz, wenn Sie ein vorhandenes bearbeiten AttributeDefinition.

Required: Conditional

Typ: Array von AttributeDefinition

Aktualisierung erfordert: Keine Unterbrechung

BillingMode

Geben Sie an, wie Ihnen der Lese- und Schreibdurchsatz in Rechnung gestellt wird und wie Sie die Kapazität verwalten.

Gültige Werte sind:

  • PROVISIONED – Wir empfehlen die Verwendung von PROVISIONED für vorhersehbare Workloads. PROVISIONED setzt den Fakturierungsmodus auf den Modus bereitgestellter Kapazität.

  • PAY_PER_REQUEST – Wir empfehlen die Verwendung von PAY_PER_REQUEST für unvorhersehbare Workloads. PAY_PER_REQUEST setzt den Fakturierungsmodus auf den On-Demand-Modus.

Wenn nichts angegeben ist, ist der Standardwert PROVISIONED.

Required: No

Typ: Zeichenfolge

Allowed values: PROVISIONED | PAY_PER_REQUEST

Aktualisierung erfordert: Keine Unterbrechung

ContributorInsightsSpecification

Die Einstellungen, die verwendet werden, um CloudWatch Contributor Insights für die angegebene Tabelle zu aktivieren oder zu deaktivieren.

Required: No

Typ: Spezifikation ContributorInsights

Aktualisierung erfordert: Keine Unterbrechung

DeletionProtectionEnabled

Ermittelt, ob eine Tabelle vor dem Löschen geschützt ist. Wenn diese Option aktiviert ist, kann die Tabelle von keinem Benutzer oder Prozess gelöscht werden. Diese Einstellung ist standardmäßig deaktiviert. Weitere Informationen finden Sie unter Verwenden des Löschschutzes im Amazon DynamoDB Developer Guide.

Required: No

Typ: Boolesch

Aktualisierung erfordert: Keine Unterbrechung

GlobalSecondaryIndexes

Globale sekundäre Indizes, die in der Tabelle erstellt werden müssen. Sie können bis zu 20 globale sekundäre Indizen erstellen.

Wichtig

Wenn Sie eine Tabelle aktualisieren, sodass sie einen neuen globalen sekundären Index enthält, AWS CloudFormation initiiert die Indexerstellung und fährt dann mit der Stack-Aktualisierung fort. AWS CloudFormation wartet nicht, bis der Index vollständig erstellt ist, da die Backfilling-Phase je nach Größe der Tabelle sehr lange dauern kann. Sie können den Index erst verwenden bzw. die Tabelle erst aktualisieren, wenn der Status des Index ACTIVE lautet. Sie können seinen Status mithilfe des DynamoDB-Befehls DescribeTableverfolgen.

Wenn Sie einen Index während einer Aktualisierung hinzufügen oder löschen, empfehlen wir, keine anderen Ressourcen zu aktualisieren. Wenn Ihr Stack nicht aktualisiert werden kann und zurückgesetzt wird, während ein neuer Index hinzugefügt wird, müssen Sie den Index manuell löschen.

Aktualisierungen werden nicht unterstützt. Nachfolgend sind Ausnahmen aufgeführt:

  • Wenn Sie entweder die Contributor-Insights-Spezifikation oder die bereitgestellten Durchsatzwerte globaler sekundärer Indizes aktualisieren, können Sie die Tabelle ohne Unterbrechung aktualisieren.

  • Sie können einen globalen sekundären Index ohne Unterbrechung löschen oder hinzufügen. Wenn Sie beides in der gleichen Aktualisierung tun (z. B. durch Ändern der logischen ID des Index), schlägt die Aktualisierung fehl.

Required: No

Typ: Index-Array GlobalSecondary

Aktualisierung erfordert: Keine Unterbrechung

ImportSourceSpecification

Gibt die Eigenschaften der Daten an, die aus der S3-Bucket-Quelle in die Tabelle importiert werden.

Wichtig

Wenn Sie die ImportSourceSpecification Eigenschaft angeben und gleichzeitig entweder die Eigenschaft oder die TableClass Eigenschaft angebenStreamSpecification, muss die IAM-Entität, die den DeletionProtectionEnabled Stack erstellen/aktualisiert, über die entsprechende Berechtigung verfügen. UpdateTable

Required: No

Typ: Spezifikation ImportSource

Aktualisierung erfordert: Austausch

KeySchema

Gibt die Attribute an, die den Primärschlüssel für die Tabelle darstellen. Die Attribute in der KeySchema-Eigenschaft müssen auch in der AttributeDefinitions-Eigenschaft definiert werden.

Erforderlich: Ja

Typ: Reihe von KeySchema

Aktualisierung erfordert: Keine Unterbrechung

KinesisStreamSpecification

Die Kinesis-Data-Streams-Konfiguration für die angegebene Tabelle.

Required: No

Typ: KinesisStreamSpezifikation

Aktualisierung erfordert: Keine Unterbrechung

LocalSecondaryIndexes

Lokale sekundäre Indizes, die in der Tabelle erstellt werden müssen. Sie können bis zu 5 lokale sekundäre Indizes erstellen. Jeder Index ist auf einen bestimmten Hash-Schlüsselwert beschränkt. Die Größe der einzelnen Hash-Schlüssel kann bis zu 10 GB betragen.

Required: No

Typ: LocalSecondaryIndex-Array

Aktualisierung erfordert: Keine Unterbrechung

OnDemandThroughput

Legt die maximale Anzahl von Lese- und Schreibeinheiten für die angegebene On-Demand-Tabelle fest. Wenn Sie diese Eigenschaft verwenden, müssen Sie MaxReadRequestUnitsMaxWriteRequestUnits, oder beide angeben.

Required: No

Typ: OnDemandDurchsatz

Aktualisierung erfordert: Keine Unterbrechung

PointInTimeRecoverySpecification

Die Einstellungen, die zum Aktivieren der zeitpunktbezogenen Wiederherstellung verwendet werden.

Required: No

Typ: PointInTimeRecoverySpezifikation

Aktualisierung erfordert: Keine Unterbrechung

ProvisionedThroughput

Durchsatz für die angegebene Tabelle, bestehend aus Werten für ReadCapacityUnits und WriteCapacityUnits. Weitere Informationen zum Inhalt einer bereitgestellten Durchsatzstruktur finden Sie in der Amazon DynamoDB-Tabelle. ProvisionedThroughput

Wenn Sie BillingMode als PROVISIONED festlegen, müssen Sie diese Eigenschaft angeben. Wenn Sie BillingMode als PAY_PER_REQUEST festlegen, können Sie diese Eigenschaft nicht angeben.

Required: Conditional

Typ: ProvisionedThroughput

Aktualisierung erfordert: Keine Unterbrechung

ResourcePolicy

Ein ressourcenbasiertes Richtliniendokument, das Berechtigungen zum Hinzufügen zur angegebenen Tabelle enthält. In einer CloudFormation Vorlage können Sie die Richtlinie im JSON- oder YAML-Format angeben, da YAML in JSON CloudFormation konvertiert wird, bevor sie an gesendet wird. DynamoDBWeitere Informationen zu ressourcenbasierten Richtlinien finden Sie unter Verwenden von ressourcenbasierten Richtlinien für und Beispiele für ressourcenbasierte Richtlinien. DynamoDB

Wenn Sie beim Erstellen einer Tabelle eine ressourcenbasierte Richtlinie anhängen, ist die Richtlinienerstellung sehr konsistent. Informationen zu den Überlegungen, die Sie beim Anhängen einer ressourcenbasierten Richtlinie berücksichtigen sollten, finden Sie unter Überlegungen zu ressourcenbasierten Richtlinien.

Required: No

Typ: ResourcePolicy

Aktualisierung erfordert: Keine Unterbrechung

SSESpecification

Gibt die Einstellungen zum Aktivieren der serverseitigen Verschlüsselung an.

Required: No

Type: SSESpecification

Aktualisierung erfordert: Einige Unterbrechungen

StreamSpecification

Die Einstellungen für den DynamoDB-Tabellen-Stream, der Änderungen an Elementen erfasst, die in der Tabelle gespeichert sind.

Required: No

Typ: StreamSpecification

Aktualisierung erfordert: Keine Unterbrechung

TableClass

Die Tabellenklasse der neuen Tabelle. Gültige Werte sind STANDARD und STANDARD_INFREQUENT_ACCESS.

Required: No

Typ: Zeichenfolge

Allowed values: STANDARD | STANDARD_INFREQUENT_ACCESS

Aktualisierung erfordert: Keine Unterbrechung

TableName

Ein Name für die Tabelle. Wenn Sie keinen Namen angeben, AWS CloudFormation generiert es eine eindeutige physische ID und verwendet diese ID für den Tabellennamen. Weitere Informationen finden Sie unter Name Type.

Wichtig

Wenn Sie einen Namen angeben, können Sie keine Aktualisierungen durchführen, die einen Austausch dieser Ressource erforderlich machen. Sie können Aktualisierungen durchführen, die keine oder einige Unterbrechungen erforderlich machen. Wenn Sie die Ressource austauschen müssen, geben Sie einen neuen Namen an.

Required: No

Typ: Zeichenfolge

Minimum: 1

Maximum: 1024

Aktualisierung erfordert: Austausch

Tags

Ein Array von Schlüssel-Wert-Paaren für diese Ressource.

Weitere Informationen finden Sie unter Tag.

Required: No

Typ: Tag-Array

Aktualisierung erfordert: Keine Unterbrechung

TimeToLiveSpecification

Gibt die TTL-Einstellungen (Time to Live) für die Tabelle an.

Anmerkung

Detaillierte Informationen zu den Limits in DynamoDB finden Sie unter Limits in Amazon DynamoDB im "Amazon DynamoDB Entwicklerhandbuch".

Required: No

Typ: TimeToLiveSpecification

Aktualisierung erfordert: Keine Unterbrechung

Rückgabewerte

Punkt

Wenn Sie die logische ID dieser Ressource an die intrinsische Ref-Funktion übergeben, gibt Ref den Ressourcennamen zurück. Beispiel:

{ "Ref": "myDynamoDBTable" }

Für die Ressource mit der logischen ID myDynamoDBTable gibt Ref den DynamoDB-Tabellennamen zurück.

Weitere Informationen zur Verwendung der Ref-Funktion finden Sie unter Ref.

Lüfter:: GetAtt

Die intrinsische Fn::GetAtt-Funktion gibt einen Wert für ein angegebenes Attribut dieses Typs zurück. Im Folgenden sehen Sie die verfügbaren Attribute und Beispielrückgabewerte.

Weitere Informationen zur Verwendung der intrinsischen Fn::GetAtt-Funktion finden Sie unter Fn::GetAtt.

Arn

Der Amazon-Ressourcenname (ARN) der DynamoDB-Tabelle, z. B. arn:aws:dynamodb:us-east-2:123456789012:table/myDynamoDBTable.

StreamArn

Der ARN des DynamoDB-Streams, z. B. arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000.

Anmerkung

Sie müssen die StreamSpecification-Eigenschaft angeben, um dieses Attribut zu verwenden.

Beispiele

DynamoDB-Tabelle mit lokalen und sekundären Indizes

Im folgenden Beispiel wird eine DynamoDB-Tabelle mit Album, Artist, Sales, NumberOfSongs als Attribute erstellt. Der Primärschlüssel enthält das Album-Attribut als Hash-Schlüssel und das Artist -Attribut als den Bereichsschlüssel. Die Tabelle umfasst außerdem zwei globale Indizes und einen sekundären Index. Zum Abfragen der Anzahl der Verkäufe für einen bestimmten Künstler verwendet der globale sekundäre Index das Sales-Attribut als Hash-Schlüssel und das Artist-Attribut als Bereichsschlüssel.

Zum Abfragen der Verkäufe basierend auf der Anzahl der Titel verwendet der globale sekundäre Index das NumberOfSongs-Attribut als Hash-Schlüssel und das Sales-Attribut als Bereichsschlüssel.

Zum Abfragen der Verkäufe eines Albums verwendet der lokale sekundäre Index denselben Hash-Schlüssel wie die Tabelle, aber das Sales-Attribut als Bereichsschlüssel.

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"

DynamoDB-Tabelle mit einem Attribut DependsOn

Wenn Sie mehrere DynamoDB-Tabellen mit Indizes in einer einzigen Vorlage einschließen, müssen Sie Abhängigkeiten einschließen, damit die Tabellen sequenziell erstellt werden. DynamoDB begrenzt die Anzahl der Tabellen mit sekundären Indizes, die sich im Erstellungsstatus befinden. Wenn Sie gleichzeitig mehrere Tabellen mit Indizes erstellen, gibt DynamoDB einen Fehler zurück und der Stack-Vorgang schlägt fehl.

Im folgenden Beispiel wird davon ausgegangen, dass die myFirstDDBTable-Tabelle in derselben Vorlage wie die mySecondDDBTable-Tabelle deklariert ist, und dass beide Tabellen einen sekundären Index enthalten. Die mySecondDDBTable Tabelle enthält eine Abhängigkeit von der myFirstDDBTable Tabelle, sodass die Tabellen einzeln AWS CloudFormation erstellt werden.

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

DynamoDB Table mit Application Auto Scaling

In diesem Beispiel wird Application Auto Scaling für eine AWS::DynamoDB::Table-Ressource eingerichtet. Die Vorlage definiert eine TargetTrackingScaling-Skalierungsrichtline, die den WriteCapacityUnits-Durchsatz für die Tabelle skaliert.

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