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 les 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 schéma le plus récent documenté ici pour vos modèles AWS CloudFormation. 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 modèles AWS CloudFormation, 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 modèle AWS CloudFormation, 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, ... ], "PointInTimeRecoverySpecification" :PointInTimeRecoverySpecification, "ProvisionedThroughput" :ProvisionedThroughput, "SSESpecification" :SSESpecification, "StreamSpecification" :StreamSpecification, "TableClass" :String, "TableName" :String, "Tags" :[ Tag, ... ], "TimeToLiveSpecification" :TimeToLiveSpecification} }
YAML
Type: AWS::DynamoDB::Table Properties: AttributeDefinitions:- AttributeDefinitionBillingMode:StringContributorInsightsSpecification:ContributorInsightsSpecificationDeletionProtectionEnabled:BooleanGlobalSecondaryIndexes:- GlobalSecondaryIndexImportSourceSpecification:ImportSourceSpecificationKeySchema:- KeySchemaKinesisStreamSpecification:KinesisStreamSpecificationLocalSecondaryIndexes:- LocalSecondaryIndexPointInTimeRecoverySpecification:PointInTimeRecoverySpecificationProvisionedThroughput:ProvisionedThroughputSSESpecification:SSESpecificationStreamSpecification:StreamSpecificationTableClass:StringTableName:StringTags:- TagTimeToLiveSpecification: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 une valeur AttributeDefinition existante.
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'utiliserPROVISIONEDpour les charges de travail prévisibles.PROVISIONEDdéfinit le mode de facturation sur le mode alloué. -
PAY_PER_REQUEST- Nous vous recommandons d'utiliserPAY_PER_REQUESTpour les charges de travail imprévisibles.PAY_PER_REQUESTdé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_REQUESTRequis 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 : ContributorInsightsSpecification
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, AWS CloudFormation lance la création d'index, puis procède à la mise à jour de la pile. AWS CloudFormation n'attend pas que l'index soit complètement créé, car la phase de renvoi peut prendre du temps, en fonction de 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 de 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
ImportSourceSpecificationpropriété et que vous spécifiez également laStreamSpecificationpropriété ou laTableClasspropriété, l'entité IAMDeletionProtectionEnabledcréatrice/mettant à jour la pile doit disposer d'une autorisation.UpdateTableObligatoire : non
Type : ImportSourceSpecification
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é
KeySchemadoivent 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 : KinesisStreamSpecification
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 de LocalSecondaryIndex
Requis pour la mise à jour : aucune interruption
PointInTimeRecoverySpecification-
Paramètres utilisés pour permettre une restauration à un instant dans le passé.
Obligatoire : non
Type : PointInTimeRecoverySpecification
Requis pour la mise à jour : aucune interruption
ProvisionedThroughput-
Débit de la table spécifiée, composé de valeurs pour
ReadCapacityUnitsetWriteCapacityUnits. Pour plus d'informations sur le contenu d'une structure de débit provisionnée, consultez le tableau Amazon DynamoDB. ProvisionedThroughputSi vous définissez
BillingModesurPROVISIONED, vous devez spécifier cette propriété. Si vous définissezBillingModesurPAY_PER_REQUEST, vous ne pouvez pas spécifier cette propriété.Obligatoire : Conditionnelle
Type : ProvisionedThroughput
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
STANDARDetSTANDARD_INFREQUENT_ACCESS.Obligatoire : non
Type : chaîne
Valeurs autorisées :
STANDARD | STANDARD_INFREQUENT_ACCESSRequis pour la mise à jour : aucune interruption
TableName-
Nom de la table. Si vous ne spécifiez aucun nom, AWS CloudFormation génère un ID physique unique et l'utilise comme nom de 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
Modèle :
[a-zA-Z0-9_.-]+Minimum :
3Maximum :
255Requis 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": "MyResource" }
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é
StreamSpecificationafin 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 table mySecondDDBTable inclut une dépendance à la table myFirstDDBTable afin qu'AWS CloudFormation crée les tables l'une après l'autre.
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