

# Configurar a replicação de tabelas do S3
<a name="s3-tables-replication-setting-up"></a>

É possível configurar a replicação para criar automaticamente réplicas de tabela de uma tabela de origem para até cinco buckets de tabela de destino. A replicação pode ser configurada em nível de bucket (aplicada a todas as tabelas no bucket) ou em nível de tabela (para tabelas específicas). Este tópico explica como configurar a replicação usando o console do Amazon S3 ou AWS Command Line Interface (AWS CLI).

Para ter mais informações sobre como configurar a replicação, consulte os tópicos a seguir.

**Topics**
+ [Pré-requisitos para configurar a replicação](#s3-tables-replication-prerequisites)
+ [Noções básicas sobre as configurações de replicação](#s3-tables-replication-understanding-configurations)
+ [Escolher entre replicação em nível de bucket e em nível de tabela](#s3-tables-replication-choosing-configuration)
+ [Configurar a replicação usando o console do Amazon S3](#s3-tables-replication-console)
+ [Configurar a replicação usando a AWS CLI](#s3-tables-replication-cli)

## Pré-requisitos para configurar a replicação
<a name="s3-tables-replication-prerequisites"></a>

Antes de configurar a replicação, é necessário ter o seguinte:

### Recursos necessários
<a name="s3-tables-replication-required-resources"></a>
+ **Bucket de tabela de origem**: o bucket de tabela que contém uma ou mais tabelas que você deseja replicar.
+ **Buckets de tabela de destino**: um ou mais buckets de tabela nos quais você deseja replicar suas tabelas (até cinco buckets de tabela de destino).
+ **Tabelas de origem**: tabelas existentes no bucket de tabela de origem para replicação.
+ **Perfis do IAM**: perfis do IAM que concedem ao Amazon S3 permissões para replicar tabelas em seu nome.

### Permissões obrigatórias
<a name="s3-tables-replication-required-permissions"></a>

A identidade do IAM que usada para configurar a replicação precisa ter as seguintes permissões:

**Para replicação em nível de bucket:**
+ `s3tables:PutTableBucketReplication` no bucket de tabela de origem.
+ `s3tables:GetTableBucketReplication` no bucket de tabela de origem.
+ `iam:PassRole` para o perfil do IAM de replicação.

**Para replicação em nível de tabela:**
+ `s3tables:PutTableReplication` na tabela de origem.
+ `s3tables:GetTableReplication` na tabela de origem.
+ `iam:PassRole` para o perfil do IAM de replicação.

**Para replicação entre contas:**
+ Permissões da política de bucket da conta de destino.

### Requisitos adicionais para replicação entre contas
<a name="s3-tables-replication-cross-account-requirements"></a>

Se os buckets de tabela de origem e destino estiverem em contas diferentes da AWS, você também precisará:
+ De uma política de bucket no bucket de tabela de destino que conceda à conta de origem permissões para replicar tabelas.
+ Do ID da conta de destino e do nome do recurso da Amazon (ARN) do bucket de tabela.

### Requisitos adicionais para tabelas criptografadas
<a name="s3-tables-replication-encrypted-requirements"></a>

Se você quiser criptografar tabelas de réplica com o AWS KMS:
+ Uma chave do KMS na região de destino.
+ Permissões para usar a chave do KMS em seu perfil de replicação do IAM.
+ Uma política de chave do KMS que permita que o perfil de replicação criptografe dados.

## Noções básicas sobre as configurações de replicação
<a name="s3-tables-replication-understanding-configurations"></a>

Uma configuração de replicação define como o Amazon S3 replica tabelas do bucket de tabela de origem. A replicação pode ser configurada em dois níveis:

### Para replicação em nível de bucket
<a name="s3-tables-replication-bucket-level"></a>

Uma configuração de replicação em nível de bucket se aplica a todas as tabelas no bucket de tabela de origem. Quando a replicação é configurada em nível de bucket, o Amazon S3 replica automaticamente qualquer tabela existente e qualquer tabela nova criada no bucket.

Use a replicação em nível de bucket quando:
+ Quiser replicar todas as tabelas em um bucket.
+ Quiser um comportamento de replicação consistente em todas as tabelas.
+ Quiser simplificar o gerenciamento com uma única configuração.

### Replicação em nível de tabela
<a name="s3-tables-replication-table-level"></a>

Uma configuração de replicação em nível de tabela se aplica a uma tabela específica. As configurações em nível de tabela substituem as configurações em nível de bucket para essa tabela específica.

Use a replicação em nível de tabela quando:
+ Quiser replicar apenas tabelas específicas.
+ Precisar de destinos de replicação diferentes para tabelas diferentes.
+ Quiser substituir uma configuração em nível de bucket para determinadas tabelas.

### Elementos da configuração de replicação
<a name="s3-tables-replication-configuration-elements"></a>

Cada configuração de replicação contém:
+ **Perfil do IAM**: o perfil que o Amazon S3 assume para realizar operações de replicação.
+ **Regras**: uma ou mais regras de replicação (com o limite de uma regra na execução). Cada regra contém:
  + **Destinos**: lista de ARNs de bucket de tabela de destino (até cinco destinos).
  + **Status**: se a regra está habilitada ou desabilitada.
+ **Token de versão**: um token usado para evitar conflitos de gravação ao atualizar as configurações.

## Escolher entre replicação em nível de bucket e em nível de tabela
<a name="s3-tables-replication-choosing-configuration"></a>

### Precedência de configuração
<a name="s3-tables-replication-configuration-precedence"></a>

Quando existem configurações em nível de bucket e em nível de tabela:
+ A configuração em nível de tabela tem precedência para essa tabela específica.
+ Outras tabelas seguem a configuração em nível de bucket.

## Configurar a replicação usando o console do Amazon S3
<a name="s3-tables-replication-console"></a>

Este procedimento mostra como configurar a replicação usando o console do Amazon S3.

### Como configurar a replicação em nível de bucket
<a name="s3-tables-replication-bucket-level-console"></a>

Este procedimento mostra como criar uma replicação de bucket de tabela usando o console do Amazon S3. Uma configuração de replicação de bucket de tabela se aplica a todas as tabelas no bucket de tabela de origem.

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

1. No painel de navegação, escolha **Buckets de tabela**.

1. Na lista **Buckets de tabela**, escolha o nome do bucket de tabela para o qual deseja configurar a replicação.

1. Escolha a guia **Gerenciamento**.

1. Na seção **Configuração de replicação do bucket de tabela**, escolha **Criar configuração de replicação de bucket de tabela**.

1. Na seção **Destino**, configure os destinos da replicação:

   1. No campo **ARN do bucket de tabela**, insira o ARN do bucket de tabela de destino. O formato de é: `arn:aws:s3tables:{{region}}:{{account-id}}:bucket/{{table-bucket-name}}`

      Também é possível escolher **Procurar no S3** para selecionar um bucket de tabela de sua conta.

   1. (Opcional) Para adicionar outros destinos, escolha **Adicionar destino**. É possível adicionar mais quatro buckets de tabela, no máximo, para um total de cinco destinos.

1. Na seção **Perfil do IAM**, configure o perfil de replicação:

   1. Em **Método de seleção de perfil do IAM**, escolha uma das seguintes opções:
      + **Criar um perfil do IAM**: o Amazon S3 cria um perfil com as permissões necessárias para replicação.
      + **Escolher entre perfis do IAM existentes**: selecione um perfil existente que tenha as permissões de replicação necessárias.
      + **Inserir ARN do perfil do IAM**: insira manualmente o ARN de um perfil do IAM existente.

   1. Se você optou por **Escolher entre perfis do IAM existentes**, selecione um perfil na lista suspensa **Perfil do IAM**.

   1. (Opcional) Escolha **Visualizar** para analisar as permissões do perfil selecionado no console do IAM.

1. Escolha **Criar configuração de replicação**.

   Após a criação da configuração de replicação, o Amazon S3 inicia o processo de preenchimento inicial. É possível monitorar o status da replicação na seção **Status de replicação da tabela**, que exibe informações sobre cada destino, como status da replicação, ARN da tabela de destino e última vez em que os metadados foram replicados.

### Como configurar a replicação em nível de tabela
<a name="s3-tables-replication-table-level-console"></a>

Este procedimento mostra como criar uma replicação de tabela usando o console do Amazon S3. Uma configuração de replicação de tabela se aplica a uma tabela específica e substitui qualquer configuração de replicação em nível de bucket para essa tabela.

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

1. No painel de navegação, escolha **Buckets de tabela**.

1. Na lista **Buckets de tabela**, escolha o nome do bucket de tabela que contém a tabela que você deseja replicar.

1. Escolha a guia **Tabelas**.

1. Na lista **Tabelas**, escolha o nome da tabela que você deseja replicar.

1. Escolha a guia **Gerenciamento**.

1. Na seção **Configuração de replicação de tabelas**, escolha **Criar configuração de replicação de tabela**.

1. Na seção **Destino**, configure os destinos da replicação:

   1. No campo **ARN do bucket de tabela**, insira o ARN do bucket de tabela de destino. O formato de é: `arn:aws:s3tables:{{region}}:{{account-id}}:bucket/{{table-bucket-name}}`

      Também é possível escolher **Procurar no S3** para selecionar um bucket de tabela de sua conta.

   1. (Opcional) Para adicionar outros destinos, escolha **Adicionar destino**. É possível adicionar mais quatro buckets de tabela, no máximo, para um total de cinco destinos.

1. Na seção **Perfil do IAM**, configure o perfil de replicação:

   1. Em **Método de seleção de perfil do IAM**, escolha uma das seguintes opções:
      + **Criar um perfil do IAM**: o Amazon S3 cria um perfil com as permissões necessárias para replicação.
      + **Escolher entre perfis do IAM existentes**: selecione um perfil existente que tenha as permissões de replicação necessárias.
      + **Inserir ARN do perfil do IAM**: insira manualmente o ARN de um perfil do IAM existente.

   1. Se você optou por **Escolher entre perfis do IAM existentes**, selecione um perfil na lista **Perfil do IAM**.

   1. (Opcional) Escolha **Visualizar** para analisar as permissões do perfil selecionado no console do IAM.

1. Escolha **Criar configuração de replicação**.

### O que ocorre em seguida?
<a name="s3-tables-replication-what-happens-next"></a>

Após a criação da configuração de replicação:
+ O Amazon S3 inicia o processo inicial de preenchimento, criando tabelas de réplica em cada bucket de destino.
+ O status da replicação muda para **Replicando** depois que o preenchimento é iniciado.
+ É possível monitorar o andamento da replicação na guia **Gerenciamento**.
+ O tempo de replicação inicial depende do tamanho da tabela de origem.

## Configurar a replicação usando a AWS CLI
<a name="s3-tables-replication-cli"></a>

Este procedimento mostra como configurar a replicação usando a AWS CLI. Substitua os IDs de conta, as regiões e os nomes de bucket por seus valores reais. Adicione todos os buckets de destino às permissões.

### Etapa 1: criar um perfil do IAM para replicação
<a name="s3-tables-replication-create-iam-role"></a>

Primeiro, crie um perfil do IAM que o Amazon S3 possa assumir para replicar tabelas.

1. Crie um documento de política de confiança que permita que a funcionalidade Tabelas do S3 assuma o perfil. Salve-o como `trust-policy.json`:

   ```
   {
     "Version": "2012-10-17"		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "replication.s3tables.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. Crie o perfil do IAM:

   ```
   aws iam create-role \
       --role-name {{S3TablesReplicationRole}} \
       --assume-role-policy-document file://trust-policy.json \
       --description "Role for S3 Tables replication"
   ```

1. Crie uma política de permissões que conceda permissões de replicação. Salve-a como `replication-permissions.json`:

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:GetTable",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableMaintenanceConfiguration",
                   "s3tables:GetTableData"
               ],
               "Resource": "arn:aws:s3tables:{{us-east-2}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket-source}}/table/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTables"
               ],
               "Resource": "arn:aws:s3tables:{{us-east-2}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket-source}}"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:{{us-east-2}}:{{444455556666}}:bucket/{{amzn-s3-demo-table-bucket-destination}}"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:{{us-east-2}}:{{444455556666}}:bucket/{{amzn-s3-demo-table-bucket-destination}}/table/*"
           }
       ]
   }
   ```

1. Anexe a política de permissões ao perfil:

   ```
   aws iam put-role-policy \
       --role-name {{S3TablesReplicationRole}} \
       --policy-name {{S3TablesReplicationPermissions}} \
       --policy-document file://replication-permissions.json
   ```

1. (Opcional) Se estiver usando a criptografia do KMS, adicione permissões do KMS à política:

   ```
   {
     "Effect": "Allow",		 	 	 
     "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:Encrypt"
   
     ],
     "Resource": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{SOURCE-KEY-ID}}"
   },
   {
     "Effect": "Allow",
     "Action": [
       "kms:Decrypt",
       "kms:GenerateDataKey"
     ],
     "Resource": [
       "arn:aws:kms:{{us-west-2}}:{{444455556666}}:key/{{DESTINATION-KEY-ID-1}}"
     ]
   }
   ```

### (Somente entre contas) Etapa 2: configurar uma política de bucket de destino
<a name="s3-tables-replication-cross-account-policy"></a>

Se você estiver replicando para uma conta da AWS diferente, a conta de destino deverá conceder permissões à conta de origem.

1. Na conta de destino, crie uma política de bucket para o bucket de tabela de destino. Salve-a como `destination-bucket-policy.json`:

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::{{444455556666}}:role/{{cross-account-test}}"
               },
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:{{us-east-2}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket-cross-account-destination}}/table/*"
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::{{444455556666}}:role/{{cross-account-test}}"
               },
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:{{us-east-2}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket-cross-account-destination}}"
           }
       ]
   }
   ```

1. Aplique a política usando a API da funcionalidade Tabelas do S3:

   ```
   aws s3tables put-table-bucket-policy \
       --table-bucket-arn arn:aws:s3tables:{{us-west-2}}:{{444455556666}}:bucket/{{{{amzn-s3-demo-table-bucket-cross-account-destination}}}} \
       --policy file://{{destination-bucket-policy.json}} \
       --profile {{destination-account}}
   ```

1. Modifique a chave do KMS de origem para permitir a replicação e a manutenção de tabelas do S3:

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Id": "key-consolepolicy-3",
     "Statement": [
           {
               "Sid": "allow replication to decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "{{replication_role_arn}}"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:{{111122223333}}:key/SOURCE-KEY-ID"
           },
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:{{111122223333}}:key/SOURCE-KEY-ID"
           }
     ]
   }
   ```

1. Da mesma forma, adicione permissões em sua política de chave do KMS de destino.

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Id": "key-policy-3",
       "Statement": [
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:{{444455556666}}:key/DESTINATION-KEY-ID-1"
           },
           {
               "Sid": "allow replication to encrypt/decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "{{replication_role_arn}}"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:{{444455556666}}:key/DESTINATION-KEY-ID-1"
           }
       ]
   ```

### Etapa 3: criar uma configuração de replicação
<a name="s3-tabales-replication-cli"></a>

É possível a AWS CLI para criar uma configuração de replicação em nível de bucket de tabela ou em nível de tabela. Para ter mais informações, consulte os procedimentos a seguir.

#### Criar uma configuração de replicação em nível de bucket
<a name="s3-tables-replication-bucket-level-cli"></a>

Use essa abordagem para replicar todas as tabelas em um bucket.

1. Crie um arquivo de configuração de replicação. Salve-o como `bucket-replication-config.json`:  
**Example : destino único na mesma conta**  

   ```
   {
     "role": "arn:aws:iam::{{111122223333}}:role/{{S3TablesReplicationRole}}",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{us-west-2}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket-dr}}"
           }
         ]
       }
     ]
   }
   ```  
**Example : vários destinos em todas as regiões**  

   ```
   {
     "role": "arn:aws:iam::{{111122223333}}:role/{{S3TablesReplicationRole}}",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{us-west-2}}:{{111122223333}}:bucket/{{{{amzn-s3-demo-table-bucket}}-dr}}"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{eu-west-1}}:{{111122223333}}:bucket/{{{{amzn-s3-demo-table-bucket}}-eu}}"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{ap-south-1}}:{{111122223333}}:bucket/{{{{amzn-s3-demo-table-bucket}}-apac}}"
           }
         ]
       }
     ]
   }
   ```  
**Example : replicação entre contas**  

   ```
   {
     "role": "arn:aws:iam::{{111122223333}}:role/{{S3TablesReplicationRole}}",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{us-east-1}}:{{444455556666}}:bucket/{{{{amzn-s3-demo-table-bucket}}-partner}}"
           }
         ]
       }
     ]
   }
   ```

1. Aplique uma configuração de replicação em nível de bucket:

   ```
   aws s3tables put-table-bucket-replication \
       --table-bucket-arn arn:aws:s3tables:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}} \
       --configuration file://bucket-replication-config.json
   ```

   Saída esperada:

   ```
   {
     "versionToken": "{{3HL4kqtJl40Nr8X8gdRQBpUMLUo}}",
     "status": "Success"
   }
   ```

#### Criar uma configuração de replicação em nível de tabela
<a name="s3-tables-replication-table-level-cli"></a>

Use essa abordagem para replicar tabelas específicas ou substituir a replicação em nível de bucket.

1. Crie um arquivo de configuração de replicação. Salve-o como `table-replication-config.json`:  
**Example : replicação de tabela única**  

   ```
   {
     "role": "arn:aws:iam::{{111122223333}}:role/{{S3TablesReplicationRole}}",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{us-west-2}}:{{111122223333}}:bucket/{{{{amzn-s3-demo-table-bucket-}}analytics-bucket}}"
           }
         ]
       }
     ]
   }
   ```  
**Example : tabela com vários destinos**  

   ```
   {
     "role": "arn:aws:iam::{{111122223333}}:role/{{S3TablesReplicationRole}}",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{us-west-2}}:{{111122223333}}:bucket/{{{{amzn-s3-demo-table-bucket-}}dr}}"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:{{eu-west-1}}:{{111122223333}}:bucket/{{{{amzn-s3-demo-table-bucket}}-eu}}"
           }
         ]
       }
     ]
   }
   ```

1. Aplique uma configuração de replicação em nível de tabela:

   ```
   aws s3tables put-table-replication \
       --table-arn arn:aws:s3tables:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}}/table/{{{{amzn-s3-demo-table-bucket-}}sales-data}} \
       --configuration file://{{table-replication-config.json}}
   ```

   Saída esperada:

   ```
   {
     "versionToken": "{{xT2LZkFZ0UuTC2h8XqtGLx2Ak6M}}",
     "status": "Success"
   }
   ```