AWS::DynamoDB::Table - AWS CloudFormation

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AWS::DynamoDB::Table

O recurso AWS::DynamoDB::Table cria uma tabela do DynamoDB. Para obter mais informações, consulte a CreateTableReferência da API do Amazon DynamoDB.

Você deve estar ciente dos seguintes comportamentos ao trabalhar com tabelas do DynamoDB:

  • AWS CloudFormation normalmente cria tabelas do DynamoDB em paralelo. No entanto, se seu modelo incluir várias tabelas com índices do DynamoDB, declare as dependências para que as tabelas sejam criadas em sequência. O Amazon DynamoDB limita o número de tabelas com índices secundários que estão no estado de criação. Se você criar várias tabelas com índices ao mesmo tempo, o DynamoDB retornará um erro e haverá falha na operação da pilha. Para ver um exemplo, consulte Tabela do DynamoDB com um atributo. DependsOn

Importante

Nossa orientação é usar o esquema mais recente documentado aqui para seus AWS CloudFormation modelos. Esse esquema oferece suporte ao provisionamento de todas as configurações da tabela abaixo. Ao usar esse esquema em seus AWS CloudFormation modelos, certifique-se de que suas políticas de Identity and Access Management (IAM) sejam atualizadas com as permissões apropriadas para permitir a autorização dessas alterações de configuração.

Sintaxe

Para declarar essa entidade em seu AWS CloudFormation modelo, use a seguinte sintaxe:

Propriedades

AttributeDefinitions

Uma lista de atributos que descreve o esquema de chaves para a tabela e os índices.

Essa propriedade é necessária para criar uma tabela do DynamoDB.

Para a atualização, são necessárias: algumas interrupções. Substituição se você editar um AttributeDefinition existente.

Obrigatório: Condicional

Tipo: Matriz de AttributeDefinition

Requisitos da atualização: sem interrupção

BillingMode

Especifique como você é cobrado pelo throughput de leitura e gravação e como você gerencia a capacidade.

Os valores válidos são:

  • PROVISIONED - Recomendamos usar o PROVISIONED para workloads previsíveis. O PROVISIONED define o modo de faturamento como Modo provisionado.

  • PAY_PER_REQUEST - Recomendamos usar o PAY_PER_REQUEST para workloads imprevisíveis. O PAY_PER_REQUEST define o modo de faturamento como Modo sob demanda.

Se não especificado, o padrão será PROVISIONED.

Obrigatório: não

Tipo: string

Valores permitidos: PROVISIONED | PAY_PER_REQUEST

Requisitos da atualização: sem interrupção

ContributorInsightsSpecification

As configurações usadas para ativar ou desativar o CloudWatch Contributor Insights para a tabela especificada.

Obrigatório: não

Tipo: ContributorInsightsSpecification

Requisitos da atualização: sem interrupção

DeletionProtectionEnabled

Determina se uma tabela está protegida contra exclusão. Quando ativada, a tabela não pode ser excluída por nenhum usuário ou processo. Essa configuração é desabilitada por padrão. Para obter mais informações, consulte Como usar a proteção contra exclusão no Amazon DynamoDB Developer Guide.

Obrigatório: Não

Tipo: booliano

Requisitos da atualização: sem interrupção

GlobalSecondaryIndexes

Os índices secundários globais devem ser criados na tabela. Você pode criar até 20 índices secundários globais.

Importante

Se você atualizar uma tabela para incluir um novo índice secundário global, AWS CloudFormation iniciará a criação do índice e prosseguirá com a atualização da pilha. AWS CloudFormation não espera a conclusão da criação do índice porque a fase de preenchimento pode levar muito tempo, dependendo do tamanho da tabela. Você não pode usar o índice ou atualizar a tabela até que o status do índice seja ACTIVE. Você pode acompanhar seu status usando o comando DescribeTableDynamoDB.

Se você adicionar ou excluir um índice durante uma atualização, recomendamos que você não atualize nenhum outro recurso. Se a pilha falhar ao atualizar e for recuperada ao adicionar um novo índice, você deverá excluir manualmente o índice.

Não há suporte para atualizações. Veja as exceções:

  • Se você atualizar a especificação de insights do colaborador ou os valores de throughput provisionado dos índices secundários globais, você poderá atualizar a tabela sem interrupção.

  • Você pode excluir ou adicionar um índice secundário global sem interrupção. Se você fizer os dois na mesma atualização (por exemplo, alterando o ID lógico do índice), a atualização falhará.

Obrigatório: não

Tipo: Matriz de GlobalSecondaryIndex

Requisitos da atualização: sem interrupção

ImportSourceSpecification

Especifica as propriedades dos dados que estão sendo importados da origem do bucket do S3 para a tabela.

Importante

Se você especificar a ImportSourceSpecification propriedade e também especificar a, a propriedade ou a TableClass propriedadeStreamSpecification, a entidade do IAM que DeletionProtectionEnabled está criando/atualizando a pilha deverá ter permissão. UpdateTable

Obrigatório: não

Tipo: ImportSourceSpecification

Requisitos da atualização: substituição

KeySchema

Especifica os atributos que compõem a chave primária da tabela. Os atributos na propriedade KeySchema também devem ser definidos na propriedade AttributeDefinitions.

Obrigatório: Sim

Tipo: Matriz de KeySchema

Requisitos da atualização: sem interrupção

KinesisStreamSpecification

A configuração do Kinesis Data Streams para a tabela especificada.

Obrigatório: não

Tipo: KinesisStreamSpecification

Requisitos da atualização: sem interrupção

LocalSecondaryIndexes

Os índices secundários locais devem ser criados na tabela. Você pode criar até 5 índices secundários locais. Cada índice é delimitado por um determinado valor de chave de hash. O tamanho de cada chave de hash pode ser de até 10 gigabytes.

Obrigatório: não

Tipo: Matriz de LocalSecondaryIndex

Requisitos da atualização: sem interrupção

PointInTimeRecoverySpecification

As configurações usadas para habilitar a recuperação point-in-time.

Obrigatório: não

Tipo: PointInTimeRecoverySpecification

Requisitos da atualização: sem interrupção

ProvisionedThroughput

O throughput da tabela especificada, que consiste em valores para ReadCapacityUnits e WriteCapacityUnits. Para obter mais informações sobre o conteúdo de uma estrutura de taxa de transferência provisionada, consulte a tabela do Amazon DynamoDB. ProvisionedThroughput

Se você definir BillingMode como PROVISIONED, deverá especificar esta propriedade. Se você definir BillingMode como PAY_PER_REQUEST, não poderá especificar esta propriedade.

Obrigatório: Condicional

Tipo: ProvisionedThroughput

Requisitos da atualização: sem interrupção

ResourcePolicy

Um documento de política baseado em recursos que contém permissões para adicionar à tabela especificada. Em um CloudFormation modelo, você pode fornecer a política no formato JSON ou YAML porque CloudFormation converte YAML em JSON antes de enviá-la para. DynamoDBPara obter mais informações sobre políticas baseadas em recursos, consulte Usando políticas baseadas em recursos DynamoDB e Exemplos de políticas baseadas em recursos.

Quando você anexa uma política baseada em recursos ao criar uma tabela, a criação da política é fortemente consistente. Para obter informações sobre as considerações que você deve ter em mente ao anexar uma política baseada em recursos, consulte Considerações sobre políticas baseadas em recursos.

Obrigatório: não

Tipo: ResourcePolicy

Requisitos da atualização: sem interrupção

SSESpecification

Especifica as configurações para habilitar a criptografia no lado do servidor.

Obrigatório: não

Type: SSESpecification

Atualização necessária: Algumas interrupções

StreamSpecification

As configurações para o fluxo da tabela do DynamoDB, que capturam alterações em itens armazenados na tabela.

Obrigatório: não

Tipo: StreamSpecification

Requisitos da atualização: sem interrupção

TableClass

A classe de tabela da nova tabela. Os valores válidos são STANDARD e STANDARD_INFREQUENT_ACCESS.

Obrigatório: não

Tipo: string

Valores permitidos: STANDARD | STANDARD_INFREQUENT_ACCESS

Requisitos da atualização: sem interrupção

TableName

Um nome para a tabela. Se você não especificar um nome, AWS CloudFormation gera uma ID física exclusiva e usa essa ID para o nome da tabela. Para obter mais informações, consulte Tipo de nome.

Importante

Se especificar um nome, você não poderá implementar atualizações que exijam a substituição desse recurso. Você pode realizar atualizações que não exijam interrupções. Caso você precise substituir o recurso, especifique um nome novo.

Obrigatório: não

Tipo: string

Mínimo: 1

Maximum: 1024

Requisitos da atualização: substituição

Tags

Uma matriz de pares de chave/valor a serem aplicados a este recurso.

Para obter mais informações, consulte Tag.

Obrigatório: não

Tipo: Matriz de etiquetas

Requisitos da atualização: sem interrupção

TimeToLiveSpecification

Especifica as configurações de tempo de vida (TTL) para a tabela.

nota

Para obter informações detalhadas sobre os limites no DynamoDB, consulte Limites do Amazon DynamoDB no Guia do desenvolvedor do Amazon DynamoDB.

Obrigatório: não

Tipo: TimeToLiveSpecification

Requisitos da atualização: sem interrupção

Valores de retorno

Ref.

Quando a ID lógica desse recurso é transmitido para a função intrínseca Ref, Ref retorna o nome de recurso. Por exemplo:

{ "Ref": "MyResource" }

Para o recurso com o ID lógico myDynamoDBTable, Ref retornará o nome da tabela do DynamoDB.

Para obter mais informações sobre como usar a função Ref, consulte Ref.

Fã:: GetAtt

A função intrínseca Fn::GetAtt retorna um valor para um atributo especificado deste tipo. Estes são os atributos disponíveis e os valores de retorno de amostra.

Para obter mais informações sobre como usar a função intrínseca Fn::GetAtt, consulte Fn::GetAtt.

Arn

O nome do recurso da Amazon (ARN) da tabela do DynamoDB, por exemplo, arn:aws:dynamodb:us-east-2:123456789012:table/myDynamoDBTable.

StreamArn

O ARN do fluxo do DynamoDB, por exemplo arn:aws:dynamodb:us-east-1:123456789012:table/testddbstack-myDynamoDBTable-012A1SL7SMP5Q/stream/2015-11-30T20:10:00.000.

nota

Você deve especificar a propriedade StreamSpecification para usar esse atributo.

Exemplos

Tabela do DynamoDB com índices secundários locais e secundários

O exemplo a seguir cria uma tabela do DynamoDB com os atributos Album, Artist, Sales, NumberOfSongs. A chave primária inclui o atributo Album como a chave de hash e o atributo Artist como a chave de intervalo. A tabela também inclui dois índices globais e um secundário. Para consultar o número de vendas de um determinado artista, o índice secundário global usa o atributo Sales como a chave de hash e o atributo Artist como a chave de intervalo.

Para consultar as vendas baseadas no número de músicas, o índice secundário global usa o atributo NumberOfSongs como a chave de hash e o atributo Sales como a chave de intervalo.

Para consultar as vendas de um álbum, o índice secundário local usa a mesma chave de hash que a tabela, mas usa o atributo Sales como a chave de intervalo.

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"

Tabela do DynamoDB com um atributo DependsOn

Se você incluir várias tabelas com índices do DynamoDB; em um único modelo, você deverá incluir dependências para que as tabelas sejam criadas em sequência. O DynamoDB limita o número de tabelas com índices secundários que estão no estado de criação. Se você criar várias tabelas com índices ao mesmo tempo, o DynamoDB retornará um erro e haverá falha na operação da pilha.

O exemplo a seguir pressupõe que a tabela myFirstDDBTable seja declarada no mesmo modelo como a tabela mySecondDDBTable e ambas as tabelas incluem um índice secundário. A mySecondDDBTable tabela inclui uma dependência na myFirstDDBTable tabela para que as tabelas sejam AWS CloudFormation criadas uma de cada vez.

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

Tabela do DynamoDB com o Application Auto Scaling

Este exemplo configura o Application Auto Scaling para um recurso AWS::DynamoDB::Table. O modelo define uma política de escalabilidade TargetTrackingScaling que aumenta o throughput de WriteCapacityUnits para a tabela.

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