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:
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
, "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
PointInTimeRecoverySpecification:PointInTimeRecoverySpecification
ProvisionedThroughput:ProvisionedThroughput
ResourcePolicy:ResourcePolicy
SSESpecification:SSESpecification
StreamSpecification:StreamSpecification
TableClass:String
TableName:String
Tags:- Tag
TimeToLiveSpecification:TimeToLiveSpecification
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 oPROVISIONED
para workloads previsíveis. OPROVISIONED
define o modo de faturamento como Modo provisionado. -
PAY_PER_REQUEST
- Recomendamos usar oPAY_PER_REQUEST
para workloads imprevisíveis. OPAY_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 aTableClass
propriedadeStreamSpecification
, a entidade do IAM queDeletionProtectionEnabled
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 propriedadeAttributeDefinitions
.Obrigatório: Sim
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
eWriteCapacityUnits
. Para obter mais informações sobre o conteúdo de uma estrutura de taxa de transferência provisionada, consulte a tabela do Amazon DynamoDB. ProvisionedThroughputSe você definir
BillingMode
comoPROVISIONED
, deverá especificar esta propriedade. Se você definirBillingMode
comoPAY_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
eSTANDARD_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
-
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