AWS::DynamoDB::Table - AWS CloudFormation

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 :

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'utiliser PROVISIONED 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'utiliser PAY_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 la StreamSpecification propriété ou la TableClass propriété, l'entité IAM DeletionProtectionEnabled 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

Type : Tableau de KeySchema

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 MaxReadRequestUnitsMaxWriteRequestUnits, 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 et WriteCapacityUnits. Pour plus d'informations sur le contenu d'une structure de débit provisionnée, consultez le tableau Amazon DynamoDB. ProvisionedThroughput

Si vous définissez BillingMode sur PROVISIONED, vous devez spécifier cette propriété. Si vous définissez BillingMode sur PAY_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 et STANDARD_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

Tags

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