

# Trabalhar com tabelas e dados no DynamoDB
<a name="WorkingWithTables"></a>

Esta seção descreve como usar a AWS Command Line Interface (AWS CLI) e os AWS SDKs para criar, atualizar e excluir tabelas no Amazon DynamoDB.

**nota**  
Você também pode executar essas mesmas tarefas usando o Console de gerenciamento da AWS. Para obter mais informações, consulte [Utilizar o console](AccessingDynamoDB.md#ConsoleDynamoDB).

Esta seção também fornece mais informações sobre a capacidade de throughput usando o Auto Scaling do DynamoDB ou configurando manualmente o throughput provisionado.

**Topics**
+ [Operações básicas em tabelas do DynamoDB](WorkingWithTables.Basics.md)
+ [Considerações ao escolher uma classe de tabela no DynamoDB](WorkingWithTables.tableclasses.md)
+ [Adicionar etiquetas e rótulos a recursos no DynamoDB](Tagging.md)

# Operações básicas em tabelas do DynamoDB
<a name="WorkingWithTables.Basics"></a>

De forma semelhante a outros sistemas de banco de dados, o Amazon DynamoDB armazena dados em tabelas. É possível gerenciar suas tabelas usando algumas operações básicas.

**Topics**
+ [Criar uma tabela](#WorkingWithTables.Basics.CreateTable)
+ [Descrever uma tabela](#WorkingWithTables.Basics.DescribeTable)
+ [Atualizar uma tabela](#WorkingWithTables.Basics.UpdateTable)
+ [Excluir uma tabela](#WorkingWithTables.Basics.DeleteTable)
+ [Usar a proteção contra exclusão](#WorkingWithTables.Basics.DeletionProtection)
+ [Nomes de tabela de listagem](#WorkingWithTables.Basics.ListTables)
+ [Descrever cotas de throughput provisionado](#WorkingWithTables.Basics.DescribeLimits)

## Criar uma tabela
<a name="WorkingWithTables.Basics.CreateTable"></a>

Use a operação `CreateTable` para criar uma tabela no Amazon DynamoDB. Para criar a tabela, você deve fornecer as seguintes informações:
+ **O nome da tabela.** O nome deve estar de acordo com as regras de nomenclatura do DynamoDB e deve ser exclusivo na conta e na região atuais da AWS. Por exemplo, você poderia criar uma tabela `People` no Leste dos EUA (Norte da Virgínia) e outra tabela `People` na Europa (Irlanda). No entanto, essas duas tabelas devem ser inteiramente diferente uma da outra. Para obter mais informações, consulte [Tipos de dados compatíveis e regras de nomenclatura no Amazon DynamoDB](HowItWorks.NamingRulesDataTypes.md).
+ **chave primária.** A chave primária pode consistir em um atributo (chave de partição) ou de dois atributos (chave de partição e chave de classificação). Você precisa fornecer os nomes de atributos, os tipos de dados e a função de cada um: `HASH` (para uma chave de partição) e `RANGE` (para uma chave de classificação). Para obter mais informações, consulte [Chave primária](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey).
+ **Configurações de throughput (para tabelas provisionadas).** Se estiver usando o modo provisionado, você deve especificar as configurações de throughput de leitura e gravação inicial da tabela. Você pode modificar essas configurações mais tarde ou habilitar o Auto Scaling do DynamoDB para gerenciar as configurações para você. Para obter mais informações, consulte [Modo de capacidade provisionada do DynamoDB](provisioned-capacity-mode.md) e [Gerenciar a capacidade de throughput automaticamente com o ajuste de escala automático do DynamoDB](AutoScaling.md).

### Exemplo 1: criar uma tabela sob demanda
<a name="create-payperrequest-example"></a>

Para criar a mesma tabela `Music` usando modo sob demanda.

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode=PAY_PER_REQUEST
```

A operação `CreateTable` retorna metadados para a tabela, conforme mostrado a seguir.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 0,
            "ReadCapacityUnits": 0
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "BillingModeSummary": {
            "BillingMode": "PAY_PER_REQUEST"
        },
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397468.348
    }
}
```

**Importante**  
 Ao chamar `DescribeTable` em uma tabela sob demanda, as unidades de capacidade de leitura e unidades de capacidade de gravação são definidas como 0. 

### Exemplo 2: criar uma tabela provisionada
<a name="create-provisioned-example"></a>

O exemplo da AWS CLI a seguir mostra como criar uma tabela (`Music`). A chave primária consiste em `Artist` (chave de partição) e `SongTitle` (chave de classificação), cada uma delas tem um tipo de dados de `String`. O throughput máximo da tabela é 10 unidades de capacidade de leitura e 5 unidades de capacidade de gravação.

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
```

A operação `CreateTable` retorna metadados para a tabela, conforme mostrado a seguir.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

O elemento `TableStatus` indica o estado atual da tabela (`CREATING`). Pode demorar um pouco para criar a tabela, dependendo dos valores que você especificar para `ReadCapacityUnits` e `WriteCapacityUnits`. Valores maiores exigem que o DynamoDB aloque mais recursos para a tabela.

### Exemplo 3: criar uma tabela usando a classe de tabela Standard-Infrequent Access do DynamoDB
<a name="create-infrequent-access-example"></a>

Para criar a mesma tabela de `Music` usando a classe de tabela Standard-Infrequent Access (Padrão – Acesso Infrequente) do DynamoDB.

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --table-class STANDARD_INFREQUENT_ACCESS
```

A operação `CreateTable` retorna metadados para a tabela, conforme mostrado a seguir.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableClassSummary": {
            "LastUpdateDateTime": 1542397215.37,
            "TableClass": "STANDARD_INFREQUENT_ACCESS"
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

## Descrever uma tabela
<a name="WorkingWithTables.Basics.DescribeTable"></a>

Para visualizar detalhes sobre uma tabela, use a operação `DescribeTable`. Você deve fornecer o nome da tabela. A saída de `DescribeTable` está no mesmo formato de `CreateTable`. Ela inclui o a marca de data e hora em que a tabela foi criada, o esquema de chaves, as configurações de throughput provisionado, o tamanho estimado e os índices secundários que estão presentes.

**Importante**  
 Ao chamar `DescribeTable` em uma tabela sob demanda, as unidades de capacidade de leitura e unidades de capacidade de gravação são definidas como 0. 

**Example**  

```
aws dynamodb describe-table --table-name Music
```

A tabela estará pronta para uso quando `TableStatus` tiver sido alterado de `CREATING` para `ACTIVE`.

**nota**  
Se você emitir uma solicitação `DescribeTable` imediatamente após uma solicitação `CreateTable`, o DynamoDB poderá retornar um erro (`ResourceNotFoundException`). Isso ocorre porque `DescribeTable` usa uma consulta eventualmente consistente e os metadados da sua tabela podem não estar disponíveis nesse momento. Aguarde alguns segundos e, em seguida, tente a solicitação `DescribeTable` novamente.  
Para fins de faturamento, os custos de armazenamento do DynamoDB incluem uma sobrecarga de 100 bytes por item. (Para obter mais informações, acesse a [Preços do DynamoDB](https://aws.amazon.com/dynamodb/pricing/).) Esses 100 bytes extras por item são usados em cálculos da unidade de capacidade ou pela operação `DescribeTable`. 

## Atualizar uma tabela
<a name="WorkingWithTables.Basics.UpdateTable"></a>

A operação `UpdateTable` permite que você execute uma das seguintes ações:
+ Modificar as configurações de throughput provisionad de uma tabela (para tabelas de modo provisionadas).
+ Alterar o modo de capacidade de leitura/gravação de tabela.
+ Manipular índices secundários globais na tabela (consulte [Como usar índices secundários globais no DynamoDB](GSI.md)).
+ Habilite ou desabilite o DynamoDB Streams na tabela (consulte [Capturar dados de alterações para o DynamoDB Streams](Streams.md)).

**Example**  
O exemplo de AWS CLI a seguir mostra como modificar as configurações de throughput provisionado de uma tabela.  

```
aws dynamodb update-table --table-name Music \
    --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10
```

**nota**  
Quando você emite uma solicitação `UpdateTable`, o status da tabela muda de `AVAILABLE` para `UPDATING`. A tabela permanecerá totalmente disponível para uso enquanto estiver `UPDATING`. Quando esse processo for concluído, o status da tabela mudará de `UPDATING` para `AVAILABLE`.

**Example**  
O exemplo de AWS CLI a seguir mostra como modificar o modo de capacidade de leitura/gravação de uma tabela para o modo sob demanda.  

```
aws dynamodb update-table --table-name Music \
    --billing-mode PAY_PER_REQUEST
```

## Excluir uma tabela
<a name="WorkingWithTables.Basics.DeleteTable"></a>

Você pode remover uma tabela não utilizada com a operação `DeleteTable`. Excluir uma tabela é uma operação irrecuperável. Para excluir uma tabela usando o Console de gerenciamento da AWS, consulte [Etapa 6: (Opcional) exclua uma tabela do DynamoDB para limpar os recursos](getting-started-step-6.md).

**Example**  
O exemplo de AWS CLI a seguir mostra como excluir uma tabela.  

```
aws dynamodb delete-table --table-name Music
```

Quando você emite uma solicitação `DeleteTable`, o status da tabela muda de `ACTIVE` para `DELETING`. A exclusão da tabela pode demorar um pouco, dependendo dos recursos que ela usa (como os dados armazenados e os streams ou índices da tabela).

Quando a operação `DeleteTable` é concluída, a tabela deixa de existir no DynamoDB.

## Usar a proteção contra exclusão
<a name="WorkingWithTables.Basics.DeletionProtection"></a>

É possível proteger uma tabela contra exclusão acidental com a propriedade de proteção contra exclusão. Habilitar essa propriedade para tabelas ajuda a garantir que elas não sejam excluídas acidentalmente durante as operações regulares de gerenciamento de tabelas pelos administradores. Isso ajudará a evitar interrupções nas operações empresariais normais.

 O proprietário da tabela ou um administrador autorizado controla a propriedade de proteção contra exclusão de cada tabela. A propriedade de proteção contra exclusão de cada tabela está desativada por padrão. Isso inclui réplicas globais e tabelas restauradas com base em backups. Quando a proteção contra exclusão está desabilitada para uma tabela, ela pode ser excluída por qualquer usuário autorizado por uma política do Identity and Access Management (IAM). Quando a proteção contra exclusão está habilitada para uma tabela, ninguém pode excluí-la. 

Para alterar essa configuração, acesse **Configurações adicionais** da tabela, navegue até o painel **Proteção contra exclusão** e selecione **Ativar Proteção contra exclusão**. 

A propriedade de proteção contra exclusão é compatível com o console do DynamoDB, API, CLI/SDK e CloudFormation. A API `CreateTable` é compatível com a propriedade de proteção contra exclusão no momento da criação da tabela, e a API `UpdateTable` é compatível com a alteração da propriedade de proteção contra exclusão para tabelas existentes.

**nota**  
Se uma conta da AWS for excluída, todos os dados dessa conta, incluindo as tabelas, também serão excluídos em 90 dias.
Se o DynamoDB perder o acesso a uma chave gerenciada pelo cliente que foi usada para criptografar uma tabela, ela ainda será arquivada. O arquivamento requer um backup da tabela e a exclusão da original.

## Nomes de tabela de listagem
<a name="WorkingWithTables.Basics.ListTables"></a>

A operação `ListTables` retorna os nomes das tabelas do DynamoDB da conta e da região atuais da AWS.

**Example**  
O exemplo da AWS CLI a seguir mostra como listar os nomes de tabelas do DynamoDB.  

```
aws dynamodb list-tables
```

## Descrever cotas de throughput provisionado
<a name="WorkingWithTables.Basics.DescribeLimits"></a>

A operação `DescribeLimits` retorna as cotas de capacidade de leitura e gravação atuais da conta e da região atuais da AWS.

**Example**  
O exemplo de AWS CLI a seguir mostra como descrever as cotas atuais de throughput provisionado.  

```
aws dynamodb describe-limits
```
A saída mostra as cotas superiores das unidades de capacidade de leitura e gravação da conta e da região atuais da AWS.

Para obter mais informações sobre essas cotas e como solicitar aumentos de cota, consulte [Cotas padrão de throughput](ServiceQuotas.md#default-limits-throughput).

# Considerações ao escolher uma classe de tabela no DynamoDB
<a name="WorkingWithTables.tableclasses"></a>

O DynamoDB apresenta duas classes de tabela projetadas para ajudar você a otimizar o custo. A classe de tabela Standard do DynamoDB é a padrão e é recomendada para a grande maioria das workloads. A classe de tabela do DynamoDB Standard-Infrequent Access (DynamoDB Standard-IA) é otimizada para tabelas em que o armazenamento é o custo dominante. Por exemplo, tabelas que armazenam dados acessados com pouca frequência, como logs da aplicação, postagens antigas de mídia social, histórico de pedidos de comércio eletrônico e antigas conquistas de jogos, são bons candidatos para a classe de tabela Standard-IA.

Cada tabela do DynamoDB está associada a uma classe de tabela. Todos os índices secundários associados à tabela usam a mesma classe de tabela. Você pode definir sua classe de tabela ao criar sua tabela (DynamoDB Standard por padrão) e atualizar a classe de tabela de uma tabela existente usando o Console de gerenciamento da AWS, a CLI da AWS ou o AWS SDK. O DynamoDB também permite o gerenciamento de sua classe de tabela usando o AWS CloudFormation para tabelas de região única (tabelas que não são tabelas globais). Cada classe de tabela oferece preços diferentes para armazenamento de dados, bem como para solicitações de leitura e gravação. Ao escolher uma classe de tabela para sua tabela, lembre-se do seguinte:
+ A classe de tabela Standard do DynamoDB oferece custos de throughput mais baixos do que o DynamoDB Standard-IA e é a opção mais econômica para tabelas em que o throughput é o custo dominante. 
+ A classe de tabela DynamoDB Standard-IA oferece custos de armazenamento mais baixos do que o DynamoDB Standard e é a opção mais econômica para tabelas em que o armazenamento é o custo dominante. Quando o armazenamento excede 50% do custo de throughput (leituras e gravações) de uma tabela usando a classe de tabela Standard do DynamoDB, a classe de tabela DynamoDB Standard-IA pode ajudá-lo a reduzir o custo total da tabela. 
+ As tabelas DynamoDB Standard – IA oferecem a mesma performance, durabilidade e disponibilidade que as tabelas padrão do DynamoDB. 
+ A alternância entre as classes de tabela DynamoDB Standard e DynamoDB Standard – IA não requer a alteração do código da aplicação. Você usa as mesmas APIs do DynamoDB e endpoints de serviço, independentemente da classe de tabela que suas tabelas utilizem. 
+ As tabelas do DynamoDB Standard – IA são compatíveis com todos os recursos existentes do DynamoDB, como autoescalabilidade, modo sob demanda, vida útil (TTL), backups sob demanda, recuperação em um ponto anterior no tempo (PITR) e índices secundários globais.

A classe de tabela mais econômica para sua tabela depende dos padrões de uso de armazenamento e throughput esperados da tabela. Você pode ver o histórico de armazenamento e o custo de throughput da sua tabela com o AWS Cost and Usage Reports e o AWS Cost Explorer. Use esses dados de histórico para determinar a classe de tabela mais econômica para sua tabela. Para saber mais sobre o uso do AWS Cost and Usage Reports e o AWS Cost Explorer, veja a [Documentação de Billing and Cost Management do AWS](https://docs.aws.amazon.com/account-billing/index.html). Para mais informações sobre a precificação das classes de tabela, acesse [Preço do Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/on-demand/).

**nota**  
Uma atualização de classe de tabela é um processo em segundo plano. Você ainda pode acessar sua tabela normalmente durante uma atualização de classe de tabela. O tempo para atualizar sua classe de tabela depende do tráfego da tabela, do tamanho do armazenamento e de outras variáveis relacionadas. Não são permitidas mais do que duas atualizações de classe de tabela em sua tabela em um período de trilha de 30 dias.

# Adicionar etiquetas e rótulos a recursos no DynamoDB
<a name="Tagging"></a>

Você pode rotular os recursos do Amazon DynamoDB com *tags*. As tags permitem categorizar recursos de diferentes maneiras, por exemplo, por finalidade, proprietário, ambiente ou outros critérios. As tags podem ajudar a fazer o seguinte:
+ Identificar rapidamente um recurso com base nas tags que você atribuiu a ele.
+ Veja as faturas da AWS discriminadas por tags.
**nota**  
Todos os índices secundários locais (LSI) e índices secundários globais (GSI) relacionados a tabelas marcadas são rotulados com as mesmas tags automaticamente. Atualmente, o uso de Streams pelo DynamoDB não pode ser marcado.

A marcação é suportada por serviços da AWS como Amazon EC2, Amazon S3, DynamoDB e outros. Uma marcação eficiente é capaz de fornecer insights de custos, permitindo criar relatórios entre serviços que possuem uma tag específica.

Para começar a usar tags, faça o seguinte:

1. Compreender [Restrições de marcação no DynamoDB](#TaggingRestrictions).

1. Criar tags usando [Marcar recursos no DynamoDB](Tagging.Operations.md).

1. Use [Usar etiquetas do DynamoDB para criar relatórios de alocação de custos](#CostAllocationReports) para controlar seus custos da AWS por tag ativa.

Por fim, é recomendável seguir estratégias de marcação ideais. Para obter informações, consulte [Estratégias de marcação da AWS](https://d0.awsstatic.com/aws-answers/AWS_Tagging_Strategies.pdf).

## Restrições de marcação no DynamoDB
<a name="TaggingRestrictions"></a>

 Cada tag consiste em uma chave e um valor, ambos definidos por você. As seguintes restrições são aplicáveis: 
+  Cada tabela do DynamoDB pode ter apenas uma tag com a mesma chave. Se você tentar adicionar uma tag existente (mesma chave), o valor da tag existente será atualizado para o novo valor. 
+  As chaves e valores das tags diferenciam maiúsculas de minúsculas. 
+  O comprimento máximo da chave é 128 caracteres Unicode. 
+ O número máximo de tags que você pode atribuir a um recurso é 256. 
+  Os caracteres permitidos são letras, espaço em branco e números, além dos seguintes caracteres especiais: `+ - = . _ : /` 
+  O número máximo de tags por recurso é 50.
+ O tamanho máximo aceito para todas as tags em uma tabela é de 10 KB.
+ Nomes e valores de tags atribuídos pela AWS recebem automaticamente o prefixo `aws:`, o qual não pode ser atribuído por você. Nomes de tags atribuídos pela AWS não contam para o limite de tag de recurso definido pelo usuário de 50 ou o limite máximo de tamanho de 10 KB. Nomes de tags atribuídos pelo usuário têm o prefixo `user:` no relatório de alocação de custos. 
+  Não é possível colocar uma data retroativa na aplicação de uma tag. 

# Marcar recursos no DynamoDB
<a name="Tagging.Operations"></a>

Você pode usar o console do Amazon DynamoDB ou a AWS Command Line Interface (AWS CLI) para adicionar, listar, editar ou excluir tags. Em seguida, você pode ativar essas tags definidas pelo usuário para que elas apareçam no console do Gerenciamento de Faturamento e Custos da AWS para o controle da alocação de custos. Para obter mais informações, consulte [Usar etiquetas do DynamoDB para criar relatórios de alocação de custos](Tagging.md#CostAllocationReports). 

 Para edição em massa, também é possível usar o Tag Editor no Console de gerenciamento da AWS. Para obter mais informações, consulte [Trabalhar com o Tag Editor](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html).

 Para usar a API do DynamoDB, consulte as operações a seguir na [Referência da API do Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/):
+ [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html)
+ [UntagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UntagResource.html)
+ [ListTagsOfResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTagsOfResource.html)

**Topics**
+ [Configuração de permissões para filtrar por tags](#Tagging.Operations.permissions)
+ [Adição de tags a tabelas novas ou existentes (Console de gerenciamento da AWS)](#Tagging.Operations.using-console)
+ [Adição de tags a tabelas novas ou existentes (AWS CLI)](#Tagging.Operations.using-cli)

## Configuração de permissões para filtrar por tags
<a name="Tagging.Operations.permissions"></a>

Para usar etiquetas a fim de filtrar sua lista de tabelas no console do DynamoDB, as políticas do seu usuário devem incluir acesso às seguintes operações:
+ `tag:GetTagKeys`
+ `tag:GetTagValues`

Para acessar essas operações, anexe uma nova política do IAM ao seu usuário seguindo as etapas abaixo.

1. Acesse o [console do IAM](https://console.aws.amazon.com/iam/) com um usuário administrativo.

1. No painel de navegação à esquerda, selecione "Policies" (Políticas).

1. Selecione "Create Policy" (Criar política).

1. No editor, a política a seguir no editor de JSON.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetTagKeys",
                   "tag:GetTagValues"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Conclua o assistente e atribua um nome à política (por exemplo, `TagKeysAndValuesReadAccess`).

1. No menu de navegação à esquerda, selecione "Users" (Usuários).

1. Na lista, selecione o usuário que você normalmente usa para acessar o console do DynamoDB.

1. Selecione "Add permissions" (Adicionar permissões).

1. Selecione "Attach existing policies directly" (Anexar políticas existentes diretamente).

1. Na lista, selecione a política que você criou anteriormente.

1. Assista todo o assistente.

## Adição de tags a tabelas novas ou existentes (Console de gerenciamento da AWS)
<a name="Tagging.Operations.using-console"></a>

Você pode usar o console do DynamoDB para adicionar tags a novas tabelas ao criá-las, ou para adicionar, editar ou excluir tags de tabelas existentes.

**Para marcar recursos na criação (console)**

1. Faça login no Console de gerenciamento da AWS e abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1. No painel de navegação, selecione **Tabelas** e **Criar tabela**.

1. Na página **Create DynamoDB table (Criar tabela DynamoDB)**, forneça um nome e uma chave primária. Na seção **Tags (Etiquetas)**, escolha **Add new tag (Adicionar nova etiqueta)** e insira as etiquetas que você deseja usar.

   Para obter informações sobre a estrutura da tag, consulte [Restrições de marcação no DynamoDB](Tagging.md#TaggingRestrictions). 

   Para obter mais informações sobre como criar tabelas, consulte [Operações básicas em tabelas do DynamoDB](WorkingWithTables.Basics.md).

**Para marcar recursos existentes (console)**

Abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1. No painel de navegação, selecione **Tables** (Tabelas).

1. Escolha uma tabela na lista e escolha a guia **Additional settings (Configurações adicionais)**. Você pode adicionar, editar ou excluir seus marcadores na seção **Tags (Etiquetas)** na parte inferior da página.

## Adição de tags a tabelas novas ou existentes (AWS CLI)
<a name="Tagging.Operations.using-cli"></a>

Os exemplos a seguir mostram como usar a AWS CLI para especificar tags ao criar tabelas e índices e para marcar recursos existentes.

**Para marcar recursos na criação (AWS CLI)**
+ O exemplo a seguir cria uma nova tabela `Movies` e adiciona a tag `Owner` com um valor de `blueTeam`: 

  ```
  aws dynamodb create-table \
      --table-name Movies \
      --attribute-definitions AttributeName=Title,AttributeType=S \
      --key-schema AttributeName=Title,KeyType=HASH \
      --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
      --tags Key=Owner,Value=blueTeam
  ```

**Para marcar recursos existentes (AWS CLI)**
+ O exemplo a seguir adiciona a tag `Owner` com um valor de `blueTeam` à tabela `Movies`: 

  ```
  aws dynamodb tag-resource \
      --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Movies \
      --tags Key=Owner,Value=blueTeam
  ```

**Para listar todas as tags de uma tabela (AWS CLI)**
+ O exemplo a seguir relaciona todas as tags associadas à tabela `Movies`.

  ```
  aws dynamodb list-tags-of-resource \
      --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Movies
  ```

## Usar etiquetas do DynamoDB para criar relatórios de alocação de custos
<a name="CostAllocationReports"></a>

A AWS usa tags para organizar os custos de recursos no seu relatório de alocação de custos. A AWS fornece dois tipos de tags alocação de custos:
+ Uma tag gerada pela AWS. A AWS define, cria e aplica essa tag para você.
+ Tags definidas pelo usuário. Você define, cria e aplica essas tags.

É necessário ativar os dois tipos de tags separadamente para que elas possam ser exibidas no Cost Explorer ou em um relatório de alocação de custos. 

 Para ativar tags geradas pela AWS: 

1.  Faça login no Console de gerenciamento da AWS e abra o console do Billing and Cost Management em [https://console.aws.amazon.com/billing/home\$1/](https://console.aws.amazon.com/billing/home#/.). 

1.  No painel de navegação, escolha **Cost Allocation Tags**. 

1.  Em **AWSGenerated Cost Allocation Tags (Etiquetas de alocação de custos geradas)**, escolha **Activate (Ativar)**. 

 Para ativar tags definidas pelo usuário: 

1.  Faça login no Console de gerenciamento da AWS e abra o console do Billing and Cost Management em [https://console.aws.amazon.com/billing/home\$1/](https://console.aws.amazon.com/billing/home#/.). 

1.  No painel de navegação, escolha **Cost Allocation Tags**. 

1.  Em **Tags de alocação de custos definidos pelo usuário**, escolha **Ativar**. 

 Após você criar e ativar tags, a AWS gera um relatório de alocação de custos com a utilização e os custos agrupados de acordo com as tags ativas. O relatório de alocação de custos inclui todos os seus custos da AWS para cada período de faturamento. O relatório inclui recursos com e sem tags, para que você possa organizar claramente as cobranças de cada um deles. 

**nota**  
 No momento, os dados transferidos do DynamoDB não são categorizados por tags em relatórios de alocação de custos. 

 Para obter mais informações, consulte [Usar tags de alocação de custos](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html). 