Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
AWS::DynamoDB::Table
La risorsa AWS::DynamoDB::Table
crea una tabella DynamoDB. Per ulteriori informazioni, consulta CreateTableAmazon DynamoDB Reference API.
Quando si lavora con le tabelle DynamoDB, è necessario essere a conoscenza dei seguenti comportamenti:
-
AWS CloudFormation in genere crea tabelle DynamoDB in parallelo. Tuttavia, se il modello include più tabelle DynamoDB con indici, è necessario dichiarare le dipendenze, in modo che le tabelle vengano create in sequenza. Amazon DynamoDB limita il numero di tabelle con indici secondari che si trovano nello stato di creazione. Se si creano simultaneamente più tabelle con indici, Amazon DynamoDB restituisce un errore e l'operazione di stack non riesce. Per un esempio, vedi Tabella DynamoDB con un attributo. DependsOn
Importante
La nostra guida consiste nell'utilizzare lo schema più recente documentato per i tuoi modelli. AWS CloudFormation Questo schema supporta il provisioning di tutte le impostazioni della tabella riportate di seguito. Quando utilizzi questo schema nei tuoi AWS CloudFormation modelli, assicurati che le policy di Identity and Access Management (IAM) siano aggiornate con le autorizzazioni appropriate per consentire l'autorizzazione di queste modifiche alle impostazioni.
Sintassi
Per dichiarare questa entità nel AWS CloudFormation modello, utilizzate la seguente sintassi:
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
Proprietà
AttributeDefinitions
-
Un elenco di attributi che descrivono lo schema chiave per la tabella e gli indici.
Questa proprietà è obbligatoria per creare una tabella DynamoDB.
Aggiornamento richiesto: alcune interruzioni Sostituzione se ne modifichi una esistente. AttributeDefinition
Required: Conditional
Tipo: Array di AttributeDefinition
Aggiornamento richiesto: nessuna interruzione
BillingMode
-
Specificare la modalità di addebito per il throughput di lettura e scrittura e quella di gestione della capacità.
I valori validi includono:
-
PROVISIONED
- È consigliabile utilizzarePROVISIONED
per carichi di lavoro prevedibili.PROVISIONED
imposta la modalità di fatturazione su Modalità assegnata. -
PAY_PER_REQUEST
- È consigliabile utilizzarePAY_PER_REQUEST
per carichi di lavoro imprevedibili.PAY_PER_REQUEST
imposta la modalità di fatturazione su Modalità on demand.
Se non si specifica un valore predefinito, viene utilizzato
PROVISIONED
.Required: No
Tipo: Stringa
Allowed values:
PROVISIONED | PAY_PER_REQUEST
Aggiornamento richiesto: nessuna interruzione
-
ContributorInsightsSpecification
-
Le impostazioni utilizzate per abilitare o disabilitare CloudWatch Contributor Insights per la tabella specificata.
Required: No
Tipo: ContributorInsightsSpecification
Aggiornamento richiesto: nessuna interruzione
DeletionProtectionEnabled
-
Determina se una tabella è protetta dall'eliminazione. Se abilitata, la tabella non può essere eliminata da alcun utente o processo. Questa impostazione è disabilitata per impostazione predefinita. Per ulteriori informazioni, consulta Usare la protezione da eliminazione nella Amazon D ynamoDBDeveloper Guide.
Required: No
Tipo: Booleano
Aggiornamento richiesto: nessuna interruzione
GlobalSecondaryIndexes
-
Indici secondari globali da creare nella tabella. È possibile creare fino a 20 indici secondari globali.
Importante
Se aggiorni una tabella per includere un nuovo indice secondario globale, AWS CloudFormation avvia la creazione dell'indice e quindi procede con l'aggiornamento dello stack. AWS CloudFormation non attende il completamento della creazione dell'indice perché la fase di riempimento può richiedere molto tempo, a seconda delle dimensioni della tabella. Non è possibile utilizzare l'indice o aggiornare la tabella fino a quando lo stato dell'indice è
ACTIVE
. È possibile monitorarne lo stato utilizzando il comando DescribeTableDynamoDB.Se si aggiunge o si elimina un indice durante un aggiornamento, è consigliabile non aggiornare altre risorse. Se non si riesce ad aggiornare lo stack e ne viene eseguito il rollback durante l'aggiunta di un nuovo indice, è necessario eliminare manualmente l'indice.
Gli aggiornamenti non sono supportati. Di seguito sono elencate le eccezioni:
-
Se si aggiornano le specifiche di Contributor Insights o i valori di velocità di trasmissione effettiva sottoposti a provisioning degli indici secondari globali, è possibile aggiornare la tabella senza interruzioni.
-
È possibile eliminare o aggiungere un indice secondario globale senza interruzioni. Se si eseguono entrambe le operazioni nello stesso aggiornamento (ad esempio modificando l'ID logico dell'indice), l'aggiornamento non riesce.
Required: No
Tipo: Array di GlobalSecondaryIndex
Aggiornamento richiesto: nessuna interruzione
-
ImportSourceSpecification
-
Specifica le proprietà dei dati importati dalla sorgente del bucket S3 nella tabella».
Importante
Se si specifica la
ImportSourceSpecification
proprietà e si specifica anche la, la proprietàStreamSpecification
, laTableClass
proprietà o la proprietà, loDeletionProtectionEnabled
stack di creazione/aggiornamento dell'IAMentità deve disporre dell'autorizzazione.WarmThroughput
UpdateTable
Required: No
Tipo: ImportSourceSpecification
Aggiornamento richiesto: sostituzione
KeySchema
-
Specifica gli attributi che costituiscono la chiave primaria per la tabella. È necessario definire anche gli attributi della proprietà
KeySchema
nella proprietàAttributeDefinitions
.Campo obbligatorio: sì
Aggiornamento richiesto: alcune interruzioni
KinesisStreamSpecification
-
La configurazione di Kinesis Data Streams per la tabella specificata.
Required: No
Tipo: KinesisStreamSpecification
Aggiornamento richiesto: nessuna interruzione
LocalSecondaryIndexes
-
Indici secondari logici da creare nella tabella. È possibile creare fino a 5 indici secondari locali. L'ambito di ogni indice viene definito da un determinato valore di chiave hash. La dimensione di ciascuna chiave hash può essere fino a 10 gigabyte.
Required: No
Tipo: Matrice di LocalSecondaryIndex
Aggiornamento richiesto: nessuna interruzione
OnDemandThroughput
-
Imposta il numero massimo di unità di lettura e scrittura per la tabella su richiesta specificata. Se si utilizza questa proprietà, è necessario specificare
MaxReadRequestUnits
MaxWriteRequestUnits
, o entrambe le cose.Required: No
Tipo: OnDemandThroughput
Aggiornamento richiesto: nessuna interruzione
PointInTimeRecoverySpecification
-
Le impostazioni utilizzate per consentire il ripristino point-in-time.
Required: No
Tipo: PointInTimeRecoverySpecification
Aggiornamento richiesto: nessuna interruzione
ProvisionedThroughput
-
Throughput per la tabella specificata, costituito dai valori per
ReadCapacityUnits
eWriteCapacityUnits
. Per ulteriori informazioni sui contenuti di una struttura di throughput predisposta, consulta Amazon DynamoDB Table. ProvisionedThroughputSe abiliti
BillingMode
comePROVISIONED
, devi specificare questa proprietà. Se abilitiBillingMode
comePAY_PER_REQUEST
, non puoi specificare questa proprietà.Required: Conditional
Tipo: ProvisionedThroughput
Aggiornamento richiesto: nessuna interruzione
ResourcePolicy
-
Un documento di policy basato sulle risorse che contiene le autorizzazioni da aggiungere alla tabella specificata. In un CloudFormation modello, è possibile fornire la politica in JSON o in YAML formato perché viene CloudFormation convertita in prima di inviarla YAML aJSON. DynamoDBPer ulteriori informazioni sulle politiche basate sulle risorse, vedere Utilizzo delle politiche basate sulle risorse per ed Esempi di politiche basate sulle risorse. DynamoDB
Quando si allega una politica basata sulle risorse durante la creazione di una tabella, la creazione della politica è fortemente coerente. Per informazioni sulle considerazioni da tenere a mente quando si allega una politica basata sulle risorse, consulta Considerazioni sulle politiche basate sulle risorse.
Required: No
Tipo: ResourcePolicy
Aggiornamento richiesto: nessuna interruzione
SSESpecification
-
Specifica le impostazioni per abilitare la crittografia lato server.
Required: No
Tipo: SSESpecification
Aggiornamento richiesto: alcune interruzioni
StreamSpecification
-
Le impostazioni per il flusso di tabelle DynamoDB che acquisisce le modifiche agli elementi memorizzati nella tabella.
Required: No
Tipo: StreamSpecification
Aggiornamento richiesto: nessuna interruzione
TableClass
-
La classe della nuova tabella. I valori validi sono
STANDARD
eSTANDARD_INFREQUENT_ACCESS
.Required: No
Tipo: Stringa
Allowed values:
STANDARD | STANDARD_INFREQUENT_ACCESS
Aggiornamento richiesto: nessuna interruzione
TableName
-
Un nome per la tabella. Se non specifichi un nome, AWS CloudFormation genera un ID fisico univoco e lo utilizza per il nome della tabella. Per ulteriori informazioni, consulta Tipo di nome.
Importante
Se specifichi un nome, non puoi effettuare aggiornamenti che richiedono la sostituzione di questa risorsa. Puoi effettuare solo quelli che non richiedono interruzioni o che richiedono alcune interruzioni. Se devi sostituire la risorsa, specifica un nuovo nome.
Required: No
Tipo: Stringa
Minimum:
1
Maximum:
1024
Aggiornamento richiesto: sostituzione
-
Un array di coppie chiave-valore da applicare a questa risorsa.
Per ulteriori informazioni, consulta Tag.
Required: No
Tipo: Matrice di tag
Aggiornamento richiesto: nessuna interruzione
TimeToLiveSpecification
-
Specifica le impostazioni Time to Live (TTL) per la tabella.
Nota
Per ulteriori informazioni sui limiti di DynamoDB, consulta l'argomento relativo ai limiti in Amazon DynamoDB nella Guida per gli sviluppatori di Amazon DynamoDB.
Required: No
Tipo: TimeToLiveSpecification
Aggiornamento richiesto: nessuna interruzione
WarmThroughput
-
Rappresenta la velocità effettiva (in unità di lettura al secondo e unità di scrittura al secondo) per la creazione di una tabella.
Required: No
Tipo: WarmThroughput
Aggiornamento richiesto: nessuna interruzione
Valori restituiti
Ref
Quando l'ID logico di questa risorsa viene passato alla funzione intrinseca Ref
, Ref
restituisce il nome della risorsa. Ad esempio:
{ "Ref": "myDynamoDBTable" }
Per la risorsa con ID logico myDynamoDBTable
, Ref
restituisce il nome della tabella DynamoDB.
Per ulteriori informazioni sull'utilizzo della funzione Ref
, consulta Ref
.
Ventilatore: GetAtt
La funzione intrinseca Fn::GetAtt
restituisce un valore per un attributo specificato di questo tipo. Di seguito sono riportati gli attributi disponibili e i valori restituiti di esempio.
Per ulteriori informazioni sull'utilizzo della funzione intrinseca Fn::GetAtt
, consulta Fn::GetAtt
.
Arn
-
L'Amazon Resource Name (ARN) della tabella DynamoDB, ad esempio.
arn:aws:dynamodb:us-east-2:123456789012:table/myDynamoDBTable
StreamArn
-
Il ARN flusso DynamoDB, ad esempio.
arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000
Nota
Per utilizzare questo attributo, è necessario specificare la proprietà
StreamSpecification
.
Esempi
Tabella DynamoDB con indici locale e secondario
Nell'esempio seguente viene creata una tabella DynamoDB con Album
, Artist
, Sales
e NumberOfSongs
come attributi. La chiave primaria include l'attributo Album
come chiave hash e l'attributo Artist
come chiave di intervallo. La tabella include inoltre due indici globali e un indice secondario. Per recuperare il numero di vendite per un determinato artista, l'indice secondario globale utilizza l'attributo Sales
come chiave hash e l'attributo Artist
come chiave di intervallo.
Per eseguire query sulle vendite in base al numero di brani, l'indice secondario globale utilizza l'attributo NumberOfSongs
come chiave hash e l'attributo Sales
come chiave di intervallo.
Per recuperare le vendite di un album, l'indice secondario locale utilizza la stessa chiave hash della tabella ma utilizza l'attributo Sales
come intervallo di chiavi.
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"
Tabella DynamoDB con un attributo DependsOn
Se si includono più tabelle DynamoDB con indici in un unico modello, è necessario includere le dipendenze, in modo che le tabelle vengano create in sequenza. DynamoDB limita il numero di tabelle con indici secondari che si trovano nello stato di creazione. Se si creano simultaneamente più tabelle con indici, Amazon DynamoDB restituisce un errore e l'operazione di stack non riesce.
Nell'esempio seguente si presuppone che la tabella myFirstDDBTable
sia dichiarata nello stesso modello come tabella mySecondDDBTable
e che entrambe le tabelle includano un indice secondario. La tabella mySecondDDBTable
include una dipendenza dalla tabella myFirstDDBTable
in modo che AWS CloudFormation
crei le tabelle una alla volta.
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
Tabella DynamoDB con Application Auto Scaling
In questo esempio Application Auto Scaling viene configurato per una risorsa AWS::DynamoDB::Table
. Il modello definisce una policy di dimensionamento TargetTrackingScaling
che aumenta il throughput WriteCapacityUnits
della tabella.
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