AWS::DynamoDB::Table - AWS CloudFormation

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

AWS::DynamoDB::Table

El recurso AWS::DynamoDB::Table crea una tabla de DynamoDB. Para obtener más información, consulte la CreateTablereferencia de la API de Amazon DynamoDB.

Debe tener en cuenta los siguientes comportamientos a la hora de trabajar con tablas de DynamoDB:

  • AWS CloudFormation normalmente crea tablas de DynamoDB en paralelo. Sin embargo, si su plantilla incluye varias tablas de DynamoDB con índices, debe declarar dependencias para que las tablas se creen de forma secuencial. Amazon DynamoDB limita el número de tablas con índices secundarios que están en el estado de creación. Si crea varias tablas con índices al mismo tiempo, DynamoDB devuelve un error y la operación de pila fracasa. Para ver un ejemplo, consulte Tabla de DynamoDB con un atributo. DependsOn

importante

Le recomendamos que utilice el esquema más reciente que se documenta aquí para sus AWS CloudFormation plantillas. Este esquema admite el aprovisionamiento de todas las configuraciones de tabla que se indican a continuación. Cuando utilices este esquema en tus AWS CloudFormation plantillas, asegúrate de que tus políticas de Identity and Access Management (IAM) estén actualizadas con los permisos adecuados para permitir la autorización de estos cambios de configuración.

Sintaxis

Para declarar esta entidad en la AWS CloudFormation plantilla, utilice la siguiente sintaxis:

Propiedades

AttributeDefinitions

Una lista de atributos que describen el esquema de claves para la tabla y los índices.

Esta propiedad es necesaria para crear una tabla de DynamoDB.

Requisitos de actualización: alguna interrupción. Se realiza la sustitución si se edita un AttributeDefinition existente.

Obligatorio: condicional

Tipo: matriz de AttributeDefinition

Requisitos de actualización: sin interrupción

BillingMode

Especifique cómo se le cobrará el rendimiento de lectura y escritura y cómo se administra la capacidad.

Los valores válidos son:

  • PROVISIONED: recomendamos utilizar PROVISIONED para cargas de trabajo predecibles. PROVISIONED establece el modo de facturación en modo aprovisionado.

  • PAY_PER_REQUEST: recomendamos utilizar PAY_PER_REQUEST para cargas de trabajo impredecibles. PAY_PER_REQUEST establece el modo de facturación en modo bajo demanda.

Si no se especifica, el valor predeterminado es PROVISIONED.

Obligatorio: no

Tipo: cadena

Valores permitidos: PROVISIONED | PAY_PER_REQUEST

Requisitos de actualización: sin interrupción

ContributorInsightsSpecification

La configuración utilizada para activar o desactivar CloudWatch Contributor Insights en la tabla especificada.

Obligatorio: no

Tipo: ContributorInsightsSpecification

Requisitos de actualización: sin interrupción

DeletionProtectionEnabled

Determina si una tabla está protegida contra la eliminación. Cuando está habilitada, ningún usuario o proceso puede eliminar la tabla. Este ajuste está deshabilitado de forma predeterminada. Para obtener más información, consulte Uso de la protección contra eliminaciones en la Guía para desarrolladores de Amazon DynamoDB.

Obligatorio: no

Tipo: booleano

Requisitos de actualización: sin interrupción

GlobalSecondaryIndexes

Los índices secundarios globales que se crearán en la tabla. Puede crear un máximo de 20 índices secundarios globales.

importante

Si actualiza una tabla para incluir un nuevo índice secundario global, AWS CloudFormation inicia la creación del índice y, a continuación, continúa con la actualización de la pila. AWS CloudFormation no espera a que se complete la creación del índice, ya que la fase de rellenado puede llevar mucho tiempo, en función del tamaño de la tabla. No puede utilizar el índice o actualizar la tabla hasta que el estado del índice sea ACTIVE. Puede realizar un seguimiento de su estado mediante el comando DescribeTableDynamoDB.

Si añade o elimina un índice durante una actualización, le recomendamos que no actualice ningún otro recurso. Si la pila no se actualiza y se restaura al añadir un índice nuevo, debe eliminar manualmente el índice.

No se admiten actualizaciones. A continuación se muestran las excepciones:

  • Si solo actualiza los valores de rendimiento aprovisionado de los índices secundarios globales, puede actualizar la tabla sin interrupción.

  • Puede eliminar o añadir un índice secundario global sin interrupción. Si realiza ambas acciones en la misma actualización (por ejemplo, cambiando el ID lógico del índice), la actualización falla.

Obligatorio: no

Tipo: matriz de GlobalSecondaryIndex

Requisitos de actualización: sin interrupción

ImportSourceSpecification

Especifica las propiedades de los datos que se importan desde el origen del bucket de S3 a la tabla.

importante

Si especifica la ImportSourceSpecification propiedad y también especifica la propiedad o la TableClass propiedadStreamSpecification, la entidad de IAM que crea o actualiza la pila debe tener permiso. DeletionProtectionEnabled UpdateTable

Obligatorio: no

Tipo: ImportSourceSpecification

Requisitos de actualización: reemplazo

KeySchema

Especifica los atributos que componen la clave principal de la tabla. Los atributos en la propiedad KeySchema también deben definirse en la propiedad AttributeDefinitions.

Obligatorio: sí

Tipo: matriz de KeySchema

Requisitos de actualización: sin interrupción

KinesisStreamSpecification

La configuración de Kinesis Data Streams para la tabla especificada.

Obligatorio: no

Tipo: KinesisStreamSpecification

Requisitos de actualización: sin interrupción

LocalSecondaryIndexes

Los índices secundarios locales que se crearán en la tabla. Puede crear un máximo de 5 índices secundarios locales. Cada índice se establece en un determinado valor de clave hash. El tamaño de cada clave hash puede ser de hasta 10 gigabytes.

Obligatorio: no

Tipo: matriz de LocalSecondaryIndex

Requisitos de actualización: sin interrupción

PointInTimeRecoverySpecification

La configuración utilizada para habilitar la recuperación a un momento dado.

Obligatorio: no

Tipo: PointInTimeRecoverySpecification

Requisitos de actualización: sin interrupción

ProvisionedThroughput

Desempeño de la tabla especificada, que se compone de los valores de ReadCapacityUnits y WriteCapacityUnits. Para obtener más información sobre el contenido de una estructura de rendimiento aprovisionada, consulte la tabla de Amazon DynamoDB. ProvisionedThroughput

Si establece BillingMode en PROVISIONED, debe especificar esta propiedad. Si establece BillingMode en PAY_PER_REQUEST, no puede especificar esta propiedad.

Obligatorio: condicional

Tipo: ProvisionedThroughput

Requisitos de actualización: sin interrupción

SSESpecification

Especifica la configuración para habilitar el cifrado del lado del servidor.

Obligatorio: no

Type: SSESpecification

Requisitos de actualización: alguna interrupción

StreamSpecification

La configuración del flujo de la tabla de DynamoDB, que captura cambios realizados en elementos almacenados en la tabla.

Obligatorio: no

Tipo: StreamSpecification

Requisitos de actualización: sin interrupción

TableClass

La clase de tabla de la nueva tabla. Los valores válidos son STANDARD y STANDARD_INFREQUENT_ACCESS.

Obligatorio: no

Tipo: cadena

Valores permitidos: STANDARD | STANDARD_INFREQUENT_ACCESS

Requisitos de actualización: sin interrupción

TableName

Un nombre para la tabla. Si no especificas un nombre, AWS CloudFormation genera un identificador físico único y lo utiliza para el nombre de la tabla. Para obtener más información, consulte Tipo de nombre.

importante

Si especifica un nombre, no puede llevar a cabo actualizaciones que requieran la sustitución de este recurso. Puede hacer las actualizaciones que no requieran interrupción o que esta sea mínima. Si debe sustituir el recurso, especifique un nuevo nombre.

Obligatorio: no

Tipo: cadena

Patrón: [a-zA-Z0-9_.-]+

Mínimo: 3

Máximo: 255

Requisitos de actualización: reemplazo

Tags

Una matriz de pares clave-valor que aplicar a este recurso.

Para obtener más información, consulte la sección sobre etiquetas.

Obligatorio: no

Tipo: matriz de etiquetas

Requisitos de actualización: sin interrupción

TimeToLiveSpecification

Especifica la configuración del tiempo de vida (TTL) de la tabla.

nota

Para obtener información detallada acerca de los límites en DynamoDB, consulte Límites en Amazon DynamoDB en la Guía para desarrolladores de Amazon DynamoDB.

Obligatorio: no

Tipo: TimeToLiveSpecification

Requisitos de actualización: sin interrupción

Valores devueltos

Ref.

Cuando se pasa el ID lógico de este recurso a la función Ref intrínseca, Ref devuelve nombre del recurso. Por ejemplo:

{ "Ref": "MyResource" }

Para el recurso con el ID lógico myDynamoDBTable, Ref devolverá el nombre de la tabla de DynamoDB.

Para obtener más información acerca del uso de la función Ref, consulte Ref.

Ventilador: GetAtt

La función intrínseca de Fn::GetAtt devuelve un valor para un atributo especificado de este tipo. A continuación se indican los atributos disponibles y los valores devueltos de muestra.

Para obtener más información acerca del uso de la función intrínseca Fn::GetAtt, consulte Fn::GetAtt.

Arn

El nombre de recurso de Amazon (ARN) de la tabla de DynamoDB, como arn:aws:dynamodb:us-east-2:123456789012:table/myDynamoDBTable.

StreamArn

El ARN del flujo de DynamoDB, como arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000.

nota

Debe especificar la propiedad StreamSpecification para utilizar este atributo.

Ejemplos

Tabla de DynamoDB con índices secundarios locales y globales

En el siguiente ejemplo se crea una tabla de DynamoDB con Album, Artist, Sales, NumberOfSongs como atributos. La clave principal incluye el atributo Album como la clave hash y el atributo Artist como la clave de rango. La tabla también incluye dos índices globales y un índice secundario. Para consultar el número de ventas para un determinado artista, el índice secundario global utiliza el atributo Sales como la clave hash y el atributo Artist como la clave de rango.

Para consultar las ventas en función del número de canciones, el índice secundario global utiliza el atributo NumberOfSongs como la clave hash y el atributo Sales como la clave de rango.

Para consultar las ventas de un álbum, el índice secundario local utiliza la misma clave hash que la tabla, pero utiliza el atributo Sales como la clave de rango.

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"

Tabla de DynamoDB con un atributo DependsOn

Si incluye varias tablas de DynamoDB con índices en una sola plantilla, debe incluir dependencias para que las tablas se creen de forma secuencial. DynamoDB limita el número de tablas con índices secundarios que están en el estado de creación. Si crea varias tablas con índices al mismo tiempo, DynamoDB devuelve un error y la operación de pila fracasa.

El siguiente ejemplo presupone que la tabla myFirstDDBTable se declara en la misma plantilla que la tabla mySecondDDBTable y ambas tablas incluyen un índice secundario. La mySecondDDBTable tabla incluye una dependencia en la myFirstDDBTable tabla para AWS CloudFormation crear las tablas de una en una.

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

Tabla de DynamoDB con Application Auto Scaling

En este ejemplo se configura Application Auto Scaling para un recurso de AWS::DynamoDB::Table. La plantilla define una política de escalado de TargetTrackingScaling que escala el desempeño de WriteCapacityUnits para la tabla.

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