Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
AWS::DynamoDB::Table
La ressource AWS::DynamoDB::Table
crée une table DynamoDB. Pour plus d'informations, consultez le CreateTablemanuel Amazon DynamoDB API Reference.
Si vous utilisez les tables DynamoDB, vous devez connaître les comportements suivants :
-
AWS CloudFormation crée généralement des tables DynamoDB en parallèle. Toutefois, si votre modèle inclut plusieurs tables DynamoDB avec des index, vous devez déclarer leurs dépendances pour qu'elles soient créées de manière séquentielle. Amazon DynamoDB limite le nombre de tables avec des index secondaires qui sont créées en parallèle. Si vous créez plusieurs tables avec des index en même temps, DynamoDB renvoie une erreur et l'opération de la pile échoue. Pour un exemple, voir Table DynamoDB avec attribut. DependsOn
Important
Nous vous conseillons d'utiliser le dernier schéma documenté ici pour vos AWS CloudFormation modèles. Ce schéma prend en charge le provisionnement de tous les paramètres de table ci-dessous. Lorsque vous utilisez ce schéma dans vos AWS CloudFormation modèles, assurez-vous que vos politiques Identity and Access Management (IAM) sont mises à jour avec les autorisations appropriées pour autoriser ces modifications de paramètres.
Syntaxe
Pour déclarer cette entité dans votre AWS CloudFormation modèle, utilisez la syntaxe suivante :
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
} }
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
Propriétés
AttributeDefinitions
-
Liste d'attributs décrivant le schéma clé de la table et des indexes.
Cette propriété est obligatoire pour créer une table DynamoDB.
Requis pour la mise à jour : quelques interruptions. Remplacement si vous modifiez un existant AttributeDefinition.
Obligatoire : Conditionnelle
Type : Tableau de AttributeDefinition
Requis pour la mise à jour : aucune interruption
BillingMode
-
Spécifiez la façon dont le débit de lecture et d'écriture vous est facturé et comment vous gérez la capacité.
Les valeurs valides sont les suivantes :
-
PROVISIONED
- Nous vous recommandons d'utiliserPROVISIONED
pour les charges de travail prévisibles.PROVISIONED
définit le mode de facturation sur le mode alloué. -
PAY_PER_REQUEST
- Nous vous recommandons d'utiliserPAY_PER_REQUEST
pour les charges de travail imprévisibles.PAY_PER_REQUEST
définit le mode de facturation sur le mode à la demande.
Si aucune valeur n'est spécifiée, la valeur par défaut est
PROVISIONED
.Obligatoire : non
Type : chaîne
Valeurs autorisées :
PROVISIONED | PAY_PER_REQUEST
Requis pour la mise à jour : aucune interruption
-
ContributorInsightsSpecification
-
Les paramètres utilisés pour activer ou désactiver CloudWatch Contributor Insights pour le tableau spécifié.
Obligatoire : non
Type : ContributorInsightsSpécification
Requis pour la mise à jour : aucune interruption
DeletionProtectionEnabled
-
Détermine si une table est protégée contre la suppression. Lorsque cette option est activée, la table ne peut être supprimée par aucun utilisateur ou processus. Par défaut, ce paramètre est désactivé. Pour plus d'informations, consultez la section Utilisation de la protection contre les suppressions dans le manuel Amazon DynamoDB Developer Guide.
Obligatoire : non
Type : valeur booléenne
Requis pour la mise à jour : aucune interruption
GlobalSecondaryIndexes
-
Index secondaires globaux à créer dans la table. Vous pouvez créer jusqu'à 20 index secondaires globaux.
Important
Si vous mettez à jour une table pour inclure un nouvel index secondaire global, lancez la AWS CloudFormation création de l'index, puis procédez à la mise à jour de la pile. AWS CloudFormation n'attend pas la fin de la création de l'index car la phase de remblayage peut prendre du temps, selon la taille de la table. Vous ne pouvez pas utiliser l'index ou mettre à jour la table tant que l'état de l'index n'indique pas
ACTIVE
. Vous pouvez suivre son état à l'aide de la commande DescribeTableDynamoDB.Si vous ajoutez ou supprimez un index pendant une mise à jour, nous vous recommandons de ne pas mettre à jour les autres ressources. Si la mise à jour de la pile échoue et si cette dernière est restaurée alors que vous ajoutiez un nouvel index, vous devez supprimer manuellement l'index.
Les mises à jour ne sont pas prises en charge. Les éléments suivants sont des exceptions :
-
Si vous mettez à jour uniquement les valeurs de spécification de Contributor Insights ou de débit alloué des index secondaires globaux, vous pouvez mettre à jour la table sans interruption.
-
Vous pouvez supprimer ou ajouter un index secondaire global sans interruption. Si vous faites les deux lors de la même mise à jour (par exemple, en changeant l'ID logique de l'index), la mise à jour échoue.
Obligatoire : non
Type : Tableau d'GlobalSecondaryindex
Requis pour la mise à jour : aucune interruption
-
ImportSourceSpecification
-
Spécifie les propriétés des données importées depuis la source du compartiment S3 vers la table.
Important
Si vous spécifiez la
ImportSourceSpecification
propriété et que vous spécifiez également laStreamSpecification
propriété ou laTableClass
propriété, l'entité IAMDeletionProtectionEnabled
créatrice/mettant à jour la pile doit disposer d'une autorisation.UpdateTable
Obligatoire : non
Type : ImportSourceSpécification
Requis pour la mise à jour : un remplacement
KeySchema
-
Spécifie les attributs qui constituent la clé primaire de la table. Les attributs de la propriété
KeySchema
doivent aussi être définis dans la propriétéAttributeDefinitions
.Obligatoire : oui
Requis pour la mise à jour : aucune interruption
KinesisStreamSpecification
-
Configuration des flux de données Kinesis pour la table spécifiée.
Obligatoire : non
Type : KinesisStreamSpécification
Requis pour la mise à jour : aucune interruption
LocalSecondaryIndexes
-
Index secondaires locaux à créer dans la table. Vous pouvez créer jusqu'à 5 index secondaires locaux. Chaque index est limité à une valeur de clé de hachage donnée. La taille de chaque clé de hachage peut atteindre 10 gigaoctets.
Obligatoire : non
Type : Tableau d'LocalSecondaryindex
Requis pour la mise à jour : aucune interruption
OnDemandThroughput
-
Définit le nombre maximal d'unités de lecture et d'écriture pour la table à la demande spécifiée. Si vous utilisez cette propriété, vous devez spécifier
MaxReadRequestUnits
MaxWriteRequestUnits
, ou les deux.Obligatoire : non
Type : OnDemandDébit
Requis pour la mise à jour : aucune interruption
PointInTimeRecoverySpecification
-
Paramètres utilisés pour permettre une restauration à un instant dans le passé.
Obligatoire : non
Type : PointInTimeRecoverySpécification
Requis pour la mise à jour : aucune interruption
ProvisionedThroughput
-
Débit de la table spécifiée, composé de valeurs pour
ReadCapacityUnits
etWriteCapacityUnits
. Pour plus d'informations sur le contenu d'une structure de débit provisionnée, consultez le tableau Amazon DynamoDB. ProvisionedThroughputSi vous définissez
BillingMode
surPROVISIONED
, vous devez spécifier cette propriété. Si vous définissezBillingMode
surPAY_PER_REQUEST
, vous ne pouvez pas spécifier cette propriété.Obligatoire : Conditionnelle
Type : ProvisionedThroughput
Requis pour la mise à jour : aucune interruption
ResourcePolicy
-
Document de politique basé sur les ressources qui contient les autorisations d'ajout à la table spécifiée. Dans un CloudFormation modèle, vous pouvez fournir la politique au format JSON ou YAML, car il CloudFormation convertit le YAML en JSON avant de l'envoyer à. DynamoDBPour plus d'informations sur les politiques basées sur les ressources, consultez les sections Utilisation de politiques basées sur les ressources DynamoDB et exemples de politiques basées sur les ressources.
Lorsque vous attachez une stratégie basée sur les ressources lors de la création d'une table, la création de la stratégie est parfaitement cohérente. Pour plus d'informations sur les considérations à prendre en compte lorsque vous associez une politique basée sur les ressources, consultez la section Considérations relatives à la stratégie basée sur les ressources.
Obligatoire : non
Type : ResourcePolicy
Requis pour la mise à jour : aucune interruption
SSESpecification
-
Spécifie les paramètres visant à activer le chiffrement côté serveur.
Obligatoire : non
Type : SSESpecification
Requis pour la mise à jour : quelques interruptions
StreamSpecification
-
Paramètres du flux de table DynamoDB, qui intègrent les modifications apportées aux éléments stockés dans la table.
Obligatoire : non
Type : StreamSpecification
Requis pour la mise à jour : aucune interruption
TableClass
-
La classe de table de la nouvelle table. Les valeurs valides sont
STANDARD
etSTANDARD_INFREQUENT_ACCESS
.Obligatoire : non
Type : chaîne
Valeurs autorisées :
STANDARD | STANDARD_INFREQUENT_ACCESS
Requis pour la mise à jour : aucune interruption
TableName
-
Nom de la table. Si vous ne spécifiez aucun nom, AWS CloudFormation génère un identifiant physique unique et utilise cet identifiant pour le nom de la table. Pour plus d'informations, consultez Type de nom.
Important
Si vous spécifiez un nom, vous ne pouvez pas effectuer de mises à jour nécessitant le remplacement de cette ressource. Vous pouvez effectuer des mises à jour qui ne nécessitent aucune interruption ou en nécessitent une. Si vous devez remplacer la ressource, spécifiez un nouveau nom.
Obligatoire : non
Type : chaîne
Minimum :
1
Maximum :
1024
Requis pour la mise à jour : un remplacement
-
Tableau de paires clé-valeur à appliquer à cette ressource.
Pour de plus amples informations, veuillez consulter Balise.
Obligatoire : non
Type : Tableau de balises
Requis pour la mise à jour : aucune interruption
TimeToLiveSpecification
-
Spécifie les paramètres de durée de vie (TTL) pour la table.
Note
Pour obtenir des informations détaillées sur les limites DynamoDB, veuillez consulter Limites dans Amazon DynamoDB dans le Manuel du développeur Amazon DynamoDB.
Obligatoire : non
Type : TimeToLiveSpecification
Requis pour la mise à jour : aucune interruption
Valeurs de retour
Réf
Lorsque vous transmettez l'ID logique de cette ressource à la fonction intrinsèque Ref
, Ref
renvoie le nom de ressource. Par exemple :
{ "Ref": "myDynamoDBTable" }
Pour la ressource avec l'ID logique myDynamoDBTable
, Ref
renvoie le nom de la table DynamoDB.
Pour plus d'informations sur l'utilisation de la fonction Ref
, voir Ref
.
Ventilateur : GetAtt
La fonction intrinsèque Fn::GetAtt
renvoie une valeur pour un attribut spécifié de ce type. Voici les attributs disponibles et des exemples de valeurs de retour.
Pour de plus amples informations sur l'utilisation de la fonction intrinsèque Fn::GetAtt
, veuillez consulter Fn::GetAtt
.
Arn
-
Amazon Resource Name (ARN) de la table DynamoDB, par exemple
arn:aws:dynamodb:us-east-2:123456789012:table/myDynamoDBTable
. StreamArn
-
ARN du flux DynamoDB, par exemple
arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000
.Note
Vous devez spécifier la propriété
StreamSpecification
afin d'utiliser cet attribut.
Exemples
Table DynamoDB avec index locaux et secondaires
L'exemple suivant crée une table DynamoDB avec les attributs Album
, Artist
, Sales
et NumberOfSongs
. La clé primaire inclut l'attribut Album
en tant que clé de hachage et l'attribut Artist
en tant que clé de plage. Le tableau comprend également deux index globaux et un index secondaire. Pour rechercher le nombre de ventes d'un artiste donné, l'index secondaire global utilise l'attribut Sales
en tant que clé de hachage et l'attribut Artist
en tant que clé de plage.
Pour rechercher les ventes en fonction du nombre de titres, l'index secondaire global utilise l'attribut NumberOfSongs
en tant que clé de hachage et l'attribut Sales
en tant que clé de plage.
Pour recherche les ventes d'un album, l'index secondaire local utilise la même clé de hachage que la table, mais utilise l'attribut Sales
en tant que clé plage.
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"
Table DynamoDB avec un attribut DependsOn
Si vous incluez plusieurs tables DynamoDB avec index dans un modèle unique, vous devez indiquer leurs dépendances afin qu'elles soient créées de manière séquentielle. DynamoDB limite le nombre de tables créées en parallèle et qui contiennent des index secondaires. Si vous créez plusieurs tables avec des index en même temps, DynamoDB renvoie une erreur et l'opération de la pile échoue.
L'exemple suivant suppose que la table myFirstDDBTable
est déclarée dans le même modèle que la table mySecondDDBTable
et que les deux tables comprennent un index secondaire. La mySecondDDBTable
table inclut une dépendance par rapport à la myFirstDDBTable
table, ce qui AWS CloudFormation permet de créer les tables une par une.
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
Table DynamoDB Table avec Application Auto Scaling
Cet exemple configure Application Auto Scaling pour une ressource AWS::DynamoDB::Table
. Le modèle définit une politique de dimensionnement TargetTrackingScaling
qui adapte le débit WriteCapacityUnits
à la hausse pour la table.
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