

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á.

# Destinos para a migração de dados
<a name="CHAP_Target"></a>

AWS Database Migration Service (AWS DMS) pode usar muitos dos bancos de dados mais populares como destino para a replicação de dados. O destino pode estar em uma instância do Amazon Elastic Compute Cloud (Amazon EC2), em uma instância do Amazon Relational Database Service (Amazon RDS) ou em um banco de dados local. 

Para obter uma lista abrangente de destinos válidos, consulte [Destinos do AWS DMS](CHAP_Introduction.Targets.md).

**nota**  
AWS DMS não oferece suporte à migração entre AWS regiões para os seguintes tipos de endpoints de destino:  
Amazon DynamoDB
 OpenSearch Serviço Amazon
Amazon Kinesis Data Streams
O Amazon Aurora PostgreSQL Limitless está disponível como destino para (). AWS Database Migration Service AWS DMS Para obter mais informações, consulte [Usando um banco de dados PostgreSQL como destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) para. AWS Database Migration Service

**Topics**
+ [Usando um banco de dados Oracle como alvo para AWS Database Migration Service](CHAP_Target.Oracle.md)
+ [Usando um banco de dados Microsoft SQL Server como destino para AWS Database Migration Service](CHAP_Target.SQLServer.md)
+ [Usando um banco de dados PostgreSQL como alvo para AWS Database Migration Service](CHAP_Target.PostgreSQL.md)
+ [Usando um banco de dados compatível com MySQL como alvo para AWS Database Migration Service](CHAP_Target.MySQL.md)
+ [Usando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service](CHAP_Target.Redshift.md)
+ [Usando um banco de dados SAP ASE como alvo para AWS Database Migration Service](CHAP_Target.SAP.md)
+ [Usando o Amazon S3 como destino para AWS Database Migration Service](CHAP_Target.S3.md)
+ [Usando um banco de dados do Amazon DynamoDB como destino para AWS Database Migration Service](CHAP_Target.DynamoDB.md)
+ [Usando o Amazon Kinesis Data Streams como alvo para AWS Database Migration Service](CHAP_Target.Kinesis.md)
+ [Usando o Apache Kafka como alvo para AWS Database Migration Service](CHAP_Target.Kafka.md)
+ [Usando um cluster do Amazon OpenSearch Service como destino para AWS Database Migration Service](CHAP_Target.Elasticsearch.md)
+ [Usando o Amazon DocumentDB como destino para o AWS Database Migration Service](CHAP_Target.DocumentDB.md)
+ [Usando o Amazon Neptune como alvo para AWS Database Migration Service](CHAP_Target.Neptune.md)
+ [Usando o Redis OSS como alvo para AWS Database Migration Service](CHAP_Target.Redis.md)
+ [Usando o Babelfish como alvo para AWS Database Migration Service](CHAP_Target.Babelfish.md)
+ [Usando o Amazon Timestream como alvo para AWS Database Migration Service](CHAP_Target.Timestream.md)
+ [Usando o Amazon RDS para Db2 e o IBM Db2 LUW como destino para AWS DMS](CHAP_Target.DB2.md)

# Usando um banco de dados Oracle como alvo para AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

Você pode migrar dados para destinos de banco de dados Oracle usando AWS DMS, seja de outro banco de dados Oracle ou de um dos outros bancos de dados suportados. É possível utilizar Secure Sockets Layer (SSL) para criptografar as conexões entre o endpoint do Oracle e a instância de replicação. Para obter mais informações sobre o uso de SSL com um endpoint Oracle, consulte. [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md) AWS DMS também suporta o uso da criptografia transparente de dados (TDE) da Oracle para criptografar dados em repouso no banco de dados de destino, pois o Oracle TDE não exige uma chave ou senha de criptografia para gravar no banco de dados.

Para obter informações sobre as versões do Oracle que oferecem AWS DMS suporte como destino, consulte[Metas para AWS DMS](CHAP_Introduction.Targets.md). 

Ao utilizar o Oracle como destino, pressupomos que os dados devam ser migrados para o esquema ou usuário utilizado para a conexão de destino. Se você quiser migrar dados para um esquema diferente, use uma transformação de esquema. Por exemplo, suponha que seu endpoint de destino se conecte ao usuário `RDSMASTER` e você queira migrar do usuário `PERFDATA1` para `PERFDATA2`. Nesse caso, crie uma transformação como a seguinte.

```
{
   "rule-type": "transformation",
   "rule-id": "2",
   "rule-name": "2",
   "rule-action": "rename",
   "rule-target": "schema",
   "object-locator": {
   "schema-name": "PERFDATA1"
},
"value": "PERFDATA2"
}
```

Ao usar o Oracle como destino, AWS DMS migra todas as tabelas e índices para os espaços de tabela padrão e de índice no destino. Para migrar tabelas e índices para diferentes espaços para tabela de índices e tabelas, utilize uma transformação de espaço para tabela para fazer isso. Por exemplo, suponha que você tenha um conjunto de tabelas no esquema `INVENTORY` atribuído a alguns espaços de tabela na origem do Oracle. Para a migração, você deseja atribuir todas essas tabelas a um único espaço de tabela `INVENTORYSPACE` no destino. Nesse caso, crie uma transformação como a seguinte.

```
{
   "rule-type": "transformation",
   "rule-id": "3",
   "rule-name": "3",
   "rule-action": "rename",
   "rule-target": "table-tablespace",
   "object-locator": {
      "schema-name": "INVENTORY",
      "table-name": "%",
      "table-tablespace-name": "%"
   },
   "value": "INVENTORYSPACE"
}
```

Para obter mais informações sobre transformações, consulte [Especificar a seleção de tabelas e as regras de transformação utilizando JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Se o Oracle for origem e destino, será possível preservar as atribuições de tablespace de tabela ou índice existentes definindo o atributo de conexão extra de origem Oracle, `enableHomogenousTablespace=true`. Para obter mais informações, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib).

Para obter detalhes adicionais sobre como trabalhar com bancos de dados Oracle como destino AWS DMS, consulte as seções a seguir: 

**Topics**
+ [Limitações do Oracle como alvo para AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [Privilégios da conta de usuário necessários para utilizar o Oracle como destino](#CHAP_Target.Oracle.Privileges)
+ [Configurando um banco de dados Oracle como destino para AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [Configurações de endpoint ao usar o Oracle como destino para AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Tipos de dados de destino do Oracle](#CHAP_Target.Oracle.DataTypes)

## Limitações do Oracle como alvo para AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

Veja a seguir as limitações ao utilizar o Oracle como destino para a migração de dados:
+ AWS DMS não cria esquema no banco de dados Oracle de destino. Você deve criar todos os esquemas que deseja no banco de dados de destino do Oracle. O nome do esquema já deve existir para o destino do Oracle. As tabelas do esquema de origem são importadas para o usuário ou esquema, que é AWS DMS usado para se conectar à instância de destino. Para migrar vários esquemas, crie várias tarefas de replicação. Também é possível migrar dados para diferentes esquemas em um destino. Para fazer isso, você precisa usar as regras de transformação do esquema nos mapeamentos da AWS DMS tabela.
+ AWS DMS não suporta a `Use direct path full load` opção de tabelas com INDEXTYPE CONTEXT. Como solução, use o carregamento de matriz. 
+ Com a opção de aplicar o lote otimizado, o carregamento na tabela de alterações líquidas usa um caminho direto, que não é compatível com o tipo XML. Como solução, use o modo de aplicação transacional.
+ As strings vazias migradas de bancos de dados de origem podem ser tratadas de forma diferente pelo destino do Oracle (convertido em strings de um espaço, por exemplo). Isso pode resultar no relatório de AWS DMS validação de uma incompatibilidade.
+ É possível expressar o número total de colunas por tabela compatível com o modo de aplicação otimizado em lote, utilizando a seguinte fórmula:

  ```
  2 * columns_in_original_table + columns_in_primary_key <= 999
  ```

  Por exemplo, se a tabela original tiver 25 colunas e a sua chave primária consistir em 5 colunas, o número total de colunas será 55. Se uma tabela exceder o número suportado de colunas, todas as alterações serão aplicadas no one-by-one modo.
+ AWS DMS não oferece suporte ao banco de dados autônomo no Oracle Cloud Infrastructure (OCI).
+ No modo de aplicação transacional, um destino Oracle pode processar instruções do DML de até 32 KB. Embora esse limite seja suficiente para muitos casos de uso, instruções do DML que excedam 32 KB falharão com o erro: “ORA-01460: unimplemented or unreasonable conversion requested”. Para resolver esse problema, você deve habilitar o recurso de aplicação em lote definindo a configuração da tarefa `BatchApplyEnabled` como `true`. A aplicação em lote reduz o tamanho geral da declaração, permitindo que você ignore a limitação de 32 KB. Para obter mais informações, consulte [Configurações de tarefa de metadados de destino](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md).
+ AWS DMS A carga total do caminho direto para tabelas LOB pode falhar com o erro ORA-39777 devido a requisitos especiais de tratamento de dados LOB. Esse erro ocorre durante o processo de carregamento do caminho direto e pode interromper as tarefas de migração que envolvem colunas de LOB. Para resolver, desabilite a configuração `useDirectPathFullLoad` no endpoint de destino e repita a operação de carregamento.

## Privilégios da conta de usuário necessários para utilizar o Oracle como destino
<a name="CHAP_Target.Oracle.Privileges"></a>

Para usar um alvo Oracle em uma AWS Database Migration Service tarefa, conceda os seguintes privilégios no banco de dados Oracle. É possível conceder esses privilégios à conta do usuário especificada nas definições do banco de dados Oracle do AWS DMS.
+ SELECT ANY TRANSACTION 
+ SELECT on V\$1NLS\$1PARAMETERS 
+ SELECT on V\$1TIMEZONE\$1NAMES 
+ SELECT on ALL\$1INDEXES 
+ SELECT on ALL\$1OBJECTS 
+ SELECT on DBA\$1OBJECTS
+ SELECT on ALL\$1TABLES 
+ SELECT on ALL\$1USERS 
+ SELECT on ALL\$1CATALOG 
+ SELECT on ALL\$1CONSTRAINTS 
+ SELECT on ALL\$1CONS\$1COLUMNS 
+ SELECT on ALL\$1TAB\$1COLS 
+ SELECT on ALL\$1IND\$1COLUMNS 
+ DROP ANY TABLE 
+ SELECT ANY TABLE
+ INSERT ANY TABLE 
+ UPDATE ANY TABLE
+ CREATE ANY VIEW
+ DROP ANY VIEW
+ CREATE ANY PROCEDURE
+ ALTER ANY PROCEDURE
+ DROP ANY PROCEDURE
+ CREATE ANY SEQUENCE
+ ALTER ANY SEQUENCE
+ DROP ANY SEQUENCE 
+ DELETE ANY TABLE

Para os requisitos a seguir, conceda estes privilégios adicionais:
+ Para utilizar uma lista de tabela específica, conceda SELECT em qualquer tabela replicada e ALTER em qualquer tabela replicada.
+ Para permitir que um usuário crie uma tabela no espaço de tabela padrão, conceda o privilégio GRANT UNLIMITED TABLESPACE.
+ Para fazer logon, conceda o privilégio CREATE SESSION.
+ Ao utilizar um caminho direto (que é o padrão para carga máxima), `GRANT LOCK ANY TABLE to dms_user;`.
+ Se o esquema for diferente ao utilizar o modo de preparação de tabela “DROP e CREATE”, `GRANT CREATE ANY INDEX to dms_user;`.
+ Para alguns cenários de carga máxima, é possível escolher a opção “DROP and CREATE table” ou “TRUNCATE before loading” em que um esquema de tabela de destino é diferente daquele do usuário do DMS. Nesse caso, conceda DROP ANY TABLE.
+ Para armazenar alterações em tabelas de alterações ou em uma tabela de auditoria em que o esquema da tabela de destino é diferente daquele do usuário do DMS, conceda CREATE ANY TABLE e CREATE ANY INDEX.
+ Para validar colunas de LOB com o recurso de validação, conceda o privilégio EXECUTE em `SYS.DBMS_CRYPTO` ao usuário do DMS.

### Privilégios de leitura necessários para o AWS Database Migration Service banco de dados de destino
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

A conta AWS DMS do usuário deve receber permissões de leitura para as seguintes tabelas do DBA:
+ SELECT on DBA\$1USERS
+ SELECT on DBA\$1TAB\$1PRIVS
+ SELECT on DBA\$1OBJECTS
+ SELECT on DBA\$1SYNONYMS
+ SELECT on DBA\$1SEQUENCES
+ SELECT on DBA\$1TYPES
+ SELECT on DBA\$1INDEXES
+ SELECT on DBA\$1TABLES
+ SELECT on DBA\$1TRIGGERS
+ SELECT on SYS.DBA\$1REGISTRY

Se algum dos privilégios necessários não puder ser concedido a V\$1xxx, conceda-o a V\$1\$1xxx.

### Avaliações de pré-migração
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Para utilizar as avaliações de pré-migração listadas em [Avaliações do Oracle](CHAP_Tasks.AssessmentReport.Oracle.md) com o Oracle como destino, adicione as seguintes permissões à conta de usuário especificada no endpoint de destino do banco de dados Oracle:

```
GRANT SELECT ON V_$INSTANCE TO dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

## Configurando um banco de dados Oracle como destino para AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Antes de usar um banco de dados Oracle como destino de migração de dados, você deve fornecer uma conta de usuário Oracle para AWS DMS o. A conta do usuário deve ter read/write privilégios no banco de dados Oracle, conforme especificado em[Privilégios da conta de usuário necessários para utilizar o Oracle como destino](#CHAP_Target.Oracle.Privileges).

## Configurações de endpoint ao usar o Oracle como destino para AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do Oracle de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Oracle como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Oracle.html)

## Tipos de dados de destino do Oracle
<a name="CHAP_Target.Oracle.DataTypes"></a>

Um banco de dados Oracle de destino usado com AWS DMS suporta a maioria dos tipos de dados Oracle. A tabela a seguir mostra os tipos de dados de destino da Oracle que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados. Para obter mais informações sobre como visualizar o tipo de dados mapeado da origem, consulte a seção relativa à origem que você está usando.


|  AWS DMS tipo de dados  |  Tipo de dados do Oracle  | 
| --- | --- | 
|  BOOLEAN  |  NUMBER (1)  | 
|  BYTES  |  RAW (tamanho)  | 
|  DATE  |  DATETIME  | 
|  TIME  | TIMESTAMP (0) | 
|  DATETIME  |  TIMESTAMP (escala)  | 
|  INT1  | NUMBER (3) | 
|  INT2  |  NUMBER (5)  | 
|  INT4  | NUMBER (10) | 
|  INT8  |  NUMBER (19)  | 
|  NUMERIC  |  NUMBER (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  | FLOAT | 
|  STRING  |  Com indicação de data: DATE  Com indicação de tempo: TIMESTAMP  Com indicação de time stamp: TIMESTAMP  Com indicação de time stamp com fuso horário: TIMESTAMP WITH TIMEZONE  Com indicação de time stamp com fuso horário local: TIMESTAMP WITH LOCAL TIMEZONE Com indicação de intervalo de tempo em anos e meses: INTERVAL YEAR TO MONTH  Com indicação de intervalo de tempo em dias e segundos: INTERVAL DAY TO SECOND  Se comprimento > 4.000: CLOB Em todos os outros casos: VARCHAR2 (comprimento)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  Se o comprimento > 2000: NCLOB Em todos os outros casos: NVARCHAR2 (comprimento)  | 
|  BLOB  |  BLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de BLOBs para uma tarefa específica. Os tipos de dados BLOB são compatíveis somente com tabelas que possuem uma chave primária  | 
|  CLOB  |  CLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de CLOBs para uma tarefa específica. Durante uma captura de dados de alteração (CDC), os tipos de dados CLOB são compatíveis somente em tabelas que incluem uma chave primária. STRING Um tipo de VARCHAR2 dados Oracle na origem com um tamanho declarado maior que 4000 bytes mapeia por meio do AWS DMS CLOB para uma STRING no destino Oracle.  | 
|  NCLOB  |  NCLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de NCLOBs para uma tarefa específica. Durante uma captura de dados de alteração (CDC), os tipos de dados NCLOB são compatíveis somente com tabelas que possuem uma chave primária. WSTRING Um tipo de VARCHAR2 dados Oracle na origem com um tamanho declarado maior que 4000 bytes mapeia por meio do AWS DMS NCLOB para um WSTRING no destino Oracle.   | 
| XMLTYPE |  O tipo de dados de destino XMLTYPE só é relevante em tarefas de Oracle-to-Oracle replicação. Quando o banco de dados de origem é o Oracle, os tipos de dados de origem são replicados como estão para o destino do Oracle. Por exemplo, um tipo de dados XMLTYPE na origem é criado como um tipo de dados XMLTYPE no destino.  | 

# Usando um banco de dados Microsoft SQL Server como destino para AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

Você pode migrar dados para bancos de dados do Microsoft SQL Server usando o. AWS DMS Com um banco de dados SQL Server como destino, é possível migrar dados de outro banco de dados SQL Server ou de um dos outros bancos de dados compatíveis.

Para obter informações sobre as versões do SQL Server que oferecem AWS DMS suporte como destino, consulte[Metas para AWS DMS](CHAP_Introduction.Targets.md). 

AWS DMS oferece suporte às edições locais e do Amazon RDS do Enterprise, Standard, Workgroup e Developer.

Para obter detalhes adicionais sobre como trabalhar com bancos AWS DMS de dados de destino do SQL Server, consulte o seguinte.

**Topics**
+ [Limitações no uso do SQL Server como alvo para AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [Requisitos de segurança ao usar o SQL Server como alvo para AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [Configurações de endpoint ao usar o SQL Server como destino para AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Tipos de dados de destino do Microsoft SQL Server](#CHAP_Target.SQLServer.DataTypes)

## Limitações no uso do SQL Server como alvo para AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

As seguintes limitações se aplicam à utilização de um banco de dados SQL Server como destino do AWS DMS:
+ Ao criar manualmente uma tabela de destino do SQL Server com uma coluna calculada, a replicação de carga máxima não é compatível ao utilizar o utilitário de cópia em massa BCP. Para utilizar a replicação de carga máxima, desative o carregamento de BCP definindo o atributo de conexão adicional (ECA) `'useBCPFullLoad=false'` no endpoint. Para obter informações sobre a configuração ECAs em endpoints, consulte[Criar endpoints de origem e de destino](CHAP_Endpoints.Creating.md). Para obter mais informações sobre como trabalhar com o BCP, consulte a [documentação do Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server).
+ Ao replicar tabelas com tipos de dados espaciais do SQL Server (GEOMETRIA e GEOGRAFIA), AWS DMS substitui qualquer identificador de referência espacial (SRID) que você possa ter inserido pelo SRID padrão. O SRID padrão é 0 para GEOMETRY e 4326 para GEOGRAPHY.
+ Tabelas temporais não são compatíveis. A migração de tabelas temporais pode funcionar com uma tarefa somente replicação no modo de aplicação transacional se essas tabelas forem criadas manualmente no destino.
+ Atualmente, `boolean` os tipos de dados em uma fonte do PostgreSQL são migrados para SQLServer um destino como o tipo de dados com valores `bit` inconsistentes. 

  Como alternativa, faça o seguinte:
  + Pré-crie a tabela com um tipo de `VARCHAR(1)` dados para a coluna (ou deixe AWS DMS criar a tabela). Depois, deixe o processamento downstream tratar um "F" como Falso e um "T" como Verdadeiro.
  + Para evitar a necessidade de alterar o processamento downstream, adicione uma regra de transformação à tarefa para alterar os valores “F” para “0" e os valores “T” para 1 e armazená-los como o tipo de dados de bits do servidor SQL.
+ AWS DMS não oferece suporte ao processamento de alterações para definir a nulidade da coluna (usando a `ALTER COLUMN [SET|DROP] NOT NULL` cláusula com instruções). `ALTER TABLE`
+ A Autenticação do Windows não é compatível.

## Requisitos de segurança ao usar o SQL Server como alvo para AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

A seguir, descrevemos os requisitos de segurança para uso AWS DMS com um destino do Microsoft SQL Server:
+ A conta de AWS DMS usuário deve ter pelo menos a função de `db_owner` usuário no banco de dados do SQL Server ao qual você está se conectando.
+ Um administrador de sistema do SQL Server deve fornecer essa permissão a todas as contas de usuário do AWS DMS .

## Configurações de endpoint ao usar o SQL Server como destino para AWS DMS
<a name="CHAP_Target.SQLServer.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do SQL Server de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o SQL Server como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.SQLServer.html)

## Tipos de dados de destino do Microsoft SQL Server
<a name="CHAP_Target.SQLServer.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do Microsoft SQL Server que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados. Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de dados  |  Tipo de dados do SQL Server  | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(tamanho)  | 
|  DATE  |  No SQL Server 2008 e superior, utilize DATE. Para versões anteriores, se a escala for menor ou igual a 3, use DATETIME. Em todos os demais casos, use VARCHAR (37).  | 
|  TIME  |  Para o SQL Server 2008 e superior, use DATETIME2 (%d). Para versões anteriores, se a escala for menor ou igual a 3, use DATETIME. Em todos os demais casos, use VARCHAR (37).  | 
|  DATETIME  |  Para o SQL Server 2008 e superior, use DATETIME2 (escala).  Para versões anteriores, se a escala for menor ou igual a 3, use DATETIME. Em todos os demais casos, use VARCHAR (37).  | 
|  INT1  | SMALLINT | 
|  INT2  |  SMALLINT  | 
|  INT4  | INT | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  NUMERIC (p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  | FLOAT | 
|  STRING  |  Se a coluna for de data ou hora, faça o seguinte:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.SQLServer.html) Se a coluna não é uma data ou hora, use VARCHAR (tamanho).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (tamanho)  | 
|  BLOB  |  VARBINARY(máximo) IMAGE Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de BLOBs para uma tarefa específica. AWS DMS suporta tipos de dados BLOB somente em tabelas que incluem uma chave primária.  | 
|  CLOB  |  VARCHAR(máximo) Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de CLOBs para uma tarefa específica. Durante uma captura de dados de alteração (CDC), o AWS DMS é compatível com os tipos de dados CLOB somente em tabelas que incluem uma chave primária.  | 
|  NCLOB  |  NVARCHAR(máximo) Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de NCLOBs para uma tarefa específica. Durante o CDC, AWS DMS suporta tipos de dados NCLOB somente em tabelas que incluem uma chave primária.  | 

# Usando um banco de dados PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL"></a>

Você pode migrar dados para bancos de dados PostgreSQL AWS DMS usando, seja de outro banco de dados PostgreSQL ou de um dos outros bancos de dados compatíveis. 

Para obter informações sobre as versões do PostgreSQL AWS DMS que oferecem suporte como destino, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md)

**nota**  
O Amazon Aurora Sem Servidor está disponível como destino para o Amazon Aurora compatível com PostgreSQL. Para ter mais informações sobre o Amazon Aurora Sem Servidor, consulte [Usar o Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) no *Guia do usuário do Amazon Aurora*.
Os clusters de banco de dados do Aurora Sem Servidor são acessíveis apenas de uma Amazon VPC e não podem utilizar um [Endereço IP público](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html). Portanto, se você tiver uma instância de replicação em uma região diferente da do Aurora PostgreSQL Sem Servidor, configure o [Emparelhamento da VPC](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer). Caso contrário, verifique a disponibilidade das [regiões](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) do Aurora PostgreSQL Sem Servidor e decida utilizar uma dessas regiões para o Aurora PostgreSQL Sem Servidor e a instância de replicação.
O recurso Babelfish está incorporado ao Amazon Aurora sem custo adicional. Para obter mais informações, consulte [Utilizar o Babelfish para Aurora PostgreSQL como destino do AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish).

AWS DMS adota uma table-by-table abordagem ao migrar dados da origem para o destino na fase de carga total. Não é possível garantir a ordem da tabela durante a fase de Carregamento total. As tabelas ficam dessincronizadas durante a fase de Carregamento total e enquanto transações em cache de tabelas individuais estão sendo aplicadas. Como resultado, restrições de integridade referencial ativa podem gerar falhas de tarefas durante a fase de Carregamento total.

No PostgreSQL, chaves externas (restrições de integridade referencial) são implementadas usando triggers. Durante a fase de carga total, AWS DMS carrega cada tabela uma de cada vez. Recomendamos que você desative as restrições de chave externa durante um carregamento total, usando um dos seguintes métodos:
+ Desative temporariamente todos os triggers da instância e conclua o carregamento total.
+ Use o parâmetro `session_replication_role` no PostgreSQL.

Em determinado momento, um trigger pode estar em um dos seguintes estados: `origin`, `replica`, `always`, ou `disabled`. Quando o parâmetro `session_replication_role` é definido como `replica`, apenas triggers no estado `replica` ficam ativos, e eles são disparados quando chamados. Caso contrário, os triggers permanecem inativos. 

PostgreSQL tem um mecanismo à prova de falhas para impedir que uma tabela seja truncada, mesmo quando `session_replication_role` é definido. É possível utilizar isso como alternativa para desativar os acionadores, para ajudar a executar a carga máxima até a conclusão. Para isso, defina o modo de preparação da tabela de destino `DO_NOTHING`. Caso contrário, as operações DROP e TRUNCATE falharão quando houver restrições de chave externa.

No Amazon RDS, é possível controlar esse parâmetro utilizando um grupo de parâmetros. Para uma instância do PostgreSQL em execução no Amazon EC2, é possível definir o parâmetro diretamente.



Para obter detalhes adicionais sobre como trabalhar com um banco de dados PostgreSQL como destino, consulte as AWS DMS seções a seguir: 

**Topics**
+ [Limitações no uso do PostgreSQL como alvo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Limitações no uso do Amazon Aurora PostgreSQL Limitless como destino para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [Requisitos de segurança ao usar um banco de dados PostgreSQL como alvo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como destino para AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [Tipos de dados de destino do PostgreSQL](#CHAP_Target.PostgreSQL.DataTypes)
+ [Usando o Babelfish para Aurora PostgreSQL como alvo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## Limitações no uso do PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

As seguintes limitações aplicam-se à utilização de um banco de dados PostgreSQL como destino para o AWS DMS:
+ Para migrações heterogêneas, o tipo de dados JSON é convertido internamente no tipo de dados CLOB nativo.
+ Em uma migração do Oracle para o PostgreSQL, se uma coluna no Oracle contiver um caractere NULL (valor hexadecimal U\$10000), converterá o caractere NULL em um espaço (valor hexadecimal U\$10020) AWS DMS . Isso deve-se a uma limitação do PostgreSQL.
+ AWS DMS não oferece suporte à replicação para uma tabela com um índice exclusivo criado com a função coalesce.
+ Se suas tabelas usarem sequências, atualize o valor de `NEXTVAL` para cada sequência no banco de dados de destino depois de interromper a replicação do banco de dados de origem. AWS DMS copia dados do seu banco de dados de origem, mas não migra sequências para o destino durante a replicação contínua.

## Limitações no uso do Amazon Aurora PostgreSQL Limitless como destino para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

As seguintes limitações se aplicam ao usar o Amazon Aurora PostgreSQL Limitless como destino para: AWS DMS
+ AWS DMS A validação de dados não é compatível com o Amazon Aurora PostgreSQL Limitless.
+ AWS DMS migra as tabelas de origem como tabelas padrão, que não são distribuídas. Após a migração, você pode converter essas tabelas padrão em tabelas ilimitadas seguindo o guia oficial de conversão.

## Requisitos de segurança ao usar um banco de dados PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

Para fins de segurança, a conta de usuário usada para a migração de dados deve ser um usuário registrado em qualquer banco de dados PostgreSQL que você use como destino.

Seu endpoint de destino do PostgreSQL exige permissões mínimas de usuário para executar AWS DMS uma migração. Veja os exemplos a seguir.

```
    CREATE USER newuser WITH PASSWORD 'your-password';
    ALTER SCHEMA schema_name OWNER TO newuser;
```

Ou

```
    GRANT USAGE ON SCHEMA schema_name TO myuser;
    GRANT CONNECT ON DATABASE postgres to myuser;
    GRANT CREATE ON DATABASE postgres TO myuser;
    GRANT CREATE ON SCHEMA schema_name TO myuser;
    GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO myuser;
    GRANT TRUNCATE ON schema_name."BasicFeed" TO myuser;
```

## Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como destino para AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

Você pode usar as configurações do endpoint e Extra Connection Attributes (ECAs) para configurar seu banco de dados de destino do PostgreSQL. 

Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Você especifica ECAs usando o `ExtraConnectionAttributes` parâmetro para seu endpoint.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o PostgreSQL como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

## Tipos de dados de destino do PostgreSQL
<a name="CHAP_Target.PostgreSQL.DataTypes"></a>

O endpoint do banco de dados PostgreSQL é AWS DMS compatível com a maioria dos tipos de dados do banco de dados PostgreSQL. A tabela a seguir mostra os tipos de dados de destino do banco de dados PostgreSQL que são compatíveis com o AWS DMS uso e o mapeamento AWS DMS padrão dos tipos de dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de dados  |  Tipo de dados do PostgreSQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  Se a escala for de 0 a 6, use TIMESTAMP. Se a escala for de 7 a 9, use VARCHAR (37).  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  STRING  |  Se o tamanho for de 1 a 21.845, use VARCHAR (tamanho em bytes).  Se o tamanho for de 21.846 a 2.147.483.647, use VARCHAR (65535).  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  Se o tamanho for de 1 a 21.845, use VARCHAR (tamanho em bytes).  Se o tamanho for de 21.846 a 2.147.483.647, use VARCHAR (65535).  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**nota**  
Ao replicar de uma fonte do PostgreSQL AWS DMS , cria a tabela de destino com os mesmos tipos de dados para todas as colunas, exceto as colunas com tipos de dados definidos pelo usuário. Nesses casos, o tipo de dados é criado como "variante de caractere" no destino.

## Usando o Babelfish para Aurora PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Babelfish"></a>

É possível migrar as tabelas de origem do SQL Server para um destino do Babelfish para Amazon Aurora PostgreSQL utilizando o AWS Database Migration Service. Com o Babelfish, o Aurora PostgreSQL compreende o dialeto do T-SQL, do SQL proprietário do Microsoft SQL Server, e é compatível com o mesmo protocolo de comunicação. Portanto, as aplicações escritas para o SQL Server agora podem funcionar com o Aurora com menos alterações no código. O recurso Babelfish está incorporado ao Amazon Aurora sem custo adicional. É possível ativar o Babelfish no cluster do Amazon Aurora no console do Amazon RDS.

**Ao criar seu endpoint de AWS DMS destino usando os comandos do AWS DMS console, da API ou da CLI, especifique o mecanismo de destino como **Amazon Aurora PostgreSQL** e nomeie o banco de dados como babelfish\$1db.** Na seção **Configurações de endpoint**, adicione configurações para definir `DatabaseMode` como `Babelfish` e `BabelfishDatabaseName` para o nome do banco de dados Babelfish T-SQL de destino.

### Adicionar regras de transformação à tarefa de migração
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Ao definir uma tarefa de migração para um destino do Babelfish, inclua regras de transformação que garantam que o DMS utilize as tabelas T-SQL do Babelfish pré-criadas no banco de dados de destino.

Primeiro, adicione uma regra de transformação à tarefa de migração que coloque todos os nomes das tabelas em letras minúsculas. O Babelfish armazena em letras minúsculas no `pg_class` catálogo do PostgreSQL os nomes das tabelas que você cria utilizando o T-SQL. No entanto, quando você tem tabelas do SQL Server com nomes em maiúsculas e minúsculas, o DMS cria as tabelas utilizando tipos de dados nativos do PostgreSQL em vez dos tipos de dados compatíveis com T-SQL. Por esse motivo, adicione uma regra de transformação que torne todos os nomes de tabelas em minúsculas. Observe que os nomes de coluna não devem ser mudados para minúsculas.

Se você utilizou o modo de migração de vários bancos de dados ao definir o cluster, adicione uma regra de transformação que renomeia o esquema original do SQL Server. Renomeie o esquema do SQL Server para incluir o nome do banco de dados T-SQL. Por exemplo, se o nome do esquema original do SQL Server for dbo e o nome do banco de dados T-SQL for T-SQL, renomeie o esquema para mydb\$1dbo utilizando uma regra de transformação.

**nota**  
Ao usar o Babelfish para Aurora PostgreSQL 16 ou posterior, o modo de migração padrão é “mutidatabase”. Ao executar tarefas de migração do DMS, analise o parâmetro do modo de migração e atualize as regras de transformação, se necessário.

Se você utilizar o modo de banco de dados único, não será necessária uma regra de transformação para renomear os esquemas. Os nomes dos esquemas têm um one-to-one mapeamento com o banco de dados T-SQL de destino no Babelfish.

O exemplo de regra de transformação a seguir torna todos os nomes de tabelas em minúsculas e renomeia o esquema original do SQL Server de `dbo` para `mydb_dbo`.

```
{
   "rules": [
   {
      "rule-type": "transformation",
      "rule-id": "566251737",
      "rule-name": "566251737",
      "rule-target": "schema",
      "object-locator": {
         "schema-name": "dbo"
      },
      "rule-action": "rename",
      "value": "mydb_dbo",
      "old-value": null
   },
   {
      "rule-type": "transformation",
      "rule-id": "566139410",
      "rule-name": "566139410",
      "rule-target": "table",
      "object-locator": {
         "schema-name": "%",
         "table-name": "%"
      },
      "rule-action": "convert-lowercase",
      "value": null,
      "old-value": null
   },
   {
      "rule-type": "selection",
      "rule-id": "566111704",
      "rule-name": "566111704",
      "object-locator": {
         "schema-name": "dbo",
         "table-name": "%"
      },
      "rule-action": "include",
      "filters": []
   }
]
}
```

### Limitações ao utilizar um endpoint de destino do PostgreSQL com tabelas do Babelfish
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

As limitações a seguir se aplicam ao utilizar um endpoint de destino do PostgreSQL com tabelas do Babelfish:
+ Para o modo **Preparação da tabela de destino**, use somente os modos **Não fazer nada** ou **Truncar**. Não utilize o modo **Abandonar tabelas no destino**. Nesse modo, o DMS cria as tabelas como tabelas do PostgreSQL que o T-SQL talvez não reconheça.
+ AWS DMS não suporta o tipo de dados sql\$1variant.
+ O Babelfish no endpoint do Postgres não comporta os tipos de dados `HEIRARCHYID` , `GEOMETRY` (antes da 3.5.4) e `GEOGRAPHY` (antes da 3.5.4). Para migrar esses tipos de dados, é possível adicionar regras de transformação para converter o tipo de dados em wstring(250).
+ O Babelfish é compatível com a migração de tipos de dados `BINARY`, `VARBINARY` e `IMAGE` utilizando o tipo de dados `BYTEA`. Em versões anteriores do Aurora PostgreSQL, é possível utilizar o DMS para migrar essas tabelas para um [Endpoint de destino do Babelfish](CHAP_Target.Babelfish.md). Não é necessário especificar um tamanho para o tipo de dados `BYTEA`, conforme mostrado no exemplo a seguir.

  ```
  [Picture] [VARBINARY](max) NULL
  ```

  Altere o tipo de dados T-SQL anterior para o tipo de dados T-SQL compatível `BYTEA`.

  ```
  [Picture] BYTEA NULL
  ```
+ Para versões anteriores do Aurora PostgreSQL Babelfish, se você criar uma tarefa de migração para replicação contínua do SQL Server para o Babelfish utilizando endpoint de destino do PostgreSQL, precisará atribuir o tipo de dados `SERIAL` a qualquer tabela que utilize colunas `IDENTITY`. Desde o Aurora PostgreSQL (versão 15.3/14.8 e superior) e do Babelfish (versão 3.2.0 e superior), a coluna de identidade é compatível e não é mais necessário atribuir o tipo de dados SERIAL. Para obter mais informações, consulte [Utilizar SERIAL](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html) na seção Sequências e identidade do *Manual de migração do SQL Server para o Aurora PostgreSQL*. Crie a tabela no Babelfish, altere a definição da coluna da seguinte forma.

  ```
      [IDCol] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY
  ```

  Altere a anterior para a seguinte.

  ```
      [IDCol] SERIAL PRIMARY KEY
  ```

  O Aurora PostgreSQL compatível com o Babelfish cria uma sequência utilizando a configuração padrão e adiciona uma restrição `NOT NULL` à coluna. A sequência recém-criada se comporta como uma sequência normal (incrementada em 1) e não tem a opção de `SERIAL` composta.
+ Depois de migrar dados com tabelas que utilizam colunas `IDENTITY` ou o tipo de dados `SERIAL`, redefina o objeto de sequência baseado em PostgreSQL com base no valor máximo da coluna. Depois de executar uma carga máxima das tabelas, utilize a consulta T-SQL a seguir para gerar instruções para definir o seed do objeto de sequência associado.

  ```
  DECLARE @schema_prefix NVARCHAR(200) = ''
  
  IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db'
          SET @schema_prefix = db_name() + '_'
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id) + '.' + tables.name + ''', ''' + columns.name + ''')
                 ,(select max(' + columns.name + ') from ' + schema_name(tables.schema_id) + '.' + tables.name + '));'
  FROM sys.tables tables
  JOIN sys.columns columns ON tables.object_id = columns.object_id
  WHERE columns.is_identity = 1
  
  UNION ALL
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + table_schema + '.' + table_name + ''', 
  ''' + column_name + '''),(select max(' + column_name + ') from ' + table_schema + '.' + table_name + '));'
  FROM information_schema.columns
  WHERE column_default LIKE 'nextval(%';
  ```

  A consulta gera uma série de instruções SELECT que você executa para atualizar os valores máximos de IDENTITY e SERIAL.
+ Em versões do Babelfish anteriores à 3.2, o **Modo LOB completo** pode resultar em um erro de tabela. Se isso acontecer, crie uma tarefa separada para as tabelas que falharam no carregamento. Utilize o **Modo LOB limitado** para especificar o valor apropriado para o **Tamanho máximo de LOB (KB)**. Outra opção é definir a configuração do atributo de conexão `ForceFullLob=True` do endpoint do SQL Server.
+ Para versões do Babelfish anteriores à 3.2, a execução da validação de dados com tabelas do Babelfish que não utilizam chaves primárias baseadas em números inteiros gera uma mensagem de que uma chave exclusiva adequada não pode ser encontrada. Desde o Aurora PostgreSQL (versão 15.3/14.8 e superior) e do Babelfish (versão 3.2.0 e superior), a validação de dados para chaves primárias de número não inteiro é compatível. 
+ Devido às diferenças de precisão no número de casas decimais de segundos, o DMS relata falhas na validação de dados para tabelas do Babelfish que utilizam tipos de dados `DATETIME`. Para suprimir essas falhas, é possível adicionar o seguinte tipo de regra de validação para os tipos de dados `DATETIME`.

  ```
  {
           "rule-type": "validation",
           "rule-id": "3",
           "rule-name": "3",
           "rule-target": "column",
           "object-locator": {
               "schema-name": "dbo",
               "table-name": "%",
               "column-name": "%",
               "data-type": "datetime"
           },
           "rule-action": "override-validation-function",
           "source-function": "case when ${column-name} is NULL then NULL else 0 end",
           "target-function": "case when ${column-name} is NULL then NULL else 0 end"
       }
  ```

# Usando um banco de dados compatível com MySQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

Você pode migrar dados para qualquer banco de dados compatível com MySQL usando AWS DMS, a partir de qualquer um dos mecanismos de dados de origem compatíveis. AWS DMS Se você estiver migrando para um banco de dados local compatível com o MySQL, é AWS DMS necessário que seu mecanismo de origem resida no ecossistema. AWS O mecanismo pode estar em um serviço AWS gerenciado, como Amazon RDS, Amazon Aurora ou Amazon S3. Ou o mecanismo pode estar em um banco de dados autogerenciado no Amazon EC2. 

Você pode usar o SSL para criptografar conexões entre o endpoint compatível com MySQL e a instância de replicação. Para obter mais informações sobre o uso do SSL com um endpoint compatível com MySQL, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md). 

Para obter informações sobre as versões do MySQL que oferecem AWS DMS suporte como destino, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md)

Você pode usar os seguintes bancos de dados compatíveis com MySQL como destinos para: AWS DMS
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ MariaDB Column Store
+ Amazon Aurora MySQL

**nota**  
Independentemente do mecanismo de armazenamento de origem (MyISAM, MEMÓRIA, etc.), o AWS DMS cria uma tabela de destino compatível com MySQL como InnoDB por padrão.   
Se precisar de uma tabela em um mecanismo de armazenamento diferente do InnoDB, será possível criar manualmente a tabela no destino compatível com MySQL e migrá-la utilizando a opção **Não fazer nada**. Para obter mais informações, consulte [Configurações de tarefa de carregamento completo](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

Para obter mais detalhes sobre como trabalhar com bancos de dados compatíveis com MySQL como destino para o AWS DMS, consulte as seguintes seções. 

**Topics**
+ [Usando qualquer banco de dados compatível com MySQL como alvo para AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [Limitações no uso de um banco de dados compatível com MySQL como alvo para AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [Configurações de endpoint ao usar um banco de dados compatível com MySQL como destino para AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [Tipos de dados de destino do MySQL](#CHAP_Target.MySQL.DataTypes)

## Usando qualquer banco de dados compatível com MySQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados compatível com MySQL como destino do AWS DMS, confirme se você concluiu os seguintes pré-requisitos:
+ Forneça uma conta de usuário AWS DMS que tenha read/write privilégios no banco de dados compatível com MySQL. Para criar os privilégios necessários, execute os seguintes comandos.

  ```
  CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>';
  GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES  ON <schema>.* TO 
  '<user acct>'@'%';
  GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  ```
+ Durante a fase de migração de carga máxima, você precisa desativar as chaves externas nas suas tabelas de destino. Para desativar as verificações de chave estrangeira em um banco de dados compatível com MySQL durante um carregamento completo, você pode adicionar o seguinte comando à seção **Atributos de conexão extra** do AWS DMS console do seu endpoint de destino.

  ```
  Initstmt=SET FOREIGN_KEY_CHECKS=0;
  ```
+ Defina o parâmetro `local_infile = 1` do banco de dados para permitir que o AWS DMS carregue dados no banco de dados de destino.
+ Conceda os seguintes privilégios se você usar avaliações de pré-migração específicas do MySQL.

  ```
  grant select on mysql.user to <dms_user>;
  grant select on mysql.db to <dms_user>;
  grant select on mysql.tables_priv to <dms_user>;
  grant select on mysql.role_edges to <dms_user>  #only for MySQL version 8.0.11 and higher
  ```

## Limitações no uso de um banco de dados compatível com MySQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.MySQL.Limitations"></a>

Ao usar um banco de dados MySQL como destino, AWS DMS não oferece suporte ao seguinte:
+ As instruções da linguagem de definição de dados (DDL) TRUNCATE PARTITION, DROP TABLE e RENAME TABLE.
+ Uso de uma declaração `ALTER TABLE table_name ADD COLUMN column_name` para adicionar colunas ao início ou meio de uma tabela.
+ Ao carregar dados em um destino compatível com MySQL em uma tarefa de carregamento total, AWS DMS não relata erros causados por restrições nos registros de tarefas, o que pode causar erros de chave duplicados ou incompatibilidades com o número de registros. Isso é causado pela forma como o MySQL trata dados locais com o comando `LOAD DATA`. Faça o seguinte durante a fase de carga máxima: 
  + Desativar restrições
  + Use a AWS DMS validação para garantir que os dados sejam consistentes.
+ Quando você atualiza o valor de uma coluna para seu valor existente, os bancos de dados compatíveis com MySQL retornam um aviso `0 rows affected`. Embora esse comportamento não seja tecnicamente um erro, ele é diferente de como a situação é controlada por outros mecanismos de banco de dados. Por exemplo, o Oracle executa uma atualização de uma linha. Para bancos de dados compatíveis com MySQL, AWS DMS gera uma entrada na tabela de controle awsdms\$1apply\$1exceptions e registra o seguinte aviso.

  ```
  Some changes from the source database had no impact when applied to
  the target database. See awsdms_apply_exceptions table for details.
  ```
+ O Aurora Sem Servidor está disponível como destino para o Amazon Aurora versão 2, compatível com o MySQL versão 5.7. (Selecione o Aurora Sem Servidor versão 2.07.1 para poder utilizar o Aurora Sem Servidor compatível com o MySQL 5.7.) Para ter mais informações sobre o Aurora Sem Servidor, consulte [Usar o Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) no *Guia do usuário do Amazon Aurora*.
+ AWS DMS não suporta o uso de um endpoint de leitura para o Aurora ou o Amazon RDS, a menos que as instâncias estejam no modo gravável, ou seja, `read_only` os parâmetros `innodb_read_only` e estejam definidos como ou. `0` `OFF` Para obter mais informações sobre como utilizar o Amazon RDS e o Aurora como destinos, consulte:
  +  [Como determinar a qual instância de banco de dados você está conectado](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [Atualizar réplicas de leitura com o MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ Ao replicar o tipo de dados TIME, a parte fracionária do valor de tempo não é replicada.
+ Ao replicar o tipo de dados TIME com o atributo de conexão adicional `loadUsingCSV=false`, o valor do tempo é limitado ao intervalo `[00:00:00, 23:59:59]`.

## Configurações de endpoint ao usar um banco de dados compatível com MySQL como destino para AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

É possível utilizar as configurações do endpoint para configurar o destino compatível com o MySQL de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--my-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoints que é possível utilizar com o MySQL como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.MySQL.html)

Também é possível utilizar atributos de conexão adicionais para configurar o banco de dados de destino compatível com MySQL.

A tabela a seguir mostra os atributos de conexão adicionais que podem ser utilizados com o MySQL como origem.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.MySQL.html)

Como alternativa, é possível utilizar o parâmetro `AfterConnectScript` do comando `--my-sql-settings` para desativar as verificações de chave estrangeira e especificar o fuso horário do banco de dados.

## Tipos de dados de destino do MySQL
<a name="CHAP_Target.MySQL.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do banco de dados MySQL que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipos de dados  |  Tipos de dados do MySQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BYTES  |  Se o tamanho for de 1 a 65.535, utilize VARBINARY (tamanho).  Se o tamanho for de 65.536 a 2.147.483.647, utilize LONGLOB.  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  “Se a escala for => 0 e =< 6, use: DATETIME (escala) Se a escala for => 7 e =< 9, use: VARCHAR (37)”  | 
|  INT1  |  TINYINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  DECIMAL (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  |  DOUBLE PRECISION  | 
|  STRING  |  Se o tamanho for de 1 a 21.845, utilize VARCHAR (tamanho). Se o tamanho for de 21.846 a 2.147.483.647, utilize LONGTEXT.  | 
|  UINT1  |  UNSIGNED TINYINT  | 
|  UINT2  |  UNSIGNED SMALLINT  | 
|  UINT4  |  UNSIGNED INTEGER  | 
|  UINT8  |  UNSIGNED BIGINT  | 
|  WSTRING  |  Se o tamanho for de 1 a 32.767, utilize VARCHAR (tamanho).  Se o tamanho for de 32.768 a 2.147.483.647, utilize LONGTEXT.  | 
|  BLOB  |  Se o tamanho for de 1 a 65.535, utilize BLOB. Se o tamanho for de 65.536 a 2.147.483.647, utilize LONGBLOB. Se o tamanho for 0, utilize LONGBLOB (suporte pleno ao tipo LOB).  | 
|  NCLOB  |  Se o tamanho for de 1 a 65.535, use TEXT. Se o tamanho for de 65.536 a 2.147.483.647, utilize LONGTEXT com ucs2 para CHARACTER SET. Se o tamanho for 0, utilize LONGTEXT (suporte pleno ao tipo LOB) e ucs2 para CHARACTER SET.  | 
|  CLOB  |  Se o tamanho for de 1 a 65.535, use TEXT. Se o tamanho for de 65.536 a 2147483647, utilize LONGTEXT. Se o tamanho for 0, utilize LONGTEXT (suporte pleno ao tipo LOB).  | 

# Usando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift"></a>

Você pode migrar dados para bancos de dados do Amazon Redshift usando o. AWS Database Migration Service O Amazon Redshift é um serviço de data warehouse totalmente gerenciado e em escala de petabytes na Nuvem . Com um banco de dados Amazon Redshift como destino, é possível migrar dados de todos os outros bancos de dados de origem compatíveis.

Você pode usar o Amazon Redshift Serverless como destino para. AWS DMS Para obter mais informações, consulte [Usando AWS DMS com o Amazon Redshift Serverless como destinoAmazon Redshift Sem Servidor](#CHAP_Target.Redshift.RSServerless) a seguir.

 O cluster do Amazon Redshift deve estar na mesma AWS conta e na mesma AWS região da instância de replicação. 

Durante uma migração de banco de dados para o Amazon Redshift, AWS DMS primeiro move os dados para um bucket do Amazon S3. Quando os arquivos residem em um bucket do Amazon S3, eles são AWS DMS transferidos para as tabelas adequadas no armazém de dados do Amazon Redshift. AWS DMS cria o bucket do S3 na mesma AWS região do banco de dados do Amazon Redshift. A instância AWS DMS de replicação deve estar localizada na mesma AWS região. 

Se você usa a API AWS CLI ou DMS para migrar dados para o Amazon Redshift, configure AWS Identity and Access Management uma função (IAM) para permitir o acesso ao S3. Para obter mais informações sobre a criação do perfil do IAM, consulte [Criação das funções do IAM para usar com AWS DMS](security-iam.md#CHAP_Security.APIRole).

O endpoint do Amazon Redshift fornece automação completa para:
+ Geração de schema e mapeamento de tipo de dados
+ Carregamento completo de tabelas de banco de dados de origem
+ Carregamento incremental de alterações feitas a tabelas de origem
+ Aplicação de alterações de schema em Data Definition Language (DDL - Linguagem de definição de dados) feitas a tabelas de origem
+ Sincronização entre processos de carregamento completo e de captura de dados de alteração (CDC).

AWS Database Migration Service suporta operações de carga total e processamento de alterações. AWS DMS lê os dados do banco de dados de origem e cria uma série de arquivos de valores separados por vírgula (.csv). Para operações de carga total, AWS DMS cria arquivos para cada tabela. AWS DMS em seguida, copia os arquivos de tabela de cada tabela em uma pasta separada no Amazon S3. Quando os arquivos são carregados para o Amazon S3, AWS DMS envia um comando de cópia e os dados nos arquivos são copiados para o Amazon Redshift. Para operações de processamento de alterações, AWS DMS copia as alterações líquidas nos arquivos.csv. AWS DMS em seguida, carrega os arquivos de alteração líquida para o Amazon S3 e copia os dados para o Amazon Redshift.

Para obter detalhes adicionais sobre como trabalhar com o Amazon Redshift como alvo AWS DMS, consulte as seguintes seções: 

**Topics**
+ [Pré-requisitos para usar um banco de dados do Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.Prerequisites)
+ [Privilégios necessários para utilizar o Redshift como destino](#CHAP_Target.Redshift.Privileges)
+ [Limitações no uso do Amazon Redshift como alvo para AWS Database Migration Service](#CHAP_Target.Redshift.Limitations)
+ [Configurando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.Configuration)
+ [Usando o roteamento de VPC aprimorado com o Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)
+ [Criação e uso de AWS KMS chaves para criptografar dados de destino do Amazon Redshift](#CHAP_Target.Redshift.KMSKeys)
+ [Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)
+ [Utilizar uma chave de criptografia de dados e um bucket do Amazon S3 como armazenamento intermediário](#CHAP_Target.Redshift.EndpointSettings)
+ [Configurações de tarefas de vários threads para o Amazon Redshift](#CHAP_Target.Redshift.ParallelApply)
+ [Tipos de dados de destino do Amazon Redshift](#CHAP_Target.Redshift.DataTypes)
+ [Usando AWS DMS com o Amazon Redshift Serverless como destino](#CHAP_Target.Redshift.RSServerless)

## Pré-requisitos para usar um banco de dados do Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Prerequisites"></a>

A lista a seguir descreve os pré-requisitos necessários para trabalhar com o Amazon Redshift como destino para a migração de dados:
+ Use o AWS Management Console para iniciar um cluster do Amazon Redshift. Observe as informações básicas sobre sua AWS conta e seu cluster do Amazon Redshift, como sua senha, nome de usuário e nome do banco de dados. Esses valores são necessários para criar o endpoint de destino do Amazon Redshift. 
+ O cluster do Amazon Redshift deve estar na mesma AWS conta e na mesma AWS região da instância de replicação.
+ A instância AWS DMS de replicação precisa de conectividade de rede com o endpoint do Amazon Redshift (nome do host e porta) que seu cluster usa.
+ AWS DMS usa um bucket do Amazon S3 para transferir dados para o banco de dados do Amazon Redshift. Para o AWS DMS criar um bucket, o console usa um perfil do IAM, `dms-access-for-endpoint`. Se você usa a API AWS CLI ou DMS para criar uma migração de banco de dados com o Amazon Redshift como banco de dados de destino, você deve criar essa função do IAM. Para obter mais informações sobre a criação do perfil, consulte [Criação das funções do IAM para usar com AWS DMS](security-iam.md#CHAP_Security.APIRole). 
+ AWS DMS converte BLOBs, CLOBs, e NCLOBs em um VARCHAR na instância de destino do Amazon Redshift. O Amazon Redshift não oferece suporte a tipos de dados VARCHAR maiores que 64 KB, então você não pode armazenar dados tradicionais no Amazon LOBs Redshift. 
+ Defina a configuração da tarefa de metadados de destino como `true` for [BatchApplyEnabled](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md) AWS DMS para lidar com alterações nas tabelas de destino do Amazon Redshift durante o CDC. É necessária uma chave primária na tabela de origem e de destino. Sem uma chave primária, as alterações são aplicadas instrução por instrução. E isso pode afetar negativamente o desempenho da tarefa durante a CDC, casando latência de destino e afetando a fila de confirmação do cluster. 
+ Quando a segurança por linha está habilitada nas tabelas no Redshift, você deve conceder as permissões apropriadas a todos os seus usuários do DMS.

## Privilégios necessários para utilizar o Redshift como destino
<a name="CHAP_Target.Redshift.Privileges"></a>

Utilize o comando GRANT para definir os privilégios de acesso do usuário ou do grupo de usuários. Os privilégios incluem opções de acesso como leitura de dados em tabelas e exibições, gravação de dados e criação de tabelas. Para obter mais informações sobre como utilizar GRANT com o Amazon Redshift, consulte [GRANT](https://docs.aws.amazon.com//redshift/latest/dg/r_GRANT.html) no *Guia do desenvolvedor de banco de dados do Amazon Redshift*. 

Veja a seguir a sintaxe para fornecer privilégios específicos para uma tabela, banco de dados, esquema, perfil, procedimento ou privilégios em nível de linguagem em tabelas e visualizações do Amazon Redshift.

```
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE 
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]
```

A seguir está a sintaxe para privilégios de nível de coluna em tabelas e visualizações do Amazon Redshift. 

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     TO { username | GROUP group_name | PUBLIC } [, ...]
```

A seguir está a sintaxe para o privilégio ASSUMEROLE concedido a usuários e grupos com um perfil especificado.

```
GRANT ASSUMEROLE
    ON { 'iam_role' [, ...] | ALL }
    TO { username | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD } [, ...]
```

## Limitações no uso do Amazon Redshift como alvo para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Limitations"></a>

As seguintes limitações se aplicam ao utilizar um banco de dados Amazon Redshift como destino:
+ Não ative o versionamento para o bucket do S3 utilizado como armazenamento intermediário para o destino do Amazon Redshift. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada `list-object` do S3. Para criar uma política de ciclo de vida para um bucket do S3, consulte [Gerenciar o ciclo de vida do armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para excluir a versão de um objeto do S3, consulte [Excluir versões de objetos de um bucket com versionamento ativado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ O DDL a seguir não tem suporte:

  ```
  ALTER TABLE table name MODIFY COLUMN column name data type;
  ```
+  AWS DMS não é possível migrar ou replicar alterações em um esquema com um nome que comece com sublinhado (\$1). Se você tiver esquemas com um nome que começa com um sublinhado, utilize transformações de mapeamento para renomear o esquema no destino. 
+  O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. LOBs dos bancos de dados tradicionais não podem ser armazenados no Amazon Redshift.
+  A aplicação de uma instrução DELETE a uma tabela com uma chave primária de várias colunas não tem suporte quando qualquer um dos nomes de coluna da chave primária usa uma palavra reservada. Acesse [aqui](https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html) para ver uma lista de palavras reservadas do Amazon Redshift.
+ Poderá haver problemas de desempenho se o sistema de origem executar operações UPDATE na chave primária de uma tabela de origem. Esses problemas de desempenho ocorrem ao aplicar alterações no destino. Isso ocorre porque as operações UPDATE (e DELETE) dependem do valor da chave primária para identificar a linha de destino. Se você atualizar a chave primária de uma tabela de origem, o log de tarefas conterá mensagens, como as seguintes:

  ```
  Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  ```
+ O DMS não é compatível com nomes de DNS personalizados ao configurar um endpoint para um cluster do Redshift, e você precisa utilizar o nome de DNS fornecido pela Amazon. Como o cluster do Amazon Redshift deve estar na mesma AWS conta e região da instância de replicação, a validação falhará se você usar um endpoint de DNS personalizado.
+ O Amazon Redshift tem um tempo limite padrão de sessão ociosa de 4 horas. Quando não há nenhuma atividade na tarefa de replicação do DMS, o Redshift desconecta a sessão após 4 horas. Os erros podem resultar da incapacidade do DMS de se conectar e da possível necessidade de reinicialização. Como solução alternativa, defina um limite de SESSION TIMEOUT maior que 4 horas para o usuário de replicação do DMS. Ou consulte a descrição de [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) no *Guia do desenvolvedor do banco de dados Amazon Redshift*.
+ Quando AWS DMS replica os dados da tabela de origem sem uma chave primária ou exclusiva, a latência do CDC pode ser alta, resultando em um nível de desempenho inaceitável.
+ Não é possível truncar partições durante a replicação de CDC da origem do Oracle para o destino do Redshift.
+ Registros duplicados podem aparecer nas tabelas de destino porque o Amazon Redshift não impõe chaves primárias e o AWS DMS pode reproduzir o CDC quando uma tarefa é retomada. Para evitar duplicatas, use a `ApplyErrorInsertPolicy=INSERT_RECORD` configuração. Para obter mais informações, consulte [Configurações de tarefa de tratamento de erros](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md). Como alternativa, você pode implementar procedimentos de detecção de duplicatas e limpeza pós-migração em nível de aplicativo.

## Configurando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Configuration"></a>

AWS Database Migration Service deve ser configurado para funcionar com a instância do Amazon Redshift. A tabela a seguir descreve as propriedades de configuração disponíveis para o endpoint do Amazon Redshift.


| Propriedade | Description | 
| --- | --- | 
| servidor | O nome do cluster do Amazon Redshift que você está utilizando. | 
| porta | O número da porta do Amazon Redshift. O valor padrão é 5439. | 
| username | Um nome de usuário do Amazon Redshift de um usuário registrado. | 
| password | A senha do usuário nomeado na propriedade username. | 
| banco de dados | O nome do data warehouse (serviço) do Amazon Redshift com o qual você está trabalhando. | 

Se quiser adicionar atributos de string de conexão adicional ao endpoint do Amazon Redshift, especifique os atributos `maxFileSize` e `fileTransferUploadStreams`. Para obter mais informações sobre esses atributos, consulte [Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

## Usando o roteamento de VPC aprimorado com o Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.EnhancedVPC"></a>

Se você utilizar o roteamento aprimorado da VPC com o destino do Amazon Redshift, todo o tráfego de COPY entre o cluster do Amazon Redshift e os repositórios de dados trafegarão pela VPC. Como o roteamento aprimorado da VPC afeta a maneira como o Amazon Redshift acessa outros recursos, os comandos COPY poderão falhar se você não configurar a VPC corretamente.

AWS DMS pode ser afetado por esse comportamento porque ele usa o comando COPY para mover dados no S3 para um cluster do Amazon Redshift.

A seguir estão as etapas AWS DMS necessárias para carregar dados em um destino do Amazon Redshift:

1. AWS DMS copia dados da origem para arquivos.csv no servidor de replicação.

1. AWS DMS usa o AWS SDK para copiar os arquivos.csv em um bucket do S3 na sua conta.

1. AWS DMS em seguida, usa o comando COPY no Amazon Redshift para copiar dados dos arquivos.csv no S3 para uma tabela apropriada no Amazon Redshift.

Se o Enhanced VPC Routing não estiver habilitado, o Amazon Redshift roteará o tráfego pela Internet, incluindo o tráfego para outros serviços dentro da rede. AWS Se o recurso não estiver habilitado, não será necessário configurar o caminho de rede. Se o recurso estiver habilitado, você deverá criar especificamente um caminho de rede entre o cluster do VPC e os recursos de dados. Para obter mais informações sobre a configuração necessária, consulte [Roteamento aprimorado da VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html) na documentação do Amazon Redshift. 

## Criação e uso de AWS KMS chaves para criptografar dados de destino do Amazon Redshift
<a name="CHAP_Target.Redshift.KMSKeys"></a>

É possível criptografar os dados de destino enviados ao Amazon S3 antes que sejam copiados no Amazon Redshift. Para fazer isso, você pode criar e usar AWS KMS chaves personalizadas. É possível utilizar a chave criada para criptografar os dados de destino utilizando um dos seguintes mecanismos ao criar o endpoint de destino do Amazon Redshift:
+ Utilize a opção a seguir ao executar o comando `create-endpoint` utilizando a AWS CLI.

  ```
  --redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-kms-key-ARN"}'
  ```

  Aqui, `your-kms-key-ARN` é o nome de recurso da Amazon (ARN) de sua chave do KMS. Para obter mais informações, consulte [Utilizar uma chave de criptografia de dados e um bucket do Amazon S3 como armazenamento intermediário](#CHAP_Target.Redshift.EndpointSettings).
+ Defina o atributo de conexão adicional `encryptionMode` como o valor `SSE_KMS`, e o atributo de conexão adicional `serverSideEncryptionKmsKeyId` como o ARN de sua chave do KMS. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

Para criptografar dados de destino do Amazon Redshift usando uma chave KMS, você precisa de AWS Identity and Access Management uma função (IAM) que tenha permissões para acessar os dados do Amazon Redshift. Esse perfil do IAM é acessado em uma política (uma política de chaves) anexada à chave de criptografia criada. É possível fazer isso no console do IAM criando o seguinte:
+ Uma função do IAM com uma política AWS gerenciada.
+ A chave do KMS com uma política de chaves que faz referência a esse perfil.

Os procedimentos a seguir descrevem como fazer isso.

**Para criar uma função do IAM com a política AWS gerenciada necessária**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, escolha **Perfis**. A página **Roles (Funções)** é aberta.

1. Selecione **Criar perfil**. A página **Create role (Criar função)** é aberta.

1. Com o **Serviço da AWS ** escolhido como uma entidade confiável, escolha **DMS** como o serviço que utilizará esse perfil.

1. Escolha **Próximo: Permissões**. A página **Attach permissions policies (Anexar políticas de permissões)** é exibida.

1. Encontre e selecione a política `AmazonDMSRedshiftS3Role`.

1. Escolha **Próximo: tags**. A página **Adicionar tags** é exibida. Aqui, você pode adicionar todas as tags desejadas.

1. Escolha **Next: Review (Próximo: revisar)** e reveja os resultados.

1. Se as configurações forem o que você precisa, insira um nome para o perfil (por exemplo, `DMS-Redshift-endpoint-access-role`), e qualquer descrição adicional e escolha **Criar função**. A página **Roles (Funções)** é aberta com uma mensagem indicando que o perfil foi criado.

Agora, você criou o perfil para acessar os recursos do Amazon Redshift para criptografia com um nome especificado, por exemplo `DMS-Redshift-endpoint-access-role`.

**Para criar uma chave de AWS KMS criptografia com uma política de chaves que faça referência à sua função do IAM**
**nota**  
Para obter mais informações sobre como AWS DMS funciona com chaves de AWS KMS criptografia, consulte[Configurando uma chave de criptografia e especificando permissões AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Faça login no console Console de gerenciamento da AWS e abra o AWS Key Management Service (AWS KMS) em [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Para alterar o Região da AWS, use o seletor de região no canto superior direito da página.

1. No painel de navegação, escolha **Chaves gerenciadas pelo cliente**.

1. Escolha **Criar chave**. A página **Configure key (Configurar chave)** é aberta.

1. Para **Key type (Tipo de chave)**, escolha **Symmetric (Simétrica)**.
**nota**  
Ao criar essa chave, você só pode criar uma chave simétrica, porque todos os AWS serviços, como o Amazon Redshift, funcionam somente com chaves de criptografia simétricas.

1. Escolha **Opções avançadas**. Para **Key material origin (Origem do material da chave)**, certifique-se de que o **KMS** está escolhido e escolha **Next (Próximo)**. A página **Add labels (Adicionar rótulos)** é aberta.

1. Em **Create alias and description (Criar alias e descrição)**, insira um alias para a chave (por exemplo, `DMS-Redshift-endpoint-encryption-key`) e qualquer descrição adicional.

1. Em **Tags**, adicione todas as tags desejadas para ajudar a identificar a chave e controlar seu uso e escolha **Next (Próximo)**. A página **Define key administrative permissions (Definir permissões administrativas de chaves)** é aberta mostrando uma lista de usuários e funções que podem ser escolhidos.

1. Adicione os usuários e as funções desejados para gerenciar a chave. Certifique-se de que esses usuários e funções tenham as permissões necessárias para gerenciar a chave. 

1. Em **Key deletion (Exclusão de chaves)**, escolha se os administradores de chaves podem excluir a chave e escolha **Next (Próximo)**. A página **Define key usage permissions (Definir permissões de uso de chaves)** é aberta mostrando uma lista adicional de usuários e funções que podem ser escolhidos.

1. Para **Esta conta**, escolha os usuários disponíveis que deseja que executem operações criptográficas em destinos do Amazon Redshift. Escolha também o perfil criado anteriormente em **Perfis** para ativar o acesso à criptografia dos objetos de destino do Amazon Redshift, por exemplo, `DMS-Redshift-endpoint-access-role`).

1. Se você quiser adicionar outras contas não listadas para ter esse mesmo acesso, em **Outras AWS contas**, escolha **Adicionar outra AWS conta** e escolha **Avançar**. A página **Review and edit key policy (Rever e editar política de chave)** é aberta mostrando o JSON da política de chave que você pode revisar e editar digitando no JSON existente. Aqui, a política de chave que faz referência à função e aos usuários é mostrada (por exemplo, `Admin` e `User1`) que você escolheu na etapa anterior. Você também pode ver as diferentes ações de chaves permitidas para as várias entidades principais (usuários e perfis), conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
       "Id": "key-consolepolicy-3",
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root"
                   ]
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/Admin"
                   ]
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow attachment of persistent resources",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": true
                   }
               }
           }
       ]
   }
   ```

------

1. Escolha **Terminar**. A página **Chaves de criptografia** é aberta com uma mensagem indicando que a sua AWS KMS key foi criada.

Agora, você criou uma nova chave do KMS com um alias especificado (por exemplo, `DMS-Redshift-endpoint-encryption-key`). Essa chave permite AWS DMS criptografar os dados de destino do Amazon Redshift.

## Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS
<a name="CHAP_Target.Redshift.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o destino do Amazon Redshift de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--redshift-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Amazon Redshift como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Redshift.html)

## Utilizar uma chave de criptografia de dados e um bucket do Amazon S3 como armazenamento intermediário
<a name="CHAP_Target.Redshift.EndpointSettings"></a>

É possível utilizar as configurações de endpoint do Amazon Redshift para configurar o seguinte:
+ Uma chave de criptografia de AWS KMS dados personalizada. É possível utilizar essa chave para criptografar os dados enviados ao Amazon S3 antes que sejam copiados no Amazon Redshift.
+ Um bucket do S3 personalizado como armazenamento intermediário para dados migrados para o Amazon Redshift.
+ Mapeie um booleano como booleano de uma origem do PostgreSQL. Por padrão, um tipo BOOLEAN é migrado como varchar(1). É possível especificar `MapBooleanAsBoolean` para permitir que o destino do Redshift migre o tipo booleano como booleano, conforme mostrado no exemplo a seguir.

  ```
  --redshift-settings '{"MapBooleanAsBoolean": true}'
  ```

  Observe que você deve definir essa configuração nos endpoints de origem e de destino para que ela tenha efeito.

### Configurações de chave do KMS para criptografia de dados
<a name="CHAP_Target.Redshift.EndpointSettings.KMSkeys"></a>

Os exemplos a seguir mostram como configurar uma chave personalizada do KMS para criptografar os dados enviados por push ao S3. Para começar, é possível fazer a seguinte chamada de `create-endpoint` utilizando a AWS CLI.

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'
```

Aqui, o objeto JSON especificado pela opção `--redshift-settings` define dois parâmetros. Um é um parâmetro `EncryptionMode` com o valor `SSE_KMS`. O outro é um parâmetro `ServerSideEncryptionKmsKeyId` com o valor `arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1`. Esse valor é um Nome de recurso da Amazon (ARN) para a chave personalizada do KMS.

Por padrão, a criptografia dos dados do S3 ocorre usando a criptografia do lado do servidor do S3. Para o destino do Amazon Redshift do exemplo anterior, isso também é equivalente a especificar as configurações de endpoint, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_S3"}'
```

Para obter mais informações sobre como trabalhar com a criptografia do lado do servidor do S3, consulte [Proteger dados utilizando criptografia do lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) no *Guia do usuário do Amazon Simple Storage Service*.

**nota**  
Também é possível utilizar o comando `modify-endpoint` na CLI para alterar o valor do parâmetro `EncryptionMode` para um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.

### Configurações do bucket do Amazon S3
<a name="CHAP_Target.Redshift.EndpointSettings.S3Buckets"></a>

Quando você migra dados para um endpoint de destino do Amazon Redshift AWS DMS , usa um bucket padrão do Amazon S3 como armazenamento intermediário de tarefas antes de copiar os dados migrados para o Amazon Redshift. Por exemplo, os exemplos mostrados para a criação de um endpoint de destino do Amazon Redshift com uma chave de criptografia de dados do AWS KMS utilizam esse bucket padrão do S3 (consulte [Configurações de chave do KMS para criptografia de dados](#CHAP_Target.Redshift.EndpointSettings.KMSkeys)). 

Em vez disso, você pode especificar um bucket S3 personalizado para esse armazenamento intermediário incluindo os seguintes parâmetros no valor da sua `--redshift-settings` opção no AWS CLI `create-endpoint` comando:
+ `BucketName`: uma string que você especifica como o nome do armazenamento do bucket do S3. Se o perfil de acesso ao serviço for baseado na política `AmazonDMSRedshiftS3Role`, esse valor deverá ter um prefixo de `dms-`, por exemplo, `dms-my-bucket-name`.
+ `BucketFolder`: (opcional) uma string que é possível especificar como o nome da pasta de armazenamento no bucket do S3 especificado.
+ `ServiceAccessRoleArn`: o ARN de um perfil do IAM que permite acesso administrativo ao bucket do S3. Normalmente, você cria esse perfil com base na política `AmazonDMSRedshiftS3Role`. Para obter um exemplo, consulte o procedimento para criar um perfil do IAM com a política gerenciada pela AWS necessária em [Criação e uso de AWS KMS chaves para criptografar dados de destino do Amazon Redshift](#CHAP_Target.Redshift.KMSKeys).
**nota**  
Se você especificar o ARN de outro perfil do IAM utilizando a opção `--service-access-role-arn` do comando `create-endpoint`, essa opção de perfil do IAM terá precedência.

O exemplo a seguir mostra como é possível utilizar esses parâmetros para especificar um bucket personalizado do Amazon S3 na seguinte chamada de `create-endpoint` utilizando a AWS CLI. 

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
"BucketName": "your-bucket-name", "BucketFolder": "your-bucket-folder-name"}'
```

## Configurações de tarefas de vários threads para o Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply"></a>

É possível melhorar o desempenho de tarefas de carga máxima e captura de dados de alteração (CDC) para um endpoint de destino do Amazon Redshift utilizando configurações de tarefas de vários threads. Elas permitem especificar os threads simultâneos e o número de registros a serem armazenados em um buffer.

### Configurações de tarefas de vários threads para o Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.FullLoad"></a>

Para promover o desempenho da carga máxima, é possível utilizar as seguintes configurações da tarefa `ParallelLoad*`:
+ `ParallelLoadThreads`: especifica o número de threads simultâneos que o DMS utiliza durante uma carga máxima para enviar registros de dados para um endpoint de destino do Amazon Redshift. O valor padrão é zero (0) e o valor máximo é 32. Para obter mais informações, consulte [Configurações de tarefa de carregamento completo](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

  É possível utilizar o atributo `enableParallelBatchInMemoryCSVFiles` definido como `false` ao utilizar a configuração da tarefa `ParallelLoadThreads`. O atributo melhora o desempenho de tarefas de carga máxima maiores com vários threads, fazendo com que o DMS grave em disco em vez de na memória. O valor padrão é `true`.
+ `ParallelLoadBufferSize`: especifica o máximo de solicitações de registros de dados ao utilizar threads de carga paralela com o destino do Redshift. O valor padrão é 100 e o valor máximo é 1.000. Recomendamos que você use essa opção quando ParallelLoadThreads > 1 (maior que um).

**nota**  
Support para o uso de configurações de `ParallelLoad*` tarefas durante o FULL LOAD nos endpoints de destino do Amazon Redshift está disponível nas AWS DMS versões 3.4.5 e superiores.  
A configuração de `ReplaceInvalidChars` do endpoint do Redshift não é compatível para utilização durante a captura de dados de alteração (CDC) ou durante uma tarefa de migração FULL LOAD ativada para carga paralela. Ela é compatível com a migração FULL LOAD quando a carga paralela não está ativada. Para obter mais informações, consulte [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)a *Referência AWS Database Migration Service da API*

### Configurações de tarefas de CDC de vários threads para o Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.CDC"></a>

Para promover o desempenho da CDC, é possível utilizar as seguintes configurações da tarefa `ParallelApply*`:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do Amazon Redshift. O valor padrão é zero (0) e o valor máximo é 32. O valor mínimo recomendado é igual ao número de fatias no cluster.
+ `ParallelApplyBufferSize`: especifica o máximo de solicitações de registro de dados ao utilizar threads de aplicação paralelos com o destino do Redshift. O valor padrão é 100 e o valor máximo é 1.000. Recomendamos usar essa opção quando ParallelApplyThreads > 1 (maior que um). 

  Para obter o máximo benefício do Redshift como destino, é recomendável que o valor de `ParallelApplyBufferSize` seja pelo menos duas vezes (o dobro ou mais) do número de `ParallelApplyThreads`.

**nota**  
Support para o uso de configurações de `ParallelApply*` tarefas durante o CDC para endpoints de destino do Amazon Redshift está disponível AWS DMS nas versões 3.4.3 e superiores.

O nível de paralelismo aplicado depende da correlação entre o *tamanho do lote* e o *tamanho máximo do arquivo* utilizado para transferir dados. Ao utilizar configurações de tarefas CDC de vários threads com um destino do Redshift, os benefícios são obtidos quando o tamanho do lote é grande em relação ao tamanho máximo do arquivo. Por exemplo, é possível utilizar a seguinte combinação de configurações de endpoint e de tarefa para ajustar o desempenho ideal. 

```
// Redshift endpoint setting
                
        MaxFileSize=250000;

// Task settings

        BatchApplyEnabled=true;
        BatchSplitSize =8000;
        BatchApplyTimeoutMax =1800;
        BatchApplyTimeoutMin =1800;
        ParallelApplyThreads=32;
        ParallelApplyBufferSize=100;
```

Utilizando as configurações do exemplo anterior, um cliente com uma workload transacional pesada se beneficia com seu buffer de lote, contendo 8.000 registros, sendo preenchido em 1800 segundos, utilizando 32 threads paralelos com um tamanho máximo de arquivo de 250 MB.

Para obter mais informações, consulte [Configurações de ajuste de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).

**nota**  
As consultas do DMS executadas durante a replicação contínua em um cluster do Redshift podem compartilhar a mesma fila do WLM (gerenciamento da workload) com outras consultas de aplicações em execução. Portanto, considere configurar adequadamente as propriedades do WLM para influenciar o desempenho durante a replicação contínua para um destino do Redshift. Por exemplo, se outras consultas ETL paralelas estiverem em execução, o DMS será executado mais lentamente e os ganhos de desempenho serão perdidos.

## Tipos de dados de destino do Amazon Redshift
<a name="CHAP_Target.Redshift.DataTypes"></a>

O endpoint do Amazon Redshift é AWS DMS compatível com a maioria dos tipos de dados do Amazon Redshift. A tabela a seguir mostra os tipos de dados de destino do Amazon Redshift que são compatíveis com o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


| AWS DMS tipos de dados | Tipos de dados do Amazon Redshift | 
| --- | --- | 
| BOOLEAN | BOOL | 
| BYTES | VARCHAR (tamanho) | 
| DATE | DATE | 
| TIME | VARCHAR(20) | 
| DATETIME |  Se a escala for => 0 e =< 6, dependendo do tipo de coluna de destino do Redshift, uma das seguintes opções: TIMESTAMP (s) TIMESTAMPTZ (s): se o timestamp de origem contiver um deslocamento de zona (como no SQL Server ou Oracle), ele será convertido em UTC na inserção/atualização. Se ele não contiver um deslocamento, a hora já será considerada em UTC. Se a escala for => 7 e =< 9, use:  VARCHAR (37) | 
| INT1 | INT2 | 
| INT2 | INT2 | 
| INT4 | INT4 | 
| INT8 | INT8 | 
| NUMERIC | Se a escala for => 0 e =< 37, use:  NUMERIC (p,s)  Se a escala for => 38 e =< 127, use:  VARCHAR (tamanho) | 
| REAL4 | FLOAT4 | 
| REAL8 | FLOAT8 | 
| STRING | Se o tamanho for de 1 a 65.535, utilize VARCHAR (tamanho em bytes)  Se o tamanho for de 65.536 a 2.147.483.647, utilize VARCHAR (65535)  | 
| UINT1 | INT2 | 
| UINT2 | INT2 | 
| UINT4 | INT4 | 
| UINT8 | NUMERIC (20,0) | 
| WSTRING |  Se o tamanho for de 1 a 65.535, utilize NVARCHAR (tamanho em bytes)  Se o tamanho for de 65.536 a 2.147.483.647, utilize NVARCHAR (65535) | 
| BLOB | VARCHAR (tamanho máximo de LOB \$12)  O tamanho máximo de LOB não pode exceder 31 KB. O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. | 
| NCLOB | NVARCHAR (tamanho máximo de LOB)  O tamanho máximo de LOB não pode exceder 63 KB. O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. | 
| CLOB | VARCHAR (tamanho máximo de LOB)  O tamanho máximo de LOB não pode exceder 63 KB. O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. | 

## Usando AWS DMS com o Amazon Redshift Serverless como destino
<a name="CHAP_Target.Redshift.RSServerless"></a>

AWS DMS suporta o uso do Amazon Redshift Serverless como um endpoint de destino. Para obter informações sobre como utilizar o Amazon Redshift sem servidor, consulte [Amazon Redshift sem servidor](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html) no [Guia de gerenciamento do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html).

Este tópico descreve como usar um endpoint sem servidor do Amazon Redshift com. AWS DMS

**nota**  
Ao criar um endpoint sem servidor do Amazon Redshift, para o **DatabaseName**campo de configuração do seu [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)endpoint, use o nome do data warehouse do Amazon Redshift ou o nome do endpoint do grupo de trabalho. Para o **ServerName**campo, use o valor de Endpoint exibido na página **Grupo de trabalho** do cluster sem servidor (por exemplo,). `default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com` Para obter informações sobre como criar um endpoint, consulte [Criar endpoints de origem e de destino](CHAP_Endpoints.Creating.md). Para obter informações sobre o endpoint do grupo de trabalho, consulte [Conexão com o Amazon Redshift sem servidor](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html).

### Política de confiança com o Amazon Redshift sem servidor como destino
<a name="CHAP_Target.Redshift.RSServerless.policy"></a>

Ao utilizar o Amazon Redshift sem servidor como um endpoint de destino, adicione a seguinte seção destacada à política de confiança. Essa política de confiança é anexada ao perfil `dms-access-for-endpoint`.

Para obter mais informações sobre como usar uma política de confiança com AWS DMS, consulte[Criação das funções do IAM para usar com AWS DMS](security-iam.md#CHAP_Security.APIRole).

### Limitações ao utilizar o Amazon Redshift sem servidor como destino
<a name="CHAP_Target.Redshift.RSServerless.Limitations"></a>

A utilização do Redshift sem servidor como destino apresenta as seguintes limitações:
+ AWS DMS só oferece suporte ao Amazon Redshift Serverless como endpoint em regiões que oferecem suporte ao Amazon Redshift Serverless. Para obter informações sobre quais regiões são compatíveis com o Amazon Redshift sem servidor, consulte **API do Redshift sem servidor** no tópico [Endpoints e cotas do Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/redshift-service.html) na [Referência geral do AWS](https://docs.aws.amazon.com/general/latest/gr/Welcome.html).
+ Ao utilizar o roteamento aprimorado da VPC, crie um endpoint do Amazon S3 na mesma VPC do Redshift sem servidor ou no cluster provisionado pelo Redshift. Para obter mais informações, consulte [Usando o roteamento de VPC aprimorado com o Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC).
+ AWS DMS não oferece suporte à taxa de transferência aprimorada para o Amazon Redshift Serverless como destino. Para obter mais informações, consulte [Melhoria do throughput para migrações de carga máxima do Oracle para o Amazon Redshift e o Amazon S3](CHAP_Serverless.Components.md#CHAP_Serverless.Throughput).
+ AWS DMS não suporta conexões com o Amazon Redshift Redshift Serverless quando o modo SSL está definido como. `verify-full` Para conexões que exigem verificação de SSL para destinos sem servidor do Amazon Redshift, use modos SSL alternativos, como ou. `require` `verify-ca`

# Usando um banco de dados SAP ASE como alvo para AWS Database Migration Service
<a name="CHAP_Target.SAP"></a>

Você pode migrar dados para bancos de dados SAP Adaptive Server Enterprise (ASE) — anteriormente conhecido como Sybase — usando AWS DMS qualquer uma das fontes de banco de dados suportadas.

Para obter informações sobre as versões do SAP ASE que oferecem AWS DMS suporte como destino, consulte[Metas para AWS DMS](CHAP_Introduction.Targets.md).

## Pré-requisitos para usar um banco de dados SAP ASE como destino para AWS Database Migration Service
<a name="CHAP_Target.SAP.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados SAP ASE como destino AWS DMS, verifique se você tem os seguintes pré-requisitos:
+ Forneça acesso à conta SAP ASE ao AWS DMS usuário. Esse usuário deve ter read/write privilégios no banco de dados SAP ASE.
+ Em alguns casos, é possível replicar para o SAP ASE versão 15.7 instalado em uma instância do Amazon EC2 no Microsoft Windows configurada com caracteres não latinos (por exemplo, chinês). Nesses casos, AWS DMS exige que o SAP ASE 15.7 SP121 seja instalado na máquina SAP ASE de destino.

## Limitações ao usar um banco de dados SAP ASE como destino para AWS DMS
<a name="CHAP_Target.SAP.Limitations"></a>

As seguintes limitações se aplicam ao utilizar um banco de dados SAP ASE como destino do AWS DMS:
+ AWS DMS não oferece suporte a tabelas que incluam campos com os seguintes tipos de dados. As colunas replicadas com esses tipos de dados são exibidas com valores nulos. 
  + Tipos definidos pelo usuário (UDT)

## Configurações de endpoint ao usar o SAP ASE como destino para AWS DMS
<a name="CHAP_Target.SAP.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o destino do SAP ASE de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--sybase-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o SAP ASE como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.SAP.html)

## Tipos de dados de destino do SAP ASE
<a name="CHAP_Target.SAP.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do banco de dados SAP ASE que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipos de dados  |  Tipos de dados do SAP ASE  | 
| --- | --- | 
| BOOLEAN | BIT | 
| BYTES | VARBINARY (tamanho) | 
| DATE | DATE | 
| TIME | TIME | 
| TIMESTAMP |  Se a escala for => 0 e =< 6, use: BIGDATETIME  Se a escala for => 7 e =< 9, use: VARCHAR (37)  | 
| INT1 | TINYINT | 
| INT2 | SMALLINT | 
| INT4 | INTEGER | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | DOUBLE PRECISION | 
| STRING | VARCHAR (tamanho) | 
| UINT1 | TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | VARCHAR (tamanho) | 
| BLOB | IMAGE | 
| CLOB | UNITEXT | 
| NCLOB | TEXT | 

# Usando o Amazon S3 como destino para AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

Você pode migrar dados para o Amazon S3 AWS DMS usando qualquer uma das fontes de banco de dados suportadas. Ao usar o Amazon S3 como destino em uma AWS DMS tarefa, os dados de carga total e de captura de dados alterados (CDC) são gravados no formato de valores separados por vírgula (.csv) por padrão. Para obter mais opções de armazenamento compacto e de consultas mais rápidas, você também tem a opção de ter os dados gravados no formato do Apache Parquet (.parquet). 

AWS DMS nomeia arquivos criados durante um carregamento completo usando um contador hexadecimal incremental — por exemplo, .csv,... LOAD00001 LOAD00002 , LOAD00009, LOAD0000 A e assim por diante para arquivos.csv. AWS DMS nomeia arquivos CDC usando carimbos de data/hora, por exemplo, 20141029-1134010000.csv. Para cada tabela de origem que contém registros, AWS DMS cria uma pasta na pasta de destino especificada (se a tabela de origem não estiver vazia). AWS DMS grava todos os arquivos CDC e de carga completa no bucket do Amazon S3 especificado. Você pode controlar o tamanho dos arquivos AWS DMS criados usando a configuração do [MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-MaxFileSize)endpoint. 

O parâmetro `bucketFolder` contém o local em que arquivos .csv ou .parquet são armazenados antes de serem carregados no bucket do S3. Com arquivos .csv, os dados de tabela são armazenados no seguinte formato no bucket do S3, mostrado com arquivos da carga máxima.

```
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
database_schema_name/table_name/LOAD00000009.csv
database_schema_name/table_name/LOAD0000000A.csv
database_schema_name/table_name/LOAD0000000B.csv
...database_schema_name/table_name/LOAD0000000F.csv
database_schema_name/table_name/LOAD00000010.csv
...
```

É possível especificar o delimitador de coluna, o delimitador de linha e outros parâmetros utilizando os atributos de conexão adicionais. Para obter mais informações sobre os atributos de conexão extra, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring), no final desta seção.

Para evitar falsificações, AWS DMS valida a propriedade do bucket antes de realizar as operações. Por padrão, quando a configuração do endpoint do `ExpectedBucketOwner` Amazon S3 não é especificada, AWS DMS usa o ID da AWS conta que possui a função de AWS DMS serviço como o proprietário esperado do bucket.

Para migrar dados para um bucket do S3 pertencente a uma AWS conta diferente, você deve especificar explicitamente o proprietário real do bucket na configuração do endpoint do `ExpectedBucketOwner` Amazon S3, conforme mostrado a seguir. Caso contrário, a tarefa de replicação entre contas falhará.

```
--s3-settings '{"ExpectedBucketOwner": "AWS_Account_ID"}'
```

Quando você usa AWS DMS para replicar alterações de dados usando uma tarefa CDC, a primeira coluna do arquivo de saída.csv ou .parquet indica como os dados da linha foram alterados, conforme mostrado no seguinte arquivo.csv.

```
I,101,Smith,Bob,4-Jun-14,New York
U,101,Smith,Bob,8-Oct-15,Los Angeles
U,101,Smith,Bob,13-Mar-17,Dallas
D,101,Smith,Bob,13-Mar-17,Dallas
```

Neste exemplo, suponha que haja uma `EMPLOYEE` tabela no banco de dados de origem. AWS DMS grava dados no arquivo.csv ou .parquet, em resposta aos seguintes eventos:
+ Um novo funcionário (Bob Smith, ID de funcionário 101) é contratado em 4 de junho de 2014 no escritório de Nova York. No arquivo .csv ou .parquet, o `I` na primeira coluna indica que uma nova linha foi `INSERT` (inserida) na tabela EMPLOYEE no banco de dados de origem.
+ Em 8 de outubro de 2015, Bob é transferido para o escritório de Los Angeles. No arquivo .csv ou .parquet, o `U` indica que a linha correspondente na tabela EMPLOYEE foi `UPDATE` (atualizada) para refletir o local do novo escritório de Bob. O restante da linha reflete a linha na tabela EMPLOYEE conforme ela aparece após `UPDATE`. 
+ Em 13 de março de 2017, Bob é transferido novamente para o escritório de Dallas. No arquivo .csv ou .parquet, o `U` indica que essa linha foi `UPDATE` (atualizada) novamente. O restante da linha reflete a linha na tabela EMPLOYEE conforme ela aparece após `UPDATE`.
+ Depois de um tempo trabalhando em Dallas, Bob deixa a empresa. No arquivo .csv ou .parquet, o `D` indica que a linha foi `DELETE` (excluída) da tabela de origem. O restante da linha reflete como a linha na tabela EMPLOYEE aparecia antes de ser excluída.

Observe que, por padrão, para o CDC, AWS DMS armazena as alterações de linha para cada tabela do banco de dados, independentemente da ordem de transação. Para armazenar as alterações de linha nos arquivos de CDC de acordo com a ordem da transação, utilize as configurações do endpoint do S3 para especificar isso e o caminho da pasta em que deseja que os arquivos de transações da CDC sejam armazenados no destino do S3. Para obter mais informações, consulte [Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para controlar a frequência de gravações em um destino do Amazon S3 durante uma tarefa de replicação de dados, é possível configurar os atributos de conexão adicionais `cdcMaxBatchInterval` e `cdcMinFileSize`. Isso pode resultar em melhor desempenho ao analisar os dados sem operações adicionais de sobrecarga. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). 

**Topics**
+ [Pré-requisitos da utilização do Amazon S3 como destino](#CHAP_Target.S3.Prerequisites)
+ [Limitações da utilização do Amazon S3 como destino](#CHAP_Target.S3.Limitations)
+ [Segurança](#CHAP_Target.S3.Security)
+ [Utilizar o Apache Parquet para armazenar objetos do Amazon S3](#CHAP_Target.S3.Parquet)
+ [Marcação de objetos do Amazon S3](#CHAP_Target.S3.Tagging)
+ [Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3](#CHAP_Target.S3.KMSKeys)
+ [Utilizar o particionamento de pastas com base em data](#CHAP_Target.S3.DatePartitioning)
+ [Carga paralela de fontes particionadas ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring)
+ [Usando AWS Glue Data Catalog com um destino do Amazon S3 para AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings)
+ [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps)
+ [Tipos de dados de destino do S3 Parquet](#CHAP_Target.S3.DataTypes)

## Pré-requisitos da utilização do Amazon S3 como destino
<a name="CHAP_Target.S3.Prerequisites"></a>

Antes de utilizar o Amazon S3 como destino, verifique se o seguinte é verdadeiro: 
+ O bucket do S3 que você está usando como destino está na mesma AWS região da instância de replicação do DMS que você está usando para migrar seus dados.
+ A AWS conta que você usa para a migração tem uma função do IAM com acesso de gravação e exclusão ao bucket do S3 que você está usando como destino.
+ Esse perfil tem acesso à marcação para que você possa marcar todos os objetos do S3 gravados no bucket de destino.
+ O perfil do IAM tem o DMS (dms.amazonaws.com) adicionado como *Entidade confiável.* 
+ Para a AWS DMS versão 3.4.7 e superior, o DMS deve acessar o bucket de origem por meio de um VPC endpoint ou de uma rota pública. Para ter informações sobre os endpoints da VPC, consulte [Configurando endpoints VPC para AWS DMS](CHAP_VPC_Endpoints.md).

Para configurar esse acesso à conta, verifique se o perfil atribuído à conta de usuário utilizada para criar a tarefa de migração tem o seguinte conjunto de permissões.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2"
            ]
        }
    ]
}
```

------

Para obter os pré-requisitos para utilizar a validação com o S3 como destino, consulte [Pré-requisitos da validação do S3 de destino](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites).

## Limitações da utilização do Amazon S3 como destino
<a name="CHAP_Target.S3.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Amazon S3 como destino:
+ Não ative o versionamento para o S3. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada `list-object` do S3. Para criar uma política de ciclo de vida para um bucket do S3, consulte [Gerenciar o ciclo de vida do armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para excluir a versão de um objeto do S3, consulte [Excluir versões de objetos de um bucket com versionamento ativado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Um bucket do S3 ativado para VPC (VPC do gateway) é compatível com as versões 3.4.7 e superiores.
+ Os seguintes comandos da linguagem de definição de dados (DDL) são compatíveis com a captura de dados de alteração (CDC): truncar tabela, descartar tabela, criar tabela, renomear tabela, adicionar coluna, descartar coluna, renomear coluna e alterar o tipo de dados de coluna. Observe que quando uma coluna é adicionada, descartada ou renomeada no banco de dados de origem, nenhuma instrução ALTER é registrada no bucket do S3 de destino e AWS DMS não altera os registros criados anteriormente para corresponder à nova estrutura. Após a alteração, AWS DMS cria todos os novos registros usando a nova estrutura da tabela.
**nota**  
Uma operação de truncamento da DDL remove todos os arquivos e pastas de tabelas correspondentes em um bucket do S3. É possível utilizar as configurações de tarefas para desativar esse comportamento e configurar a forma como o DMS trata o comportamento da DDL durante a captura de dados de alteração (CDC). Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).
+ O modo Full LOB não é compatível.
+ As alterações na estrutura da tabela de origem durante a carga máxima não são compatíveis. As alterações nos dados são compatíveis durante a carga máxima.
+ Várias tarefas que replicam dados da mesma tabela de origem para o mesmo bucket de endpoint do S3 de destino resultam em tarefas sendo gravadas no mesmo arquivo. Recomendamos que você especifique diferentes endpoints de destino (buckets) se sua fonte de dados estiver na mesma tabela.
+ `BatchApply` não é compatível com um endpoint do S3. A utilização da aplicação em lote (por exemplo, a configuração da tarefa de metadados de destino `BatchApplyEnabled`) para um destino do S3 pode resultar em perda de dados.
+ Não é possível utilizar `DatePartitionEnabled` ou `addColumnName` em conjunto com `PreserveTransactions` ou `CdcPath`.
+ AWS DMS não suporta renomear várias tabelas de origem para a mesma pasta de destino usando regras de transformação.
+ Se houver gravação intensa na tabela de origem durante a fase de carregamento completo, o DMS poderá gravar registros duplicados no bucket do S3 ou nas alterações armazenadas em cache.
+ Se você configurar a tarefa com um `TargetTablePrepMode` definido como `DO_NOTHING`, o DMS poderá gravar registros duplicados no bucket do S3 se a tarefa for interrompida e retomada abruptamente durante a fase de carregamento completo.
+ Se você configurar o endpoint de destino com a configuração `PreserveTransactions` definida como `true`, o recarregamento de uma tabela não limpará os arquivos de CDC gerados anteriormente. Para obter mais informações, consulte [Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para obter as limitações da utilização da validação com o S3 como destino, consulte [Limitações da utilização da validação de destino do S3.](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations).

## Segurança
<a name="CHAP_Target.S3.Security"></a>

Para utilizar o Amazon S3 como destino, a conta utilizada para a migração deve ter acesso de gravação e exclusão ao bucket do Amazon S3 utilizado como o destino. Especifique o nome do recurso da Amazon (ARN) de um perfil do IAM que tem as permissões necessárias para acessar o Amazon S3. 

AWS DMS oferece suporte a um conjunto de concessões predefinidas para o Amazon S3, conhecidas como listas de controle de acesso predefinidas (). ACLs Cada ACL pré-configurada tem um conjunto de concessões e permissões que podem ser utilizadas para definir permissões para o bucket do Amazon S3. É possível especificar uma ACL pré-configurada utilizando `cannedAclForObjects` no atributo da string de conexão para o endpoint de destino do S3. Para obter mais informações sobre como utilizar o atributo de conexão adicional `cannedAclForObjects`, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). [Para obter mais informações sobre o Amazon S3 enlatado ACLs, consulte ACL enlatado.](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)

O perfil do IAM que você utiliza para a migração deve ser capaz de executar a operação da API `s3:PutObjectAcl`.

## Utilizar o Apache Parquet para armazenar objetos do Amazon S3
<a name="CHAP_Target.S3.Parquet"></a>

O formato de valores separados por vírgulas (.csv) é o formato do armazenamento padrão para objetos de destino do Amazon S3. Para obter armazenamento compacto e consultas mais rápidas, é possível utilizar o Apache Parquet (.parquet) como o formato de armazenamento.

O Apache Parquet é um formato de armazenamento de arquivos de código aberto originalmente projetado para o Hadoop. Para obter mais informações sobre o Apache Parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/).

Para definir o .parquet como o formato de armazenamento para os objetos de destino do S3, é possível utilizar os seguintes mecanismos:
+ Configurações de endpoint que você fornece como parâmetros de um objeto JSON ao criar o endpoint utilizando a AWS CLI ou a API do AWS DMS. Para obter mais informações, consulte [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Atributos de conexão adicionais que você fornece como uma lista separada por ponto-e-vírgula ao criar o endpoint. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

## Marcação de objetos do Amazon S3
<a name="CHAP_Target.S3.Tagging"></a>

É possível marcar objetos do Amazon S3 criados por uma instância de replicação especificando objetos JSON adequados como parte das regras de mapeamento de tarefa-tabela. Para obter mais informações sobre os requisitos e as opções de marcação de objetos do S3, incluindo nomes de tag válidos, consulte [Marcação de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html) no *Guia do usuário do Amazon Simple Storage Service*. Para obter mais informações sobre o mapeamento de tabelas utilizando JSON, consulte [Especificar a seleção de tabelas e as regras de transformação utilizando JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Você marca objetos do S3 criados para tabelas e esquemas especificados utilizando um ou mais objetos JSON do tipo de regra `selection`. Então, você segue esse objeto (ou objetos) `selection` por um ou mais objetos JSON do tipo de regra `post-processing` com a ação `add-tag`. Essas regras de pós-processamento identificam os objetos do S3 que você deseja marcar e especificar os nomes e valores das tags que você deseja adicionar a esses objetos do S3.

É possível encontrar os parâmetros para especificar em objetos JSON do tipo de regra `post-processing` na tabela a seguir.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.S3.html)

Ao especificar vários tipos de regra `post-processing` para marcar uma seleção de objetos do S3, cada objeto do S3 é marcado utilizando apenas um objeto `tag-set` de uma regra de pós-processamento. O conjunto de tags específico utilizado para marcar um determinado objeto do S3 é aquele da regra de pós-processamento cujo localizador de objeto associado corresponde melhor ao objeto do S3. 

Por exemplo, suponha que duas regras de pós-processamento identificam o mesmo objeto do S3. Suponha também que o localizador de objetos de uma regra use curingas, e que o localizador de objetos de outra regra use uma correspondência exata para identificar o objeto do S3 (sem curingas). Nesse caso, o conjunto de tags associado à regra pós-processamento com a correspondência exata é utilizado para marcar o objeto do S3. Se várias regras de pós-processamento corresponderem a um determinado objeto do S3 igualmente bem, o conjunto de tags associado à primeira regra de pós-processamento será utilizado para marcar o objeto.

**Example Adicionar tags estáticas a um objeto do S3 criado para uma única tabela e esquema**  
As seguintes regras de seleção e pós-processamento adicionam três tags (`tag_1`, `tag_2` e `tag_3` com valores estáticos correspondentes, `value_1`, `value_2` e `value_3`) a um objeto do S3 criado. Esse objeto do S3 corresponde a uma única tabela na origem chamada `STOCK` com um esquema chamado `aat2`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "5",
            "rule-name": "5",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              },
              {
                "key": "tag_3",
                "value": "value_3"
              }                                     
           ]
        }
    ]
}
```

**Example Adicionar tags estáticas e dinâmicas a objetos do S3 criados para várias tabelas e esquemas**  
O exemplo a seguir tem uma seleção e duas regras de pós-processamento, em que a entrada da origem inclui todas as tabelas e todos os seus esquemas.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_${table-name}"
              }
            ]
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat",
                "table-name": "ITEM",
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              }           ]
        }
    ]
}
```
A primeira regra de pós-processamento adiciona duas tags (`dw-schema-name` e `dw-schema-table`) com valores dinâmicos correspondentes (`${schema-name}` e `my_prefix_${table-name}`) a quase todos os objetos do S3 criados no destino. A exceção é o objeto do S3 identificado e marcado com a segunda regra de pós-processamento. Assim, cada objeto de destino do S3 identificado pelo localizador de objetos curinga é criado com tags que identificam o esquema e a tabela à qual ele corresponde na origem.  
A segunda regra de pós-processamento adiciona `tag_1` e `tag_2` com valores estáticos correspondentes `value_1` e `value_2` a um objeto do S3 criado, que é identificado por um localizador de objetos de correspondência exata. Esse objeto do S3 criado, portanto, corresponde à uma única tabela na origem chamada `ITEM` com um esquema chamado `aat`. Devido à correspondência exata, essas tags substituem todas as tags nesse objeto adicionado na primeira regra de pós-processamento, que corresponde a objetos do S3 apenas por meio de curinga.

**Example Adicionar nomes e valores de tags dinâmicas a objetos do S3**  
O exemplo a seguir tem duas regras de seleção e uma regra de pós-processamento. Aqui, a entrada da origem inclui apenas a tabela `ITEM` no esquema `retail` ou `wholesale`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "retail",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "wholesale",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "ITEM",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_ITEM"
              },
              {
                "key": "${schema-name}_ITEM_tag_1",
                "value": "value_1"
              },
              {
                "key": "${schema-name}_ITEM_tag_2",
                "value": "value_2"
              }
            ]
    ]
}
```
O conjunto de tags da regra de pós-processamento adiciona duas tags (`dw-schema-name` e `dw-schema-table`) para todos os objetos do S3 criados para a tabela `ITEM` no destino. A primeira tag tem o valor dinâmico `"${schema-name}"`, e a segunda tag tem um valor estático, `"my_prefix_ITEM"`. Assim, cada objeto de destino do S3 é criado com tags que identificam o esquema e a tabela à qual ele corresponde na origem.   
Além disso, o conjunto de tags adiciona duas tags adicionais com nomes dinâmicos (`${schema-name}_ITEM_tag_1` e `"${schema-name}_ITEM_tag_2"`). Essas têm valores estáticos correspondentes `value_1` e `value_2`. Portanto, cada uma dessas tags são nomeadas pelo esquema atual, `retail` ou `wholesale`. Não é possível criar um nome de tag dinâmico duplicado nesse objeto, porque cada objeto é criado para um único nome de esquema exclusivo. O nome do esquema é utilizado para criar um nome de tag exclusivo de outra forma.

## Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3
<a name="CHAP_Target.S3.KMSKeys"></a>

Você pode criar e usar AWS KMS chaves personalizadas para criptografar seus objetos de destino do Amazon S3. Depois de criar uma chave do KMS, é possível utilizá-la para criptografar objetos utilizando uma das seguintes abordagens ao criar o endpoint de destino do S3:
+ Utilize as seguintes opções para objetos de destino do S3 (com o formato de armazenamento de arquivo .csv padrão) ao executar o comando `create-endpoint` utilizando a AWS CLI.

  ```
  --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
  "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
  "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", 
  "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'
  ```

  Aqui, `your-KMS-key-ARN` é o nome do recurso da Amazon (ARN) da sua chave do KMS. Além disso, seu perfil do IAM deve ter permissões de acesso (consulte [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings)).
+ Defina o atributo de conexão adicional `encryptionMode` como o valor `SSE_KMS`, e o atributo de conexão adicional `serverSideEncryptionKmsKeyId` como o ARN de sua chave do KMS. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

Para criptografar os objetos de destino do Amazon S3 utilizando uma chave do KMS, você precisa de um perfil do IAM que tenha permissões para acessar o bucket do Amazon S3. Esse perfil do IAM é acessado em uma política (uma política de chaves) anexada à chave de criptografia criada. É possível fazer isso no console do IAM criando o seguinte:
+ Uma política com permissões para acessar o bucket do Amazon S3.
+ Um perfil do IAM com essa política.
+ A chave de criptografia do KMS com uma política de chaves que faz referência a esse perfil.

Os procedimentos a seguir descrevem como fazer isso.

**Para criar uma política do IAM com permissões para acessar o bucket do Amazon S3.**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, escolha **Policies (Políticas)**. A página **Policies (Políticas)** é aberta.

1. Selecione **Criar política**. A página **Create policy (Criar política)** é aberta.

1. Escolha **Service (Serviço)** e escolha **S3**. Uma lista de permissões de ação é exibida.

1. Escolha **Expand all (Expandir tudo)** para expandir a lista e escolha as seguintes permissões no mínimo:
   + **ListBucket**
   + **PutObject**
   + **DeleteObject**

   Escolha todas as outras permissões necessárias e escolha **Collapse all (Recolher tudo)** para recolher a lista.

1. Escolha **Resouces (Recursos)** para especificar os recursos que você deseja acessar. No mínimo, escolha **Todos os recursos** para fornecer acesso geral aos recursos do Amazon S3.

1. Adicione todas as outras condições ou permissões necessárias e escolha **Review policy (Revisar política)**. Verifique os resultados na página **Review policy (Revisar política)**.

1. Se as configurações forem o que você precisa, insira um nome para a política (por exemplo, `DMS-S3-endpoint-access`), e qualquer descrição adicional e escolha **Criar política**. A página **Policies (Políticas)** é aberta com uma mensagem indicando que sua política foi criada.

1. Pesquise e escolha o nome da política na lista **Policies (Políticas)**. A página **Summary (Resumo)** é aberta exibindo o JSON da política, semelhante ao seguinte.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:ListBucket",
                   "s3:DeleteObject"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

Agora, você criou a política para acessar os recursos do Amazon S3 para a criptografia com um nome específico, por exemplo `DMS-S3-endpoint-access`.

**Como criar um perfil do IAM com essa política**

1. No console do IAM, escolha **Perfis** no painel de navegação. A página de detalhes de **Perfis** é aberta.

1. Selecione **Criar perfil**. A página **Create role (Criar função)** é aberta.

1. Com o AWS serviço selecionado como a entidade confiável, escolha **DMS** como o serviço para usar a função do IAM.

1. Escolha **Próximo: Permissões**. A visualização **Attach permissions policies (Anexar políticas de permissões)** é exibida na página **Create role (Criar função)**.

1. Encontre e selecione a política do IAM para o perfil do IAM criado no procedimento anterior (`DMS-S3-endpoint-access`).

1. Escolha **Próximo: tags**. A visualização **Add tags (Adicionar tags)** é exibida na página **Create role (Criar função)**. Aqui, você pode adicionar todas as tags desejadas.

1. Escolha **Próximo: revisar**. A visualização **Review (Revisão)** é exibida na página **Create role (Criar função)**. Aqui, é possível verificar os resultados.

1. Se as configurações forem o que você precisa, insira um nome para o perfil (obrigatório, por exemplo, `DMS-S3-endpoint-access-role`), e qualquer descrição adicional e escolha **Criar função**. A página de detalhes **Funções** é aberta com uma mensagem indicando que o perfil foi criado.

Agora, você criou o perfil para acessar os recursos do Amazon S3 para criptografia com um nome especificado, por exemplo, `DMS-S3-endpoint-access-role`.

**Como criar uma chave de criptografia do KMS com uma política de chave que faz referência ao perfil do IAM**
**nota**  
Para obter mais informações sobre como AWS DMS funciona com chaves de AWS KMS criptografia, consulte[Configurando uma chave de criptografia e especificando permissões AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Faça login no console Console de gerenciamento da AWS e abra o AWS Key Management Service (AWS KMS) em [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Para alterar o Região da AWS, use o seletor de região no canto superior direito da página.

1. No painel de navegação, escolha **Chaves gerenciadas pelo cliente**.

1. Escolha **Criar chave**. A página **Configure key (Configurar chave)** é aberta.

1. Para **Key type (Tipo de chave)**, escolha **Symmetric (Simétrica)**.
**nota**  
Ao criar essa chave, você só pode criar uma chave simétrica, porque todos os AWS serviços, como o Amazon S3, só funcionam com chaves de criptografia simétricas.

1. Escolha **Opções avançadas**. Para **Key material origin (Origem do material da chave)**, certifique-se de que o **KMS** está escolhido e escolha **Next (Próximo)**. A página **Add labels (Adicionar rótulos)** é aberta.

1. Em **Create alias and description (Criar alias e descrição)**, insira um alias para a chave (por exemplo, `DMS-S3-endpoint-encryption-key`) e qualquer descrição adicional.

1. Em **Tags**, adicione todas as tags desejadas para ajudar a identificar a chave e controlar seu uso e escolha **Next (Próximo)**. A página **Define key administrative permissions (Definir permissões administrativas de chaves)** é aberta mostrando uma lista de usuários e funções que podem ser escolhidos.

1. Adicione os usuários e as funções desejados para gerenciar a chave. Certifique-se de que esses usuários e funções tenham as permissões necessárias para gerenciar a chave. 

1. Em **Key deletion (Exclusão de chaves)**, escolha se os administradores de chaves podem excluir a chave e escolha **Next (Próximo)**. A página **Define key usage permissions (Definir permissões de uso de chaves)** é aberta mostrando uma lista adicional de usuários e funções que podem ser escolhidos.

1. Para **Esta conta**, escolha os usuários disponíveis que você deseja que executem operações criptográficas em destinos do Amazon S3. Escolha também o perfil criado anteriormente em **Perfis** para ativar o acesso à criptografia dos objetos de destino do Amazon S3, por exemplo, `DMS-S3-endpoint-access-role`).

1. Se você quiser adicionar outras contas não listadas para ter esse mesmo acesso, em **Outras AWS contas**, escolha **Adicionar outra AWS conta** e escolha **Avançar**. A página **Review and edit key policy (Rever e editar política de chave)** é aberta mostrando o JSON da política de chave que você pode revisar e editar digitando no JSON existente. Aqui, a política de chave que faz referência à função e aos usuários é mostrada (por exemplo, `Admin` e `User1`) que você escolheu na etapa anterior. Também é possível ver as diferentes ações de chaves permitidas para as várias entidades principais (usuários e perfis), conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
       "Id": "key-consolepolicy-3",
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root"
                   ]
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/Admin"
                   ]
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow attachment of persistent resources",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": true
                   }
               }
           }
       ]
   }
   ```

------

1. Escolha **Terminar**. A página **Chaves de criptografia** é aberta com uma mensagem indicando que a chave do KMS foi criada.

Agora, você criou uma nova chave do KMS com um alias especificado (por exemplo, `DMS-S3-endpoint-encryption-key`). Essa chave permite AWS DMS criptografar objetos de destino do Amazon S3.

## Utilizar o particionamento de pastas com base em data
<a name="CHAP_Target.S3.DatePartitioning"></a>

AWS DMS suporta partições de pastas do S3 com base na data de confirmação da transação quando você usa o Amazon S3 como seu endpoint de destino. Utilizando o particionamento de pastas com base em data, é possível gravar dados de uma única tabela de origem em uma estrutura de pastas com hierarquia temporal em um bucket do S3. Ao particionar pastas ao criar um endpoint de destino do S3, é possível fazer o seguinte:
+ Gerenciar melhor os objetos do S3
+ Limitar o tamanho de cada pasta do S3
+ Otimizar consultas de data lake ou outras operações subsequentes

É possível ativar o particionamento de pastas com base em data ao criar um endpoint de destino do S3. É possível ativá-lo ao migrar dados existentes e ao replicar alterações em andamento (carga máxima \$1 CDC) ou replicar somente alterações de dados (somente CDC). Ao migrar dados existentes e replicar alterações contínuas, somente as alterações contínuas serão particionadas. Utilize as seguintes configurações de endpoint de destino:
+ `DatePartitionEnabled`: especifica o particionamento com base em datas. Defina esta opção Boolean como `true` para particionar pastas de bucket do S3 com base nas datas de confirmação da transação. 

  Não é possível utilizar essa configuração com `PreserveTransactions` ou `CdcPath`.

  O valor padrão é `false`. 
+ `DatePartitionSequence`: identifica a sequência do formato de data a ser utilizado durante o particionamento de pastas. Defina esta opção ENUM como `YYYYMMDD`, `YYYYMMDDHH`, `YYYYMM`, `MMYYYYDD` ou `DDMMYYYY`. O valor padrão é `YYYYMMDD`. Utilize essa configuração quando `DatePartitionEnabled` estiver definido como `true.`.
+ `DatePartitionDelimiter`: especifica um delimitador de separação de datas a ser utilizado durante o particionamento de pastas. Defina esta opção ENUM como `SLASH`, `DASH`, `UNDERSCORE` ou `NONE`. O valor padrão é `SLASH`. Utilize essa configuração quando `DatePartitionEnabled` estiver definido como `true`.
+ `DatePartitionTimezone`: ao criar um endpoint de destino do S3, defina `DatePartitionTimezone` para converter a hora UTC atual em um fuso horário especificado. A conversão ocorre quando uma pasta de partição de data é criada e um nome de CDC é gerado. O formato do fuso horário é Área/Localização. Use esse parâmetro quando `DatePartitionedEnabled` for definido como `true`, conforme mostrado no seguinte exemplo:

  ```
  s3-settings='{"DatePartitionEnabled": true, "DatePartitionSequence": "YYYYMMDDHH", "DatePartitionDelimiter": "SLASH", "DatePartitionTimezone":"Asia/Seoul", "BucketName": "dms-nattarat-test"}'
  ```

O exemplo a seguir mostra como ativar o particionamento de pastas com base em data, com valores padrão para a sequência e o delimitador da partição de dados. Ele usa a `--s3-settings '{json-settings}'` opção do AWS CLI. `create-endpoint`comando. 

```
   --s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'
```

## Carga paralela de fontes particionadas ao usar o Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

É possível configurar uma carga máxima paralela de fontes de dados particionadas para destinos do Amazon S3. Essa abordagem melhora os tempos de carga da migração de dados particionados nos mecanismos de banco de dados de origem compatíveis para o destino do S3. Para melhorar os tempos de carga dos dados de origem particionados, crie subpastas de destino do S3 mapeadas para as partições de cada tabela no banco de dados de origem. Essas subpastas vinculadas à partição permitem AWS DMS executar processos paralelos para preencher cada subpasta no destino.

Para configurar uma carga máxima paralela de um destino do S3, o S3 é compatível com os três tipos de regra `parallel-load` para a regra `table-settings` de mapeamento de tabela:
+ `partitions-auto`
+ `partitions-list`
+ `ranges`

Para obter mais informações sobre esses tipos de regra de carga paralela, consulte [Regras e operações de configurações de tabelas e coleções](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

Para os tipos de regra `partitions-auto` e `partitions-list`, o AWS DMS utiliza o nome de cada partição do endpoint de origem para identificar a estrutura da subpasta de destino, da seguinte forma.

```
bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv
```

Aqui, o caminho da subpasta em que os dados são migrados e armazenados no destino do S3 inclui uma subpasta `partition_name` adicional que corresponde a uma partição de origem com o mesmo nome. Essa subpasta `partition_name` armazena um ou mais arquivos `LOADseq_num.csv` contendo os dados migrados da partição de origem especificada. Aqui, `seq_num` é o sufixo do número de sequência no nome do arquivo .csv, como `00000001` no arquivo .csv com o nome `LOAD00000001.csv`.

No entanto, alguns mecanismos de banco de dados, como MongoDB e o DocumentDB, não têm o conceito de partições. Para esses mecanismos de banco de dados, AWS DMS adiciona o índice do segmento de origem em execução como um prefixo ao nome do arquivo.csv de destino, da seguinte maneira.

```
.../database_schema_name/table_name/SEGMENT1_LOAD00000001.csv
.../database_schema_name/table_name/SEGMENT1_LOAD00000002.csv
...
.../database_schema_name/table_name/SEGMENT2_LOAD00000009.csv
.../database_schema_name/table_name/SEGMENT3_LOAD0000000A.csv
```

Aqui, os arquivos `SEGMENT1_LOAD00000001.csv` e `SEGMENT1_LOAD00000002.csv` são nomeados com o mesmo prefixo de índice do segmento de origem em execução, `SEGMENT1`. Eles são nomeados assim porque os dados de origem migrados para esses dois arquivos .csv estão associados ao mesmo índice de segmento de origem em execução. Por outro lado, os dados migrados armazenados em cada um dos arquivos `SEGMENT2_LOAD00000009.csv` e `SEGMENT3_LOAD0000000A.csv` de destino estão associados a diferentes índices de segmentos de origem em execução. Cada arquivo tem seu nome prefixado com o nome de seu índice de segmento em execução, `SEGMENT2` e `SEGMENT3`.

Para o tipo de carga paralela `ranges`, defina os nomes e valores das colunas utilizando as configurações `columns` e `boundaries` das regras `table-settings`. Com essas regras, é possível especificar partições correspondentes aos nomes dos segmentos, da seguinte maneira.

```
"parallel-load": {
    "type": "ranges",
    "columns": [
         "region",
         "sale"
    ],
    "boundaries": [
          [
               "NORTH",
               "1000"
          ],
          [
               "WEST",
               "3000"
          ]
    ],
    "segment-names": [
          "custom_segment1",
          "custom_segment2",
          "custom_segment3"
    ]
}
```

Aqui, a configuração de `segment-names` define nomes de três partições para migrar dados em paralelo no destino do S3. Os dados migrados são carregados paralelamente e armazenados em arquivos .csv nas subpastas da partição em ordem, da seguinte maneira.

```
.../database_schema_name/table_name/custom_segment1/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment2/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment3/LOAD[00000001...].csv
```

Aqui, AWS DMS armazena uma série de arquivos.csv em cada uma das três subpastas de partição. A série de arquivos .csv em cada subpasta de partição é nomeada de forma incremental, começando com `LOAD00000001.csv` até que todos os dados sejam migrados.

Em alguns casos, é possível não nomear explicitamente as subpastas de partição para um tipo de carga paralela `ranges` utilizando a configuração `segment-names`. Nesse caso, AWS DMS aplica o padrão de criação de cada série de arquivos.csv em sua `table_name` subpasta. Aqui, o AWS DMS prefixa os nomes dos arquivos de cada série de arquivos .csv com o nome do índice do segmento de origem em execução, da seguinte forma.

```
.../database_schema_name/table_name/SEGMENT1_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT2_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT3_LOAD[00000001...].csv
...
.../database_schema_name/table_name/SEGMENTZ_LOAD[00000001...].csv
```

## Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do Amazon S3 de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--s3-settings '{"EndpointSetting": "value", ...}'` JSON.

**nota**  
O DMS grava alterações em arquivos Parquet com base na ordem de confirmação do banco de dados de origem, mas, ao migrar várias tabelas, a ordem da transação original não é preservada devido ao particionamento em nível de tabela. Para manter as informações de sequência da transação, defina a configuração de endpoint `TimestampColumnName` para incluir o carimbo de data/hora de confirmação de origem para cada linha, que você pode usar no processamento posterior para reconstruir a sequência da transação original. Ao contrário do formato CSV, que oferece a configuração `PreserveTransactions`, os arquivos Parquet lidam com as transações de forma diferente devido à respectiva estrutura de armazenamento em colunas, mas essa abordagem permite o rastreamento preciso dos tempos de confirmação da origem, possibilita reconstruir a ordem de transação pós-migração e permite o processamento eficiente dos dados, mantendo a consistência de dados.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Amazon S3 como destino.


| **Opção** | **Descrição** | 
| --- | --- | 
| CsvNullValue |  Um parâmetro opcional que especifica como AWS DMS trata valores nulos. Ao tratar o valor nulo, é possível utilizar esse parâmetro para passar uma string definida pelo usuário como nula ao gravar no destino. Por exemplo, quando as colunas de destino forem anuláveis, é possível utilizar essa opção para diferenciar entre o valor de string vazia e o valor nulo.  Valor padrão: `""` Valores válidos: qualquer string válida. Exemplo: `--s3-settings '{"CsvNullValue": "NULL"}'` Se o valor da coluna do banco de dados de origem for nulo, no arquivo CSV do S3, o valor da coluna será `NULL` em vez da string “”.  | 
| AddColumnName |  Um parâmetro opcional que, quando definido como `true` ou `y`, pode ser utilizado para adicionar informações de nome de coluna ao arquivo .csv de saída. Não é possível utilizar esse parâmetro com `PreserveTransactions` ou `CdcPath`. Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"AddColumnName": true}'`  | 
| AddTrailingPaddingCharacter |  Utilize a configuração `AddTrailingPaddingCharacter` do endpoint de destino do S3 para adicionar preenchimento aos dados da string. O valor padrão é `false`. Tipo: booliano Exemplo: `--s3-settings '{"AddTrailingPaddingCharacter": true}'`  | 
| BucketFolder |  Um parâmetro opcional para definir um nome de pasta no bucket do S3. Se fornecidos, os objetos de destino serão criados como arquivos .csv ou .parquet no caminho `BucketFolder/schema_name/table_name/`. Se esse parâmetro não for especificado, o caminho utilizado será `schema_name/table_name/`.  Exemplo: `--s3-settings '{"BucketFolder": "testFolder"}'`  | 
| BucketName |  O nome do bucket do S3 no qual os objetos de destino do S3 são criados como arquivos .csv ou .parquet. Exemplo: `--s3-settings '{"BucketName": "buckettest"}'`  | 
| CannedAclForObjects |  Um valor que AWS DMS permite especificar uma lista de controle de acesso predefinida (padrão) para objetos criados no bucket do S3 como arquivos.csv ou .parquet. *Para obter mais informações sobre o Amazon S3 canned ACLs, consulte [Canned ACL no Amazon S3 Developer](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) Guide.* Valor padrão: NONE Os valores válidos para esse atributo são: NONE; PRIVATE; PUBLIC\$1READ; PUBLIC\$1READ\$1WRITE; AUTHENTICATED\$1READ; \$1READ; BUCKET\$1OWNER\$1READ; BUCKET\$1OWNER\$1FULL\$1CONTROL. AWS\$1EXEC Exemplo: `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'`  | 
| CdcInsertsOnly |  Um parâmetro opcional durante um carga de captura de dados de alteração (CDC) para gravar apenas operações INSERT nos arquivos de saída de valores separados por vírgulas (.csv) ou de armazenamento colunar (.parquet). Por padrão (a configuração `false`), o primeiro campo em um registro .csv ou .parquet contém a letra I (INSERT), U (UPDATE) ou D (DELETE). Esta carta indica se a linha foi inserida, atualizada ou excluída no banco de dados de origem para um carregamento CDC no destino. Se `cdcInsertsOnly` estiver definido como `true` ou`y`, somente INSERTs do banco de dados de origem serão migrados para o arquivo.csv ou .parquet. Somente no caso do formato .csv, a maneira como esses INSERTS são registrados depende do valor `IncludeOpForFullLoad`. Se `IncludeOpForFullLoad` estiver definido como `true`, o primeiro campo de cada registro CDC será definido como I para indicar a operação INSERT na origem. Se `IncludeOpForFullLoad` estiver definido como `false`, os registros CDC serão gravados sem um primeiro campo indicando a operação INSERT na origem. Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps). Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"CdcInsertsOnly": true}'`  | 
| CdcInsertsAndUpdates |  Habilita uma carga de captura de dados de alteração (CDC) para gravar operações INSERT e UPDATE em arquivos de saída .csv ou .parquet (armazenamento colunar). A configuração padrão é`false`, mas quando `cdcInsertsAndUpdates` é definido como `true` ou`y`, INSERTs e UPDATEs do banco de dados de origem são migrados para o arquivo.csv ou .parquet.  Somente para o formato de arquivo.csv, a forma como esses INSERTs e UPDATEs são gravados depende do valor do `includeOpForFullLoad` parâmetro. Se `includeOpForFullLoad` estiver definido como `true`, o primeiro campo de cada registro CDC será definido como `I` ou `U` para indicar operações INSERT e UPDATE na origem. Mas se `includeOpForFullLoad` for definido como `false`, os registros CDC serão gravados sem uma indicação de operações INSERT ou UPDATE na origem.   Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps).  `CdcInsertsOnly` e `cdcInsertsAndUpdates` não podem ambos serem definidos como true para o mesmo endpoint. Defina `cdcInsertsOnly` ou `cdcInsertsAndUpdates` `true` para o mesmo endpoint, mas não os dois.   Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"CdcInsertsAndUpdates": true}'`  | 
|  `CdcPath`  |  Especifica o caminho da pasta dos arquivos CDC. Para uma origem do S3, essa configuração é necessária se uma tarefa captura os dados de alterações; caso contrário, ela é opcional. Se `CdcPath` estiver definido, o DMS lerá os arquivos da CDC nesse caminho e replicará as alterações de dados no endpoint de destino. Para um destino do S3, se você definir `PreserveTransactions` como verdadeiro, o DMS verificará se você definiu esse parâmetro para um caminho de pasta no destino do S3, em que o DMS pode salvar a ordem das transações na carga da CDC. O DMS cria esse caminho de pasta CDC no diretório de trabalho de destino do S3 ou no local de destino do S3 especificado por `BucketFolder` e `BucketName`. Não é possível utilizar esse parâmetro com `DatePartitionEnabled` ou `AddColumnName`. Tipo: string Por exemplo, se você especificar `CdcPath` como `MyChangedData` e especificar `BucketName` como `MyTargetBucket`, mas não especificar `BucketFolder`, o DMS criará o seguinte caminho da pasta CDC: `MyTargetBucket/MyChangedData`.  Se você especificar o mesmo `CdcPath` e especificar `BucketName` como `MyTargetBucket` e `BucketFolder` como `MyTargetData`, o DMS criará o seguinte caminho da pasta CDC: `MyTargetBucket/MyTargetData/MyChangedData`. Essa configuração é suportada nas AWS DMS versões 3.4.2 e superiores. Ao capturar alterações de dados na ordem da transação, o DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do DataFormat S3 no destino.   | 
|  `CdcMaxBatchInterval`  |  Condição de tamanho máximo do intervalo, definido em segundos, para a saída de um arquivo para o Amazon S3. Valor padrão: 60 segundos Quando `CdcMaxBatchInterval` e `CdcMinFileSize` forem especificados, a gravação do arquivo será acionada por qualquer condição de parâmetro que seja atendida primeiro.  A partir da AWS DMS versão 3.5.3, ao usar o PostgreSQL ou o Aurora PostgreSQL como origem e o Amazon S3 com o Parquet como destino, a frequência das atualizações depende da quantidade de dados que o endpoint de destino está configurado para reter `confirmed_flush_lsn` na memória. AWS DMS envia o de `confirmed_flush_lsn` volta para a fonte somente depois que os dados na memória são gravados no Amazon S3. Se você configurar o parâmetro `CdcMaxBatchInterval` com um valor maior, poderá observar um aumento no uso do slot de replicação no banco de dados de origem.   | 
|  `CdcMinFileSize`  |  Condição de tamanho mínimo do arquivo, definido em kilobytes, para a saída de um arquivo para o Amazon S3. Valor padrão: 32000 KB Quando `CdcMinFileSize` e `CdcMaxBatchInterval` forem especificados, a gravação do arquivo será acionada por qualquer condição de parâmetro que seja atendida primeiro.  | 
|  `PreserveTransactions`  |  Se definido como `true`, o DMS salvará a ordem da transação para a captura de dados de alteração (CDC) no destino do Amazon S3 especificado por `CdcPath`. Não é possível utilizar esse parâmetro com `DatePartitionEnabled` ou `AddColumnName`. Tipo: booliano Ao capturar alterações de dados na ordem da transação, o DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do DataFormat S3 no destino. Essa configuração é suportada nas AWS DMS versões 3.4.2 e superiores.   | 
| IncludeOpForFullLoad |  Um parâmetro opcional durante um carga máxima para gravar operações INSERT só nos arquivos de saída de valores separados por vírgulas (.csv). Em cargas máximas, os registros só podem ser inseridos. Por padrão (a configuração `false`), não há informações gravadas nesses arquivos de saída para um carga máxima indicando que as linhas foram inseridas no banco de dados de origem. Se `IncludeOpForFullLoad` estiver definido como `true` ou `y`, INSERT será registrado utilizando a letra I no primeiro campo do arquivo .csv.  Esse parâmetro funciona em conjunto com `CdcInsertsOnly` ou `CdcInsertsAndUpdates` somente para arquivos .csv de saída. Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps).  Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"IncludeOpForFullLoad": true}'`  | 
| CompressionType |  Um parâmetro opcional ao definir como `GZIP` utiliza o GZIP para compactar os arquivos .csv ou .parquet de destino. Quando esse parâmetro é definido como o padrão, ele deixa os arquivos descompactados. Valor padrão: `NONE` Valores válidos: `GZIP` ou `NONE` Exemplo: `--s3-settings '{"CompressionType": "GZIP"}'`  | 
| CsvDelimiter |  O delimitador utilizado para separar colunas nos arquivos .csv de origem. O padrão é uma vírgula (,). Exemplo: `--s3-settings '{"CsvDelimiter": ","}'`  | 
| CsvRowDelimiter |  O delimitador utilizado para separar linhas nos arquivos .csv de origem. O padrão é uma nova linha (\$1n). Exemplo: `--s3-settings '{"CsvRowDelimiter": "\n"}'`  | 
|   `MaxFileSize`   |  Um valor que especifica o tamanho máximo (em KB) de qualquer arquivo .csv a ser criado ao migrar para um destino do S3 durante a carga máxima. Valor padrão: 1.048.576 KB (1 GB) Valores válidos: 1 a 1.048.576 Exemplo: `--s3-settings '{"MaxFileSize": 512}'`  | 
| Rfc4180 |  Um parâmetro opcional utilizado para definir o comportamento com o propósito de determinar a conformidade com RFC para os dados migrados para o Amazon S3 utilizando somente o formato de arquivo .csv. Quando esse valor é definido como `true` ou `y` usando o Amazon S3 como destino, se os dados tiverem aspas, vírgulas ou caracteres de nova linha, AWS DMS inclua a coluna inteira com um par adicional de aspas duplas (“). Cada aspa dentro dos dados é repetida duas vezes. Essa formatação está em conformidade com RFC 4180. Valor padrão: `true` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"Rfc4180": false}'`  | 
| EncryptionMode |  O modo de criptografia do lado do servidor que você deseja utilizar para criptografar os arquivos de objetos .csv ou .parquet copiados no S3. Os valores válidos são `SSE_S3` (criptografia no lado do servidor do S3) ou `SSE_KMS` (criptografia da chave do KMS). Se você escolher `SSE_KMS`, defina o parâmetro `ServerSideEncryptionKmsKeyId` como o Nome do recurso da Amazon (ARN) para a chave do KMS a ser usada para a criptografia.  Também é possível utilizar o comando `modify-endpoint` da CLI para alterar o valor do atributo `EncryptionMode` de um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.  Valor padrão: `SSE_S3` Valores válidos: `SSE_S3` ou `SSE_KMS` Exemplo: `--s3-settings '{"EncryptionMode": SSE_S3}'`  | 
| ServerSideEncryptionKmsKeyId |  Se você definir `EncryptionMode` como `SSE_KMS`, defina esse parâmetro como o nome do recurso da Amazon (ARN) da chave do KMS. Você pode encontrar esse ARN selecionando o alias da chave na lista de AWS KMS chaves criadas para sua conta. Ao criar a chave, você deve associar políticas e perfis específicos associadas a essa chave do KMS. Para obter mais informações, consulte [Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3](#CHAP_Target.S3.KMSKeys). Exemplo: `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'`  | 
| DataFormat |  O formato de saída dos arquivos AWS DMS usados para criar objetos do S3. Para destinos do Amazon S3, AWS DMS oferece suporte a arquivos.csv ou .parquet. Os arquivos .parquet têm um formato de armazenamento colunar binário com opções de compactação eficientes e desempenho de consulta mais rápido. Para obter mais informações sobre os arquivos .parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/). Valor padrão: `csv` Valores válidos: `csv` ou `parquet` Exemplo: `--s3-settings '{"DataFormat": "parquet"}'`  | 
| EncodingType |  O tipo de codificação Parquet. As opções do tipo de compactação incluem as seguintes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.S3.html) Valor padrão: `rle-dictionary` Valores válidos: `rle-dictionary`, `plain` ou `plain-dictionary` Exemplo: `--s3-settings '{"EncodingType": "plain-dictionary"}'`  | 
| DictPageSizeLimit |  O tamanho máximo permitido, em bytes, para uma página de dicionário em um arquivo .parquet. Se uma página de dicionário exceder esse valor, a página usará a codificação simples. Valor padrão: 1.024.000 (1 MB) Valores válidos: qualquer valor inteiro válido Exemplo: `--s3-settings '{"DictPageSizeLimit": 2,048,000}'`  | 
| RowGroupLength |  O número de linhas em um grupo de linhas de um arquivo .parquet. Valor padrão: 10.024 (10 KB) Valores válidos: qualquer número inteiro válido Exemplo: `--s3-settings '{"RowGroupLength": 20,048}'`  | 
| DataPageSize |  O tamanho máximo permitido, em bytes, para uma página de dados em um arquivo .parquet. Valor padrão: 1.024.000 (1 MB) Valores válidos: qualquer número inteiro válido Exemplo: `--s3-settings '{"DataPageSize": 2,048,000}'`  | 
| ParquetVersion |  A versão do formato do arquivo .parquet. Valor padrão: `PARQUET_1_0` Valores válidos: `PARQUET_1_0` ou `PARQUET_2_0` Exemplo: `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'`  | 
| EnableStatistics |  Defina como `true` ou `y` para ativar as estatísticas sobre páginas e grupos de linhas do arquivo .parquet. Valor padrão: `true` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"EnableStatistics": false}'`  | 
| TimestampColumnName |  Um parâmetro opcional para incluir uma coluna de timestamp nos dados de endpoint de destino do S3. AWS DMS inclui uma `STRING` coluna adicional nos arquivos de objeto .csv ou .parquet dos dados migrados quando você define `TimestampColumnName` um valor que não esteja em branco. Em uma carga completa, cada linha da coluna de timestamp contém um timestamp para quando os dados foram transferidos da origem para o destino pelo DMS.  Em um carregamento de CDC, cada linha da coluna de timestamp contém o timestamp da confirmação da linha no banco de dados de origem. O formato de string para esse valor de coluna de timestamp é `yyyy-MM-dd HH:mm:ss.SSSSSS`. Por padrão, a precisão desse valor é em microssegundos. Para uma carga de CDC, o arredondamento da precisão depende do carimbo de data e hora de confirmação compatível com o DMS para o banco de dados de origem. Quando o parâmetro `AddColumnName` for definido como `true`, o DMS também inclui o nome da coluna de timestamp definida como o valor não vazio de `TimestampColumnName`. Exemplo: `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'`  | 
| UseTaskStartTimeForFullLoadTimestamp |  Quando definido como `true`, esse parâmetro utiliza a hora de início da tarefa como o valor da coluna de timestamp em vez da hora em que os dados são gravados no destino. Para carga completa, quando o `UseTaskStartTimeForFullLoadTimestamp` for definido como `true`, cada linha da coluna de carimbo de data/hora mostrará a hora de início da tarefa. Para cargas de CDC, cada linha da coluna de data e hora contém o tempo de confirmação da transação. Quando `UseTaskStartTimeForFullLoadTimestamp` está definido como `false`, o timestamp da carga máxima na coluna de timestamp é incrementado com data e hora em que os dados chegam ao destino. Valor padrão: `false` Valores válidos: `true`, `false` Exemplo: `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'` `UseTaskStartTimeForFullLoadTimestamp: true` ajuda a tornar `TimestampColumnName` do destino do S3 de uma carga máxima classificável com `TimestampColumnName` para uma carga de CDC.  | 
| ParquetTimestampInMillisecond |  Um parâmetro opcional que especifica a precisão de qualquer valor de coluna `TIMESTAMP` gravado em um arquivo de objeto do S3 no formato .parquet. Quando esse atributo é definido como `true` ou`y`, AWS DMS grava todas as `TIMESTAMP` colunas em um arquivo formatado.parquet com precisão de milissegundos. Caso contrário, o DMS grava com precisão de microssegundos. Atualmente, Amazon Athena e AWS Glue pode lidar com precisão de apenas milissegundos para `TIMESTAMP` valores. Defina esse atributo como verdadeiro para arquivos de objeto do endpoint do S3 formatados como .parquet somente se quiser consultar ou processar os dados com o Athena ou o AWS Glue.    AWS DMS grava qualquer valor de `TIMESTAMP` coluna gravado em um arquivo S3 no formato.csv com precisão de microssegundos.   A configuração desse atributo não tem efeito sobre o formato da string do valor da coluna de timestamp inserido definindo o atributo `TimestampColumnName`.    Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"ParquetTimestampInMillisecond": true}'`  | 
| GlueCatalogGeneration |  Para gerar um AWS Glue Data Catalog, defina essa configuração de endpoint como. `true` Valor padrão: `false` Valores válidos: `true`, `false`. Exemplo: `--s3-settings '{"GlueCatalogGeneration": true}'` **Observação:** não utilize `GlueCatalogGeneration` com `PreserveTransactions` e `CdcPath`.  | 

## Usando AWS Glue Data Catalog com um destino do Amazon S3 para AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

AWS Glue é um serviço que fornece maneiras simples de categorizar dados e consiste em um repositório de metadados conhecido como. AWS Glue Data Catalog Você pode se integrar AWS Glue Data Catalog ao seu endpoint de destino do Amazon S3 e consultar dados do Amazon S3 por meio de outros serviços, AWS como o Amazon Athena. O Amazon Redshift funciona com AWS DMS isso AWS Glue , mas não oferece suporte a isso como uma opção pré-criada. 

Para gerar o catálogo de dados, defina a configuração do `GlueCatalogGeneration` endpoint como`true`, conforme mostrado no AWS CLI exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint 
            --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": 
            "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": 
            "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'
```

Para uma tarefa de replicação de carga máxima que inclua o tipo de dados `csv`, defina `IncludeOpForFullLoad` como `true`.

Não utilize `GlueCatalogGeneration` com `PreserveTransactions` e `CdcPath`. O AWS Glue rastreador não consegue reconciliar os diferentes esquemas de arquivos armazenados sob o especificado. `CdcPath`

Para que o Amazon Athena indexe os dados do Amazon S3, e para você consultar os dados utilizando consultas SQL padrão por meio do Amazon Athena, o perfil do IAM anexado ao endpoint deve ter a seguinte política:

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

****  

```
{
    "Version":"2012-10-17",		 	 	  
    "Statement": [ 
        {
            "Effect": "Allow", 
            "Action": [
                "s3:GetBucketLocation", 
                "s3:GetObject",
                "s3:ListBucket", 
                "s3:ListBucketMultipartUploads", 
                "s3:ListMultipartUploadParts", 
                "s3:AbortMultipartUpload" 
            ], 
            "Resource": [
                "arn:aws:s3:::bucket123", 
                "arn:aws:s3:::bucket123/*" 
            ]
        },
        {
            "Effect": "Allow", 
            "Action": [ 
                "glue:CreateDatabase", 
                "glue:GetDatabase", 
                "glue:CreateTable", 
                "glue:DeleteTable", 
                "glue:UpdateTable", 
                "glue:GetTable", 
                "glue:BatchCreatePartition", 
                "glue:CreatePartition", 
                "glue:UpdatePartition", 
                "glue:GetPartition", 
                "glue:GetPartitions", 
                "glue:BatchGetPartition"
            ], 
            "Resource": [
                "arn:aws:glue:*:111122223333:catalog", 
                "arn:aws:glue:*:111122223333:database/*", 
                "arn:aws:glue:*:111122223333:table/*" 
            ]
        }, 
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryExecution", 
                "athena:CreateWorkGroup"
            ],
            "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*"
        }
    ]
}
```

------

**Referências**
+ Para obter mais informações sobre AWS Glue, consulte [Conceitos](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html) no *Guia do AWS Glue desenvolvedor*.
+ Para obter mais informações, AWS Glue Data Catalog consulte [Componentes](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) no *Guia do AWS Glue desenvolvedor*.

## Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3
<a name="CHAP_Target.S3.EndpointSettings"></a>

É possível utilizar as configurações do endpoint de destino do S3 para configurar o seguinte:
+ Uma chave do KMS personalizada para criptografar os objetos de destino do S3.
+ Arquivos parquet como o formato de armazenamento para objetos de destino do S3.
+ Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.
+  AWS Glue Data Catalog Integre-se ao seu endpoint de destino do Amazon S3 e consulte dados do Amazon S3 por meio de outros serviços, como o Amazon Athena.

### AWS KMS configurações principais para criptografia de dados
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

Os exemplos a seguir mostram como configurar uma chave do KMS personalizada para criptografar os objetos de destino do S3. Para iniciar, execute o seguinte comando `create-endpoint` na CLI,

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'
```

Aqui, o objeto JSON especificado pela opção `--s3-settings` define dois parâmetros. Um é um parâmetro `EncryptionMode` com o valor `SSE_KMS`. O outro é um parâmetro `ServerSideEncryptionKmsKeyId` com o valor de `arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480`. Esse valor é um Nome de recurso da Amazon (ARN) para a chave personalizada do KMS. Para um destino do S3, você também pode especificar configurações adicionais. Esses identificam o perfil de acesso ao servidor, fornecem delimitadores para o formato de armazenamento de objetos CSV padrão e fornecem o local e o nome do bucket para armazenar objetos de destino do S3.

Por padrão, a criptografia dos dados do S3 ocorre usando a criptografia do lado do servidor do S3. Para o destino do S3 do exemplo anterior, isso também é equivalente a especificar suas configurações de endpoint, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_S3"}'
```

Para obter mais informações sobre como trabalhar com a criptografia do lado do servidor do S3, consulte [Proteger dados utilizando a criptografia do lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html).

**nota**  
Também é possível utilizar o comando `modify-endpoint` na CLI para alterar o valor do parâmetro `EncryptionMode` para um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.

### Configurações para utilizar arquivos .parquet para armazenar objetos de destino do S3
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

O formato padrão para criar objetos de destino do S3 é arquivos .csv. Os exemplos a seguir mostram algumas configurações de endpoint para especificar arquivos .parquet como o formato para criar objetos de destino do S3. É possível especificar o formato .parquet de arquivos com todos os padrões, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'
```

Aqui, o parâmetro `DataFormat` é definido como `parquet` para ativar o formato com todos os padrões do S3. Esses padrões incluem a codificação de um dicionário (`"EncodingType: "rle-dictionary"`) que utiliza uma combinação de empacotamento de bits e de codificação de run-length para armazenar valores repetidos.

É possível adicionar outras configurações para opções diferentes do padrão, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder",
"BucketName": "your-bucket-name", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000,
"EnableStatistics": false }'
```

Aqui, além dos parâmetros para várias opções padrão de bucket do S3 e do parâmetro `DataFormat`, os seguintes parâmetros adicionais de arquivo .parquet são definidos:
+ `EncodingType`: defina uma codificação de dicionário (`plain-dictionary`) que armazena os valores encontrados em cada coluna em um bloco por coluna da página do dicionário.
+ `DictPageSizeLimit`: defina um tamanho máximo de página do dicionário de 3 MB.
+ `EnableStatistics`: desativa o padrão que ativa a coleção de estatísticas sobre páginas de arquivos Parquet e grupos de linhas.

### Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

Por padrão, quando AWS DMS executa uma tarefa do CDC, ela armazena todas as alterações de linha registradas em seu banco de dados de origem (ou bancos de dados) em um ou mais arquivos para cada tabela. Cada conjunto de arquivos contendo alterações para a mesma tabela reside em um único diretório de destino associado a essa tabela. AWS DMS cria tantos diretórios de destino quanto tabelas de banco de dados migradas para o endpoint de destino do Amazon S3. Os arquivos são armazenados no destino do S3 nesses diretórios, independentemente da ordem da transação. Para obter mais informações sobre as convenções de nomenclatura, o conteúdo e o formato dos dados, consulte [Usando o Amazon S3 como destino para AWS Database Migration Service](#CHAP_Target.S3).

Para capturar as alterações do banco de dados de origem de uma forma que também capture a ordem da transação, você pode especificar as configurações do endpoint do S3 que AWS DMS direcionam o armazenamento das alterações de linha de *todas as* tabelas do banco de dados em um ou mais arquivos.csv criados dependendo do tamanho da transação. Esses *arquivos de transação* .csv contêm todas as alterações de linhas listadas sequencialmente na ordem da transação de todas as tabelas envolvidas em cada transação. Esses arquivos de transação residem juntos em um único *diretório de transações* que você também especifica no destino do S3. Em cada arquivo de transação, a operação da transação e a identidade do banco de dados e a tabela de origem de cada alteração de linha são armazenadas como parte dos dados da linha, da seguinte maneira. 

```
operation,table_name,database_schema_name,field_value,...
```

Aqui, `operation` é a operação da transação na linha alterada, `table_name` é o nome da tabela do banco de dados em que a linha foi alterada, `database_schema_name` é o nome do esquema do banco de dados em que a tabela reside e `field_value` é o primeiro de um ou mais valores de campo que especificam os dados da linha.

O exemplo a seguir de um arquivo de transação mostra as linhas alteradas de uma ou mais transações que envolvem duas tabelas.

```
I,Names_03cdcad11a,rdsTempsdb,13,Daniel
U,Names_03cdcad11a,rdsTempsdb,23,Kathy
D,Names_03cdcad11a,rdsTempsdb,13,Cathy
I,Names_6d152ce62d,rdsTempsdb,15,Jane
I,Names_6d152ce62d,rdsTempsdb,24,Chris
I,Names_03cdcad11a,rdsTempsdb,16,Mike
```

Aqui, a operação da transação em cada linha é indicada por `I` (inserir), `U` (atualizar) ou `D` (excluir) na primeira coluna. O nome da tabela é o valor da segunda coluna (por exemplo, `Names_03cdcad11a`). O nome do esquema do banco de dados é o valor da terceira coluna (por exemplo, `rdsTempsdb`). E as colunas restantes são preenchidas com seus próprios dados da linha (por exemplo, `13,Daniel`).

Além disso, AWS DMS nomeia os arquivos de transação que ele cria no destino do Amazon S3 usando um registro de data e hora de acordo com a seguinte convenção de nomenclatura.

```
CDC_TXN-timestamp.csv
```

Aqui, `timestamp` é a hora em que o arquivo de transação foi criado, como no exemplo a seguir. 

```
CDC_TXN-20201117153046033.csv
```

Esse timestamp no nome do arquivo garante que os arquivos de transação sejam criados e listados na ordem da transação quando você os lista no diretório de transações.

**nota**  
Ao capturar alterações de dados na ordem da transação, AWS DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do `DataFormat` S3 no destino.

Para controlar a frequência de gravações em um destino do Amazon S3 durante uma tarefa de replicação de dados, é possível definir as configurações `CdcMaxBatchInterval` e `CdcMinFileSize`. Isso pode resultar em melhor desempenho ao analisar os dados sem operações adicionais de sobrecarga. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). 

**Para pedir AWS DMS para armazenar todas as alterações de linha na ordem da transação**

1. Defina a configuração `PreserveTransactions` do S3 no destino como `true`.

1. Defina a configuração do `CdcPath` S3 no destino para um caminho de pasta relativo no qual você AWS DMS deseja armazenar os arquivos de transação.csv.

   AWS DMS cria esse caminho no bucket de destino e no diretório de trabalho padrão do S3 ou na pasta do bucket e do bucket que você especifica usando as configurações `BucketName` e do `BucketFolder` S3 no destino.

## Indicar operações de banco de dados de origem em dados migrados do S3
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

Ao AWS DMS migrar registros para um destino do S3, ele pode criar um campo adicional em cada registro migrado. Esse campo adicional indica a operação aplicada ao registro no banco de dados de origem. AWS DMS A forma como cria e define esse primeiro campo depende do tipo de tarefa de migração e das configurações de `includeOpForFullLoad``cdcInsertsOnly`, `cdcInsertsAndUpdates` e.

Em uma carga máxima, quando `includeOpForFullLoad` é `true`, o AWS DMS sempre cria um primeiro campo adicional em cada registro .csv. Esse campo contém a letra I (INSERT) para indicar que a linha foi inserida no banco de dados de origem. Para uma carga de CDC when `cdcInsertsOnly` is `false` (o padrão), AWS DMS também sempre cria um primeiro campo adicional em cada registro.csv ou .parquet. Esse campo contém a letra I (INSERT), U (UPDATE) ou D (DELETE) para indicar se a linha foi inserida, atualizada ou excluída no banco de dados de origem.

Na tabela a seguir, é possível ver como as configurações dos atributos `includeOpForFullLoad` e `cdcInsertsOnly` funcionam em conjunto e afetam a configuração dos registros migrados.


| Com essas configurações de parâmetros | O DMS define os registros de destino para a saída .csv e .parquet da seguinte maneira  | includeOpForFullLoad | cdcInsertsOnly | Para carga completa | Para carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I é adicionado | 
| false | false | Nenhum campo é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 
| false | true | Nenhum campo é adicionado | Nenhum campo é adicionado | 
| true | false | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 

Quando `includeOpForFullLoad` e `cdcInsertsOnly` forem definidos com o mesmo valor, os registros de destino serão definidos de acordo com o atributo que controla as configurações de registro para o tipo de migração atual. Esse atributo é `includeOpForFullLoad` para a carga máxima e `cdcInsertsOnly` para a carga da CDC.

Quando `includeOpForFullLoad` e `cdcInsertsOnly` são definidos com valores diferentes, AWS DMS torna as configurações de registro de destino consistentes tanto para o CDC quanto para a carga total. Isso é feito fazendo com que as configurações de registro de uma carga de CDC com as configurações de qualquer carga máxima anterior especificada por `includeOpForFullLoad` estejam em conformidade. 

Ou seja, suponha que uma carga máxima está configurada para adicionar um primeiro campo para indicar um registro inserido. Nesse caso, um carregamento de CDC seguinte será configurado para adicionar um primeiro campo que indica um registro inserido, atualizado ou excluído de acordo com a origem. Por outro lado, suponha que um carga máxima está configurada para *não* adicionar um primeiro campo indicando um registro inserido. Nesse caso, uma carga de CDC também será definida para não adicionar um primeiro campo para cada registro, independentemente das operações de registro correspondentes na origem.

Da mesma forma, a maneira como o DMS cria e define um primeiro campo adicional depende das configurações de `includeOpForFullLoad` e de `cdcInsertsAndUpdates`. Na tabela a seguir, é possível ver como as configurações dos atributos `includeOpForFullLoad` e `cdcInsertsAndUpdates` funcionam em conjunto e afetam a configuração dos registros migrados neste formato. 


| Com essas configurações de parâmetros | O DMS define os registros de destino para a saída .csv da seguinte forma  | includeOpForFullLoad | cdcInsertsAndAtualizações | Para carga completa | Para carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I ou U | 
| false | false | Nenhum campo é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 
| false | true | Nenhum campo é adicionado | O valor do primeiro campo definido como I ou U | 
| true | false | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 

## Tipos de dados de destino do S3 Parquet
<a name="CHAP_Target.S3.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do Parquet que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de dados  |  Tipo de dados parquet do S3   | 
| --- | --- | 
| BYTES | BINARY | 
| DATE | DATE32 | 
| TIME | TIME32 | 
| DATETIME | TIMESTAMP | 
| INT1 | INT8 | 
| INT2 | INT16 | 
| INT4 | INT32 | 
| INT8 | INT64 | 
| NUMERIC | DECIMAL | 
| REAL4 | FLOAT | 
| REAL8 | DOUBLE | 
| STRING | STRING | 
| UINT1 | UINT8 | 
| UINT2 | UINT16 | 
| UINT4 | UINT32 | 
| UINT8 | UINT64 | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 

# Usando um banco de dados do Amazon DynamoDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB"></a>

Você pode usar AWS DMS para migrar dados para uma tabela do Amazon DynamoDB. O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece desempenho rápido e previsível com escalabilidade perfeita. AWS DMS suporta o uso de um banco de dados relacional ou MongoDB como fonte.

No DynamoDB, tabelas, itens e atributos são os componentes principais com que você trabalha. Uma *tabela* é uma coleção de itens, e cada *item* é uma coleção de atributos. O DynamoDB utiliza chaves primárias, chamadas chaves de partição, para identificar de modo exclusivo cada item em uma tabela. Também é possível utilizar chaves e índices secundários para fornecer mais flexibilidade de consulta.

O mapeamento de objeto é utilizado para migrar os dados de um banco de dados de origem para uma tabela de destino do DynamoDB. O mapeamento de objetos permite que você determine onde os dados de origem estão localizados no destino. 

Ao AWS DMS criar tabelas em um endpoint de destino do DynamoDB, ele cria tantas tabelas quanto no endpoint do banco de dados de origem. AWS DMS também define vários valores de parâmetros do DynamoDB. O custo de criação da tabela depende da quantidade de dados e do número de tabelas a serem migradas.

**nota**  
A opção **Modo SSL** no AWS DMS console ou na API não se aplica a alguns serviços de streaming de dados e NoSQL, como Kinesis e DynamoDB. Eles são seguros por padrão, então AWS DMS mostra que a configuração do modo SSL é igual a nenhuma (**Modo SSL** = Nenhuma). Não é necessário fornecer nenhuma configuração adicional para que o endpoint utilize o SSL. Por exemplo, ao utilizar o DynamoDB como um endpoint de destino, ele é seguro por padrão. Todas as chamadas de API para o DynamoDB usam SSL, portanto, não há necessidade de uma opção adicional de SSL no endpoint. AWS DMS É possível inserir e recuperar dados com segurança por meio de endpoints SSL utilizando o protocolo HTTPS, que o AWS DMS utiliza por padrão ao se conectar a um banco de dados DynamoDB.

Para ajudar a aumentar a velocidade da transferência, AWS DMS oferece suporte a uma carga completa multiencadeada em uma instância de destino do DynamoDB. O DMS oferece suporte a esse multithreading com configurações de tarefa que incluem o seguinte:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela na tabela de destino do DynamoDB correspondente utilizando uma subtarefa dedicada. O valor padrão é 8. O valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em sua tabela de destino do DynamoDB. O valor padrão é 0 (segmento único). O valor máximo é 200. Você pode solicitar o aumento desse limite máximo.
**nota**  
O DMS atribui cada segmento de uma tabela ao seu próprio thread para carregar. Portanto, defina `ParallelLoadThreads` como o número máximo de segmentos que você especifica para uma tabela na origem.
+ `ParallelLoadBufferSize`: utilize essa opção para especificar o número máximo de registros a serem armazenados em buffer utilizado pelos threads paralelos para carregar dados no destino do DynamoDB. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ Configurações de mapeamento de tabela para tabelas individuais: utilize as regras `table-settings` para identificar tabelas individuais da origem que você deseja carregar em paralelo. Além disso, utilize essas regras para especificar como segmentar as linhas de cada tabela para carregamento multithread. Para obter mais informações, consulte [Regras e operações de configurações de tabelas e coleções](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

**nota**  
Quando AWS DMS define os valores dos parâmetros do DynamoDB para uma tarefa de migração, o valor padrão do parâmetro Read Capacity Units (RCU) é definido como 200.  
O valor do parâmetro das Unidades de capacidade de gravação (WCU) também é definido, mas o valor depende de várias outras configurações:  
O valor padrão do parâmetro WCU é 200.
Se a configuração de tarefa `ParallelLoadThreads` for definida com um valor maior que 1 (o padrão é 0), o parâmetro WCU será definido como 200 vezes o valor de `ParallelLoadThreads`.
As taxas AWS DMS de uso padrão se aplicam aos recursos que você usa.

## Migração de um banco de dados relacional para uma tabela do DynamoDB
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS suporta a migração de dados para tipos de dados escalares do DynamoDB. Para migrar de um banco de dados relacional, como o Oracle ou o MySQL, para o DynamoDB, reestruture a forma como você armazena esses dados.

Atualmente, AWS DMS oferece suporte à reestruturação de tabela única para tabela única para atributos do tipo escalar do DynamoDB. Se você estivesse migrando dados para o DynamoDB a partir de uma tabela de banco de dados relacional, pegaria dados de uma tabela e os reformataria como atributos de tipo de dados escalares. Esses atributos podem aceitar dados de várias colunas, e é possível mapear uma coluna diretamente para um atributo.

AWS DMS é compatível com os seguintes tipos de dados escalares do DynamoDB:
+ String
+ Número
+ Booleano

**nota**  
Os dados NULL da origem são ignorados no destino.

## Pré-requisitos para usar o DynamoDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados do DynamoDB como destino, certifique-se AWS DMS de criar uma função do IAM. Essa função do IAM deve AWS DMS permitir assumir e conceder acesso às tabelas do DynamoDB para as quais estão sendo migradas. O conjunto mínimo de permissões de acesso é mostrado na seguinte política do IAM.

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

****  

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

------

O perfil utilizado para a migração para o DynamoDB deve ter as seguintes permissões:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteTable",
                "dynamodb:DeleteItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:111122223333:table/name1",
                "arn:aws:dynamodb:us-west-2:111122223333:table/OtherName*",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_apply_exceptions",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_full_load_exceptions"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListTables"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Limitações ao usar o DynamoDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o DynamoDB como destino:
+ O DynamoDB limita a precisão do tipo de dados Número a 38 locais. Armazene todos os tipos de dados com mais precisão como uma string. É necessário especificar isso explicitamente utilizando o recurso de mapeamento de objetos.
+ Como o DynamoDB não tem um tipo de dados Date, os dados que utilizam esse tipo Date são convertidos em strings.
+ O DynamoDB não permite atualizações nos atributos da chave primária. Essa restrição é importante quando se usa a replicação contínua com captura de dados de alterações (CDC), pois ela pode gerar dados indesejados no destino. Dependendo de como é o seu mapeamento de objetos, uma operação de CDC que atualiza a chave primária pode fazer uma de duas coisas. Pode falhar ou inserir um novo item com a chave primária atualizada e dados incompletos.
+ AWS DMS só oferece suporte à replicação de tabelas com chaves primárias não compostas. A exceção é se você especificar um mapeamento de objetos para a tabela de destino com uma chave de partição personalizada ou chave de classificação, ou ambas.
+ AWS DMS não suporta dados LOB, a menos que seja um CLOB. AWS DMS converte dados CLOB em uma string do DynamoDB ao migrar os dados.
+ Ao utilizar o DynamoDB como destino, somente a tabela de controle Aplicar exceções (`dmslogs.awsdms_apply_exceptions`) será compatível. Para obter mais informações sobre tabelas de controle, consulte [Configurações de tarefa de tabela de controle](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md).
+ AWS DMS não suporta a configuração `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` de tarefas do DynamoDB como destino. 
+ AWS DMS não suporta a configuração `TaskRecoveryTableEnabled` de tarefas do DynamoDB como destino. 
+ O `BatchApply` não é compatível com um endpoint do DynamoDB.
+ AWS DMS não é possível migrar atributos cujos nomes correspondam às palavras reservadas no DynamoDB. Para ter mais informações, consulte [Palavras reservadas no DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html) no *Guia do desenvolvedor Amazon DynamoDB*.

## Utilizar o mapeamento de objetos para migrar dados para o DynamoDB
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabelas para mapear dados da tabela de origem para a tabela do DynamoDB de destino. Para mapear dados para um destino do DynamoDB, utilize um tipo de regra de mapeamento de tabela chamada *object-mapping*. O mapeamento de objetos permite definir os nomes de atributos e os dados a serem migrados para eles. Você deve ter regras de seleção ao utilizar o mapeamento de objetos.

O DynamoDB não tem uma estrutura predefinida além de ter uma chave de partição e uma chave de classificação opcional. Se você tiver uma chave primária não composta, use-a AWS DMS . Se você tiver uma chave primária composta ou quiser utilizar uma chave de classificação, defina as chaves e os outros atributos na tabela de destino do DynamoDB.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como *object-mapping*. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. 

A estrutura da regra é a seguinte:

```
{ "rules": [
    {
      "rule-type": "object-mapping",
      "rule-id": "<id>",
      "rule-name": "<name>",
      "rule-action": "<valid object-mapping rule action>",
      "object-locator": {
      "schema-name": "<case-sensitive schema name>",
      "table-name": ""
      },
      "target-table-name": "<table_name>"
    }
  ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Esses valores especificam o que AWS DMS acontece por padrão com registros que não são excluídos como parte da lista de `exclude-columns` atributos. Esses valores não afetam os mapeamentos de atributos de forma alguma. 
+ É possível utilizar `map-record-to-record` ao migrar de um banco de dados relacional para o DynamoDB. Ele utiliza a chave primária do banco de dados relacional como a chave de partição no DynamoDB e cria um atributo para cada coluna no banco de dados de origem. Ao usar`map-record-to-record`, para qualquer coluna na tabela de origem não listada na lista de atributos, AWS DMS cria um `exclude-columns` atributo correspondente na instância do DynamoDB de destino. Isso é feito, independentemente de a coluna de origem ser utilizada ou não em um mapeamento de atributos. 
+ Você utiliza `map-record-to-document` para colocar colunas de origem em um único mapa sem formatação do DynamoDB no destino, utilizando o nome de atributo "\$1doc". Ao usar`map-record-to-document`, AWS DMS coloca os dados em um único atributo de mapa plano do DynamoDB na fonte. Esse atributo é chamado "\$1doc". Esse posicionamento se aplica a qualquer coluna na tabela de origem que não aparece na lista de atributos `exclude-columns`. 

Uma maneira de compreender a diferença entre os parâmetros de `rule-action`, `map-record-to-record` e `map-record-to-document`, é ver os dois parâmetros em ação. Para este exemplo, suponha que você está começando com uma linha de tabela de banco de dados relacional com a seguinte estrutura e dados:

![\[exemplo de banco de dados\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-dynamodb1.png)


Para migrar essas informações para o DynamoDB, você criaria regras para mapear os dados para um item de tabela do DynamoDB. Observe as colunas listadas para o parâmetro `exclude-columns`. Essas colunas não são mapeadas diretamente para o destino. Em vez disso, o mapeamento de atributos é usado para combinar os dados em novos itens, como onde *FirstName*e *LastName*são agrupados para se tornarem *CustomerName*no destino do DynamoDB. *NickName*e a *renda* não está excluída.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                            "M": {
                                "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Ao usar o `rule-action` parâmetro *map-record-to-record*, os dados *NickName*e a *receita* são mapeados para itens com o mesmo nome no destino do DynamoDB. 

![\[Comece com AWS DMS\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-dynamodb2.png)


No entanto, suponha que você use as mesmas regras, mas altere o `rule-action` parâmetro para *map-record-to-document*. Nesse caso, as colunas não listadas no `exclude-columns` parâmetro *NickName*e *renda* são mapeadas para um item *\$1doc*.

![\[Comece com AWS DMS\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-dynamodb3.png)


### Utilizar expressões de condição personalizadas com o mapeamento de objetos
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

É possível utilizar um recurso do DynamoDB chamado de expressões condicionais para manipular dados que estão sendo gravados em uma tabela do DynamoDB. Para obter mais informações sobre expressões condicionais no DynamoDB, consulte [Expressões de condição](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html).

Um membro de expressão condicional consiste em: 
+ uma expressão (obrigatória); 
+ valores de atributos de expressão (obrigatório). Especificam uma estrutura json do DynamoDB do valor de atributo. Isso é útil para comparar um atributo com um valor no DynamoDB que você talvez só conhecerá no runtime. Você pode definir um atributo de expressão como um espaço reservado para um valor real.
+ nomes de atributos de expressão (obrigatório). Isso ajuda a evitar possíveis conflitos com quaisquer palavras reservadas do DynamoDB, nomes de atributo que contêm caracteres especiais e similares.
+ opções para quando utilizar a expressão condicional (opcional). O padrão é apply-during-cdc = false e apply-during-full-load = true

A estrutura da regra é a seguinte:

```
"target-table-name": "customer_t",
      "mapping-parameters": {
        "partition-key-name": "CustomerName",
        "condition-expression": {
          "expression":"<conditional expression>",
          "expression-attribute-values": [
              {
                "name":"<attribute name>",
                "value":<attribute value>
              }
          ],
          "apply-during-cdc":<optional Boolean value>,
          "apply-during-full-load": <optional Boolean value>
        }
```

O exemplo a seguir destaca as seções utilizadas para expressão condicional.

![\[Comece com AWS DMS\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-Tasks-conditional1.png)


### Usar o mapeamento de atributo com mapeamento de objeto
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

O mapeamento de atributo permite especificar uma string de modelo utilizando nomes de colunas de origem para reestruturar dados no destino. Não há formatação feita além do que o usuário especifica no modelo.

O exemplo a seguir mostra a estrutura do banco de dados de origem e a estrutura desejada do destino do DynamoDB. Primeiramente, é mostrada a estrutura da origem: nesse caso um banco de dados Oracle, e, depois, a estrutura desejada dos dados no DynamoDB. O exemplo termina com o JSON utilizado para criar a estrutura de destino desejada.

A estrutura dos dados do Oracle é a seguinte:


****  

| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateOfBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Chave primária | N/D |  | 
| Randy | Marsh | 5 | 221B Baker Street  | 1234567890 | 31 Spooner Street, Quahog  | 9876543210  | 29/02/1988  | 

A estrutura dos dados do DynamoDB é a seguinte:


****  

| CustomerName | StoreId | ContactDetails | DateOfBirth | 
| --- | --- | --- | --- | 
| Chave de partição | Chave de classificação | N/D | 
| <pre>Randy,Marsh</pre> | <pre>5</pre> | <pre>{<br />    "Name": "Randy",<br />    "Home": {<br />        "Address": "221B Baker Street",<br />        "Phone": 1234567890<br />    },<br />    "Work": {<br />        "Address": "31 Spooner Street, Quahog",<br />        "Phone": 9876541230<br />    }<br />}</pre> | <pre>02/29/1988</pre> | 

O JSON a seguir mostra o mapeamento de objetos e o mapeamento de colunas utilizados para alcançar a estrutura do DynamoDB:

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "{\"Name\":\"${FirstName}\",\"Home\":{\"Address\":\"${HomeAddress}\",\"Phone\":\"${HomePhone}\"}, \"Work\":{\"Address\":\"${WorkAddress}\",\"Phone\":\"${WorkPhone}\"}}"
                    }
                ]
            }
        }
    ]
}
```

Outra maneira de utilizar o mapeamento de colunas é utilizar o formato do DynamoDB como o tipo de documento. O código a seguir utiliza *dynamodb-map* como `attribute-sub-type` para o mapeamento de atributo. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                          "M": {
                            "Name": {
                              "S": "${FirstName}"
                            },
                            "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }        
                    }
                ]
            }
        }
    ]
}
```

Como alternativa`dynamodb-map`, você pode usar `dynamodb-list` como mapeamento attribute-sub-type de atributos, conforme mostrado no exemplo a seguir.

```
{
"target-attribute-name": "ContactDetailsList",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-list",
"value": {
    "L": [
            {
                "N": "${FirstName}"
            },
            {   
                "N": "${HomeAddress}"
            },
            {   
                "N": "${HomePhone}"
            },
            {
                "N": "${WorkAddress}"
            },
            {
                "N": "${WorkPhone}"
            }
        ]   
    }
}
```

### Exemplo 1: Usar o mapeamento de atributo com mapeamento de objeto
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

O exemplo a seguir migra dados de duas tabelas do banco de dados MySQL*, nfl\$1data e *sport\$1team*,* para duas tabelas do DynamoDB chamadas e. *NFLTeams*SportTeams** A estrutura das tabelas e do JSON utilizados para mapear os dados das tabelas do banco de dados MySQL para as tabelas do DynamoDB é mostrada a seguir.

A estrutura da tabela do banco de dados MySQL *nfl\$1data* é mostrada abaixo:

```
mysql> desc nfl_data;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| Position      | varchar(5)  | YES  |     | NULL    |       |
| player_number | smallint(6) | YES  |     | NULL    |       |
| Name          | varchar(40) | YES  |     | NULL    |       |
| status        | varchar(10) | YES  |     | NULL    |       |
| stat1         | varchar(10) | YES  |     | NULL    |       |
| stat1_val     | varchar(10) | YES  |     | NULL    |       |
| stat2         | varchar(10) | YES  |     | NULL    |       |
| stat2_val     | varchar(10) | YES  |     | NULL    |       |
| stat3         | varchar(10) | YES  |     | NULL    |       |
| stat3_val     | varchar(10) | YES  |     | NULL    |       |
| stat4         | varchar(10) | YES  |     | NULL    |       |
| stat4_val     | varchar(10) | YES  |     | NULL    |       |
| team          | varchar(10) | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
```

A estrutura do banco de dados MySQL *sport\$1team* é mostrada abaixo:

```
mysql> desc sport_team;
+---------------------------+--------------+------+-----+---------+----------------+
| Field                     | Type         | Null | Key | Default | Extra          |
+---------------------------+--------------+------+-----+---------+----------------+
| id                        | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| name                      | varchar(30)  | NO   |     | NULL    |                |
| abbreviated_name          | varchar(10)  | YES  |     | NULL    |                |
| home_field_id             | smallint(6)  | YES  | MUL | NULL    |                |
| sport_type_name           | varchar(15)  | NO   | MUL | NULL    |                |
| sport_league_short_name   | varchar(10)  | NO   |     | NULL    |                |
| sport_division_short_name | varchar(10)  | YES  |     | NULL    |                |
```

As regras de mapeamento de tabela utilizadas para mapear as duas tabelas para as duas tabelas do DynamoDB são mostradas abaixo:

```
{
  "rules":[
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "nfl_data"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "sport_team"
      },
      "rule-action": "include"
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"3",
      "rule-name":"MapNFLData",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"nfl_data"
      },
      "target-table-name":"NFLTeams",
      "mapping-parameters":{
        "partition-key-name":"Team",
        "sort-key-name":"PlayerName",
        "exclude-columns": [
          "player_number", "team", "name"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"Team",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${team}"
          },
          {
            "target-attribute-name":"PlayerName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"PlayerInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"Number\": \"${player_number}\",\"Position\": \"${Position}\",\"Status\": \"${status}\",\"Stats\": {\"Stat1\": \"${stat1}:${stat1_val}\",\"Stat2\": \"${stat2}:${stat2_val}\",\"Stat3\": \"${stat3}:${
stat3_val}\",\"Stat4\": \"${stat4}:${stat4_val}\"}"
          }
        ]
      }
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"4",
      "rule-name":"MapSportTeam",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"sport_team"
      },
      "target-table-name":"SportTeams",
      "mapping-parameters":{
        "partition-key-name":"TeamName",
        "exclude-columns": [
          "name", "id"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"TeamName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"TeamInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"League\": \"${sport_league_short_name}\",\"Division\": \"${sport_division_short_name}\"}"
          }
        ]
      }
    }
  ]
}
```

O exemplo de saída para a tabela do *NFLTeams*DynamoDB é mostrado abaixo:

```
  "PlayerInfo": "{\"Number\": \"6\",\"Position\": \"P\",\"Status\": \"ACT\",\"Stats\": {\"Stat1\": \"PUNTS:73\",\"Stat2\": \"AVG:46\",\"Stat3\": \"LNG:67\",\"Stat4\": \"IN 20:31\"}",
  "PlayerName": "Allen, Ryan",
  "Position": "P",
  "stat1": "PUNTS",
  "stat1_val": "73",
  "stat2": "AVG",
  "stat2_val": "46",
  "stat3": "LNG",
  "stat3_val": "67",
  "stat4": "IN 20",
  "stat4_val": "31",
  "status": "ACT",
  "Team": "NE"
}
```

O exemplo de saída para a tabela do SportsTeams *DynamoDB* é mostrado abaixo:

```
{
  "abbreviated_name": "IND",
  "home_field_id": 53,
  "sport_division_short_name": "AFC South",
  "sport_league_short_name": "NFL",
  "sport_type_name": "football",
  "TeamInfo": "{\"League\": \"NFL\",\"Division\": \"AFC South\"}",
  "TeamName": "Indianapolis Colts"
}
```

## Tipos de dados de destino do DynamoDB
<a name="CHAP_Target.DynamoDB.DataTypes"></a>

O endpoint do DynamoDB for é AWS DMS compatível com a maioria dos tipos de dados do DynamoDB. A tabela a seguir mostra os tipos de dados de AWS DMS destino da Amazon que são compatíveis com o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).

Ao AWS DMS migrar dados de bancos de dados heterogêneos, mapeamos tipos de dados do banco de dados de origem para tipos de dados intermediários chamados AWS DMS tipos de dados. Em seguida, mapeamos os tipos de dados intermediários para os tipos de dados de destino. A tabela a seguir mostra cada tipo de AWS DMS dados e o tipo de dados para o qual ele é mapeado no DynamoDB:


| AWS DMS tipo de dados | Tipo de dados do DynamoDB | 
| --- | --- | 
|  String  |  String  | 
|  WString  |  String  | 
|  Booleano  |  Booleano  | 
|  Data  |  String  | 
|  DateTime  |  String  | 
|  INT1  |  Número  | 
|  INT2  |  Número  | 
|  INT4  |  Número  | 
|  INT8  |  Número  | 
|  Numérico  |  Número  | 
|  Real4  |  Número  | 
|  Real8  |  Número  | 
|  UINT1  |  Número  | 
|  UINT2  |  Número  | 
|  UINT4  |  Número  | 
| UINT8 | Número | 
| CLOB | String | 

# Usando o Amazon Kinesis Data Streams como alvo para AWS Database Migration Service
<a name="CHAP_Target.Kinesis"></a>

Você pode usar AWS DMS para migrar dados para um stream de dados do Amazon Kinesis. O Amazon Kinesis Data Streams faz parte do serviço Amazon Kinesis Data Streams. É possível utilizar os fluxos de dados do Kinesis para coletar e processar grandes registros de dados em tempo real.

O fluxo de dados do Kinesis é composto por fragmentos. O *estilhaço* é uma sequência de registros de dados identificada de forma exclusiva em um stream. Para obter mais informações sobre fragmentos no Amazon Kinesis Data Streams, consulte o [Fragmento](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#shard) no *Guia do desenvolvedor do Amazon Kinesis Data Streams.*

AWS Database Migration Service publica registros em um stream de dados do Kinesis usando JSON. Durante a conversão, o AWS DMS serializa cada registro do banco de dados de origem em um par atributo/valor no formato JSON ou em um formato de mensagem JSON\$1UNFORMATTED. Um formato de mensagem JSON\$1UNFORMATTED é uma string JSON de linha única com novo delimitador de linha. Ele permite que o Amazon Data Firehose entregue dados do Kinesis para um destino do Amazon S3 e consulte-os utilizando vários mecanismos de consulta, incluindo o Amazon Athena.

O mapeamento de objetos é utilizado para migrar os dados de uma fonte de dados compatível para um fluxo de destino. Com o mapeamento do objeto, você determina como estruturar os registros de dados no stream. Também é possível definir uma chave de partição para cada tabela, que será utilizada pelo Kinesis Data Streams para agrupar os dados em fragmentos. 

AWS DMS também define vários valores de parâmetros do Kinesis Data Streams. O custo de criação da tabela depende da quantidade de dados e do número de tabelas a serem migradas.

**nota**  
A opção **Modo SSL** no AWS DMS console ou na API não se aplica a alguns serviços de streaming de dados e NoSQL, como Kinesis e DynamoDB. Eles são seguros por padrão, então AWS DMS mostra que a configuração do modo SSL é igual a nenhuma (**Modo SSL** = Nenhuma). Não é necessário fornecer nenhuma configuração adicional para que o endpoint utilize o SSL. Por exemplo, ao utilizar o Kinesis como um endpoint de destino, ele é seguro por padrão. Todas as chamadas de API para o Kinesis usam SSL, portanto, não há necessidade de uma opção adicional de SSL no endpoint. AWS DMS É possível colocar e recuperar dados com segurança por meio de endpoints SSL utilizando o protocolo HTTPS, que o AWS DMS utiliza por padrão ao se conectar a um fluxo de dados Kinesis.

**Configurações do endpoint do Kinesis Data Streams**

Ao usar os endpoints de destino do Kinesis Data Streams, você pode obter detalhes da transação e do controle `KinesisSettings` usando a opção na API. AWS DMS 

É possível definir as configurações da conexão de uma das seguintes maneiras:
+ No AWS DMS console, usando as configurações do endpoint.
+ Na CLI, usando a `kinesis-settings` opção do [CreateEndpoint](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateEndpoint.html)comando.

Na CLI, utilize os seguintes parâmetros de solicitação da opção `kinesis-settings`:
**nota**  
Compatibilidade com a configuração do endpoints do `IncludeNullAndEmpty` está disponível nas versões 3.4.1 e superiores do AWS DMS . Mas o suporte para as outras configurações de endpoint a seguir para destinos do Kinesis Data Streams está disponível em. AWS DMS
+ `MessageFormat`: o formato de saída dos registros criados no endpoint. O formato da mensagem é `JSON` (padrão) ou `JSON_UNFORMATTED` (uma única linha sem guia).
+ `IncludeControlDetails`: mostra informações detalhadas de controle para definição de tabelas, definição de colunas e alterações de tabelas e colunas na saída de mensagem do Kinesis. O padrão é `false`.
+ `IncludeNullAndEmpty`: inclui colunas NULL e vazias no destino. O padrão é `false`.
+ `IncludePartitionValue`: mostra o valor da partição na saída da mensagem do Kinesis, a menos que o tipo de partição seja `schema-table-type`. O padrão é `false`.
+ `IncludeTableAlterOperations`: inclui todas as operações da linguagem de definição de dados (DDL) que alteram a tabela nos dados de controle, como `rename-table`, `drop-table`, `add-column`, `drop-column` e `rename-column`. O padrão é `false`.
+ `IncludeTransactionDetails`: fornece informações detalhadas sobre transações do banco de dados de origem. Essas informações incluem um timestamp de confirmação, uma posição no log e valores para `transaction_id`, `previous_transaction_id` e `transaction_record_id ` (o deslocamento de registro dentro de uma transação). O padrão é `false`.
+ `PartitionIncludeSchemaTable`: prefixa os nomes de esquema e de tabela em valores de partições, quando o tipo de partição for `primary-key-type`. Isso aumenta a distribuição de dados entre estilhaços do Kinesis. Por exemplo, suponha que um esquema `SysBench` tenha milhares de tabelas, e cada tabela tenha apenas um intervalo limitado para uma chave primária. Nesse caso, a mesma chave primária é enviada de milhares de tabelas para o mesmo estilhaço, o que provoca o controle de utilização. O padrão é `false`.
+ `UseLargeIntegerValue`— Use int de até 18 dígitos em vez de converter ints como duplos, disponível a partir da AWS DMS versão 3.5.4. O padrão é falso.

O exemplo a seguir mostra a opção `kinesis-settings` em uso com um exemplo de comando `create-endpoint` emitido utilizando a AWS CLI.

```
aws dms \
  create-endpoint \
    --region <aws-region> \
    --endpoint-identifier <user-endpoint-identifier> \
    --endpoint-type target \
    --engine-name kinesis \
    --kinesis-settings ServiceAccessRoleArn=arn:aws:iam::<account-id>:role/<kinesis-role-name>,StreamArn=arn:aws:kinesis:<aws-region>:<account-id>:stream/<stream-name>,MessageFormat=json-unformatted,
IncludeControlDetails=true,IncludeTransactionDetails=true,IncludePartitionValue=true,PartitionIncludeSchemaTable=true,
IncludeTableAlterOperations=true
```

**Configurações da tarefa de carga máxima com vários threads**

Para ajudar a aumentar a velocidade da transferência, AWS DMS oferece suporte a uma carga completa multisegmentada em uma instância de destino do Kinesis Data Streams. O DMS oferece suporte a esse multithreading com configurações de tarefa que incluem o seguinte:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela na tabela de destino do Kinesis correspondente utilizando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em sua tabela de destino do Kinesis. O valor máximo para um destino do Kinesis Data Streams é 32. Você pode solicitar o aumento desse limite máximo.
+ `ParallelLoadBufferSize`: utilize essa opção para especificar o número máximo de registros a serem armazenados em buffer utilizado pelos threads de carga paralela para carregar dados no destino do Kinesis. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ `ParallelLoadQueuesPerThread`: utilize esta opção para especificar o número de filas que cada thread simultâneo acessa para extrair registros de dados das filas e gerar uma carga em lote para o destino. O padrão é um. No entanto, para destinos do Kinesis de vários tamanhos de carga útil, o intervalo válido é de 5 a 512 filas por thread.

**Configurações da tarefa de carga de CDC multithread**

É possível melhorar o desempenho da captura de dados de alterações (CDC) para endpoints de destino de streaming de dados em tempo real, como o Kinesis, utilizando configurações de tarefa para modificar o comportamento da chamada da API `PutRecords`. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar um carregamento de CDC e aplicar 128 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante o carregamento do CDC para enviar registros de dados para um endpoint de destino do Kinesis. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para threads simultâneos enviarem para um endpoint de destino do Kinesis durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para extrair registros de dados das filas e gerar uma carga em lote para um endpoint do Kinesis durante a CDC. O valor padrão é 1 e o valor máximo é 512.

Ao usar configurações da tarefa `ParallelApply*`, o `partition-key-type` padrão é a `primary-key` da tabela, não o `schema-name.table-name`.

## Utilizar uma imagem anterior para visualizar valores originais de linhas da CDC para um fluxo de dados do Kinesis como destino
<a name="CHAP_Target.Kinesis.BeforeImage"></a>

Ao gravar atualizações da CDC em um destino de streaming de dados, como o Kinesis, é possível visualizar os valores originais de linhas do banco de dados de origem antes da alteração por uma atualização. Para tornar isso possível, AWS DMS preenche uma *imagem anterior* dos eventos de atualização com base nos dados fornecidos pelo mecanismo do banco de dados de origem. 

Diferentes mecanismos de banco de dados de origem fornecem diferentes quantidades de informações para uma imagem anterior: 
+ O Oracle fornece atualizações para colunas somente se elas forem alteradas. 
+ O PostgreSQL fornece somente dados para colunas que fazem parte da chave primária (alterada ou não). Para fornecer dados para todas as colunas (alteradas ou não), você precisa definir `REPLICA_IDENTITY` como `FULL` em vez de `DEFAULT`. Observe que você deve escolher cuidadosamente a configuração `REPLICA_IDENTITY` para cada tabela. Se você definir `REPLICA_IDENTITY` como `FULL`, todos os valores da coluna serão gravados continuamente no registro em log de gravação antecipada (WAL). Isso pode causar problemas de desempenho ou de recursos com tabelas que são atualizadas com frequência.
+ O MySQL geralmente fornece dados para todas as colunas, exceto para os tipos de dados BLOB e CLOB (alterados ou não).

Para habilitar a criação de imagem anterior para adicionar valores originais do banco de dados de origem à saída do AWS DMS , use a configuração de tarefa `BeforeImageSettings` ou o parâmetro `add-before-image-columns`. Esse parâmetro aplica uma regra de transformação de coluna. 

`BeforeImageSettings` adiciona um novo atributo JSON a cada operação de atualização com valores coletados do sistema de banco de dados de origem, conforme mostrado a seguir.

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**nota**  
Aplique somente `BeforeImageSettings` às AWS DMS tarefas que contêm um componente do CDC, como carga total mais tarefas do CDC (que migram dados existentes e replicam as alterações em andamento), ou às tarefas somente do CDC (que replicam somente as alterações de dados). Não aplique `BeforeImageSettings` a tarefas que são somente de carga total.

Para opções `BeforeImageSettings`, aplica-se o seguinte:
+ Defina a opção `EnableBeforeImage` como `true` para habilitar a criação de imagem anterior. O padrão é `false`. 
+ Use a opção `FieldName` para atribuir um nome ao novo atributo JSON. Quando `EnableBeforeImage` for `true`, `FieldName` será necessário e não poderá estar vazio.
+ A opção `ColumnFilter` especifica uma coluna a ser adicionada usando imagem anterior. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, use o valor padrão, `pk-only`. Para adicionar qualquer coluna que tenha um valor de imagem anterior, use `all`. Observe que a imagem anterior não contém colunas com tipos de dados LOB, como CLOB ou BLOB.

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

**nota**  
Os destinos do Amazon S3 não são compatíveis com `BeforeImageSettings`. Para destinos do S3, utilize somente a regra de transformação `add-before-image-columns` para executar a criação da imagem anterior durante a CDC.

### Usar uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kinesis.BeforeImage.Transform-Rule"></a>

Como alternativa às configurações de tarefa, é possível usar o parâmetro `add-before-image-columns`, que aplica uma regra de transformação de coluna. Com esse parâmetro, é possível ativar a imagem anterior durante a CDC em destinos de streaming de dados, como o Kinesis. 

Usando `add-before-image-columns` em uma regra de transformação, é possível aplicar um controle mais refinado dos resultados da imagem anterior. As regras de transformação permitem que você use um localizador de objetos que oferece controle sobre as tabelas selecionadas para a regra. Além disso, é possível encadear regras de transformação, o que permite que regras diferentes sejam aplicadas a tabelas diferentes. Depois, você poderá manipular as colunas produzidas usando outras regras. 

**nota**  
Não use o parâmetro `add-before-image-columns` junto com a configuração da tarefa `BeforeImageSettings` na mesma tarefa. Em vez disso, use o parâmetro ou a configuração, mas não ambos, para uma única tarefa.

Um tipo de regra `transformation` com o parâmetro `add-before-image-columns` de uma coluna deve fornecer uma seção `before-image-def`. Por exemplo:

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

O valor de `column-prefix` precede um nome de coluna e o valor padrão de `column-prefix` é `BI_`. O valor de `column-suffix` é anexado ao nome da coluna e o padrão é vazio. Não defina `column-prefix` e `column-suffix` como strings vazias.

Escolha um valor para `column-filter`. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, escolha `pk-only`. Escolha `non-lob` para adicionar somente colunas que não sejam do tipo LOB. Ou escolha `all` para adicionar qualquer coluna que tenha um valor de imagem anterior.

### Exemplo de uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kinesis.BeforeImage.Example"></a>

A regra de transformação no exemplo a seguir adiciona uma nova coluna chamada `BI_emp_no` no destino. Portanto, uma instrução como `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` preenche o campo `BI_emp_no` com 1. Ao gravar atualizações da CDC em destinos do Amazon S3, a coluna `BI_emp_no` possibilita identificar qual linha original foi atualizada.

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

Para obter informações sobre como usar a ação da regra `add-before-image-columns`, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Pré-requisitos para usar um stream de dados do Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites"></a>

### Função do IAM para usar um stream de dados do Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.IAM"></a>

Antes de configurar um stream de dados do Kinesis como destino AWS DMS, certifique-se de criar uma função do IAM. Essa função deve permitir AWS DMS assumir e conceder acesso aos fluxos de dados do Kinesis para os quais estão sendo migrados. O conjunto mínimo de permissões de acesso é mostrado na seguinte política do IAM.

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

****  

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

------

O perfil que você utiliza para a migração para um fluxo de dados do Kinesis deve ter as seguintes permissões:

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:DescribeStream",
        "kinesis:PutRecord",
        "kinesis:PutRecords"
      ],
      "Resource": "*"
    }
  ]
}
```

------

### Acessando um stream de dados do Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.Access"></a>

Na AWS DMS versão 3.4.7 e superior, para se conectar a um endpoint do Kinesis, você deve fazer o seguinte:
+ Configure o DMS para usar endpoints da VPC. Para obter mais informações sobre a configuração de endpoints da VPC, consulte [Configurando endpoints VPC para AWS DMS](CHAP_VPC_Endpoints.md).
+ Configure o DMS para usar rotas públicas; ou seja, torne a instância de replicação pública. Para obter mais informações sobre instâncias de replicação públicas, consulte [Instâncias de replicação públicas e privadas](CHAP_ReplicationInstance.PublicPrivate.md).

## Limitações ao usar o Kinesis Data Streams como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Kinesis Data Streams como destino:
+ AWS DMS publica cada atualização em um único registro no banco de dados de origem como um registro de dados em um determinado stream de dados do Kinesis, independentemente das transações. No entanto, é possível incluir detalhes da transação para cada registro de dados utilizando parâmetros relevantes da API do `KinesisSettings`.
+ O modo Full LOB não é compatível.
+ O tamanho máximo do LOB compatível é 1 MB.
+ Os Kinesis Data Streams não é compatível com a desduplicação. As aplicações que consumem dados de um fluxo precisam tratar os registros duplicados. Para obter mais informações, consulte [Tratar registros duplicados](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.
+ AWS DMS suporta as quatro formas a seguir para chaves de partição:
  + `SchemaName.TableName`: uma combinação de esquema e nome da tabela.
  + `${AttributeName}`: o valor de um dos campos no JSON ou a chave primária da tabela no banco de dados de origem.
  + `transaction-id`: O ID da transação do CDC. Todos os registros da mesma transação vão para a mesma partição.
  + `constant`: um valor literal fixo para cada registro, independentemente da tabela ou dos dados. Todos os registros são enviados para o mesmo valor de chave de partição “constante”, fornecendo uma ordenação global estrita em todas as tabelas.

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "PartitionKeyTypeExample",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ Para obter informações sobre como criptografar dados em repouso no Kinesis Data Streams, consulte [Proteção de dados no Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html.html), no *Guia do desenvolvedor do AWS Key Management Service *. 
+ A configuração do `IncludeTransactionDetails` endpoint só é suportada quando o endpoint de origem é Oracle, SQL Server, PostgreSQL ou MySQL. Para outros tipos de endpoint de origem, os detalhes da transação não serão incluídos.
+ O `BatchApply` não é compatível com um endpoint do Kinesis. A utilização da aplicação em lote (por exemplo, a configuração `BatchApplyEnabled` da tarefa de metadados de destino) para um destino do Kinesis pode resultar em falha da tarefa e perda de dados. Não habilite `BatchApply` ao utilizar o Kinesis como endpoint de destino.
+ Os destinos do Kinesis só são compatíveis com um stream de dados do Kinesis na mesma AWS conta e na Região da AWS mesma instância de replicação.
+ Ao migrar de uma fonte MySQL, os dados não incluem BeforeImage os tipos de dados CLOB e BLOB. Para obter mais informações, consulte [Utilizar uma imagem anterior para visualizar valores originais de linhas da CDC para um fluxo de dados do Kinesis como destino](#CHAP_Target.Kinesis.BeforeImage).
+ AWS DMS não suporta a migração de valores do tipo de `BigInt` dados com mais de 16 dígitos. Para contornar essa limitação, você pode usar a regra de transformação a seguir para converter a coluna `BigInt` em uma string. Para obter mais informações sobre regras transformação, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ Quando várias operações do DML em uma única transação modificam uma coluna de objeto grande (LOB) no banco de dados de origem, o banco de dados de destino retém somente o valor final do LOB da última operação nessa transação. Os valores de LOB intermediários definidos por operações anteriores na mesma transação são sobrescritos, o que pode resultar em possíveis perdas de dados ou inconsistências. Esse comportamento ocorre devido à forma como os dados de LOB são processados durante a replicação.
+ AWS DMS não suporta dados de origem contendo `'\0'` caracteres incorporados ao usar o Kinesis como um endpoint de destino. Os dados contendo `'\0'` caracteres incorporados serão truncados no primeiro `'\0'` caractere.

## Utilizar o mapeamento de objetos para migrar dados para um fluxo de dados do Kinesis
<a name="CHAP_Target.Kinesis.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabelas para mapear dados da fonte para o stream de dados do Kinesis de destino. Para mapear dados para um fluxo de destino, utilize um tipo de regra de mapeamento de tabela chamado mapeamento de objetos. Utilize o mapeamento de objetos para definir como os registros de dados na origem são mapeados para os registros de dados publicados para o fluxo de dados do Kinesis. 

O fluxo de dados do Kinesis não tem estrutura predefinida além de uma chave de partição. Em uma regra de mapeamento de objeto, os valores possíveis de um `partition-key-type` para registros de dados são `schema-table`, `transaction-id`, `primary-key` `constant` e `attribute-name`.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como `object-mapping`. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. 

A estrutura da regra é a seguinte:

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Essas configurações afetam valores que não são excluídos como parte da lista de atributos `exclude-columns`. Os `map-record-to-document` valores `map-record-to-record` e especificam como AWS DMS manipula esses registros por padrão. Esses valores não afetam os mapeamentos de atributos de forma alguma. 

Utilize `map-record-to-record` ao migrar de um banco de dados relacional para um fluxo de dados do Kinesis. Esse tipo de regra utiliza o valor `taskResourceId.schemaName.tableName` encontrado no banco de dados relacional como a chave de partição no fluxo de dados do Kinesis e cria um atributo para cada coluna no banco de dados de origem. 

Ao utilizar `map-record-to-record`, observe o seguinte:
+ Essa configuração afeta somente as colunas excluídas pela lista `exclude-columns`.
+ Para cada coluna desse tipo, AWS DMS cria um atributo correspondente no tópico de destino.
+ AWS DMS cria esse atributo correspondente independentemente de a coluna de origem ser usada em um mapeamento de atributos. 

Utilize `map-record-to-document` para colocar colunas de origem em um único documento sem formatação no fluxo de destino apropriado utilizando o nome do atributo “\$1doc”. O AWS DMS coloca os dados em um único mapa sem formatação na origem chamada “`_doc`”. Esse posicionamento se aplica a qualquer coluna na tabela de origem que não aparece na lista de atributos `exclude-columns`.

Uma maneira de compreender o `map-record-to-record` é vê-lo em ação. Para este exemplo, suponha que você está começando com uma linha de tabela do banco de dados relacional com a seguinte estrutura de dados:


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 29/02/1988 | 

Para migrar essas informações de um esquema chamado `Test` para um fluxo de dados do Kinesis, crie regras para mapear os dados para o fluxo de destino. A regra a seguir ilustra o mapeamento. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKinesis",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Veja a seguir uma ilustração do formato do registro resultante no fluxo de dados do Kinesis: 
+ StreamName: XXX
+ PartitionKey: Test.Customers //schmaname.tableName
+ Data: //A seguinte mensagem do JSON

  ```
    {
       "FirstName": "Randy",
       "LastName": "Marsh",
       "StoreId":  "5",
       "HomeAddress": "221B Baker Street",
       "HomePhone": "1234567890",
       "WorkAddress": "31 Spooner Street, Quahog",
       "WorkPhone": "9876543210",
       "DateOfBirth": "02/29/1988"
    }
  ```

No entanto, suponha que você utilize as mesmas regras, mas altere o parâmetro `rule-action` para `map-record-to-document` e exclua determinadas colunas. A regra a seguir ilustra o mapeamento.

```
{
	"rules": [
	   {
			"rule-type": "selection",
			"rule-id": "1",
			"rule-name": "1",
			"rule-action": "include",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "%"
			}
		},
		{
			"rule-type": "object-mapping",
			"rule-id": "2",
			"rule-name": "DefaultMapToKinesis",
			"rule-action": "map-record-to-document",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "Customers"
			},
			"mapping-parameters": {
				"exclude-columns": [
					"homeaddress",
					"homephone",
					"workaddress",
					"workphone"
				]
			}
		}
	]
}
```

Nesse caso, as colunas não listadas no parâmetro `exclude-columns`, `FirstName`, `LastName`, `StoreId` e `DateOfBirth` são mapeadas para `_doc`. Veja a seguir o formato do registro resultante. 

```
       {
            "data":{
                "_doc":{
                    "FirstName": "Randy",
                    "LastName": "Marsh",
                    "StoreId":  "5",
                    "DateOfBirth": "02/29/1988"
                }
            }
        }
```

### Reestruturação de dados com mapeamento de atributo
<a name="CHAP_Target.Kinesis.AttributeMapping"></a>

É possível reestruturar os dados enquanto estiver migrando-os para um fluxo de dados do Kinesis utilizando um mapa de atributo. Por exemplo, você pode combinar vários campos na origem em um único campo no destino. O mapa de atributo a seguir ilustra como reestruturar os dados.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Para definir um valor constante para`partition-key`, especifique`"partition-key-type: "constant"`, isso define o valor da partição como`constant`. Por exemplo, é possível fazer isso para forçar o armazenamento de todos os dados em um único fragmento. O mapeamento a seguir ilustra esse método. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"

                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "target-attribute-name": "DateOfBirth",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**nota**  
O valor do `partition-key` para um registro de controle para uma tabela específica é `TaskId.SchemaName.TableName`. O valor do `partition-key` para um registro de controle específico para uma tarefa é o `TaskId` daquele registro. A especificação de um valor do `partition-key` no mapeamento do objeto não tem impacto sobre o `partition-key` no caso dos registros de controle.  
 Quando `partition-key-type` está definido como `attribute-name` em uma regra de mapeamento de tabela, você deve especificar`partition-key-name`, que deve fazer referência a uma coluna da tabela de origem ou a uma coluna personalizada definida no mapeamento. Além disso, `attribute-mappings` deve ser fornecido para definir como as colunas de origem são mapeadas para o Kinesis Stream de destino.

### Formato de mensagem do Kinesis Data Streams
<a name="CHAP_Target.Kinesis.Messageformat"></a>

A saída JSON é simplesmente uma lista de pares chave/valor. Um formato de mensagem JSON\$1UNFORMATTED é uma string JSON de linha única com novo delimitador de linha.

AWS DMS fornece os seguintes campos reservados para facilitar o consumo dos dados do Kinesis Data Streams: 

**RecordType**  
O tipo de registro pode ser dados ou controle. Os *registros de dados *representam as linhas reais na origem. Os *registros de controle* são relacionados a importantes eventos no stream, como a reinicialização de uma tarefa, por exemplo.

**Operation**  
Para registros de dados, a operação pode ser `load`, `insert`, `update` ou `delete`.  
Para registros de controle, a operação pode ser `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` ou `column-type-change`.

**SchemaName**  
O esquema de origem para o registro. Esse campo pode estar vazio para um registro de controle.

**TableName**  
A tabela de origem para um registro. Esse campo pode estar vazio para um registro de controle.

**Timestamp**  
A marca de data e hora de quando a mensagem do JSON foi criada. O campo é formatado com o formato ISO 8601.

# Usando o Apache Kafka como alvo para AWS Database Migration Service
<a name="CHAP_Target.Kafka"></a>

Você pode usar AWS DMS para migrar dados para um cluster Apache Kafka. O Apache Kafka é uma plataforma de streaming distribuída. É possível utilizar o Apache Kafka para a ingestão e o processamento de dados de streaming em tempo real.

AWS também oferece Amazon Managed Streaming for Apache Kafka (Amazon MSK) para uso como destino. AWS DMS O Amazon MSK é um serviço de streaming totalmente gerenciado do Apache Kafka que simplifica a implementação e o gerenciamento de instâncias do Apache Kafka. Ele funciona com versões de código aberto do Apache Kafka, e você acessa instâncias do Amazon MSK como AWS DMS destinos, exatamente como qualquer instância do Apache Kafka. Para obter mais informações, consulte [O que é o Amazon MSK?](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) no *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*.

Um cluster do Kafka armazena fluxos de registros em categorias chamadas tópicos que são divididos em partições. As *partições* são sequências de registros de dados identificadas exclusivamente (mensagens) em um tópico. As partições podem ser distribuídas entre vários agentes em um cluster para permitir o processamento paralelo dos registros de um tópico. Para obter mais informações sobre tópicos e partições e sua distribuição no Apache Kafka, consulte [Tópicos e logs](https://kafka.apache.org/documentation/#intro_topics) e [Distribuição](https://kafka.apache.org/documentation/#intro_distribution).

O cluster do Kafka pode ser uma instância do Amazon MSK, um cluster em execução em uma instância do Amazon EC2 ou um cluster on-premises. Uma instância do Amazon MSK ou um cluster em uma instância do Amazon EC2 pode estar na mesma VPC ou em uma diferente. Se o cluster estiver on-premises, será possível utilizar o seu próprio servidor de nomes on-premises para a instância de replicação para resolver o nome do host do cluster. Para obter informações sobre como configurar um servidor de nomes na instância de replicação, consulte [Utilização do seu próprio servidor de nomes on-premises](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver). Para obter mais informações sobre a configuração de uma rede, consulte [Configurar uma rede para uma instância de replicação](CHAP_ReplicationInstance.VPC.md).

Ao utilizar um cluster do Amazon MSK, verifique se o grupo de segurança permite acesso da instância de replicação. Para obter informações sobre como alterar o grupo de segurança de um cluster do Amazon MSK, consulte [Alterar o grupo de segurança de um cluster do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/change-security-group.html).

AWS Database Migration Service publica registros em um tópico do Kafka usando JSON. Durante a conversão, o AWS DMS serializa cada registro do banco de dados de origem em um par atributo-valor no formato JSON.

Para migrar os dados de uma fonte de dados compatível para um cluster de destino do Kafka, utilize o mapeamento de objetos. Com o mapeamento de objetos, você determina como estruturar os registros de dados no tópico de destino. Também é possível definir uma chave de partição para cada tabela, que será utilizada pelo Apache Kafka para agrupar os dados em suas partições. 

Atualmente, AWS DMS oferece suporte a um único tópico por tarefa. Para uma única tarefa com várias tabelas, todas as mensagens vão para um único tópico. Cada mensagem inclui uma seção de metadados que identifica o esquema e a tabela de destino. AWS DMS as versões 3.4.6 e superiores oferecem suporte à replicação multitópica usando mapeamento de objetos. Para obter mais informações, consulte [Replicação de multitópico utilizando o mapeamento de objetos](#CHAP_Target.Kafka.MultiTopic).

**Configurações do endpoint do Apache Kafka**

Você pode especificar os detalhes da conexão por meio das configurações do endpoint no AWS DMS console ou da `--kafka-settings` opção na CLI. Os requisitos para cada configuração são os seguintes:
+ `Broker`: especifique a localização de um ou mais agentes no cluster do Kafka na forma de uma lista separada por vírgulas de cada `broker-hostname:port`. Um exemplo é `"ec2-12-345-678-901.compute-1.amazonaws.com:2345,ec2-10-987-654-321.compute-1.amazonaws.com:9876"`. Essa configuração pode especificar os locais de qualquer um ou de todos os agentes no cluster. Todos os agentes de cluster se comunicam para lidar com o particionamento de registros de dados migrados para o tópico.
+ `Topic`: (opcional) especifique o nome do tópico com um comprimento máximo de 255 letras e símbolos. É possível utilizar ponto (.), sublinhado (\$1) e sinal de subtração (-). Os nomes de tópicos com um ponto (.) ou sublinhado (\$1) podem colidir em estruturas de dados internas. Utilize qualquer um, mas não esses dois símbolos no nome do tópico. Se você não especificar um nome de tópico, AWS DMS use `"kafka-default-topic"` como tópico de migração.
**nota**  
Para AWS DMS criar um tópico de migração especificado por você ou o tópico padrão, defina-o `auto.create.topics.enable = true` como parte da configuração do cluster do Kafka. Para obter mais informações, consulte [Limitações ao usar o Apache Kafka como alvo para AWS Database Migration Service](#CHAP_Target.Kafka.Limitations).
+ `MessageFormat`: o formato de saída dos registros criados no endpoint. O formato da mensagem é `JSON` (padrão) ou `JSON_UNFORMATTED` (uma única linha sem guia).
+ `MessageMaxBytes`: o tamanho máximo em bytes dos registros criados no endpoint. O padrão é 1.000.000.
**nota**  
Você só pode usar o AWS CLI/SDK para mudar `MessageMaxBytes` para um valor não padrão. Por exemplo, para modificar o endpoint existente do Kafka e alterar `MessageMaxBytes`, utilize o comando a seguir.  

  ```
  aws dms modify-endpoint --endpoint-arn your-endpoint 
  --kafka-settings Broker="broker1-server:broker1-port,broker2-server:broker2-port,...",
  Topic=topic-name,MessageMaxBytes=integer-of-max-message-size-in-bytes
  ```
+ `IncludeTransactionDetails`: fornece informações detalhadas sobre transações do banco de dados de origem. Essas informações incluem um timestamp de confirmação, uma posição no log e valores para `transaction_id`, `previous_transaction_id` e `transaction_record_id` (o deslocamento de registro dentro de uma transação). O padrão é `false`.
+ `IncludePartitionValue`: mostra o valor da partição na saída da mensagem do Kafka, a menos que o tipo de partição seja `schema-table-type`. O padrão é `false`.
+ `PartitionIncludeSchemaTable`: prefixa os nomes de esquema e de tabela em valores de partições, quando o tipo de partição for `primary-key-type`. Isso aumenta a distribuição de dados entre partições do Kafka. Por exemplo, suponha que um esquema `SysBench` tenha milhares de tabelas, e cada tabela tenha apenas um intervalo limitado para uma chave primária. Nesse caso, a mesma chave primária é enviada de milhares de tabelas para a mesma partição, o que provoca o controle de utilização. O padrão é `false`.
+ `IncludeTableAlterOperations`: inclui todas as operações da linguagem de definição de dados (DDL) que alteram a tabela nos dados de controle, como `rename-table`, `drop-table`, `add-column`, `drop-column` e `rename-column`. O padrão é `false`. 
+ `IncludeControlDetails`: mostra informações detalhadas de controle para definição de tabela, definição de coluna e alterações de tabela e coluna na saída de mensagem do Kafka. O padrão é `false`.
+ `IncludeNullAndEmpty`: inclui colunas NULL e vazias no destino. O padrão é `false`.
+ `SecurityProtocol`: define uma conexão segura a um endpoint de destino do Kafka utilizando Transport Layer Security (TLS). As opções incluem `ssl-authentication`, `ssl-encryption` e `sasl-ssl`. A utilização de `sasl-ssl` requer `SaslUsername` e `SaslPassword`.
+ `SslEndpointIdentificationAlgorithm`: define a verificação do nome de host para o certificado. Essa configuração é compatível com o AWS DMS versão 3.5.1 e posteriores. As opções incluem o seguinte: 
  + `NONE`: desabilite a verificação do nome do host do broker na conexão do cliente.
  + `HTTPS`: habilite a verificação do nome do host do broker na conexão do cliente.
+ `useLargeIntegerValue`— Use int de até 18 dígitos em vez de converter ints como duplos, disponível a partir da AWS DMS versão 3.5.4. O padrão é falso.

É possível utilizar configurações para ajudar a aumentar a velocidade da transferência. Para fazer isso, o AWS DMS é compatível com uma carga multithreaded completa para um cluster de destino do Apache Kafka. O AWS DMS é compatível com esse multithreading com configurações de tarefa que incluem o seguinte:
+ `MaxFullLoadSubTasks`— Use essa opção para indicar o número máximo de tabelas de origem a serem carregadas paralelamente. AWS DMS carrega cada tabela em sua tabela de destino correspondente do Kafka usando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de segmentos AWS DMS usados para carregar cada tabela em sua tabela de destino do Kafka. O valor máximo para um destino do Apache Kafka é 32. Você pode solicitar o aumento desse limite máximo.
+ `ParallelLoadBufferSize`: utilize esta opção para especificar o número máximo de registros a serem armazenados no buffer utilizado pelos threads de carregamento paralelo utilizam para carregar dados no destino do Kafka. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ `ParallelLoadQueuesPerThread`: utilize esta opção para especificar o número de filas que cada thread simultâneo acessa para extrair registros de dados das filas e gerar uma carga em lote para o destino. O padrão é um. O máximo é 512.

É possível melhorar o desempenho da captura de dados de alteração (CDC) para endpoints do Kafka ajustando as configurações da tarefa para threads paralelos e operações em massa. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar um carregamento de CDC e aplicar 128 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do Kafka. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para threads simultâneos enviarem para um endpoint de destino do Kafka durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para extrair registros de dados das filas e gerar uma carga em lote para um endpoint do Kafka durante a CDC. O padrão é um. O máximo é 512.

Ao usar configurações da tarefa `ParallelApply*`, o `partition-key-type` padrão é a `primary-key` da tabela, não o `schema-name.table-name`.

## Conectar-se ao Kafka utilizando Transport Layer Security (TLS)
<a name="CHAP_Target.Kafka.TLS"></a>

O cluster do Kafka aceita conexões seguras utilizando Transport Layer Security (TLS). Com o DMS, é possível utilizar qualquer uma das três opções de protocolo de segurança a seguir para proteger uma conexão de endpoint do Kafka.

**Criptografia SSL (`server-encryption`)**  
Os clientes validam a identidade do servidor por meio do certificado do servidor. Uma conexão criptografada é feita entre o servidor e o cliente.

**Autenticação SSL (`mutual-authentication`)**  
O servidor e o cliente validam a identidade entre si por meio de seus próprios certificados. Uma conexão criptografada é feita entre o servidor e o cliente.

**SASL-SSL (`mutual-authentication`)**  
O método Simple Authentication and Security Layer (SASL) substitui o certificado do cliente por um nome de usuário e senha para validar a identidade do cliente. Especificamente, forneça um nome de usuário e uma senha que o servidor registrou para que o servidor possa validar a identidade de um cliente. Uma conexão criptografada é feita entre o servidor e o cliente.

**Importante**  
O Apache Kafka e o Amazon MSK aceitam certificados resolvidos. Essa é uma limitação conhecida do Kafka e do Amazon MSK a ser resolvida. Para obter mais informações, consulte [Problemas do Apache Kafka, KAFKA-3700](https://issues.apache.org/jira/browse/KAFKA-3700).  
Se você estiver usando o Amazon MSK, considere usar listas de controle de acesso (ACLs) como uma solução alternativa para essa limitação conhecida. Para obter mais informações sobre o uso ACLs, consulte a seção [Apache Kafka ACLs do Guia do desenvolvedor](https://docs.aws.amazon.com//msk/latest/developerguide/msk-acls.html) do *Amazon Managed Streaming for Apache Kafka*.  
Se estiver utilizando um cluster do Kafka autogerenciado, consulte [Comentário datado de 18/out/21](https://issues.apache.org/jira/browse/KAFKA-3700?focusedCommentId=16658376) para obter informações sobre como configurar o cluster.

### Utilizar criptografia SSL com o Amazon MSK ou um cluster do Kafka autogerenciado
<a name="CHAP_Target.Kafka.TLS.SSLencryption"></a>

É possível utilizar a criptografia SSL para proteger uma conexão de endpoint ao Amazon MSK ou um cluster do Kafka autogerenciado. Ao utilizar o método de autenticação de criptografia SSL, os clientes validam a identidade de um servidor por meio do certificado do servidor. Uma conexão criptografada é feita entre o servidor e o cliente.

**Como utilizar a criptografia SSL para conectar-se ao Amazon MSK**
+ Defina a configuração do endpoint do protocolo de segurança (`SecurityProtocol`) utilizando a opção `ssl-encryption` ao criar o endpoint do Kafka de destino. 

  O exemplo de JSON a seguir define o protocolo de segurança como criptografia SSL.

```
"KafkaSettings": {
    "SecurityProtocol": "ssl-encryption", 
}
```

**Para utilizar a criptografia SSL para um cluster do Kafka autogerenciado**

1. Se estiver utilizando uma Autoridade de Certificação (CA) privada no cluster do Kafka on-premises, faça upload do certificado da CA privada e obtenha um nome do recurso da Amazon (ARN). 

1. Defina a configuração do endpoint do protocolo de segurança (`SecurityProtocol`) utilizando a opção `ssl-encryption` ao criar o endpoint do Kafka de destino. O exemplo de JSON a seguir define o protocolo de segurança como `ssl-encryption`.

   ```
   "KafkaSettings": {
       "SecurityProtocol": "ssl-encryption", 
   }
   ```

1. Se estiver utilizando uma CA privada, defina `SslCaCertificateArn` no ARN obtido na primeira etapa acima.

### Utilizar autenticação SSL
<a name="CHAP_Target.Kafka.TLS.SSLauthentication"></a>

É possível utilizar a autenticação SSL para proteger uma conexão de endpoint ao Amazon MSK ou um cluster do Kafka autogerenciado.

Para ativar a autenticação e a criptografia do cliente utilizando a autenticação SSL para conectar-se ao Amazon MSK, faça o seguinte:
+ Prepare uma chave privada e um certificado público para o Kafka.
+ Faça upload dos certificados no gerenciador de certificados do DMS.
+ Crie um endpoint de destino do Kafka com o certificado correspondente ARNs especificado nas configurações do endpoint do Kafka.

**Como preparar uma chave privada e um certificado público para o Amazon MSK.**

1. Crie uma instância do EC2 e configure um cliente para utilizar a autenticação conforme descrito nas etapas de 1 a 9 na seção [Autenticação de cliente](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) do *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*.

   Depois de concluir essas etapas, você tem o ARN de um certificado (o ARN do certificado público salvo no ACM) e uma chave privada contida em um arquivo `kafka.client.keystore.jks`.

1. Obtenha o certificado público e copie o certificado no arquivo `signed-certificate-from-acm.pem`, utilizando o comando a seguir:

   ```
   aws acm-pca get-certificate --certificate-authority-arn Private_CA_ARN --certificate-arn Certificate_ARN
   ```

   O comando retorna informações semelhantes às do exemplo a seguir.

   ```
   {"Certificate": "123", "CertificateChain": "456"}
   ```

   Copie o equivalente de `"123"` no arquivo `signed-certificate-from-acm.pem`.

1. Obtenha a chave privada importando a chave `msk-rsa` de `kafka.client.keystore.jks to keystore.p12`, conforme mostrado no exemplo a seguir.

   ```
   keytool -importkeystore \
   -srckeystore kafka.client.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias msk-rsa-client \
   -deststorepass test1234 \
   -destkeypass test1234
   ```

1. Utilize o comando a seguir para exportar `keystore.p12` para o formato `.pem`. 

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-client-key.pem –nocerts
   ```

   A mensagem **Inserir frase secreta do PEM** é exibida e identifica a chave aplicada para criptografar o certificado.

1. Remova os atributos bag e os atributos-chave do arquivo `.pem` para garantir que a primeira linha comece com a sequência de caracteres a seguir.

   ```
                                   ---BEGIN ENCRYPTED PRIVATE KEY---
   ```

**Como fazer upload de um certificado público e de uma chave privada no gerenciador de certificados do DMS e testar a conexão ao Amazon MSK**

1. Faça upload do gerenciador de certificados do DMS utilizando o comando a seguir.

   ```
   aws dms import-certificate --certificate-identifier signed-cert --certificate-pem file://path to signed cert
   aws dms import-certificate --certificate-identifier private-key —certificate-pem file://path to private key
   ```

1. Crie um endpoint de destino do Amazon MSK e teste a conexão para garantir que a autenticação TLS funcione.

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:0000", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "arn:aws:dms:us-east-1:012346789012:cert:",
   "SslClientKeyArn": "arn:aws:dms:us-east-1:0123456789012:cert:","SslClientKeyPassword":"test1234"}'
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

**Importante**  
É possível utilizar a autenticação SSL para proteger uma conexão a um cluster do Kafka autogerenciado. Em alguns casos, é possível utilizar uma Autoridade de Certificação (CA) privada no cluster do Kafka on-premises. Nesse caso, faça upload da cadeia de CAs, do certificado público e da chave privada para o gerenciador de certificados do DMS. Utilize o nome do recurso da Amazon (ARN) correspondente nas configurações do endpoint ao criar o endpoint de destino do Kafka on-premises.

**Como preparar uma chave privada e um certificado assinado para um cluster do Kafka autogerenciado**

1. Gere um par de chaves como mostrado no exemplo a seguir.

   ```
   keytool -genkey -keystore kafka.server.keystore.jks -validity 300 -storepass your-keystore-password 
   -keypass your-key-passphrase -dname "CN=your-cn-name" 
   -alias alias-of-key-pair -storetype pkcs12 -keyalg RSA
   ```

1. Gere uma solicitação de assinatura de certificado (CSR). 

   ```
   keytool -keystore kafka.server.keystore.jks -certreq -file server-cert-sign-request-rsa -alias on-premise-rsa -storepass your-key-store-password 
   -keypass your-key-password
   ```

1. Utilize a CA no truststore do cluster para assinar a CSR. Se não tiver uma CA, você poderá criar sua própria CA privada.

   ```
   openssl req -new -x509 -keyout ca-key -out ca-cert -days validate-days                            
   ```

1. Importe `ca-cert` para o truststore e o keystore do servidor. Se você não tiver um truststore, utilize o seguinte comando para criar o truststore e importar `ca-cert ` nele. 

   ```
   keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert
   keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert
   ```

1. Assine o certificado.

   ```
   openssl x509 -req -CA ca-cert -CAkey ca-key -in server-cert-sign-request-rsa -out signed-server-certificate.pem 
   -days validate-days -CAcreateserial -passin pass:ca-password
   ```

1. Importe o certificado assinado para o keystore.

   ```
   keytool -keystore kafka.server.keystore.jks -import -file signed-certificate.pem -alias on-premise-rsa -storepass your-keystore-password 
   -keypass your-key-password
   ```

1. Utilize o comando a seguir para importar a chave `on-premise-rsa` de `kafka.server.keystore.jks` para `keystore.p12`.

   ```
   keytool -importkeystore \
   -srckeystore kafka.server.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias on-premise-rsa \
   -deststorepass your-truststore-password \
   -destkeypass your-key-password
   ```

1. Utilize o comando a seguir para exportar `keystore.p12` para o formato `.pem`.

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-server-key.pem –nocerts
   ```

1. Faça upload de `encrypted-private-server-key.pem`, `signed-certificate.pem` e `ca-cert` para o gerenciador de certificados do DMS.

1. Crie um endpoint usando o retornado ARNs.

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:9092", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "your-client-cert-arn","SslClientKeyArn": "your-client-key-arn","SslClientKeyPassword":"your-client-key-password", 
   "SslCaCertificateArn": "your-ca-certificate-arn"}'
                               
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

### Utilizar a autenticação SASL-SSL para se conectar ao Amazon MSK
<a name="CHAP_Target.Kafka.TLS.SSL-SASL"></a>

O método Simple Authentication and Security Layer (SASL) utiliza um nome de usuário e uma senha para validar a identidade de um cliente e faz uma conexão criptografada entre o servidor e o cliente.

Para utilizar o SASL, primeiro crie um nome de usuário e uma senha seguros ao configurar o cluster do Amazon MSK. Para obter uma descrição de como configurar um nome de usuário e senha seguros para um cluster Amazon MSK, consulte Como [configurar a SASL/SCRAM autenticação para um cluster Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) no Guia do desenvolvedor do *Amazon Managed Streaming for Apache Kafka*.

Crie o endpoint de destino do Kafka, defina a configuração do endpoint do protocolo de segurança (`SecurityProtocol`) utilizando a opção `sasl-ssl`. Defina também as opções `SaslUsername` e `SaslPassword`. Verifique se essas opções são consistentes com o nome de usuário e senha seguros criados ao configurar o cluster do Amazon MSK pela primeira vez, conforme mostrado no exemplo de JSON a seguir.

```
                   
"KafkaSettings": {
    "SecurityProtocol": "sasl-ssl",
    "SaslUsername":"Amazon MSK cluster secure user name",
    "SaslPassword":"Amazon MSK cluster secure password"                    
}
```

**nota**  
Atualmente, AWS DMS oferece suporte somente a SASL-SSL público apoiado pela CA. O DMS não é compatível com SASL-SSL para utilização com o Kafka autogerenciado compatível com a CA privada.
Para autenticação SASL-SSL, AWS DMS suporta o mecanismo SCRAM-SHA-512 por padrão. AWS DMS as versões 3.5.0 e superiores também suportam o mecanismo Plain. Para ser compatível com o mecanismo Plain, defina o parâmetro `SaslMechanism` do tipo de dados da API do `KafkaSettings` como `PLAIN`. É possível usar o tipo de dados `PLAIN` no Kafka, mas não no Amazon for Kafka (MSK).

## Utilizar uma imagem anterior para visualizar os valores originais de linhas da CDC para o Apache Kafka como destino
<a name="CHAP_Target.Kafka.BeforeImage"></a>

Ao gravar as atualizações de CDC em um destino de streaming de dados, como o Kafka, é possível visualizar os valores originais de linhas do banco de dados de origem antes da alteração por uma atualização. Para tornar isso possível, AWS DMS preenche uma *imagem anterior* dos eventos de atualização com base nos dados fornecidos pelo mecanismo do banco de dados de origem. 

Diferentes mecanismos de banco de dados de origem fornecem diferentes quantidades de informações para uma imagem anterior: 
+ O Oracle fornece atualizações para colunas somente se elas forem alteradas. 
+ O PostgreSQL fornece somente dados para colunas que fazem parte da chave primária (alterada ou não). Se a replicação lógica estiver em uso e REPLICA IDENTITY FULL estiver definida para a tabela de origem, você poderá obter informações completas de antes e depois na linha gravada no WALs e disponível aqui.
+ O MySQL geralmente fornece dados para todas as colunas (alteradas ou não).

Para habilitar a criação de imagem anterior para adicionar valores originais do banco de dados de origem à saída do AWS DMS , use a configuração de tarefa `BeforeImageSettings` ou o parâmetro `add-before-image-columns`. Esse parâmetro aplica uma regra de transformação de coluna. 

`BeforeImageSettings` adiciona um novo atributo JSON a cada operação de atualização com valores coletados do sistema de banco de dados de origem, conforme mostrado a seguir.

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**nota**  
Aplique `BeforeImageSettings` às tarefas de carga máxima e de CDC (que migram dados existentes e replicam alterações contínuas) ou às tarefas de somente CDC (que replicam somente as alterações de dados). Não aplique `BeforeImageSettings` a tarefas que são somente de carga total.

Para opções `BeforeImageSettings`, aplica-se o seguinte:
+ Defina a opção `EnableBeforeImage` como `true` para habilitar a criação de imagem anterior. O padrão é `false`. 
+ Use a opção `FieldName` para atribuir um nome ao novo atributo JSON. Quando `EnableBeforeImage` for `true`, `FieldName` será necessário e não poderá estar vazio.
+ A opção `ColumnFilter` especifica uma coluna a ser adicionada usando imagem anterior. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, use o valor padrão, `pk-only`. Para adicionar somente colunas que não são do tipo LOB, utilize `non-lob`. Para adicionar qualquer coluna que tenha um valor de imagem anterior, use `all`. 

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

### Usar uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kafka.BeforeImage.Transform-Rule"></a>

Como alternativa às configurações de tarefa, é possível usar o parâmetro `add-before-image-columns`, que aplica uma regra de transformação de coluna. Com esse parâmetro, é possível habilitar a criação de imagem anterior durante a CDC em destinos de streaming de dados, como o Kafka.

Usando `add-before-image-columns` em uma regra de transformação, é possível aplicar um controle mais refinado dos resultados da imagem anterior. As regras de transformação permitem que você use um localizador de objetos que oferece controle sobre as tabelas selecionadas para a regra. Além disso, é possível encadear regras de transformação, o que permite que regras diferentes sejam aplicadas a tabelas diferentes. Depois, você poderá manipular as colunas produzidas usando outras regras. 

**nota**  
Não use o parâmetro `add-before-image-columns` junto com a configuração da tarefa `BeforeImageSettings` na mesma tarefa. Em vez disso, use o parâmetro ou a configuração, mas não ambos, para uma única tarefa.

Um tipo de regra `transformation` com o parâmetro `add-before-image-columns` de uma coluna deve fornecer uma seção `before-image-def`. Por exemplo:

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

O valor de `column-prefix` precede um nome de coluna e o valor padrão de `column-prefix` é `BI_`. O valor de `column-suffix` é anexado ao nome da coluna e o padrão é vazio. Não defina `column-prefix` e `column-suffix` como strings vazias.

Escolha um valor para `column-filter`. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, escolha `pk-only`. Escolha `non-lob` para adicionar somente colunas que não sejam do tipo LOB. Ou escolha `all` para adicionar qualquer coluna que tenha um valor de imagem anterior.

### Exemplo de uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kafka.BeforeImage.Example"></a>

A regra de transformação no exemplo a seguir adiciona uma nova coluna chamada `BI_emp_no` no destino. Portanto, uma instrução como `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` preenche o campo `BI_emp_no` com 1. Ao gravar atualizações da CDC em destinos do Amazon S3, a coluna `BI_emp_no` possibilita identificar qual linha original foi atualizada.

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

Para obter informações sobre como usar a ação da regra `add-before-image-columns`, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Limitações ao usar o Apache Kafka como alvo para AWS Database Migration Service
<a name="CHAP_Target.Kafka.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Apache Kafka como destino:
+ AWS DMS Os endpoints de destino do Kafka não oferecem suporte ao controle de acesso do IAM para o Amazon Managed Streaming for Apache Kafka (Amazon MSK).
+ O modo Full LOB não é compatível.
+ Especifique um arquivo de configuração do Kafka para seu cluster com propriedades que permitem AWS DMS criar novos tópicos automaticamente. Inclua a configuração, `auto.create.topics.enable = true`. Se estiver utilizando o Amazon MSK, será possível especificar a configuração padrão ao criar o cluster do Kafka e alterar a configuração `auto.create.topics.enable` para `true`. Para obter mais informações sobre as configurações padrão, consulte [A configuração padrão do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html) no *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*. Se você precisar modificar um cluster existente do Kafka criado usando o Amazon MSK, execute o AWS CLI comando `aws kafka create-configuration` para atualizar sua configuração do Kafka, como no exemplo a seguir:

  ```
  14:38:41 $ aws kafka create-configuration --name "kafka-configuration" --kafka-versions "2.2.1" --server-properties file://~/kafka_configuration
  {
      "LatestRevision": {
          "Revision": 1,
          "CreationTime": "2019-09-06T14:39:37.708Z"
      },
      "CreationTime": "2019-09-06T14:39:37.708Z",
      "Name": "kafka-configuration",
      "Arn": "arn:aws:kafka:us-east-1:111122223333:configuration/kafka-configuration/7e008070-6a08-445f-9fe5-36ccf630ecfd-3"
  }
  ```

  Aqui, `//~/kafka_configuration` é o arquivo configuração criado com as configurações de propriedades necessárias.

  Se você estiver usando sua própria instância do Kafka instalada no Amazon EC2, modifique a configuração do cluster Kafka com `auto.create.topics.enable = true` a configuração para AWS DMS permitir a criação automática de novos tópicos, usando as opções fornecidas com sua instância.
+ AWS DMS publica cada atualização em um único registro no banco de dados de origem como um registro de dados (mensagem) em um determinado tópico do Kafka, independentemente das transações.
+ AWS DMS suporta as quatro formas a seguir para chaves de partição:
  + `SchemaName.TableName`: uma combinação de esquema e nome da tabela.
  + `${AttributeName}`: o valor de um dos campos no JSON ou a chave primária da tabela no banco de dados de origem.
  + `transaction-id`: O ID da transação do CDC. Todos os registros da mesma transação vão para a mesma partição.
  + `constant`: um valor literal fixo para cada registro, independentemente da tabela ou dos dados. Todos os registros são enviados para o mesmo valor de chave de partição “constante”, fornecendo uma ordem global estrita em todas as tabelas.

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "TransactionIdPartitionKey",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ A configuração do `IncludeTransactionDetails` endpoint só é suportada quando o endpoint de origem é Oracle, SQL Server, PostgreSQL ou MySQL. Para outros tipos de endpoint de origem, os detalhes da transação não serão incluídos.
+ O `BatchApply` não é compatível com um endpoint do Kafka. A utilização da aplicação em lote (por exemplo, a configuração da tarefa de metadados de destino `BatchApplyEnabled`) para um destino do Kafka pode resultar em perda de dados.
+ AWS DMS não suporta a migração de valores do tipo de `BigInt` dados com mais de 16 dígitos. Para contornar essa limitação, você pode usar a regra de transformação a seguir para converter a coluna `BigInt` em uma string. Para obter mais informações sobre regras transformação, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ AWS DMS Os endpoints de destino do Kafka não oferecem suporte ao Amazon MSK servless.
+ Ao definir regras de mapeamento, não é possível ter uma regra de mapeamento de objetos e uma regra de transformação. Você deve definir somente uma regra. 
+ AWS DMS suporta autenticação SASL para versões do Apache Kafka até 3.8. Se você estiver usando o Kafka 4.0 ou superior, só poderá se conectar sem a autenticação SASL.
+ AWS DMS não suporta dados de origem contendo `'\0'` caracteres incorporados ao usar o Kafka como um endpoint de destino. Os dados contendo `'\0'` caracteres incorporados serão truncados no primeiro `'\0'` caractere.

## Utilizar o mapeamento de objetos para migrar dados para um tópico do Kafka
<a name="CHAP_Target.Kafka.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabelas para mapear dados da fonte para o tópico de destino do Kafka. Para mapear dados para um tópico de destino, utilize um tipo de regra de mapeamento de tabelas chamado mapeamento de objetos. Utilize o mapeamento de objetos para definir como os registros de dados na origem são mapeados para os registros de dados publicados em um tópico do Kafka. 

Os tópicos do Kafka não têm uma estrutura predefinida além de uma chave de partição.

**nota**  
Não é necessário utilizar o mapeamento de objetos. É possível utilizar o mapeamento de tabela normal para várias transformações. No entanto, o tipo de chave de partição seguirá estes comportamentos padrão:   
A chave primária é utilizada como uma chave de partição para a carga máxima.
Se nenhuma configuração de tarefas de aplicação paralela for utilizada, `schema.table` será usada como uma chave de partição para a CDC.
Se as configurações de tarefas de aplicação paralela forem utilizadas, a chave primária será utilizada como uma chave de partição para a CDC.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como `object-mapping`. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. 

A estrutura da regra é a seguinte:

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Essas configurações afetam valores que não são excluídos como parte da lista de atributos `exclude-columns`. Os `map-record-to-document` valores `map-record-to-record` e especificam como AWS DMS manipula esses registros por padrão. Esses valores não afetam os mapeamentos de atributos de forma alguma. 

Utilize o `map-record-to-record` ao migrar de um banco de dados relacional para um tópico do Kafka. Esse tipo de regra utiliza o valor `taskResourceId.schemaName.tableName` encontrado no banco de dados relacional como a chave de partição no tópico do Kafka e cria um atributo para cada coluna no banco de dados de origem. 

Ao utilizar `map-record-to-record`, observe o seguinte:
+ Essa configuração afeta somente as colunas excluídas pela lista `exclude-columns`.
+ Para cada coluna desse tipo, AWS DMS cria um atributo correspondente no tópico de destino.
+ AWS DMS cria esse atributo correspondente independentemente de a coluna de origem ser usada em um mapeamento de atributos. 

Uma maneira de compreender o `map-record-to-record` é vê-lo em ação. Para este exemplo, suponha que você está começando com uma linha de tabela do banco de dados relacional com a seguinte estrutura de dados:


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 29/02/1988 | 

Para migrar essas informações de um esquema chamado `Test` para um tópico do Kafka, crie regras para mapear os dados para o tópico de destino. A regra a seguir ilustra o mapeamento. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Com um tópico do Kafka e uma chave de partição determinados (neste caso, `taskResourceId.schemaName.tableName`), o seguinte ilustra o formato do registro resultante utilizando os nossos exemplos de dados no tópico de destino do Kafka: 

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

**Topics**
+ [Reestruturação de dados com mapeamento de atributo](#CHAP_Target.Kafka.AttributeMapping)
+ [Replicação de multitópico utilizando o mapeamento de objetos](#CHAP_Target.Kafka.MultiTopic)
+ [Formato de mensagem do Apache Kafka](#CHAP_Target.Kafka.Messageformat)

### Reestruturação de dados com mapeamento de atributo
<a name="CHAP_Target.Kafka.AttributeMapping"></a>

É possível reestruturar os dados ao migrá-los para um tópico do Kafka utilizando um mapa de atributos. Por exemplo, você pode combinar vários campos na origem em um único campo no destino. O mapa de atributo a seguir ilustra como reestruturar os dados.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Para definir um valor constante para`partition-key`, especifique`"partition-key-type: "constant"`, isso define o valor da partição como`constant`. Por exemplo, é possível fazer isso para forçar o armazenamento de todos os dados em uma única partição. O mapeamento a seguir ilustra esse método. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "attribute-name": "CustomerName",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "attribute-name": "ContactDetails",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "attribute-name": "DateOfBirth",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**nota**  
O valor do `partition-key` para um registro de controle para uma tabela específica é `TaskId.SchemaName.TableName`. O valor do `partition-key` para um registro de controle específico para uma tarefa é o `TaskId` daquele registro. A especificação de um valor do `partition-key` no mapeamento do objeto não tem impacto sobre o `partition-key` no caso dos registros de controle.  
 Quando `partition-key-type` está definido como `attribute-name` em uma regra de mapeamento de tabela, você deve especificar`partition-key-name`, que deve fazer referência a uma coluna da tabela de origem ou a uma coluna personalizada definida no mapeamento. Além disso, `attribute-mappings` deve ser fornecido para definir como as colunas de origem são mapeadas para o tópico de destino do Kafka.

### Replicação de multitópico utilizando o mapeamento de objetos
<a name="CHAP_Target.Kafka.MultiTopic"></a>

Por padrão, AWS DMS as tarefas migram todos os dados de origem para um dos tópicos do Kafka a seguir:
+ Conforme especificado no campo **Tópico** do endpoint de AWS DMS destino.
+ Conforme especificado por `kafka-default-topic`, se o campo **Tópico** do endpoint de destino não estiver preenchido e a configuração `auto.create.topics.enable` do Kafka estiver definida como `true`.

Com as versões 3.4.6 e posteriores do AWS DMS mecanismo, você pode usar o `kafka-target-topic` atributo para mapear cada tabela de origem migrada para um tópico separado. Por exemplo, as regras de mapeamento de objetos a seguir migram as tabelas de origem `Customer` e `Address` para os tópicos `customer_topic` e `address_topic` do Kafka, respectivamente. Ao mesmo tempo, AWS DMS migra todas as outras tabelas de origem, incluindo a `Bills` tabela no `Test` esquema, para o tópico especificado no endpoint de destino.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "MapToKafka1",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "customer_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer" 
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "3",
            "rule-name": "MapToKafka2",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "address_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Address"
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "4",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Bills"
            }
        }
    ]
}
```

Ao utilizar a replicação de multitópico do Kafka, é possível agrupar e migrar tabelas de origem para tópicos separados do Kafka utilizando uma única tarefa de replicação.

### Formato de mensagem do Apache Kafka
<a name="CHAP_Target.Kafka.Messageformat"></a>

A saída JSON é simplesmente uma lista de pares chave/valor. 

**RecordType**  
O tipo de registro pode ser dados ou controle. Os *registros de dados *representam as linhas reais na origem. Os *registros de controle* são relacionados a importantes eventos no stream, como a reinicialização de uma tarefa, por exemplo.

**Operation**  
Para registros de dados, a operação pode ser `load`, `insert`, `update` ou `delete`.  
Para registros de controle, a operação pode ser `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` ou `column-type-change`.

**SchemaName**  
O esquema de origem para o registro. Esse campo pode estar vazio para um registro de controle.

**TableName**  
A tabela de origem para um registro. Esse campo pode estar vazio para um registro de controle.

**Timestamp**  
A marca de data e hora de quando a mensagem do JSON foi criada. O campo é formatado com o formato ISO 8601.

O exemplo de mensagem JSON a seguir ilustra uma mensagem de tipo de dados com todos os metadados adicionais.

```
{ 
   "data":{ 
      "id":100000161,
      "fname":"val61s",
      "lname":"val61s",
      "REGION":"val61s"
   },
   "metadata":{ 
      "timestamp":"2019-10-31T22:53:59.721201Z",
      "record-type":"data",
      "operation":"insert",
      "partition-key-type":"primary-key",
      "partition-key-value":"sbtest.sbtest_x.100000161",
      "schema-name":"sbtest",
      "table-name":"sbtest_x",
      "transaction-id":9324410911751,
      "transaction-record-id":1,
      "prev-transaction-id":9324410910341,
      "prev-transaction-record-id":10,
      "commit-timestamp":"2019-10-31T22:53:55.000000Z",
      "stream-position":"mysql-bin-changelog.002171:36912271:0:36912333:9324410911751:mysql-bin-changelog.002171:36912209"
   }
}
```

O exemplo de mensagem JSON a seguir ilustra uma mensagem de tipo de controle.

```
{ 
   "control":{ 
      "table-def":{ 
         "columns":{ 
            "id":{ 
               "type":"WSTRING",
               "length":512,
               "nullable":false
            },
            "fname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "lname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "REGION":{ 
               "type":"WSTRING",
               "length":1000,
               "nullable":true
            }
         },
         "primary-key":[ 
            "id"
         ],
         "collation-name":"latin1_swedish_ci"
      }
   },
   "metadata":{ 
      "timestamp":"2019-11-21T19:14:22.223792Z",
      "record-type":"control",
      "operation":"create-table",
      "partition-key-type":"task-id",
      "schema-name":"sbtest",
      "table-name":"sbtest_t1"
   }
}
```

# Usando um cluster do Amazon OpenSearch Service como destino para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch"></a>

Você pode usar AWS DMS para migrar dados para o Amazon OpenSearch Service (OpenSearch Service). OpenSearch O serviço é um serviço gerenciado que facilita a implantação, a operação e a escalabilidade de um cluster OpenSearch de serviços. 

No OpenSearch Service, você trabalha com índices e documentos. Um *índice* é uma coleção de documentos, e um *documento* é um objeto JSON contendo valores escalares, matrizes e outros objetos. OpenSearch fornece uma linguagem de consulta baseada em JSON, para que você possa consultar dados em um índice e recuperar os documentos correspondentes.

Ao AWS DMS criar índices para um endpoint de destino para o OpenSearch Service, ele cria um índice para cada tabela do endpoint de origem. O custo da criação de um índice OpenSearch de serviços depende de vários fatores. Esses são o número de índices criados, a quantidade total de dados nesses índices e a pequena quantidade de metadados que são OpenSearch armazenados para cada documento.

Configure seu cluster de OpenSearch serviços com recursos de computação e armazenamento adequados ao escopo de sua migração. É recomendável considerar os seguintes fatores, dependendo da tarefa de replicação a ser utilizada:
+ Para uma carga máxima de dados, considere a quantidade total de dados a ser migrada e a velocidade da transferência.
+ Para replicar as mudanças em andamento, considere a frequência das atualizações e seus requisitos de end-to-end latência.

Além disso, defina as configurações de índice em seu OpenSearch cluster, prestando muita atenção à contagem de documentos.

**Configurações da tarefa de carga máxima com vários threads**

Para ajudar a aumentar a velocidade da transferência, AWS DMS oferece suporte a uma carga completa de vários segmentos em um cluster de destino do OpenSearch serviço. AWS DMS suporta esse multithreading com configurações de tarefas que incluem o seguinte:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela em seu índice de destino OpenSearch de serviço correspondente usando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em seu índice OpenSearch de destino de serviço. O valor máximo para uma meta OpenSearch de serviço é 32. Você pode solicitar o aumento desse limite máximo.
**nota**  
Se você não alterar `ParallelLoadThreads` de seu padrão (0), o AWS DMS transferirá um único registro por vez. Essa abordagem coloca uma carga indevida em seu cluster OpenSearch de serviços. Defina essa opção como 1 ou mais.
+ `ParallelLoadBufferSize`— Use essa opção para especificar o número máximo de registros a serem armazenados no buffer que os threads de carregamento paralelo usam para carregar dados no destino do OpenSearch serviço. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.

Para obter mais informações sobre como o DMS carrega um cluster de OpenSearch serviços usando multithreading, consulte a AWS postagem do blog Escale o [Amazon OpenSearch Service](https://aws.amazon.com/blogs/database/scale-amazon-elasticsearch-service-for-aws-database-migration-service-migrations/) para migrações. AWS Database Migration Service 

**Configurações da tarefa de carga de CDC multithread**

Você pode melhorar o desempenho da captura de dados de alteração (CDC) para um cluster de destino do OpenSearch serviço usando as configurações de tarefas para modificar o comportamento da chamada da `PutRecords` API. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar uma carga de CDC e aplicar 32 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 
**nota**  
Support para o uso de configurações de `ParallelApply*` tarefas durante o CDC para endpoints OpenSearch de destino do Amazon Service está disponível nas AWS DMS versões 3.4.0 e superiores.

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do OpenSearch serviço. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`— Especifica o número máximo de registros a serem armazenados em cada fila de buffer para que threads simultâneos sejam enviados para um endpoint de destino do OpenSearch serviço durante um carregamento do CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`— Especifica o número de filas que cada thread acessa para retirar registros de dados das filas e gerar uma carga em lote para um endpoint de OpenSearch serviço durante o CDC.

Ao usar configurações da tarefa `ParallelApply*`, o `partition-key-type` padrão é a `primary-key` da tabela, não o `schema-name.table-name`.

## Migrando de uma tabela de banco de dados relacional para um índice de serviços OpenSearch
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

AWS DMS suporta a migração de dados para os tipos OpenSearch de dados escalares do Service. Ao migrar de um banco de dados relacional como Oracle ou MySQL para o OpenSearch Service, talvez você queira reestruturar a forma como você armazena esses dados.

AWS DMS suporta os seguintes tipos de dados escalares de OpenSearch serviço: 
+ Booleano 
+ Data
+ Float
+ Int
+ String

AWS DMS converte dados do tipo Date no tipo String. É possível especificar o mapeamento personalizado para interpretar essas datas.

AWS DMS não oferece suporte à migração de tipos de dados LOB.

## Pré-requisitos para usar o Amazon OpenSearch Service como alvo para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados de OpenSearch serviço como destino AWS DMS, certifique-se de criar uma função AWS Identity and Access Management (IAM). Essa função deve permitir o AWS DMS acesso aos índices OpenSearch de serviço no endpoint de destino. O conjunto mínimo de permissões de acesso é mostrado na seguinte política do IAM.

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

****  

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

------

A função que você usa para a migração para o OpenSearch Serviço deve ter as seguintes permissões.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpDelete",
        "es:ESHttpGet",
        "es:ESHttpHead",
        "es:ESHttpPost",
        "es:ESHttpPut"
      ],
      "Resource": "*"
    }
  ]
}
```

------

No exemplo anterior, `region` substitua pelo identificador da AWS região, *`account-id`* pelo ID AWS da sua conta e `domain-name` pelo nome do seu domínio do Amazon OpenSearch Service. Um exemplo é `arn:aws:es:us-west-2:123456789012:domain/my-es-domain`

## Configurações de endpoint ao usar o OpenSearch Serviço como destino para AWS DMS
<a name="CHAP_Target.Elasticsearch.Configuration"></a>

Você pode usar as configurações do endpoint para configurar seu banco de dados OpenSearch de destino do serviço de forma semelhante ao uso de atributos de conexão extras. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--elasticsearch-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que você pode usar com o OpenSearch Serviço como destino.


| Nome do atributo | Valores válidos | Valor padrão e descrição | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  Um inteiro positivo maior que 0, mas não maior que 100.  |  10: para uma tarefa de carga máxima, esse atributo determina o limite de erros permitidos antes que ocorra uma falha na tarefa. Por exemplo, suponha que haja 1.500 linhas no endpoint de origem e o parâmetro foi definido como 10. Em seguida, a tarefa falhará se AWS DMS encontrar mais de 150 erros (10% da contagem de linhas) ao gravar no endpoint de destino.  | 
|   `ErrorRetryDuration`   |  Um inteiro positivo maior do que 0.  |  300 — Se ocorrer um erro no endpoint de destino, AWS DMS tente novamente por esse número de segundos. Caso contrário, a tarefa apresentará falha.  | 
|  `UseNewMappingType`  | true ou false |  `false`, mas para funcionar usando o OpenSearch v2.x, ele deve ser definido como `true`.  | 

## Limitações ao usar o Amazon OpenSearch Service como alvo para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

As seguintes limitações se aplicam ao usar o Amazon OpenSearch Service como alvo:
+ OpenSearch O serviço usa mapeamento dinâmico (adivinhação automática) para determinar os tipos de dados a serem usados para os dados migrados.
+ OpenSearch O serviço armazena cada documento com uma ID exclusiva. Veja um exemplo a seguir: 

  ```
  "_id": "D359F8B537F1888BC71FE20B3D79EAE6674BE7ACA9B645B0279C7015F6FF19FD"
  ```

  Cada ID de documento tem 64 bytes de comprimento; lembre-se de que você precisará desse espaço para armazenamento. Por exemplo, se você migrar 100.000 linhas de uma AWS DMS fonte, o índice de OpenSearch serviço resultante exigirá armazenamento para mais 6.400.000 bytes.
+ Com o OpenSearch Service, você não pode fazer atualizações nos atributos da chave primária. Essa restrição é importante quando se usa a replicação contínua com captura de dados de alterações (CDC), pois ela pode gerar dados indesejados no destino. No modo CDC, as chaves primárias são mapeadas para SHA256 valores com 32 bytes de comprimento. Eles são convertidos em strings de 64 bytes legíveis por humanos e são usados como documento de serviço. OpenSearch IDs
+ Se AWS DMS encontrar algum item que não possa ser migrado, ele grava mensagens de erro no Amazon Logs. CloudWatch Esse comportamento é diferente de outros endpoints de AWS DMS destino, que gravam erros em uma tabela de exceções.
+ AWS DMS não suporta conexão com um cluster Amazon ES que tenha controle de acesso refinado habilitado com usuário mestre e senha.
+ AWS DMS não oferece suporte ao OpenSearch Service serverless.
+ OpenSearch O serviço não oferece suporte à gravação de dados em índices preexistentes.
+ A configuração da tarefa de replicação não `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` é suportada para uso com um endpoint de OpenSearch destino.
+ Ao migrar dados para o Amazon Elasticsearch usando AWS DMS, os dados de origem devem ter uma chave primária ou uma coluna de identificador exclusivo. Se os dados de origem não tiverem uma chave primária ou um identificador exclusivo, você precisará definir um usando a regra de define-primary-key transformação.

## Tipos de dados de destino para o Amazon OpenSearch Service
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

Quando AWS DMS migra dados de bancos de dados heterogêneos, o serviço mapeia tipos de dados do banco de dados de origem para tipos de dados intermediários chamados AWS DMS tipos de dados. Em seguida, o serviço mapeia os tipos de dados intermediários para os tipos de dados de destino. A tabela a seguir mostra cada tipo de AWS DMS dados e o tipo de dados para o qual ele mapeia no OpenSearch Serviço.


| AWS DMS tipo de dados | OpenSearch Tipo de dados do serviço | 
| --- | --- | 
|  Booleano  |  booleano  | 
|  Data  |  string  | 
|  Time  |  date  | 
|  Marca de data e hora  |  date  | 
|  INT4  |  integer  | 
|  Real4  |  float  | 
|  UINT4  |  integer  | 

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).

# Usando o Amazon DocumentDB como destino para o AWS Database Migration Service
<a name="CHAP_Target.DocumentDB"></a>

 Para obter informações sobre quais versões do Amazon DocumentDB (com compatibilidade com o MongoDB) são compatíveis, consulte. AWS DMS [Metas para AWS DMS](CHAP_Introduction.Targets.md) É possível utilizar o AWS DMS para migrar os dados para o Amazon DocumentDB (compatível com MongoDB) de qualquer mecanismo de dados de origem compatível com o AWS DMS . O mecanismo de origem pode estar em um serviço AWS gerenciado, como Amazon RDS, Aurora ou Amazon S3. Ou o mecanismo pode estar em um banco de dados autogerenciado, como o MongoDB em execução no Amazon EC2 ou on-premises.

Você pode usar AWS DMS para replicar dados de origem para bancos de dados, coleções ou documentos do Amazon DocumentDB. 

**nota**  
Se o endpoint de origem for o MongoDB ou o Amazon DocumentDB, execute a migração no **Modo documento**.

O MongoDB armazena dados em um formato JSON binário (BSON). AWS DMS suporta todos os tipos de dados BSON que são compatíveis com o Amazon DocumentDB. Para obter uma lista desses tipos de dados, consulte [ APIsMongoDB, operações e tipos de dados suportados no Guia](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html) do desenvolvedor do *Amazon DocumentDB*.

Se o endpoint de origem for um banco de dados relacional, AWS DMS mapeia objetos do banco de dados para o Amazon DocumentDB da seguinte forma:
+ Um banco de dados relacional ou esquema de banco de dados, é mapeado para um *banco de dados* Amazon DocumentDB. 
+ As tabelas dentro de um banco de dados relacional são mapeadas para *coleções* no Amazon DocumentDB.
+ Os registros em uma tabela relacional são mapeados para *documentos* no Amazon DocumentDB. Cada documento é construído a partir de dados no registro de origem.

Se o endpoint de origem for o Amazon S3, os objetos resultantes do Amazon DocumentDB corresponderão às regras de mapeamento do AWS DMS para o Amazon S3. Por exemplo, considere o URI a seguir.

```
s3://amzn-s3-demo-bucket/hr/employee
```

Nesse caso, AWS DMS mapeia os objetos `amzn-s3-demo-bucket` para o Amazon DocumentDB da seguinte forma:
+ A parte de nível superior do URI (`hr`) é mapeada para um banco de dados Amazon DocumentDB. 
+ A próxima parte do URI (`employee`) é mapeada para uma coleção do Amazon DocumentDB.
+ Cada objeto em `employee` é mapeado para um documento no Amazon DocumentDB.

Para obter mais informações sobre as regras de mapeamento do Amazon S3, consulte [Usando o Amazon S3 como fonte para AWS DMS](CHAP_Source.S3.md).

**Configurações do endpoint do Amazon DocumentDB**

Nas AWS DMS versões 3.5.0 e superiores, você pode melhorar o desempenho da captura de dados de alteração (CDC) para endpoints do Amazon DocumentDB ajustando as configurações de tarefas para threads paralelos e operações em massa. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar um carregamento de CDC e aplicar 128 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do Amazon DocumentDB. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para que os threads simultâneos enviem para um endpoint de destino do Amazon DocumentDB durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para utilizar registros de dados das filas e gerar uma carga em lote para um endpoint do Amazon DocumentDB durante a CDC. O padrão é um. O máximo é 512.

**nota**  
 Para destinos do Amazon DocumentDB, a aplicação paralela do CDC pode causar erros de chave duplicada ou paralisar a aplicação do CDC para cargas de trabalho que usam índices exclusivos secundários ou exigem uma ordenação estrita das alterações. Use a configuração padrão de aplicação do CDC de thread único para essas cargas de trabalho. 

Para obter detalhes adicionais sobre como trabalhar com o Amazon DocumentDB como destino AWS DMS, consulte as seguintes seções:

**Topics**
+ [Mapear dados de uma origem para um destino do Amazon DocumentDB](#CHAP_Target.DocumentDB.data-mapping)
+ [Conexão aos clusters elásticos do Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect)
+ [Replicação contínua com o Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.data-mapping.ongoing-replication)
+ [Limitações da utilização do Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.limitations)
+ [Utilizar configurações de endpoint com o Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.ECAs)
+ [Tipos de dados de destino do Amazon DocumentDB](#CHAP_Target.DocumentDB.datatypes)

**nota**  
Para ver um step-by-step passo a passo do processo de migração, consulte [Migração do MongoDB para o Amazon DocumentDB](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MongoDB2DocumentDB.html) no Guia de migração. AWS Database Migration Service Step-by-Step 

## Mapear dados de uma origem para um destino do Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.data-mapping"></a>

AWS DMS lê registros do endpoint de origem e constrói documentos JSON com base nos dados que ele lê. Para cada documento JSON, é AWS DMS necessário determinar um `_id` campo para atuar como um identificador exclusivo. Ele grava o documento JSON em uma coleção do Amazon DocumentDB, utilizando o campo `_id` como uma chave primária.

### Dados de origem que são uma coluna individual
<a name="CHAP_Target.DocumentDB.data-mapping.single-column"></a>

Se os dados de origem consistirem em uma única coluna, os dados deverão ser de um tipo de string. (Dependendo do mecanismo de origem, o tipo de dados real pode ser VARCHAR, NVARCHAR, TEXT, LOB, CLOB ou similar.) AWS DMS assume que os dados são um documento JSON válido e replica os dados para o Amazon DocumentDB no estado em que se encontram.

Se o documento JSON resultante contiver um campo chamado `_id`, o campo será utilizado como o `_id` exclusivo no Amazon DocumentDB.

Se o JSON não contiver um campo `_id`, o Amazon DocumentDB gerará um valor de `_id` automaticamente.

### Dados de origem que são várias colunas
<a name="CHAP_Target.DocumentDB.data-mapping.multiple-columns"></a>

Se os dados de origem consistirem em várias colunas, AWS DMS criará um documento JSON a partir de todas essas colunas. Para determinar o `_id` campo do documento, AWS DMS faça o seguinte:
+ Se uma das colunas for chamada `_id`, os dados dessa coluna serão utilizados como o `_id` de destino.
+ Se não houver uma `_id` coluna, mas os dados de origem tiverem uma chave primária ou um índice exclusivo, AWS DMS use essa chave ou o valor do índice como `_id` valor. Os dados da chave primária ou do índice exclusivo também aparece como campos explícitos no documento JSON.
+ Se não houver nenhuma coluna `_id` e nenhuma chave primária ou índice exclusivo, o Amazon DocumentDB gerará um valor de `_id` automaticamente.

### Coagir um tipo de dados no endpoint de destino
<a name="CHAP_Target.DocumentDB.coercing-datatype"></a>

AWS DMS pode modificar estruturas de dados ao gravar em um endpoint de destino do Amazon DocumentDB. É possível solicitar essas alterações renomeando colunas e tabelas no endpoint de origem ou fornecendo regras de transformação que são aplicadas quando uma tarefa está sendo executada.

#### Utilizar um documento JSON aninhado (json\$1 prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.json"></a>

Para coagir um tipo de dados, é possível prefixar o nome da coluna de origem com `json_` (ou seja, `json_columnName`) manualmente ou utilizando uma transformação. Nesse caso, a coluna é criada como um documento JSON aninhado dentro do documento de destino, e não como um campo de string.

Por exemplo, suponha que você deseja migrar o documento a seguir de um endpoint de origem do MongoDB.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}"
}
```

Se você não coagir nenhum dos tipos de dados de origem, o documento `ContactDetails` incorporado será migrado como uma string.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}"
}
```

No entanto, é possível adicionar uma regra de transformação para coagir `ContactDetails` para um objeto JSON. Por exemplo, suponha que o nome original da coluna de origem seja `ContactDetails`. Para coagir o tipo de dados como JSON aninhado, a coluna no endpoint de origem precisa ser renomeada como “json\$1ContactDetails” adicionando o prefixo “\$1json\$1\$1 “na origem manualmente ou por meio de regras de transformação. Por exemplo, é possível utilizar a regra de transformação abaixo:

```
{
    "rules": [
    {
    "rule-type": "transformation",
    "rule-id": "1",
    "rule-name": "1",
    "rule-target": "column",
    "object-locator": {
    "schema-name": "%",
    "table-name": "%",
    "column-name": "ContactDetails"
     },
    "rule-action": "rename",
    "value": "json_ContactDetails",
    "old-value": null
    }
    ]
}
```

AWS DMS replica o ContactDetails campo como JSON aninhado, da seguinte forma. 

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactDetails": {
        "Home": {
            "Address": "Boston",
            "Phone": "1111111111"
        },
        "Work": {
            "Address": "Boston",
            "Phone": "2222222222"
        }
    }
}
```

#### Utilizar uma matriz JSON (array\$1 prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.array"></a>

Para coagir um tipo de dados, é possível prefixar o nome de uma coluna com `array_` (ou seja, `array_columnName`) manualmente ou utilizando uma transformação. Nesse caso, AWS DMS considera a coluna como uma matriz JSON e a cria como tal no documento de destino.

Suponha que você deseja migrar o documento a seguir de um endpoint de origem do MongoDB.

```
{
    "_id" : "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": ["Boston", "New York"],             
    "ContactPhoneNumbers": ["1111111111", "2222222222"]
}
```

Se você não coagir nenhum dos tipos de dados de origem, o documento `ContactDetails` incorporado será migrado como uma string.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": "[\"Boston\", \"New York\"]",             
    "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]" 
}
```

 No entanto, é possível adicionar regras de transformação para coagir `ContactAddress` e `ContactPhoneNumbers` para matrizes JSON, conforme mostrado na tabela a seguir.


****  

| Nome original da coluna de origem | Coluna de origem renomeada | 
| --- | --- | 
| ContactAddress | array\$1ContactAddress | 
| ContactPhoneNumbers | array\$1ContactPhoneNumbers | 

AWS DMS replica `ContactAddress` e da `ContactPhoneNumbers` seguinte forma.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactAddresses": [
        "Boston",
        "New York"
    ],
    "ContactPhoneNumbers": [
        "1111111111",
        "2222222222"
    ]
}
```

### Conectar-se ao Amazon DocumentDB utilizando TLS
<a name="CHAP_Target.DocumentDB.tls"></a>

Por padrão, um cluster recém-criado do Amazon DocumentDB aceita conexões seguras somente quando o Transport Layer Security (TLS) é utilizado. Quando o TLS está ativado, cada conexão ao Amazon DocumentDB requer uma chave pública.

Você pode recuperar a chave pública para o Amazon DocumentDB baixando o arquivo`rds-combined-ca-bundle.pem`,, de AWS um bucket hospedado do Amazon S3. Para obter mais informações sobre como baixar esse arquivo, consulte [Criptografar conexões utilizando TLS](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html) no *Guia do desenvolvedor do Amazon DocumentDB*

Depois de baixar esse arquivo.pem, você pode importar a chave pública que ele contém, AWS DMS conforme descrito a seguir.

#### Console de gerenciamento da AWS
<a name="CHAP_Target.DocumentDB.tls.con"></a>

**Para importar o arquivo (.pem) da chave pública**

1. Abra o AWS DMS console em [https://console.aws.amazon.com/dms](https://console.aws.amazon.com/dms).

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

1. Selecione **Import certificate (Importar certificado)** e faça o seguinte:
   + Para **Certificate identifier (Identificador do certificado)**, insira um nome exclusivo para o certificado, por exemplo `docdb-cert`.
   + Em **Importar arquivo**, navegue até o local onde você salvou o arquivo .pem.

   Quando estiver satisfeito com as configurações, selecione **Add new CA certificate (Adicionar novo certificado de CA)**.

#### AWS CLI
<a name="CHAP_Target.DocumentDB.tls.cli"></a>

Utilize o comando `aws dms import-certificate`, conforme mostrado no exemplo a seguir.

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

Ao criar um endpoint de AWS DMS destino, forneça o identificador do certificado (por exemplo,`docdb-cert`). Além disso, defina o parâmetro do modo SSL como `verify-full`.

## Conexão aos clusters elásticos do Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect"></a>

Nas AWS DMS versões 3.4.7 e superiores, você pode criar um endpoint de destino do Amazon DocumentDB como um cluster elástico. Se você criar o endpoint de destino como um cluster elástico, precisará anexar um novo certificado SSL ao endpoint do cluster elástico do Amazon DocumentDB porque o certificado SSL existente não funcionará.

**Como anexar um novo certificado SSL ao endpoint do cluster elástico do Amazon DocumentDB**

1. Em um navegador, abra [ https://www.amazontrust.com/repository/SFSRootCAG2o.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) e salve o conteúdo em um `.pem` arquivo com um nome de arquivo exclusivo, por exemplo. `SFSRootCAG2.pem` Esse é o arquivo de certificado que você precisa importar nas etapas subsequentes.

1. Crie o endpoint do cluster elástico e defina as seguintes opções:

   1. Em **Configuração do endpoint**, escolha **Adicionar novo certificado CA**.

   1. Em **Identificador de certificado**, insira **SFSRootCAG2.pem**.

   1. Em **Importar arquivo de certificado**, escolha **Escolher arquivo** e navegue até o arquivo `SFSRootCAG2.pem` baixado anteriormente.

   1. Selecione e abra o arquivo `SFSRootCAG2.pem` baixado.

   1. Escolha **Importar certificado**.

   1. No menu suspenso **Escolha um certificado**, escolha **SFSRootCAG2.pem**.

O novo certificado SSL do arquivo `SFSRootCAG2.pem` baixado agora está anexado ao endpoint do cluster elástico do Amazon DocumentDB.

## Replicação contínua com o Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication"></a>

Se a replicação contínua (captura de dados de alteração, CDC) estiver ativada para o Amazon DocumentDB como destino, as versões 3.5.0 e superior do AWS DMS proporcionarão uma melhoria no desempenho vinte vezes maior do que nas versões anteriores. Em versões anteriores, onde AWS DMS processava até 250 registros por segundo, AWS DMS agora processa com eficiência mais de 5000 registros por segundo. AWS DMS também garante que os documentos no Amazon DocumentDB permaneçam sincronizados com a fonte. Quando um registro de origem é criado ou atualizado, primeiro é AWS DMS necessário determinar qual registro do Amazon DocumentDB é afetado, fazendo o seguinte:
+ Se o registro da origem tiver uma coluna chamada `_id`, o valor dessa coluna determinará o `_id` correspondente na coleção do Amazon DocumentDB.
+ Se não houver uma `_id` coluna, mas os dados de origem tiverem uma chave primária ou um índice exclusivo, AWS DMS use essa chave ou valor de índice como o da `_id` coleção Amazon DocumentDB.
+ Se o registro de origem não tiver uma `_id` coluna, uma chave primária ou um índice exclusivo, todas as colunas de origem AWS DMS corresponderão aos campos correspondentes na coleção Amazon DocumentDB.

Quando um novo registro de origem é criado, AWS DMS grava um documento correspondente no Amazon DocumentDB. Se um registro de origem existente for atualizado, AWS DMS atualiza os campos correspondentes no documento de destino no Amazon DocumentDB. Todos os campos que existem no documento de destino, mas não no registro da origem permanecem inalterados.

Quando um registro de origem é excluído, o documento correspondente é AWS DMS excluído do Amazon DocumentDB.

### Alterações estruturais (DDL) na origem
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication.ddl"></a>

Com a replicação contínua, qualquer alteração nas estruturas de dados da origem (como tabelas, colunas e assim por diante) é propagada para seus equivalentes no Amazon DocumentDB. Em bancos de dados relacionais, essas alterações são iniciadas utilizando instruções da linguagem de definição de dados (DDL). Você pode ver como AWS DMS propaga essas alterações para o Amazon DocumentDB na tabela a seguir.


****  

| DDL na origem | Efeito no destino do Amazon DocumentDB | 
| --- | --- | 
| CREATE TABLE | Cria uma coleção vazia. | 
| Instrução que renomeia uma tabela (RENAME TABLE, ALTER TABLE...RENAME e semelhante) | Renomeia a coleção. | 
| TRUNCATE TABLE | Remove todos os documentos da coleção, mas somente se HandleSourceTableTruncated for true. Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| DROP TABLE | Exclui a coleção, mas somente se HandleSourceTableDropped for true. Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| Instrução que adiciona uma coluna a uma tabela (ALTER TABLE...ADD e semelhante) | A instrução DDL é ignorada e um aviso é emitido. Quando o primeiro INSERT é realizado na origem, o novo campo é adicionado ao documento de destino. | 
| ALTER TABLE...RENAME COLUMN | A instrução DDL é ignorada e um aviso é emitido. Quando o primeiro INSERT é realizado na origem, o campo recém-nomeado é adicionado ao documento de destino. | 
| ALTER TABLE...DROP COLUMN | A instrução DDL é ignorada e um aviso é emitido. | 
| Instrução que altera o tipo de dados da coluna (ALTER COLUMN...MODIFY e semelhante) | A instrução DDL é ignorada e um aviso é emitido. Quando o primeiro INSERT é realizado na origem com o novo tipo de dados, o documento de destino é criado com um campo desse novo tipo de dados. | 

## Limitações da utilização do Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.limitations"></a>

As seguintes limitações se aplicam ao usar o Amazon DocumentDB como destino para: AWS DMS
+ No Amazon DocumentDB, os nomes de coleção não podem conter o símbolo de dólar (\$1). Além disso, os nomes do banco de dados não podem conter caracteres Unicode.
+ AWS DMS não suporta a fusão de várias tabelas de origem em uma única coleção do Amazon DocumentDB.
+ Quando AWS DMS os processos são alterados de uma tabela de origem que não tem uma chave primária, todas as colunas LOB nessa tabela são ignoradas.
+ Se a opção **Alterar tabela** estiver habilitada, e o AWS DMS encontrar uma coluna de origem chamada “*\$1id*”, essa coluna aparecerá como “*\$1\$1id*” (dois sublinhados) na tabela de alteração.
+ Se você escolher o Oracle como o endpoint de origem, a origem do Oracle deverá ter o registro em log suplementar total ativado. Caso contrário, se houver colunas na origem que não foram alteradas, os dados serão carregados no Amazon DocumentDB como valores nulos.
+ A configuração de `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` da tarefa de replicação não é compatível para utilização com um endpoint de destino do DocumentDB. 
+ Não é possível usar coleções limitadas do MongoDB no Amazon DocumentDB. No entanto, o AWS DMS migra automaticamente esses objetos como coleções ilimitadas no DocumentDB de destino.
+ A aplicação paralela do CDC aos destinos do Amazon DocumentDB pode causar erros de chave duplicada ou a aplicação paralisada do CDC para cargas de trabalho que usam índices exclusivos secundários ou exigem uma ordenação estrita das alterações. Para essas cargas de trabalho, use a configuração padrão de aplicação CDC de thread único.

## Utilizar configurações de endpoint com o Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.ECAs"></a>

É possível utilizar as configurações de endpoint para configurar o destino do Amazon DocumentDB de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--doc-db-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações do endpoint que é possível utilizar com o Amazon DocumentDB como destino.


| Nome do atributo | Valores válidos | Valor padrão e descrição | 
| --- | --- | --- | 
|   `replicateShardCollections`   |  booleano `true` `false`  |  Quando `true`, essa configuração de endpoint tem os seguintes efeitos e impõe as seguintes limitações: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.DocumentDB.html)  | 

## Tipos de dados de destino do Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.datatypes"></a>

Na tabela a seguir, você pode encontrar os tipos de dados de destino do Amazon DocumentDB que são compatíveis com o uso do AWS DMS e o mapeamento padrão dos tipos de dados do AWS DMS. Para obter mais informações sobre os tipos de dados do AWS DMS, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS Tipo de dados DMS  |  Tipo de dados do Amazon DocumentDB  | 
| --- | --- | 
|  BOOLEAN  |  Booleano  | 
|  BYTES  |  Dados binários  | 
|  DATE  | Data | 
|  TIME  | Cadeia de caracteres (UTF8) | 
|  DATETIME  | Data | 
|  INT1  | Inteiro de 32 bits | 
|  INT2  |  Inteiro de 32 bits  | 
|  INT4  | Inteiro de 32 bits | 
|  INT8  |  Inteiro de 64 bits  | 
|  NUMERIC  | Cadeia de caracteres (UTF8) | 
|  REAL4  |  Duplo  | 
|  REAL8  | Duplo | 
|  STRING  |  Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8).  | 
|  UINT1  | Inteiro de 32 bits | 
|  UINT2  | Inteiro de 32 bits | 
|  UINT4  | Inteiro de 64 bits | 
|  UINT8  |  Cadeia de caracteres (UTF8)  | 
|  WSTRING  | Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8). | 
|  BLOB  | Binário | 
|  CLOB  | Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8). | 
|  NCLOB  | Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8). | 

# Usando o Amazon Neptune como alvo para AWS Database Migration Service
<a name="CHAP_Target.Neptune"></a>

O Amazon Neptune é um serviço de banco de dados de grafos rápido, confiável e totalmente gerenciado que facilita a criação e a execução de aplicações que trabalham com conjuntos de dados altamente conectados. O recurso principal do Neptune é um mecanismo de banco de dados de grafos com projeto específico e alto desempenho. Esse mecanismo é otimizado para armazenar bilhões de relacionamentos e consultar grafos com latência de milissegundos. O Neptune suporta as populares linguagens de consulta gráfica TinkerPop Apache Gremlin e SPARQL do W3C. Para obter mais informações sobre o Amazon Neptune, consulte [O que é o Amazon Neptune?](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) no *Guia do usuário do Amazon Neptune*. 

Sem um banco de dados de grafo, como o Neptune, é provável que você modele os dados altamente conectados em um banco de dados relacional. Como os dados têm conexões potencialmente dinâmicas, as aplicações que utilizam essas fontes de dados precisam modelar consultas de dados conectadas no SQL. Essa abordagem exigirá que você grave uma camada extra para converter consultas gráficas em SQL. Além disso, os bancos de dados relacionais vêm com rigidez de esquema. Quaisquer alterações no esquema para modelar conexões alteradas requerem tempo de inatividade e manutenção adicional da conversão da consulta para oferecer suporte ao novo esquema. Além disso, o desempenho da consulta é outra grande restrição a ser considerada ao projetar seus aplicativos.

Os bancos de dados de grafos podem simplificar muito essas situações. Livre de um esquema, uma camada de consulta de grafos avançada (Gremlin ou SPARQL) e índices otimizados para consultas de grafos aumentam a flexibilidade e o desempenho. O banco de dados de grafo Amazon Neptune também tem recursos corporativos, como a criptografia em repouso, uma camada de autorização segura, backups padrão, suporte a multi-AZ, suporte a réplicas de leitura e outros.

Usando AWS DMS, você pode migrar dados relacionais que modelam um gráfico altamente conectado para um endpoint de destino do Neptune a partir de um endpoint de origem do DMS para qualquer banco de dados SQL compatível.

Para obter mais detalhes, consulte as informações a seguir.

**Topics**
+ [Visão geral da migração para o Amazon Neptune como destino](#CHAP_Target.Neptune.MigrationOverview)
+ [Especificar as configurações do endpoint do Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings)
+ [Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole)
+ [Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping)
+ [Tipos de dados para migração de Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.DataTypes)
+ [Limitações da utilização do Amazon Neptune como destino](#CHAP_Target.Neptune.Limitations)

## Visão geral da migração para o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Antes de iniciar uma migração para um alvo do Neptune, crie os seguintes recursos em sua conta: AWS 
+ Um cluster do Neptune para o endpoint de destino. 
+ Um banco de dados relacional SQL suportado AWS DMS pelo endpoint de origem. 
+ Um bucket do Amazon S3 para o endpoint de destino. Crie esse bucket do S3 na mesma AWS região do seu cluster Neptune. AWS DMS usa esse bucket do S3 como armazenamento intermediário de arquivos para os dados de destino que ele carrega em massa no banco de dados Neptune. Para obter mais informações sobre como criar um bucket do S3, consulte [Criar um bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html), no *Guia do usuário do Amazon Simple Storage Service*.
+ Um endpoint de nuvem privada virtual (VPC) para o S3 na mesma VPC que o cluster do Neptune. 
+ Uma função AWS Identity and Access Management (IAM) que inclui uma política de IAM. Essa política deve especificar as permissões `GetObject`, `PutObject`, `DeleteObject` e `ListObject` para o bucket do S3 do endpoint de destino. Essa função é assumida por ambos AWS DMS e por Neptune com acesso do IAM ao bucket S3 de destino e ao banco de dados Neptune. Para obter mais informações, consulte [Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole).

Depois de ter esses recursos, a configuração e a inicialização de uma migração para um destino do Neptune é semelhante a qualquer migração de carga máxima utilizando o console ou a API do DMS. No entanto, uma migração para um destino do Neptune exige algumas etapas exclusivas.

**Para migrar um banco de dados AWS DMS relacional para o Neptune**

1. Crie uma instância de replicação conforme descrito em [Criar uma instância de replicação](CHAP_ReplicationInstance.Creating.md).

1. Crie e teste um banco de dados relacional SQL compatível AWS DMS com o endpoint de origem.

1. Crie e teste o endpoint de destino do banco de dados Neptune. 

   Para conectar o endpoint de destino ao banco de dados Neptune, especifique o nome do servidor para o endpoint do cluster do Neptune ou para o endpoint da instância do gravador do Neptune. Além disso, especifique a pasta de bucket do S3 AWS DMS para armazenar seus arquivos intermediários para carregamento em massa no banco de dados Neptune. 

   Durante a migração, AWS DMS armazena todos os dados de destino migrados nessa pasta de bucket do S3 até o tamanho máximo de arquivo especificado por você. Quando esse armazenamento de arquivos atinge esse tamanho máximo, carrega AWS DMS em massa os dados do S3 armazenados no banco de dados de destino. Ele limpará a pasta para ativar o armazenamento de quaisquer dados de destino adicionais para carregamento posterior no banco de dados de destino. Para obter mais informações sobre como especificar essas configurações, consulte [Especificar as configurações do endpoint do Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings).

1. Crie uma tarefa de replicação de carga máxima com os recursos criados nas etapas 1 a 3 e siga estas etapas: 

   1. Utilize o mapeamento da tabela de tarefas como de costume para identificar esquemas, tabelas e visualizações de origem específicos para migrar do banco de dados relacional utilizando as regras de seleção e de transformação apropriadas. Para obter mais informações, consulte [Utilizar o mapeamento de tabela para especificar as configurações da tarefa](CHAP_Tasks.CustomizingTasks.TableMapping.md). 

   1. Especifique os mapeamentos de destino, escolhendo uma das opções a seguir para especificar as regras de mapeamento de tabelas e visualizações de origem para o grafo do banco de dados de destino do Neptune:
      + JSON do Gremlin: para obter informações sobre como utilizar o JSON do Gremlin para carregar um banco de dados Neptune, consulte [Formato de dados de carga do Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) no *Guia do usuário do Amazon Neptune*.
      + SPARQL RDB to Resource Description Framework Mapping Language (R2RML): para obter informações sobre como utilizar SPARQL R2RML, consulte a especificação do W3C [R2RML: RDB para a linguagem de mapeamento RDF](https://www.w3.org/TR/r2rml/).

   1. Execute um dos seguintes procedimentos:
      + Usando o AWS DMS console, especifique as opções de mapeamento **gráfico usando as regras de mapeamento gráfico na página** **Criar tarefa de migração de banco de dados**. 
      + Usando a AWS DMS API, especifique essas opções usando o parâmetro de `TaskData` solicitação da chamada da `CreateReplicationTask` API. 

      Para obter mais informações e exemplos que utilizam JSON de Gremlin e o SPARQL R2RML para especificar regras de mapeamento de grafos, consulte [Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping).

1. Iniciar a replicação para sua tarefa de migração.

## Especificar as configurações do endpoint do Amazon Neptune como destino
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

Para criar ou modificar um endpoint de destino, é possível usar o console `CreateEndpoint` ou as operações de API `ModifyEndpoint`. 

**Para um alvo do Neptune no console, **especifique as configurações específicas AWS DMS do Endpoint na página Criar endpoint** **ou Modificar endpoint do** console.** Para `CreateEndpoint` e `ModifyEndpoint`, especifique os parâmetros de solicitação para a opção `NeptuneSettings`. O exemplo a seguir mostra como fazer isso utilizando a CLI. 

```
dms create-endpoint --endpoint-identifier my-neptune-target-endpoint
--endpoint-type target --engine-name neptune 
--server-name my-neptune-db.cluster-cspckvklbvgf.us-east-1.neptune.amazonaws.com 
--port 8192
--neptune-settings 
     '{"ServiceAccessRoleArn":"arn:aws:iam::123456789012:role/myNeptuneRole",
       "S3BucketName":"amzn-s3-demo-bucket",
       "S3BucketFolder":"amzn-s3-demo-bucket-folder",
       "ErrorRetryDuration":57,
       "MaxFileSize":100, 
       "MaxRetryCount": 10, 
       "IAMAuthEnabled":false}‘
```

Aqui, a opção da CLI `--server-name` especifica o nome do servidor para o endpoint do gravador de cluster do Neptune. Ou é possível especificar o nome do servidor para um endpoint de instância do gravador do Neptune. 

Os parâmetros de solicitação de opção `--neptune-settings` são:
+ `ServiceAccessRoleArn`: (obrigatório) o nome do recurso da Amazon (ARN) do perfil de serviço criado para o endpoint de destino do Neptune. Para obter mais informações, consulte [Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole).
+ `S3BucketName`: (obrigatório) o nome do bucket do S3 em que o DMS pode armazenar temporariamente dados de grafo migrados em arquivos .csv antes de carregá-los em massa para o banco de dados de destino Neptune. O DMS mapeia os dados de origem SQL para dados de grafo antes de armazená-los nesses arquivos .csv.
+ `S3BucketFolder`: (obrigatório) o caminho de uma pasta em que você deseja que o DMS armazene dados de grafo migrados no bucket do S3 especificado por `S3BucketName`.
+ `ErrorRetryDuration`: (opcional) o número de milissegundos de espera do DMS para repetir uma carga de dados de grafo migrados para o banco de dados de destino Neptune antes de gerar um erro. O padrão é 250.
+ `MaxFileSize`: (opcional) o tamanho máximo em KB de dados de grafo migrados armazenados em um arquivo .csv antes que o DMS execute a carga em massa dos dados para o banco de dados de destino Neptune. O padrão é 1.048.576 KB (1 GB). Se for bem-sucedido, o DMS limpará o bucket, pronto para armazenar o próximo lote de dados de grafo migrados.
+ `MaxRetryCount`: (opcional) o número de vezes para o DMS repetir uma carga em massa de dados de grafo migrados para o banco de dados de destino do Neptune antes de gerar um erro. O padrão é 5.
+ `IAMAuthEnabled`: (opcional) se desejar a autorização do IAM ativada para esse endpoint, defina esse parâmetro como `ServiceAccessRoleArn` e anexe o documento de política do IAM apropriado ao perfil de serviço especificado por `true`. O padrão é `false`.

## Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.ServiceRole"></a>

Para acessar o Neptune como destino, crie um perfil de serviço utilizando o IAM. Dependendo da configuração do endpoint do Neptune, anexe a esse perfil alguns ou todos os documentos de confiança e de política do IAM. Ao criar o endpoint do Neptune, forneça o ARN desse perfil de serviço. Isso permite AWS DMS que o Amazon Neptune assuma permissões para acessar o Neptune e seu bucket Amazon S3 associado.

Se você definir o parâmetro `IAMAuthEnabled` em `NeptuneSettings` como `true` na configuração do endpoint do Neptune, anexe uma política do IAM como a seguinte ao perfil de serviço. Se definir `IAMAuthEnabled` como `false`, é possível ignorar esta política.

```
// Policy to access Neptune

    {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "neptune-db:*",
                "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-CLG7H7FHK54AZGHEH6MNS55JKM/*"
            }
        ]
    }
```

A política do IAM anterior permite acesso total ao cluster de destino do Neptune especificado por `Resource`.

Anexe uma política do IAM como a seguinte ao perfil de serviço. Essa política permite que o DMS armazene temporariamente dados de grafos migrados no bucket do S3 criados para carregamento em massa no banco de dados de destino do Neptune.

```
//Policy to access S3 bucket

{
	"Version": "2012-10-17",		 	 	 
	"Statement": [{
			"Sid": "ListObjectsInBucket0",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket"
			]
		},
		{
			"Sid": "AllObjectActions",
			"Effect": "Allow",
			"Action": ["s3:GetObject",
				"s3:PutObject",
				"s3:DeleteObject"
			],

			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		},
		{
			"Sid": "ListObjectsInBucket1",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket",
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		}
	]
}
```

A política do IAM anterior permite que a sua conta consulte o conteúdo do bucket do S3 (`arn:aws:s3:::amzn-s3-demo-bucket`) criado para o destino do Neptune. Ela também permite que sua conta opere totalmente no conteúdo de todos os arquivos e pastas do bucket (`arn:aws:s3:::amzn-s3-demo-bucket/`).

Edite a relação de confiança e anexe a seguinte função do IAM à sua função de serviço para permitir que tanto o serviço de banco de dados Amazon Neptune AWS DMS quanto o Amazon Neptune assumam a função.

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

****  

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

------

Para obter informações sobre como especificar esse perfil de serviço para o endpoint de destino Neptune, consulte [Especificar as configurações do endpoint do Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings).

## Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.GraphMapping"></a>

As regras de mapeamento de grafos criadas especificam como os dados extraídos de uma origem de banco de dados relacional SQL são carregados em um destino de cluster de banco de dados Neptune. O formato dessas regras de mapeamento difere dependendo se as regras são para carregar dados do gráfico de propriedades usando o Apache TinkerPop Gremlin ou dados do Resource Description Framework (RDF) usando R2RML. A seguir, você encontrará informações sobre esses formatos e muito mais.

É possível especificar essas regras de mapeamento ao criar a tarefa de migração utilizando o console ou a API do DMS. 

Utilizando o console, especifique essas regras de mapeamento utilizando **Regras de mapeamento de grafos** na página **Criar tarefa de migração de banco de dados**. Em **Regras de mapeamento de grafos**, é possível inserir e editar as regras de mapeamento diretamente utilizando o editor fornecido. Ou é possível procurar um arquivo que contenha as regras de mapeamento no formato apropriado de mapeamento de grafos. 

Utilizando a API, especifique essas opções utilizando o parâmetro de solicitação `TaskData` da chamada de API `CreateReplicationTask`. Defina `TaskData` como o caminho de um arquivo que contém as regras de mapeamento no formato de mapeamento de grafos apropriado.

### Regras de mapeamento de grafos para geração de dados de grafo de propriedade utilizando o Gremlin
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

Utilizando o Gremlin para gerar os dados de grafos de propriedade, especifique um objeto JSON com uma regra de mapeamento para cada entidade de grafo a ser gerada dos dados de origem. O formato deste JSON é definido especificamente para carga em massa do Amazon Neptune. O modelo a seguir mostra como é cada regra nesse objeto:

```
{
    "rules": [
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{col1}",
                    "vertex_label": "(the vertex to create)",
                    "vertex_definition_id": "(an identifier for this vertex)",
                    "vertex_properties": [
                        {
                            "property_name": "(name of the property)",
                            "property_value_template": "{col2} or text",
                            "property_value_type": "(data type of the property)"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{col1}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{col3}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "edge_id_template": {
                        "label": "(the edge label to add)",
                        "template": "{col1}_{col3}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "(the property to add)",
                            "property_value_template": "{col4} or text",
                            "property_value_type": "(data type like String, int, double)"
                        }
                    ]
                }
            ]
        }
    ]
}
```

A presença de um rótulo de vértice implica que o vértice está sendo criado aqui. Sua ausência implica que o vértice está sendo criado por uma origem diferente, e essa definição está adicionando apenas propriedades de vértice. Especifique quantas definições de vértice e borda forem necessárias para especificar os mapeamentos para toda a origem do banco de dados relacional.

Veja a seguir uma regra de exemplo para uma tabela `employee`.

```
{
    "rules": [
        {
            "rule_id": "1",
            "rule_name": "vertex_mapping_rule_from_nodes",
            "table_name": "nodes",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{emp_id}",
                    "vertex_label": "employee",
                    "vertex_definition_id": "1",
                    "vertex_properties": [
                        {
                            "property_name": "name",
                            "property_value_template": "{emp_name}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "2",
            "rule_name": "edge_mapping_rule_from_emp",
            "table_name": "nodes",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{emp_id}",
                        "vertex_definition_id": "1"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{mgr_id}",
                        "vertex_definition_id": "1"
                    },
                    "edge_id_template": {
                        "label": "reportsTo",
                        "template": "{emp_id}_{mgr_id}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "team",
                            "property_value_template": "{team}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        }
    ]
}
```

Aqui, as definições de vértice e borda mapeiam uma relação hierárquica de um nó `employee` com ID de funcionário (`EmpID`) e um nó `employee` com um ID de gerente (`managerId`).

Para obter mais informações sobre como criar regras de mapeamento de grafos utilizando JSON do Gremlin, consulte [Formato de dados de carga do Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) no *Guia do usuário do Amazon Neptune*.

### Regras de mapeamento gráfico para gerar dados RDF/SPARQL
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

Se você estiver carregando dados RDF a serem consultados utilizando SPARQL, grave as regras de mapeamento de grafos no R2RML. R2RML é uma linguagem W3C padrão de mapeamento de dados relacionais para RDF. Em um arquivo R2RML, um *mapa triplo* (por exemplo, `<#TriplesMap1>` a seguir) especifica uma regra para transformar cada linha de uma tabela lógica em RDF triplos. Um *mapa de assunto* (por exemplo, `rr:subjectMap` a seguir) especifica uma regra para gerar os assuntos dos RDF triplos gerados por um mapa triplo. Um *mapa de objeto de predicado* (por exemplo, qualquer `rr:predicateObjectMap` a seguir) é um perfil que cria um ou mais pares de objetos de predicado para cada linha de uma tabela lógica.

Segue um exemplo simples para uma tabela de `nodes`.

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/ns#>.

<#TriplesMap1>
    rr:logicalTable [ rr:tableName "nodes" ];
    rr:subjectMap [
        rr:template "http://data.example.com/employee/{id}";
        rr:class ex:Employee;
    ];
    rr:predicateObjectMap [
        rr:predicate ex:name;
        rr:objectMap [ rr:column "label" ];
    ]
```

No exemplo anterior, o mapeamento define nós de grafo mapeados a partir de uma tabela de funcionários.

Veja outro exemplo simples de tabela `Student`.

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

<#TriplesMap2>
    rr:logicalTable [ rr:tableName "Student" ];
    rr:subjectMap   [ rr:template "http://example.com/{ID}{Name}";
                      rr:class foaf:Person ];
    rr:predicateObjectMap [
        rr:predicate ex:id ;
        rr:objectMap  [ rr:column "ID";
                        rr:datatype xsd:integer ]
    ];
    rr:predicateObjectMap [
        rr:predicate foaf:name ;
        rr:objectMap  [ rr:column "Name" ]
    ].
```

No exemplo anterior, o mapeamento define nós gráficos que friend-of-a-friend mapeiam relacionamentos entre pessoas em uma `Student` tabela.

Para obter mais informações sobre como criar regras de mapeamento de grafos utilizando SPARQL R2RML, consulte a especificação W3C [R2RML: RDB to RDF Mapping Language](https://www.w3.org/TR/r2rml/).

## Tipos de dados para migração de Gremlin e R2RML para o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS executa o mapeamento do tipo de dados do endpoint de origem do SQL para o destino do Neptune de duas maneiras. O modo utilizado depende do formato do mapeamento de grafos utilizado para carregar o banco de dados Neptune: 
+ Apache TinkerPop Gremlin, usando uma representação JSON dos dados de migração.
+ SPARQL do W3C, utilizando uma representação R2RML dos dados de migração. 

Para obter mais informações sobre esses dois formatos de mapeamento de grafos, consulte [Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping).

Veja a seguir descrições dos mapeamentos de tipos de dados para cada formato.

### Mapeamentos de tipos de dados de origem SQL para destino Gremlin
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

A tabela a seguir mostra os mapeamentos de tipos de dados de uma origem SQL para um destino Gremlin formatado. 

AWS DMS mapeia qualquer tipo de dados de origem SQL não listado para um `String` Gremlin.



[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Neptune.html)

Para obter mais informações sobre os tipos de dados do Gremlin para carregamento do Neptune, consulte [Tipos de dados do Gremlin](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes) no *Guia do usuário do Neptune*.

### Mapeamentos de tipos de dados de origem SQL para destino R2RML (RDF)
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

A tabela a seguir mostra os mapeamentos de tipos de dados de uma origem SQL para um destino R2RML formatado.

Todos os tipos de dados RDF listados diferenciam maiúsculas de minúsculas, exceto RDF literal. AWS DMS mapeia qualquer tipo de dados de origem SQL não listado para um literal RDF. 

Um *RDF literal* é uma de muitas formas e tipos de dados lexicais e literais. Para obter mais informações, consulte [RDF Literals](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal) na especificação W3C *Resource Description Framework (RDF): conceitos e sintaxe abstrata*.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Neptune.html)

Para obter mais informações sobre os tipos de dados RDF para carregamento do Neptune e de seus mapeamentos para tipos de dados de origem SQL, consulte [Conversões de tipo de dados](https://www.w3.org/TR/r2rml/#datatype-conversions) na especificação do *W3C R2RML: RDB para linguagem de mapeamento RDF*.

## Limitações da utilização do Amazon Neptune como destino
<a name="CHAP_Target.Neptune.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Neptune como destino:
+ AWS DMS atualmente suporta tarefas de carga total somente para migração para um destino de Neptune. A migração de captura de dados de alterações (CDC) para um destino do Neptune não é compatível.
+ Verifique se o banco de dados Neptune de destino é limpo manualmente de todos os dados antes de iniciar a tarefa de migração, como nos exemplos a seguir.

  Para descartar todos os dados (vértices e bordas) dentro do grafo, execute o seguinte comando do Gremlin.

  ```
  gremlin> g.V().drop().iterate()
  ```

  Para descartar vértices com o rótulo `'customer'`, execute o seguinte comando do Gremlin.

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**nota**  
A remoção de um grande conjunto de dados pode levar algum tempo. Talvez você queira iterar `drop()` com uma limitação, por exemplo, `limit(1000)`.

  Para descartar bordas com o rótulo `'rated'`, execute o seguinte comando do Gremlin.

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**nota**  
A remoção de um grande conjunto de dados pode levar algum tempo. Talvez você queira iterar `drop()` com uma limitação, por exemplo, `limit(1000)`.
+ A operação da API do DMS `DescribeTableStatistics` pode retornar resultados imprecisos sobre determinada tabela devido à natureza das estruturas de dados do grafo do Neptune.

  Durante a migração, AWS DMS verifica cada tabela de origem e usa o mapeamento gráfico para converter os dados de origem em um gráfico de Netuno. Os dados convertidos são armazenados primeiro na pasta de bucket do S3 especificada para o endpoint de destino. Se a origem for verificada e esses dados intermediários do S3 forem gerados com êxito, `DescribeTableStatistics` pressupõe que os dados foram carregados com êxito no banco de dados de destino do Neptune. Entretanto, isso nem sempre é verdade. Para verificar se os dados foram carregados corretamente para determinada tabela, compare os valores de retorno `count()` nas extremidades da migração para essa tabela. 

  No exemplo a seguir, AWS DMS carregou uma `customer` tabela do banco de dados de origem, à qual é atribuído o rótulo `'customer'` no gráfico do banco de dados Neptune de destino. É possível certificar-se de que esse rótulo seja gravado no banco de dados de destino. Para isso, compare o número de linhas do `customer` disponíveis no banco de dados de origem com o número de linhas rotuladas do `'customer'` carregadas no banco de dados de destino do Neptune após a conclusão da tarefa.

  Para obter o número de linhas disponíveis do cliente no banco de dados de origem utilizando SQL, execute o seguinte procedimento.

  ```
  select count(*) from customer;
  ```

  Para obter o número de linhas rotuladas `'customer'` carregadas no grafo do banco de dados de destino utilizando Gremlin, execute o seguinte procedimento.

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ Atualmente, se uma única tabela não for carregada, toda a tarefa falhará. Diferentemente de um banco de dados relacional de destino, os dados no Neptune são altamente conectados, o que torna impossível, em muitos casos, retomar uma tarefa. Se uma tarefa não puder ser retomada com êxito devido a esse tipo de falha de carga de dados, crie uma nova tarefa para carregar a tabela que apresentou falha no carregamento. Antes de executar essa nova tarefa, limpe manualmente a tabela parcialmente carregada do destino do Neptune.
**nota**  
É possível retomar uma tarefa com falha na migração para um destino do Neptune se a falha for recuperável (por exemplo, um erro de trânsito de rede).
+ AWS DMS suporta a maioria dos padrões para R2RML. No entanto, AWS DMS não é compatível com determinados padrões R2RML, incluindo expressões inversas, junções e visualizações. Uma solução alternativa para uma exibição R2RML é criar uma exibição SQL personalizada correspondente no banco de dados de origem. Na tarefa de migração, utilize o mapeamento de tabela para escolher a exibição como entrada. Mapeie a exibição para uma tabela que seja então consumida pelo R2RML para gerar dados de grafo.
+ Ao migrar dados de origem com tipos de dados SQL não é compatível com dos, os dados de destino resultantes podem ter perda de precisão. Para obter mais informações, consulte [Tipos de dados para migração de Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.DataTypes).
+ AWS DMS não suporta a migração de dados LOB para um destino do Neptune.

# Usando o Redis OSS como alvo para AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

O Redis OSS é um armazenamento de estrutura de dados de código aberto em memória utilizado como um banco de dados, cache e agente de mensagens. O gerenciamento de dados na memória pode resultar em operações de leitura ou gravação que demoram menos de um milissegundo e centenas de milhões de operações executadas a cada segundo. Como um datastore em memória, o Redis OSS capacita as aplicações que exigem tempos de resposta inferiores a um milissegundo.

Usando AWS DMS, você pode migrar dados de qualquer banco de dados de origem compatível para um armazenamento de dados Redis OSS de destino com o mínimo de tempo de inatividade. Para ter informações adicionais sobre o Redis OSS, consulte a [documentação do Redis OSS](https://redis.io/documentation).

Além do Redis OSS local, AWS Database Migration Service oferece suporte ao seguinte:
+ [Amazon ElastiCache (Redis OSS) como armazenamento](https://aws.amazon.com/elasticache/redis/) de dados de destino. ElastiCache (Redis OSS) trabalha com seus clientes do Redis OSS e usa o formato de dados aberto do Redis OSS para armazenar seus dados.
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) como datastore de destino. O MemoryDB é compatível com o Redis OSS e permite que você crie aplicativos usando todas as estruturas de dados e comandos do Redis OSS em uso atualmente APIs.

Para obter informações adicionais sobre como trabalhar com o Redis OSS como alvo AWS DMS, consulte as seções a seguir: 

**Topics**
+ [Pré-requisitos para usar um cluster Redis OSS como destino para AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [Limitações ao usar o Redis como alvo para AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [Migrar dados de um banco de dados relacional ou não relacional para um destino do Redis OSS](#CHAP_Target.Redis.Migrating)
+ [Especificar as configurações de endpoint para o Redis OSS como destino](#CHAP_Target.Redis.EndpointSettings)

## Pré-requisitos para usar um cluster Redis OSS como destino para AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

O DMS é compatível com um destino do Redis OSS on-premises em uma configuração independente ou como um cluster do Redis OSS em que os dados são automaticamente *fragmentados* em vários nós. A fragmentação é o processo de separar os dados em blocos menores, chamados de fragmentos, que são espalhados por vários servidores ou nós. Na verdade, um fragmento é uma partição de dados que contém um subconjunto do conjunto total de dados e serve como uma fatia da workload geral.

Como o Redis OSS é um datastore NoSQL de chave/valor, a convenção de nomenclatura de chaves do Redis OSS a ser utilizada quando a origem for um banco de dados relacional é **schema-name.table-name.primary-key**. No Redis OSS, a chave e o valor não devem conter o caractere especial %. Caso contrário, o DMS ignorará o registro. 

**nota**  
Se você estiver usando ElastiCache (Redis OSS) como destino, o DMS suporta somente configurações *habilitadas para o modo de cluster*. Para obter mais informações sobre o uso do ElastiCache (Redis OSS) versão 6.x ou superior para criar um armazenamento de dados de destino habilitado para o modo de cluster, consulte [Introdução](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html) no Guia do usuário da *Amazon ElastiCache (Redis OSS*). 

Antes de começar a migração de um banco de dados, inicie o cluster do Redis OSS com os seguintes critérios.
+ O cluster tem um ou mais fragmentos.
+ Se você estiver usando um destino ElastiCache (Redis OSS), certifique-se de que seu cluster não use o controle de acesso baseado em funções do IAM. Em vez disso, utilize o Redis OSS Auth para autenticar usuários.
+ Ative multi-AZ (zonas de disponibilidade).
+ Verifique se o cluster tem memória suficiente disponível para comportar os dados a serem migrados do banco de dados. 
+ Verifique se todos os dados do cluster do Redis OSS de destino estão limpos antes de iniciar a tarefa de migração inicial.

Determine os requisitos de segurança da migração de dados antes de criar a configuração do cluster. O DMS é compatível com a migração para grupos de replicação de destino, independentemente de sua configuração de criptografia. Mas é possível ativar ou desativar a criptografia somente ao criar a configuração do cluster.

## Limitações ao usar o Redis como alvo para AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Redis OSS como destino:
+ Como o Redis OSS é um datastore no-sql de chave/valor, a convenção de nomenclatura de chaves do Redis OSS a ser utilizada quando a origem for um banco de dados relacional é `schema-name.table-name.primary-key`. 
+ No Redis OSS, a chave/valor não pode conter o caractere especial `%`. Caso contrário, o DMS ignorará o registro.
+ O DMS não migrará linhas que contenham o caractere `%`.
+ O DMS não migrará campos que contenham o caractere `%` no nome do campo.
+ O modo Full LOB não é compatível.
+  Não há suporte para uma Autoridade de Certificação (CA) privada ao usar ElastiCache (Redis OSS) como destino.
+ AWS DMS não oferece suporte a dados de origem contendo `'\0'` caracteres incorporados ao usar o Redis como um endpoint de destino. Os dados contendo `'\0'` caracteres incorporados serão truncados no primeiro `'\0'` caractere.

## Migrar dados de um banco de dados relacional ou não relacional para um destino do Redis OSS
<a name="CHAP_Target.Redis.Migrating"></a>

É possível migrar dados de qualquer datastore SQL ou NoSQL de origem diretamente para um destino do Redis OSS. A configuração e o início de uma migração para um destino do Redis OSS é semelhante a qualquer migração de carga máxima e de captura de dados de alteração utilizando o console ou a API do DMS. Para executar uma migração de banco de dados para um destino do Redis OSS, faça o seguinte.
+ Crie uma instância de replicação para executar todos os processos da migração. Para obter mais informações, consulte [Criar uma instância de replicação](CHAP_ReplicationInstance.Creating.md).
+ Especifique um endpoint de origem. Para obter mais informações, consulte [Criar endpoints de origem e de destino](CHAP_Endpoints.Creating.md).
+ Localize o nome DNS e o número da porta do cluster.
+ Baixe um pacote de certificado que pode ser utilizado para verificar conexões SSL.
+ Especifique um endpoint de destino, conforme descrito abaixo.
+ Crie uma tarefa ou um conjunto de tarefas para definir as tabelas e os processos de replicação a serem utilizados. Para obter mais informações, consulte [Criar uma tarefa](CHAP_Tasks.Creating.md).
+ Migre dados do banco de dados de origem para o cluster de destino.

Você inicia uma migração do banco de dados de uma duas maneiras:

1. Você pode escolher o AWS DMS console e executar cada etapa lá.

1. Você pode usar o AWS Command Line Interface (AWS CLI). [Para obter mais informações sobre como usar a CLI com AWS DMS, consulte AWS CLI . AWS DMS](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)

**Como localizar o nome DNS e o número da porta do cluster**
+ Use o AWS CLI comando a seguir para `replication-group-id` fornecer o nome do seu grupo de replicação.

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  Aqui, a saída mostra o nome DNS no atributo `Address` e o número da porta no atributo `Port` do nó primário no cluster. 

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  Se estiver utilizando o MemoryDB como destino, utilize o comando da AWS CLI a seguir para fornecer um endereço de endpoint ao cluster do Redis OSS. 

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**Baixe um pacote de certificado a ser utilizado para verificar as conexões SSL.**
+ Insira o comando `wget` na linha de comando. O Wget é uma ferramenta utilitária de linha de comando GNU gratuita utilizada para baixar arquivos na internet.

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  Aqui, `aws-api-domain` preenche o domínio do Amazon S3 em AWS sua região necessário para acessar o bucket do S3 especificado e rds-combined-ca-bundle o arquivo.pem que ele fornece.

**Para criar um endpoint de destino usando o console AWS DMS**

Esse endpoint é para o destino do Redis OSS que já está em execução. 
+ No console, escolha **Endpoints** no painel de navegação e escolha **Criar endpoint**. A tabela a seguir descreve as configurações.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Redis.html)

Depois de você concluir o fornecimento de todas as informações do endpoint, o AWS DMS cria o endpoint de destino do Redis OSS para utilização durante a migração do banco de dados.

Para obter informações sobre como criar uma tarefa de migração e iniciar a migração do banco de dados, consulte [Criar uma tarefa](CHAP_Tasks.Creating.md).

## Especificar as configurações de endpoint para o Redis OSS como destino
<a name="CHAP_Target.Redis.EndpointSettings"></a>

Para criar ou modificar um endpoint de destino, é possível usar o console `CreateEndpoint` ou as operações de API `ModifyEndpoint`. 

**Para um destino do Redis OSS no AWS DMS console, especifique as **configurações específicas do endpoint na página Criar endpoint** **ou Modificar o console do endpoint**.**

Ao utilizar as operações da API `CreateEndpoint` e `ModifyEndpoint`, especifique os parâmetros de solicitação para a opção `RedisSettings`. O exemplo a seguir mostra como fazer isso utilizando a AWS CLI.

```
aws dms create-endpoint --endpoint-identifier my-redis-target
--endpoint-type target --engine-name redis --redis-settings 
'{"ServerName":"sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com","Port":6379,"AuthType":"auth-token", 
 "SslSecurityProtocol":"ssl-encryption", "AuthPassword":"notanactualpassword"}'

{
    "Endpoint": {
        "EndpointIdentifier": "my-redis-target",
        "EndpointType": "TARGET",
        "EngineName": "redis",
        "EngineDisplayName": "Redis",
        "TransferFiles": false,
        "ReceiveTransferredFiles": false,
        "Status": "active",
        "KmsKeyId": "arn:aws:kms:us-east-1:999999999999:key/x-b188188x",
        "EndpointArn": "arn:aws:dms:us-east-1:555555555555:endpoint:ABCDEFGHIJKLMONOPQRSTUVWXYZ",
        "SslMode": "none",
        "RedisSettings": {
            "ServerName": "sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com",
            "Port": 6379,
            "SslSecurityProtocol": "ssl-encryption",
            "AuthType": "auth-token"
        }
    }
}
```

Os parâmetros `--redis-settings` são os seguintes:
+ `ServerName`: (obrigatório) do tipo `string`, especifica o cluster do Redis OSS para o qual os dados serão migrados e está na sua mesma VPC.
+ `Port`: (obrigatório) do tipo `number`, o valor da porta utilizada para acessar o endpoint.
+ `SslSecurityProtocol`: (opcional) os valores válidos incluem `plaintext` e `ssl-encryption`. O padrão é `ssl-encryption`. 

  A opção `plaintext` não fornece a criptografia Transport Layer Security (TLS) para o tráfego entre o endpoint e o banco de dados. 

  Utilize `ssl-encryption` para fazer uma conexão criptografada. `ssl-encryption` não exige o ARN de uma Autoridade de Certificação (CA) SSL para verificar o certificado de um servidor, mas um pode ser identificado opcionalmente utilizando a configuração `SslCaCertificateArn`. Se o ARN de autoridade de certificação não for fornecido, o DMS utilizará a CA raiz da Amazon.

  Ao utilizar um destino do Redis OSS on-premises, é possível utilizar `SslCaCertificateArn` para importar a Autoridade de Certificação (CA) pública ou privada para o DMS e fornecer esse ARN para autenticação do servidor. Não há suporte para uma CA privada ao usar ElastiCache (Redis OSS) como destino.
+ `AuthType`: (obrigatório) indica o tipo de autenticação a ser executada ao conectar-se ao Redis OSS. Os valores válidos são `none`, `auth-token` e `auth-role`.

  A `auth-token` opção exige que um "*AuthPassword*" seja fornecido, enquanto a `auth-role` opção exige que *AuthUserName* "" e *AuthPassword* "” sejam fornecidos.

# Usando o Babelfish como alvo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish"></a>

Você pode migrar dados de um banco de dados de origem do Microsoft SQL Server para um destino do Babelfish usando o. AWS Database Migration Service

O Babelfish for Aurora PostgreSQL amplia seu banco de dados Amazon Aurora, edição compatível com PostgreSQL, com a capacidade de aceitar conexões de banco de dados provenientes de clientes Microsoft SQL Server. Fazer isso permite que aplicações originalmente criadas para o SQL Server funcionem diretamente com o Aurora PostgreSQL, com poucas alterações de código em comparação com uma migração tradicional e sem alterar drivers de bancos de dados. 

Para obter informações sobre as versões do Babelfish que são AWS DMS suportadas como alvo, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md) As versões anteriores do Babelfish no Aurora PostgreSQL exigem um upgrade antes de utilizar o endpoint do Babelfish.

**nota**  
O endpoint de destino do Aurora PostgreSQL é a forma preferida de migrar dados para o Babelfish. Para obter mais informações, consulte [Utilizar o Babelfish para Aurora PostgreSQL como destino](CHAP_Target.PostgreSQL.md#CHAP_Target.PostgreSQL.Babelfish). 

Para obter informações sobre como utilizar o Babelfish como um endpoint de banco de dados, consulte [Babelfish para Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) no *Guia do usuário do Amazon Aurora para Aurora* 

## Pré-requisitos para usar o Babelfish como alvo para AWS DMS
<a name="CHAP_Target.Babelfish.Prerequisites"></a>

Você deve criar suas tabelas antes de migrar dados para garantir que AWS DMS usa os tipos de dados e metadados de tabela corretos. Se você não criar suas tabelas no destino antes de executar a migração, AWS DMS poderá criar as tabelas com tipos de dados e permissões incorretos. Por exemplo, em vez disso, AWS DMS cria uma coluna de carimbo de data/hora como binária (8) e não fornece a funcionalidade esperada timestamp/rowversion .

**Como preparar e criar as tabelas antes da migração**

1. Execute as instruções DDL de criação de tabela que incluam quaisquer restrições exclusivas, chaves primárias ou restrições padrão. 

   Não inclua restrições de chave estrangeira nem instruções DDL para objetos, como visualizações, procedimentos armazenados, perfis ou acionadores. É possível aplicá-las depois de migrar o banco de dados de origem.

1. Identifique quaisquer colunas de identidade, colunas computadas ou colunas contendo tipos de dados rowversion ou timestamp nas tabelas. Crie as regras de transformação necessárias para lidar com problemas conhecidos ao executar a tarefa de migração. Para ter mais informações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

1. Identifique colunas com tipos de dados não compatíveis com o Babelfish. Altere as colunas afetadas na tabela de destino para utilizar os tipos de dados compatíveis ou crie uma regra de transformação que os remova durante a tarefa de migração. Para ter mais informações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

   A tabela a seguir lista os tipos de dados de origem não compatíveis com o Babelfish e o tipo de dados de destino recomendado correspondente a ser utilizado.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Babelfish.html)

**Para definir o nível de unidades de capacidade do Aurora (ACUs) para seu banco de dados de origem do Aurora PostgreSQL Serverless V2**

Você pode melhorar o desempenho da sua tarefa de AWS DMS migração antes de executá-la definindo o valor mínimo de ACU.
+ Na janela de **configurações de capacidade do Severless v2**, ACUs defina **Mínimo** **2** ou um nível razoável para seu cluster de banco de dados Aurora.

  Para obter mais informações sobre as unidades de capacidade do Aurora, consulte [Escolher o intervalo de capacidade do Aurora Sem Servidor v2 para um cluster do Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html) no *Guia do usuário do Amazon Aurora*. 

Depois de executar sua tarefa de AWS DMS migração, você pode redefinir o valor mínimo ACUs para um nível razoável para seu banco de dados de origem do Aurora PostgreSQL Serverless V2.

## Requisitos de segurança ao usar o Babelfish como alvo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Security"></a>

O seguinte descreve os requisitos de segurança para uso AWS DMS com um alvo Babelfish:
+ O nome de usuário do administrador (o usuário administrador) utilizado para criar o banco de dados.
+ Login e usuário do PSQL com permissões suficientes para SELECT, INSERT, UPDATE, DELETE e REFERENCES.

## Permissões de usuário para usar o Babelfish como alvo para AWS DMS
<a name="CHAP_Target.Babelfish.Permissions"></a>

**Importante**  
Para fins de segurança, a conta de usuário utilizada para a migração de dados deve ser um usuário registrado em qualquer banco de dados Babelfish que você utilize como destino.

O endpoint de destino do Babelfish requer permissões mínimas de usuário para executar uma migração do AWS DMS .

**Como criar um login e um usuário do Transact-SQL (T-SQL) com poucos privilégios**

1. Crie um login e uma senha a serem utilizados ao se conectar ao servidor.

   ```
   CREATE LOGIN dms_user WITH PASSWORD = 'password';
   GO
   ```

1. Crie o banco de dados virtual para o cluster do Babelfish.

   ```
   CREATE DATABASE my_database;
   GO
   ```

1. Crie o usuário T-SQL para o banco de dados de destino.

   ```
   USE my_database
   GO
   CREATE USER dms_user FOR LOGIN dms_user;
   GO
   ```

1. Para cada tabela no banco de dados Babelfish, permissões de GRANT para as tabelas.

   ```
   GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;  
   ```

## Limitações no uso do Babelfish como alvo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Limitations"></a>

As seguintes limitações se aplicam à utilização de um banco de dados Babelfish como destino do AWS DMS:
+ Somente o modo de preparação de tabela “**Não executar nenhuma ação**” é compatível.
+ O tipo de dados ROWVERSION exige uma regra de mapeamento de tabela que remove o nome da coluna da tabela durante a tarefa de migração.
+ O tipo de dados sql\$1variant não é compatível.
+ O modo LOB completo é compatível. Usar o SQL Server como um endpoint de origem exige que a configuração `ForceFullLob=True` do Atributo de Conexão do Endpoint do SQL Server seja definida para LOBs ser migrada para o endpoint de destino.
+ As configurações da tarefa de replicação têm as seguintes limitações:

  ```
  {
     "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        }.
      
  }
  ```
+ Os tipos de dados TIME DATETIME2 (7), (7) e DATETIMEOFFSET (7) no Babelfish limitam o valor de precisão da parte de segundos do tempo a 6 dígitos. Considere utilizar um valor de precisão de seis para a tabela de destino ao utilizar esses tipos de dados. Para as versões 2.2.0 e superiores do Babelfish, ao usar TIME (7) e DATETIME2 (7), o sétimo dígito de precisão é sempre zero.
+ No modo DO\$1NOTHING, o DMS verifica se a tabela já existe. Se a tabela não existir no esquema de destino, o DMS criará a tabela com base na definição da tabela de origem e mapeará todos os tipos de dados definidos pelo usuário para o tipo de dados base.
+ Uma tarefa de AWS DMS migração para um destino do Babelfish não suporta tabelas que tenham colunas usando os tipos de dados ROWVERSION ou TIMESTAMP. É possível utilizar uma regra de mapeamento de tabela que remove o nome da coluna da tabela durante o processo de transferência. No exemplo de regra de transformação a seguir, uma tabela nomeada `Actor` na origem é transformada para remover todas as colunas que começam com os caracteres `Actor` da tabela `col` no destino.

  ```
  {
   	"rules": [{
  		"rule-type": "selection",is 
  		"rule-id": "1",
  		"rule-name": "1",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "%"
  		},
  		"rule-action": "include"
  	}, {
  		"rule-type": "transformation",
  		"rule-id": "2",
  		"rule-name": "2",
  		"rule-action": "remove-column",
  		"rule-target": "column",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "Actor",
  			"column-name": "col%"
  		}
  	}]
   }
  ```
+ Para tabelas com colunas de identidade ou computadas, em que as tabelas de destino utilizam nomes com maiúsculas e minúsculas, como Categorias, crie uma ação de regra de transformação que converta os nomes das tabelas em minúsculas para a tarefa do DMS. O exemplo a seguir mostra como criar a ação da regra de transformação, **Make lowercase**, usando o AWS DMS console. Para obter mais informações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).  
![\[Regra de transformação do Babelfish\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-babelfish-transform-1.png)
+ Antes da versão 2.2.0 do Babelfish, o DMS limitava o número de colunas que você podia replicar para um endpoint de destino do Babelfish a vinte colunas. Com o Babelfish 2.2.0, o limite aumentou para cem colunas. Mas com as versões 2.4.0 e superiores do Babelfish, o número de colunas que é possível replicar aumenta novamente. É possível executar o exemplo de código a seguir no banco de dados SQL Server para determinar quais tabelas são muito longas.

  ```
  USE myDB;
  GO
  DECLARE @Babelfish_version_string_limit INT = 8000; -- Use 380 for Babelfish versions before 2.2.0
  WITH bfendpoint
  AS (
  SELECT 
  	[TABLE_SCHEMA]
        ,[TABLE_NAME]
  	  , COUNT( [COLUMN_NAME] ) AS NumberColumns
  	  , ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  AS InsertIntoCommandLength -- values string
        , CASE WHEN ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  -- values string
  			>= @Babelfish_version_string_limit
  			THEN 1
  			ELSE 0
  		END AS IsTooLong
  FROM [INFORMATION_SCHEMA].[COLUMNS]
  GROUP BY [TABLE_SCHEMA], [TABLE_NAME]
  )
  SELECT * 
  FROM bfendpoint
  WHERE IsTooLong = 1
  ORDER BY TABLE_SCHEMA, InsertIntoCommandLength DESC, TABLE_NAME
  ;
  ```

## Tipos de dados de destino do Babelfish
<a name="CHAP_Target.Babelfish.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do Babelfish que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md). 


|  AWS DMS tipo de dados  |  Tipo de dados do Babelfish   | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(tamanho)  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INT  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  NUMERIC(p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  |  FLOAT  | 
|  STRING  |  Se a coluna for de data ou hora, faça o seguinte:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Babelfish.html) Se a coluna não é uma data ou hora, use VARCHAR (tamanho).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR(tamanho)  | 
|  BLOB  |  VARBINARY(máximo) Para usar esse tipo de dados com o DMS, você deve habilitar o uso de BLOBs para uma tarefa específica. O DMS é compatível com os tipos de dados BLOB somente em tabelas que possuem uma chave primária.  | 
|  CLOB  |  VARCHAR(máximo) Para usar esse tipo de dados com o DMS, você deve habilitar o uso de CLOBs para uma tarefa específica.  | 
|  NCLOB  |  NVARCHAR(máximo) Para usar esse tipo de dados com o DMS, você deve habilitar o uso de NCLOBs para uma tarefa específica. Durante a CDC, o DMS é compatível com os tipos de dados NCLOB somente em tabelas que incluem uma chave primária.  | 

# Usando o Amazon Timestream como alvo para AWS Database Migration Service
<a name="CHAP_Target.Timestream"></a>

Você pode usar AWS Database Migration Service para migrar dados do seu banco de dados de origem para um endpoint de destino do Amazon Timestream, com suporte para migrações de dados Full Load e CDC.

O Amazon Timestream é um serviço de banco de dados de séries temporais rápido, escalável e sem servidor criado para ingestão de dados de alto volume. Dados de séries temporais são uma sequência de pontos de dados coletados em um intervalo de tempo; eles são usados para medir eventos que mudam com o tempo. Ele é usado para coletar, armazenar e analisar métricas de aplicativos, DevOps aplicativos e aplicativos de análise de IoT. Assim que seus dados estiverem no Timestream, você poderá visualizar e identificar tendências e padrões nesses dados quase em tempo real. Para obter mais informações sobre o Amazon Timestream, consulte [What is Amazon Timestream?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) no *Guia do desenvolvedor do Amazon Timestream*.

**Topics**
+ [Pré-requisitos para usar o Amazon Timestream como alvo para AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [Configurações da tarefa de carga máxima com vários threads](#CHAP_Target.Timestream.FLTaskSettings)
+ [Configurações da tarefa de carga de CDC multithread](#CHAP_Target.Timestream.CDCTaskSettings)
+ [Configurações de endpoint ao usar o Timestream como destino para AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [Criar e modificar um endpoint de destino do Amazon Timestream](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [Utilizar o mapeamento de objetos para migrar dados para um tópico do Timestream](#CHAP_Target.Timestream.ObjectMapping)
+ [Limitações ao usar o Amazon Timestream como alvo para AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

## Pré-requisitos para usar o Amazon Timestream como alvo para AWS Database Migration Service
<a name="CHAP_Target.Timestream.Prerequisites"></a>

Antes de configurar o Amazon Timestream como destino AWS DMS para, certifique-se de criar uma função do IAM. Essa função deve permitir AWS DMS o acesso aos dados que estão sendo migrados para o Amazon Timestream. O conjunto mínimo de permissões de acesso para o perfil que você usa para migrar para o Timestream é mostrado na política do IAM a seguir.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDescribeEndpoints",
      "Effect": "Allow",
      "Action": [
        "timestream:DescribeEndpoints"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "timestream:ListTables",
        "timestream:DescribeDatabase"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "timestream:DeleteTable",
        "timestream:WriteRecords",
        "timestream:UpdateTable",
        "timestream:CreateTable"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME/table/TABLE_NAME"
    }
  ]
}
```

------

Se você pretende migrar todas as tabelas, use `*` for *TABLE\$1NAME* no exemplo acima.

Observe o seguinte sobre o uso do Timestream como destino:
+ Se você pretende ingerir dados históricos com carimbos de data e hora superiores a um ano, recomendamos usar o AWS DMS para gravar os dados no Amazon S3 em um formato de valor separado por vírgula (csv). Em seguida, use o carregamento em lote do Timestream para ingerir os dados no Timestream. Para obter mais informações, consulte [Using batch load in Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html) no [Guia do desenvolvedor do Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).
+ Para migrações de carga máxima de dados com menos de um ano, recomendamos definir o período de retenção do armazenamento de memória da tabela do Timestream com um valor superior ou igual ao carimbo de data e hora mais antigo. Depois que a migração for concluída, mude a retenção do armazenamento de memória da tabela para o valor desejado. Por exemplo, para migrar dados quando o carimbo de data e hora mais antigo é de dois meses, faça o seguinte:
  + Defina a retenção do armazenamento de memória da tabela de destino do Timestream para dois meses.
  + Inicie a migração de dados usando AWS DMS o.
  + Quando a migração de dados for concluída, altere o período de retenção da tabela do Timestream de destino para o valor desejado. 

   Recomendamos estimar o custo do armazenamento de memória antes da migração, usando as informações nas seguintes páginas:
  + [Amazon Timestream pricing](https://aws.amazon.com/timestream/pricing)
  + [AWS calculadora de preços](https://calculator.aws/#/addService) 
+ Para migrações de dados de CDC, recomendamos definir o período de retenção do armazenamento de memória da tabela de destino de forma que os dados ingeridos estejam dentro dos limites de retenção do armazenamento de memória. Para obter mais informações, consulte [Best Practices: Writes](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html) no [Guia do desenvolvedor do Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).

## Configurações da tarefa de carga máxima com vários threads
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

Para ajudar a aumentar a velocidade da transferência de dados, AWS DMS oferece suporte a uma tarefa de migração de carga total multiencadeada para um endpoint de destino do Timestream com estas configurações de tarefa:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela na tabela de destino correspondente do Amazon Timestream usando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em sua tabela de destino do Amazon Timestream. O valor máximo de um destino do Timestream é 32. Você pode solicitar o aumento desse limite máximo.
+ `ParallelLoadBufferSize`: utilize esta opção para especificar o número máximo de registros a serem armazenados no buffer utilizado pelos threads de carregamento paralelo para carregar dados no destino do Amazon Timestream. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ `ParallelLoadQueuesPerThread`: utilize esta opção para especificar o número de filas que cada thread simultâneo acessa para extrair registros de dados das filas e gerar uma carga em lote para o destino. O padrão é um. No entanto, para destinos do Amazon Timestream de vários tamanhos de carga útil, o intervalo válido é de 5 a 512 filas por thread.

## Configurações da tarefa de carga de CDC multithread
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos AWS DMS usados durante o carregamento do CDC para enviar registros de dados para um endpoint de destino do Timestream. O valor padrão é 0 e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para os threads simultâneos enviarem a um endpoint de destino do Timestream durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para extrair registros de dados das filas e gerar um carregamento em lote para um endpoint do Timestream durante a CDC. O valor padrão é 1 e o valor máximo é 512.

## Configurações de endpoint ao usar o Timestream como destino para AWS DMS
<a name="CHAP_Target.Timestream.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do Timestream de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Timestream como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Timestream.html)

## Criar e modificar um endpoint de destino do Amazon Timestream
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

Depois de criar uma função do IAM e estabelecer o conjunto mínimo de permissões de acesso, você pode criar um endpoint de destino do Amazon Timestream usando AWS DMS o console ou usando o comando no, com `create-endpoint` a sintaxe [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)JSON. `--timestream-settings '{"EndpointSetting": "value", ...}'`

Os exemplos a seguir mostram como criar e modificar um endpoint de destino do Timestream usando a AWS CLI.

**Criar comando do endpoint de destino do Timestream**

```
aws dms create-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "DatabaseName":"db_name",
    "MagneticDuration": 3,
    "CdcInsertsAndUpdates": true,
    "EnableMagneticStoreWrites": true,
}
```

**Modificar comando do endpoint de destino do Timestream**

```
aws dms modify-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "MagneticDuration": 3,
}
```

## Utilizar o mapeamento de objetos para migrar dados para um tópico do Timestream
<a name="CHAP_Target.Timestream.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabela para mapear dados da fonte para o tópico do Timestream de destino. Para mapear dados para um tópico de destino, utilize um tipo de regra de mapeamento de tabelas chamado mapeamento de objetos. Utilize o mapeamento de objetos para definir como os registros de dados na origem são correlacionados com os registros de dados publicados em um tópico do Timestream. 

Os tópicos do Timestream não têm uma estrutura predefinida, exceto uma chave de partição.

**nota**  
Não é necessário utilizar o mapeamento de objetos. É possível utilizar o mapeamento de tabela normal para várias transformações. No entanto, o tipo de chave de partição seguirá estes comportamentos padrão:   
A chave primária é utilizada como uma chave de partição para a carga máxima.
Se nenhuma configuração de tarefas de aplicação paralela for utilizada, `schema.table` será usada como uma chave de partição para a CDC.
Se as configurações de tarefas de aplicação paralela forem utilizadas, a chave primária será utilizada como uma chave de partição para a CDC.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como `object-mapping`. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. A estrutura da regra é a seguinte:

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```



```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "timestream-map",
            "rule-action": "map-record-to-record",
            "target-table-name": "tablename",
            "object-locator": {
                "schema-name": "",
                "table-name": ""
            },
            "mapping-parameters": {
                "timestream-dimensions": [
                    "column_name1",
                     "column_name2"
                ],
                "timestream-timestamp-name": "time_column_name",
                "timestream-multi-measure-name": "column_name1or2",
                "timestream-hash-measure-name":  true or false,
                "timestream-memory-duration": x,
                "timestream-magnetic-duration": y
            }
        }
    ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Os `map-record-to-document` valores `map-record-to-record` e especificam o que AWS DMS acontece por padrão com registros que não são excluídos como parte da lista de `exclude-columns` atributos. Esses valores não afetam os mapeamentos de atributos de forma alguma. 

Utilize `map-record-to-record` ao migrar de um banco de dados relacional para um tópico do Timestream. Esse tipo de regra utiliza o valor `taskResourceId.schemaName.tableName` encontrado no banco de dados relacional como a chave de partição no tópico do Timestream e cria um atributo para cada coluna no banco de dados de origem. Ao usar`map-record-to-record`, para qualquer coluna na tabela de origem não listada na lista de `exclude-columns` atributos, AWS DMS cria um atributo correspondente no tópico de destino. Este atributo correspondente é criado, independentemente de a coluna de origem ser usada ou não em um mapeamento de atributos. 

Uma maneira de compreender o `map-record-to-record` é vê-lo em ação. Para este exemplo, suponha que você está começando com uma linha de tabela do banco de dados relacional com a seguinte estrutura de dados:


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 29/02/1988 | 

Para migrar essas informações de um esquema chamado `Test` para um tópico do Timestream, crie regras para correlacionar os dados com o tópico de destino. A regra a seguir ilustra o mapeamento. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToTimestream",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Com um tópico do Timestream e uma chave de partição determinados (neste caso, `taskResourceId.schemaName.tableName`), o seguinte ilustra o formato do registro resultante utilizando os nossos exemplos de dados no tópico de destino do Timestream: 

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

## Limitações ao usar o Amazon Timestream como alvo para AWS Database Migration Service
<a name="CHAP_Target.Timestream.Limitations"></a>

As seguintes limitações se aplicam ao utilizar o Amazon Timestream como destino:
+ **Dimensões e carimbos de data e hora**: o Timestream usa as dimensões e os carimbos de data e hora nos dados de origem como uma chave primária composta e também não permite que você altere esses valores. Isso significa que, se você alterar o carimbo de data e hora ou as dimensões de um registro no banco de dados de origem, o banco de dados do Timestream tentará criar um registro. Portanto, é possível que, se você alterar a dimensão ou o timestamp de um registro de forma que correspondam aos de outro registro existente, AWS DMS atualize os valores do outro registro em vez de criar um novo registro ou atualizar o registro correspondente anterior.
+ **Comandos DDL:** A versão atual AWS DMS só suporta `CREATE TABLE` e comandos `DROP TABLE` DDL.
+ **Limitações de registro**: o Timestream tem limitações para registros, como tamanho do registro e tamanho da medida. Para obter mais informações, consulte [Cotas](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) no [Guia do desenvolvedor do Amazon Timestream](https://docs.aws.amazon.com/).
+ **Exclusão de registros e valores nulos**: o Timestream não comporta exclusão de registros. Para oferecer suporte à migração de registros excluídos da fonte, AWS DMS limpa os campos correspondentes nos registros no banco de dados de destino do Timestream. AWS DMS altera os valores nos campos do registro de destino correspondente com **0** para campos numéricos, **nulo** para campos de texto e **falso** para campos booleanos.
+ O Timestream como destino não aceita origens que não sejam bancos de dados relacionais (RDBMS).
+ AWS DMS só oferece suporte ao Timestream como destino nas seguintes regiões:
  + Leste dos EUA (Norte da Virgínia)
  + Leste dos EUA (Ohio)
  + Oeste dos EUA (Oregon)
  + Europa (Irlanda)
  + Europa (Frankfurt)
  + Ásia-Pacífico (Sydney)
  + Ásia-Pacífico (Tóquio)
+ O Timestream como destino não aceita que a configuração de `TargetTablePrepMode` como `TRUNCATE_BEFORE_LOAD`. É recomendável não usar essa configuração.

# Usando o Amazon RDS para Db2 e o IBM Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2"></a>

Você pode migrar dados para um Amazon RDS for Db2 ou um banco de dados Db2 local de um banco de dados Db2 LUW usando (). AWS Database Migration Service AWS DMS

Para obter informações sobre as versões do Db2 LUW que oferecem AWS DMS suporte como destino, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md)

É possível utilizar SSL para criptografar conexões entre o endpoint do Db2 LUW e a instância de replicação. Para obter mais informações sobre a utilização de SSL com um endpoint do Db2 LUW, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md).

## Limitações ao usar o Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2.Limitations"></a>

As limitações a seguir se aplicam ao usar o banco de dados Db2 LUW como destino para. AWS DMS Para conhecer as limitações de uso do Db2 LUW como origem, consulte [Limitações ao usar o Db2 LUW como fonte para AWS DMS](CHAP_Source.DB2.md#CHAP_Source.DB2.Limitations).
+ AWS DMS só oferece suporte ao Db2 LUW como destino quando a origem é Db2 LUW ou Db2 for z/OS.
+ Quando usado como destino, o Db2 LUW não comporta replicações com o modo LOB completo.
+ Ele também não comporta o tipo de dados XML na fase de carregamento completo. Essa é uma limitação do utilitário dbload da IBM. Para obter mais informações, consulte [IBM ](https://www.ibm.com/docs/en/informix-servers/14.10?topic=utilities-dbload-utility) na documentação *IBM Informix Servers*.
+ AWS DMS trunca campos BLOB com valores correspondentes ao caractere de aspas duplas (“). Essa é uma limitação do utilitário dbload da IBM. 
+ AWS DMS não suporta a opção parallel full load ao migrar para um destino Db2 LUW no DMS versão 3.5.3. Essa opção está disponível no DMS versão 3.5.4 ou posterior.

## Configurações de endpoint ao usar o Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o destino do Db2 LUW de maneira semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--ibm-db2-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoints que é possível utilizar com o Db2 LUX como destino.


| Name (Nome) | Description | 
| --- | --- | 
|  `KeepCsvFiles`  |  Se verdadeiro, AWS DMS salva todos os arquivos.csv no destino Db2 LUW que foram usados para replicar dados. O DMS usa esses arquivos para análise e solução de problemas.  | 
|  `LoadTimeout`  |  A quantidade de tempo (em milissegundos) antes do AWS DMS tempo limite das operações executadas pelo DMS no destino do Db2. O valor padrão é 1.200 (20 minutos).  | 
|  `MaxFileSize`  |  Especifica o tamanho máximo (em KB) dos arquivos .csv usados para transferir dados para o Db2 LUW.  | 
|  `WriteBufferSize`  |  O tamanho (em KB) do buffer de gravação de arquivo na memória usado ao gerar arquivos .csv no disco local na instância de replicação do DMS. O valor padrão é 1.024 (1 MB).  | 