

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Destinazioni per la migrazione dei dati
<a name="CHAP_Target"></a>

AWS Database Migration Service (AWS DMS) può utilizzare molti dei database più diffusi come destinazione per la replica dei dati. La destinazione può trovarsi su un'istanza Amazon Elastic Compute Cloud (Amazon EC2), un'istanza Amazon Relational Database Service (Amazon RDS) o un database locale. 

Per l'elenco completo delle destinazioni valide, consulta [Destinazioni per AWS DMS](CHAP_Introduction.Targets.md).

**Nota**  
AWS DMS non supporta la migrazione tra AWS regioni per i seguenti tipi di endpoint di destinazione:  
Amazon DynamoDB
 OpenSearch Servizio Amazon
Flusso di dati Amazon Kinesis
Amazon Aurora PostgreSQL Limitless è disponibile come destinazione per (). AWS Database Migration Service AWS DMS Per ulteriori informazioni, vedere [Utilizzo di un database PostgreSQL come destinazione](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) per. AWS Database Migration Service

**Topics**
+ [Utilizzo di un database Oracle come destinazione per AWS Database Migration Service](CHAP_Target.Oracle.md)
+ [Utilizzo di un database Microsoft SQL Server come destinazione per AWS Database Migration Service](CHAP_Target.SQLServer.md)
+ [Utilizzo di un database PostgreSQL come destinazione per AWS Database Migration Service](CHAP_Target.PostgreSQL.md)
+ [Utilizzo di un database compatibile con MySQL come destinazione per AWS Database Migration Service](CHAP_Target.MySQL.md)
+ [Utilizzo di un database Amazon Redshift come destinazione per AWS Database Migration Service](CHAP_Target.Redshift.md)
+ [Utilizzo di un database SAP ASE come destinazione per AWS Database Migration Service](CHAP_Target.SAP.md)
+ [Utilizzo di Amazon S3 come destinazione per AWS Database Migration Service](CHAP_Target.S3.md)
+ [Utilizzo di un database Amazon DynamoDB come destinazione per AWS Database Migration Service](CHAP_Target.DynamoDB.md)
+ [Utilizzo di Amazon Kinesis Data Streams come destinazione per AWS Database Migration Service](CHAP_Target.Kinesis.md)
+ [Usare Apache Kafka come obiettivo per AWS Database Migration Service](CHAP_Target.Kafka.md)
+ [Utilizzo di un cluster Amazon OpenSearch Service come destinazione per AWS Database Migration Service](CHAP_Target.Elasticsearch.md)
+ [Utilizzo di Amazon DocumentDB come destinazione per AWS Database Migration Service](CHAP_Target.DocumentDB.md)
+ [Utilizzo di Amazon Neptune come obiettivo per AWS Database Migration Service](CHAP_Target.Neptune.md)
+ [Utilizzo di Redis OSS come obiettivo per AWS Database Migration Service](CHAP_Target.Redis.md)
+ [Usare Babelfish come bersaglio per AWS Database Migration Service](CHAP_Target.Babelfish.md)
+ [Utilizzo di Amazon Timestream come obiettivo per AWS Database Migration Service](CHAP_Target.Timestream.md)
+ [Utilizzo di Amazon RDS for Db2 e IBM Db2 LUW come destinazione per AWS DMS](CHAP_Target.DB2.md)

# Utilizzo di un database Oracle come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

È possibile migrare i dati verso le destinazioni del database Oracle utilizzando AWS DMS, da un altro database Oracle o da uno degli altri database supportati. Puoi utilizzare il protocollo Secure Sockets Layer (SSL) per crittografare le connessioni tra l'endpoint Oracle e l'istanza di replica. Per ulteriori informazioni sull'utilizzo di SSL con un endpoint Oracle, vedere. [Utilizzo di SSL con AWS Database Migration Service](CHAP_Security.SSL.md) AWS DMS supporta anche l'uso di Oracle Transparent Data Encryption (TDE) per crittografare i dati inattivi nel database di destinazione, poiché Oracle TDE non richiede una chiave di crittografia o una password per scrivere sul database.

Per informazioni sulle versioni di Oracle AWS DMS supportate come destinazione, vedere. [Obiettivi per AWS DMS](CHAP_Introduction.Targets.md) 

Quando si utilizza Oracle come destinazione, presupponiamo che i dati debbano essere migrati nello schema o nell'utente utilizzato per la connessione alla destinazione. Se desideri migrare i dati a un altro schema, utilizza una trasformazione dello schema. Ad esempio, supponiamo che l'endpoint di destinazione si connetta all'utente `RDSMASTER` e che tu intenda migrare dall'utente `PERFDATA1` a `PERFDATA2`. In questo caso, crea una trasformazione come la seguente.

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

Quando si utilizza Oracle come destinazione, AWS DMS migra tutte le tabelle e gli indici nelle tablespace di tabelle e indici predefinite nella destinazione. Se desideri migrare tabelle e indici a spazi di tabella e indice diversi, utilizza a questo scopo una trasformazione di spazio di tabella. Ad esempio, supponi di disporre di un set di tabelle nello schema `INVENTORY` assegnato ad alcuni spazi tabella nell'origine Oracle. Per la migrazione, vuoi assegnare tutte queste tabelle a un singolo spazio tabella `INVENTORYSPACE` nella destinazione. In questo caso, crea una trasformazione come la seguente.

```
{
   "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"
}
```

Per ulteriori informazioni sulle trasformazioni, consulta [Specifica della selezione delle tabelle e delle regole di trasformazione tramite JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Se Oracle è sia origine che destinazione, è possibile mantenere le assegnazioni di tablespace tabella o indice esistenti impostando l'attributo di connessione extra di origine Oracle, `enableHomogenousTablespace=true`. Per ulteriori informazioni, consulta [Impostazioni degli endpoint quando si utilizza Oracle come fonte per AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib)

Per ulteriori dettagli sull'utilizzo dei database Oracle come destinazione per AWS DMS, consulta le seguenti sezioni: 

**Topics**
+ [Limitazioni relative a Oracle come destinazione per AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [Privilegi dell'account utente necessari per l'utilizzo di Oracle come destinazione](#CHAP_Target.Oracle.Privileges)
+ [Configurazione di un database Oracle come destinazione per AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [Impostazioni degli endpoint quando si utilizza Oracle come destinazione per AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Tipi di dati di destinazione per Oracle](#CHAP_Target.Oracle.DataTypes)

## Limitazioni relative a Oracle come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

Di seguito sono riportate le limitazioni quando si utilizza Oracle come destinazione per la migrazione dei dati:
+ AWS DMS non crea uno schema sul database Oracle di destinazione. Gli eventuali schemi devono essere creati sul database Oracle di destinazione. Il nome dello schema deve esistere già per la destinazione di Oracle. Le tabelle dallo schema di origine vengono importate nell'utente o nello schema, che AWS DMS utilizza per connettersi all'istanza di destinazione. Per migrare più schemi, puoi creare più attività di replica. Inoltre puoi migrare i dati in schemi diversi di una destinazione. A tale scopo, è necessario utilizzare le regole di trasformazione dello schema sulle mappature delle AWS DMS tabelle.
+ AWS DMS non supporta l'`Use direct path full load`opzione per le tabelle con INDEXTYPE CONTEXT. Come soluzione alternativa, puoi utilizzare il caricamento della matrice. 
+ Con l'opzione di applicazione ottimizzata in batch, il caricamento nella tabella delle modifiche utilizza un percorso diretto che non supporta il tipo XML. Come soluzione alternativa, è possibile utilizzare la modalità di applicazione transazionale.
+ Le stringhe vuote migrate dai database di origine possono essere trattate in modo diverso dalla destinazione Oracle (ad esempio, convertite in stringhe di uno spazio). Ciò può comportare la AWS DMS segnalazione di una mancata corrispondenza nella convalida.
+ È possibile esprimere il numero totale di colonne per tabella supportate nella modalità di applicazione ottimizzata in batch, utilizzando la seguente formula:

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

  Ad esempio, se la tabella originale ha 25 colonne e la chiave primaria è composta da 5 colonne, il numero totale di colonne è 55. Se una tabella supera il numero di colonne supportato, tutte le modifiche vengono applicate in modalità. one-by-one
+ AWS DMS non supporta Autonomous DB su Oracle Cloud Infrastructure (OCI).
+ In modalità di applicazione transazionale, un target Oracle può elaborare istruzioni DML di dimensioni fino a 32 KB. Sebbene questo limite sia sufficiente per molti casi d'uso, le istruzioni DML superiori a 32 KB falliranno con l'errore: «ORA-01460: richiesta di conversione non implementata o non ragionevole». Per risolvere questo problema, è necessario abilitare la funzionalità di applicazione in batch impostando l'operazione su. `BatchApplyEnabled` `true` Batch apply riduce la dimensione complessiva delle istruzioni, consentendoti di aggirare il limite di 32 KB. Per ulteriori informazioni, consulta [Impostazioni delle attività dei metadati di destinazione](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md).
+ AWS DMS Il caricamento completo del percorso diretto per le tabelle LOB potrebbe fallire con l'errore ORA-39777 a causa di requisiti di gestione speciali per i dati LOB. Questo errore si verifica durante il processo di caricamento diretto del percorso e può interrompere le attività di migrazione che coinvolgono le colonne LOB. Per risolverlo, disabilita l'`useDirectPathFullLoad`impostazione sull'endpoint di destinazione e riprova l'operazione di caricamento.

## Privilegi dell'account utente necessari per l'utilizzo di Oracle come destinazione
<a name="CHAP_Target.Oracle.Privileges"></a>

Per utilizzare un oggetto Oracle in un AWS Database Migration Service task, concedi i seguenti privilegi nel database Oracle. Concedere tali privilegi all'account utente specificato nelle definizioni del database Oracle per AWS DMS.
+ SELECT ANY TRANSACTION 
+ SELECT su V\$1NLS\$1PARAMETERS 
+ SELECT su V\$1TIMEZONE\$1NAMES 
+ SELECT su ALL\$1INDEXES 
+ SELECT su ALL\$1OBJECTS 
+ SELECT su DBA\$1OBJECTS
+ SELECT su ALL\$1TABLES 
+ SELECT su ALL\$1USERS 
+ SELECT su ALL\$1CATALOG 
+ SELECT su ALL\$1CONSTRAINTS 
+ SELECT su ALL\$1CONS\$1COLUMNS 
+ SELECT su ALL\$1TAB\$1COLS 
+ SELECT su 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

Per i seguenti requisiti concedi questi privilegi aggiuntivi:
+ Per utilizzare un elenco specifico di tabelle, concedi SELECT su qualsiasi tabella replicata e anche ALTER su qualsiasi tabella replicata.
+ Per consentire a un utente di creare una tabella in uno spazio tabella predefinito, concedi il privilegio GRANT UNLIMITED TABLESPACE.
+ Per l'accesso, concedi il privilegio CREATE SESSION.
+ Se stai utilizzando un percorso diretto (che è l'impostazione predefinita per il pieno carico), `GRANT LOCK ANY TABLE to dms_user;`.
+ Se lo schema è diverso quando si utilizza la modalità di preparazione della tabella "DROP and CREATE", `GRANT CREATE ANY INDEX to dms_user;`.
+ Per alcuni scenari di caricamento completo, è possibile scegliere le opzioni "DROP and CREATE table" o "TRUNCATE before loading" in cui uno schema della tabella di destinazione è diverso da quello dell'utente DMS. In questo caso, concedere DROP ANY TABLE.
+ Per archiviare le modifiche in tabelle di modifica o in una tabella di audit in cui lo schema della tabella di destinazione è diverso da quello dell'utente DMS, concedere CREATE ANY TABLE e CREATE ANY INDEX.
+ Per convalidare le colonne LOB con la funzione di convalida, concedi il privilegio EXECUTE all'utente DMS. `SYS.DBMS_CRYPTO`

### Privilegi di lettura richiesti per il database di destinazione AWS Database Migration Service
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

All'account AWS DMS utente devono essere concesse le autorizzazioni di lettura per le seguenti tabelle DBA:
+ SELECT su DBA\$1USERS
+ SELECT su DBA\$1TAB\$1PRIVS
+ SELECT su DBA\$1OBJECTS
+ SELECT su DBA\$1SYNONYMS
+ SELECT su DBA\$1SEQUENCES
+ SELECT su DBA\$1TYPES
+ SELECT su DBA\$1INDEXES
+ SELECT su DBA\$1TABLES
+ SELECT su DBA\$1TRIGGERS
+ SELECT su SYS.DBA\$1REGISTRY

Se uno o più privilegi necessari non possono essere concessi a V\$1xxx, concedili a V\$1\$1xxx.

### Valutazioni preliminari alla migrazione
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Per utilizzare le valutazioni di premigrazione elencate in [Valutazioni Oracle](CHAP_Tasks.AssessmentReport.Oracle.md) Oracle as a Target, è necessario aggiungere le seguenti autorizzazioni all'account utente specificato nell'endpoint di destinazione del database Oracle:

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

## Configurazione di un database Oracle come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Prima di utilizzare un database Oracle come obiettivo di migrazione dei dati, è necessario fornire un account utente Oracle a AWS DMS. L'account utente deve disporre read/write dei privilegi sul database Oracle, come specificato in[Privilegi dell'account utente necessari per l'utilizzo di Oracle come destinazione](#CHAP_Target.Oracle.Privileges).

## Impostazioni degli endpoint quando si utilizza Oracle come destinazione per AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni degli endpoint per configurare il database di destinazione Oracle in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintassi `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON.

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con Oracle come destinazione.

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

## Tipi di dati di destinazione per Oracle
<a name="CHAP_Target.Oracle.DataTypes"></a>

Un database Oracle di destinazione utilizzato con AWS DMS supporta la maggior parte dei tipi di dati Oracle. La tabella seguente mostra i tipi di dati di destinazione Oracle supportati durante l'utilizzo AWS DMS e la mappatura predefinita AWS DMS dei tipi di dati. Per ulteriori informazioni su come visualizzare il tipo di dati mappato dall'origine, consulta la sezione relativa all'origine che stai utilizzando.


|  AWS DMS tipo di dati  |  Tipo di dati Oracle  | 
| --- | --- | 
|  BOOLEAN  |  NUMBER (1)  | 
|  BYTES  |  RAW (lunghezza)  | 
|  DATE  |  DATETIME  | 
|  TIME  | TIMESTAMP (0) | 
|  DATETIME  |  TIMESTAMP (dimensionamento)  | 
|  INT1  | NUMBER (3) | 
|  INT2  |  NUMBER (5)  | 
|  INT4  | NUMBER (10) | 
|  INT8  |  NUMBER (19)  | 
|  NUMERIC  |  NUMBER (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  | FLOAT | 
|  STRING  |  Con indicazione di data: DATE  Con indicazione di ora: TIMESTAMP  Con indicazione di timestamp: TIMESTAMP  Con indicazione timestamp\$1with\$1timezone: TIMESTAMP WITH TIMEZONE  Con indicazione timestamp\$1with\$1local\$1timezone: TIMESTAMP WITH LOCAL TIMEZONE Con indicazione interval\$1year\$1to\$1month: INTERVAL YEAR TO MONTH  Con indicazione interval\$1day\$1to\$1second: INTERVAL DAY TO SECOND  Se la lunghezza è > 4000: CLOB In tutti gli altri casi: VARCHAR2 (lunghezza)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  Se la lunghezza è > 2000: NCLOB In tutti gli altri casi: NVARCHAR2 (lunghezza)  | 
|  BLOB  |  BLOB Per utilizzare questo tipo di dati con AWS DMS, è necessario abilitare l'uso di BLOBs per un'attività specifica. I tipi di dati BLOB sono supportati solo nelle tabelle che includono una chiave primaria  | 
|  CLOB  |  CLOB Per utilizzare questo tipo di dati con AWS DMS, è necessario abilitare l'uso di CLOBs per un'attività specifica. Durante il Change Data Capture (CDC), i tipi di dati CLOB sono supportati solo nelle tabelle che includono una chiave primaria. STRING Un tipo di VARCHAR2 dati Oracle sull'origine con una dimensione dichiarata superiore a 4000 byte viene mappato tramite AWS DMS CLOB a una STRING sulla destinazione Oracle.  | 
|  NCLOB  |  NCLOB Per utilizzare questo tipo di dati con AWS DMS, è necessario abilitare l'uso di NCLOBs per un'attività specifica. Durante il CDC, i tipi di dati NCLOB sono supportati solo nelle tabelle che includono una chiave primaria. WSTRING Un tipo di VARCHAR2 dati Oracle sull'origine con una dimensione dichiarata superiore a 4000 byte viene mappato tramite AWS DMS NCLOB a un WSTRING sulla destinazione Oracle.   | 
| XMLTYPE |  Il tipo di dati di destinazione XMLTYPE è rilevante solo nelle attività di replica. Oracle-to-Oracle Quando il database di origine è Oracle, i tipi di dati di origine vengono replicati così come sono sulla destinazione di Oracle. Ad esempio, un tipo di dati XMLTYPE sull'origine viene creato come tipo di dati XMLTYPE sulla destinazione.  | 

# Utilizzo di un database Microsoft SQL Server come destinazione per AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

È possibile migrare i dati nei database di Microsoft SQL Server utilizzando AWS DMS. Con un database SQL Server come destinazione, puoi eseguire la migrazione dei dati da un altro database SQL Server o da uno degli altri database supportati.

Per informazioni sulle versioni di SQL Server AWS DMS supportate come destinazione, vedere[Obiettivi per AWS DMS](CHAP_Introduction.Targets.md). 

AWS DMS supporta le edizioni locali e Amazon RDS di Enterprise, Standard, Workgroup e Developer.

Per ulteriori dettagli sull'utilizzo dei database di destinazione AWS DMS di SQL Server, consulta quanto segue.

**Topics**
+ [Limitazioni all'utilizzo di SQL Server come destinazione per AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [Requisiti di sicurezza quando si utilizza SQL Server come destinazione per AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [Impostazioni degli endpoint quando si utilizza SQL Server come destinazione per AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Tipi di dati di destinazione per Microsoft SQL Server](#CHAP_Target.SQLServer.DataTypes)

## Limitazioni all'utilizzo di SQL Server come destinazione per AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

Quando si utilizza un database SQL Server come destinazione per AWS DMS, si applicano le seguenti limitazioni:
+ Quando crei manualmente una tabella di destinazione di SQL Server con una colonna calcolata, la replica del caricamento completo non è supportata se utilizzi l'utilità di copia bulk BCP. Per utilizzare la replica di pieno carico, disabilita il caricamento BCP impostando l'attributo aggiuntivo di connessione `'useBCPFullLoad=false'` sull'endpoint. Per informazioni ECAs sull'impostazione degli endpoint, vedere[Creazione di endpoint di origine e destinazione](CHAP_Endpoints.Creating.md). Per ulteriori informazioni sull'utilizzo di BCP, consulta la [documentazione di 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).
+ Quando si replicano tabelle con tipi di dati spaziali di SQL Server (GEOMETRY e GEOGRAPHY), AWS DMS sostituisce qualsiasi identificatore di riferimento spaziale (SRID) che potresti aver inserito con lo SRID predefinito. Il valore SRID predefinito è 0 per GEOMETRY e 4326 per GEOGRAPHY.
+ Le tabelle temporali non sono supportate. La migrazione di tabelle temporali può funzionare con un'attività di sola replica in modalità di applicazione transazionale se tali tabelle sono create manualmente sulla destinazione.
+ Attualmente, `boolean` i tipi di dati in un'origine PostgreSQL vengono migrati verso SQLServer una destinazione come `bit` tipo di dati con valori incoerenti. 

  Per ovviare, esegui le seguenti operazioni:
  + Precrea la tabella con un tipo di `VARCHAR(1)` dati per la colonna (o lascia che crei la tabella). AWS DMS Quindi fai in modo che l'elaborazione a valle tratti una «F» come False e una «T» come True.
  + Per evitare di dover cambiare l'elaborazione a valle, aggiungi una regola di trasformazione all'attività per modificare i valori "F" in "0" e i valori "T" in "1" e memorizzali come tipo di dati bit di SQL Server.
+ AWS DMS non supporta l'elaborazione delle modifiche per impostare l'annullabilità delle colonne (utilizzando la `ALTER COLUMN [SET|DROP] NOT NULL` clausola con le istruzioni). `ALTER TABLE`
+ L'autenticazione Windows non è supportata.

## Requisiti di sicurezza quando si utilizza SQL Server come destinazione per AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

Di seguito vengono descritti i requisiti di sicurezza per l'utilizzo AWS DMS con un oggetto Microsoft SQL Server:
+ L'account AWS DMS utente deve avere almeno il ruolo `db_owner` utente nel database di SQL Server a cui ci si sta connettendo.
+ Un amministratore di sistema di SQL Server deve fornire questa autorizzazione a tutti gli account utente AWS DMS .

## Impostazioni degli endpoint quando si utilizza SQL Server come destinazione per AWS DMS
<a name="CHAP_Target.SQLServer.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni degli endpoint per configurare il database di destinazione SQL Server in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintassi `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con SQL Server come destinazione.

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

## Tipi di dati di destinazione per Microsoft SQL Server
<a name="CHAP_Target.SQLServer.DataTypes"></a>

La tabella seguente mostra i tipi di dati di destinazione di Microsoft SQL Server supportati durante l'utilizzo AWS DMS e la mappatura predefinita AWS DMS dei tipi di dati. Per ulteriori informazioni sui tipi di AWS DMS dati, vedere[Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo di dati  |  Tipo di dati SQL Server  | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY (lunghezza)  | 
|  DATE  |  Per SQL Server 2008 e versioni successive, utilizza DATE. Per le versioni precedenti, se il dimensionamento è pari o inferiore a 3, utilizzare DATETIME. In tutti gli altri casi, utilizzare VARCHAR (37).  | 
|  TIME  |  Per SQL Server 2008 e versioni successive, utilizzare DATETIME2 (%d). Per le versioni precedenti, se il dimensionamento è pari o inferiore a 3, utilizzare DATETIME. In tutti gli altri casi, utilizzare VARCHAR (37).  | 
|  DATETIME  |  Per SQL Server 2008 e versioni successive, usa DATETIME2 (scale).  Per le versioni precedenti, se il dimensionamento è pari o inferiore a 3, utilizzare DATETIME. In tutti gli altri casi, utilizzare VARCHAR (37).  | 
|  INT1  | SMALLINT | 
|  INT2  |  SMALLINT  | 
|  INT4  | INT | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  NUMERIC (p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  | FLOAT | 
|  STRING  |  Se la colonna è di ora o data, effettuare le seguenti operazioni:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/CHAP_Target.SQLServer.html) Se la colonna non è di ora o data, utilizzare VARCHAR (lunghezza).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (lunghezza)  | 
|  BLOB  |  VARBINARY(max) IMAGE Per utilizzare questo tipo di dati con AWS DMS, è necessario abilitare l'utilizzo di BLOBs per un'attività specifica. AWS DMS supporta i tipi di dati BLOB solo nelle tabelle che includono una chiave primaria.  | 
|  CLOB  |  VARCHAR(max) Per utilizzare questo tipo di dati con AWS DMS, è necessario abilitare l'uso di CLOBs per un'attività specifica. Durante il Change Data Capture (CDC), AWS DMS supporta i tipi di dati CLOB solo nelle tabelle che includono una chiave primaria.  | 
|  NCLOB  |  NVARCHAR(max) Per utilizzare questo tipo di dati con AWS DMS, è necessario abilitare l'uso di NCLOBs per un'attività specifica. Durante CDC, AWS DMS supporta i tipi di dati NCLOB solo nelle tabelle che includono una chiave primaria.  | 

# Utilizzo di un database PostgreSQL come destinazione per AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL"></a>

È possibile migrare i dati ai database PostgreSQL utilizzando AWS DMS, da un altro database PostgreSQL o da uno degli altri database supportati. 

Per informazioni sulle versioni di PostgreSQL supportate come destinazione, AWS DMS consulta. [Obiettivi per AWS DMS](CHAP_Introduction.Targets.md)

**Nota**  
Amazon Aurora Serverless è disponibile come destinazione per Amazon Aurora con compatibilità PostgreSQL. *Per ulteriori informazioni su Amazon Aurora Serverless, consulta Using [Amazon Aurora Serverless v2 nella Amazon Aurora](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) User Guide.*
I cluster di database Aurora serverless possono essere utilizzati solo da un Amazon VPC e non possono usare un [indirizzo IP pubblico](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html). Quindi, se l'istanza di replica è in una regione diversa da quella di Aurora PostgreSQL serverless, devi configurare il [peering vpc](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer). In alternativa, verifica la disponibilità delle [regioni](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) Aurora PostgreSQL serverless e decidi di utilizzarne una per Aurora PostgreSQL serverless e per l'istanza di replica.
La funzionalità Babelfish è integrata in Amazon Aurora senza costi aggiuntivi. Per ulteriori informazioni, consulta [Utilizzo di Babelfish per Aurora PostgreSQL come destinazione per AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish).

AWS DMS adotta un table-by-table approccio per la migrazione dei dati dall'origine alla destinazione nella fase di caricamento completo. L'ordine delle tabelle durante la fase di caricamento completo non può essere garantita. Le tabelle non sono sincronizzate durante la fase di caricamento completo e durante l'applicazione di transazioni memorizzate nella cache per singole tabelle. Di conseguenza, i vincoli di integrità referenziale attivi possono causare un errore dell'attività durante la fase di caricamento completo.

In PostgreSQL, le chiavi esterne (vincoli di integrità referenziale) sono implementate mediante trigger. Durante la fase di pieno caricamento, AWS DMS carica ogni tabella una alla volta. Consigliamo vivamente di disabilitare i vincoli delle chiavi esterne durante un caricamento completo, utilizzando uno dei seguenti metodi:
+ Disabilitare temporaneamente tutti i trigger dall'istanza, quindi terminare il caricamento completo.
+ Utilizzare il parametro `session_replication_role` in PostgreSQL.

In qualsiasi momento, un trigger può trovarsi in uno dei seguenti stati: `origin`, `replica`, `always` o `disabled`. Quando il parametro `session_replication_role` è impostato su `replica`, solo i trigger nello stato `replica` sono attivi e vengono attivati quando sono chiamati. In caso contrario, i trigger rimangono inattivi. 

PostgreSQL dispone di un meccanismo di sicurezza per evitare che una tabella venga troncata, anche quando `session_replication_role` è impostato. Puoi utilizzare tale opzione come alternativa alla disabilitazione dei trigger, per facilitare il completamento dell'esecuzione del caricamento completo. Per eseguire questa operazione, imposta la modalità di preparazione della tabella di destinazione su `DO_NOTHING`. In caso contrario, le operazioni DROP e TRUNCATE avranno esito negativo in presenza di vincoli delle chiavi esterne.

In Amazon RDS, puoi controllare l'impostazione di questo parametro mediante un gruppo di parametri. Per un'istanza PostgreSQL in esecuzione su Amazon EC2, puoi impostare il parametro direttamente.



Per ulteriori dettagli sull'utilizzo di un database PostgreSQL come destinazione AWS DMS per, consulta le seguenti sezioni: 

**Topics**
+ [Limitazioni all'uso di PostgreSQL come destinazione per AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Limitazioni all'uso di Amazon Aurora PostgreSQL Limitless come destinazione per AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [Requisiti di sicurezza quando si utilizza un database PostgreSQL come destinazione per AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [Impostazioni degli endpoint e attributi di connessione aggiuntivi (ECAs) quando si utilizza PostgreSQL come destinazione per AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [Tipi di dati di destinazione per PostgreSQL](#CHAP_Target.PostgreSQL.DataTypes)
+ [Usare Babelfish per Aurora PostgreSQL come destinazione per AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## Limitazioni all'uso di PostgreSQL come destinazione per AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

Quando si utilizza un database PostgreSQL come destinazione per AWS DMS, si applicano le seguenti limitazioni:
+ Per le migrazioni eterogenee, il tipo di dati JSON viene convertito internamente nel tipo di dati CLOB nativo.
+ In una migrazione da Oracle a PostgreSQL, se una colonna in Oracle contiene un carattere NULL (valore esadecimale U\$10000), converte il carattere NULL in uno spazio (valore esadecimale U\$10020) AWS DMS . Ciò si verifica a causa di una limitazione di PostgreSQL.
+ AWS DMS non supporta la replica su una tabella con un indice univoco creato con la funzione coalesce.
+ Se le tabelle utilizzano sequenze, aggiorna il valore di `NEXTVAL` per ogni sequenza nel database di destinazione dopo aver interrotto la replica dal database di origine. AWS DMS copia i dati dal database di origine, ma non migra le sequenze verso il target durante la replica in corso.

## Limitazioni all'uso di Amazon Aurora PostgreSQL Limitless come destinazione per AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza Amazon Aurora PostgreSQL Limitless come destinazione per: AWS DMS
+ AWS DMS La convalida dei dati non supporta Amazon Aurora PostgreSQL Limitless.
+ AWS DMS migra le tabelle di origine come tabelle standard, che non sono distribuite. Dopo la migrazione, puoi convertire queste tabelle Standard in tabelle Limitless seguendo la guida ufficiale alla conversione.

## Requisiti di sicurezza quando si utilizza un database PostgreSQL come destinazione per AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

Per motivi di sicurezza, l'account utente utilizzato per la migrazione dei dati deve corrispondere a un utente registrato in qualsiasi database PostgreSQL utilizzato come destinazione.

L'endpoint di destinazione PostgreSQL richiede autorizzazioni utente minime per eseguire AWS DMS una migrazione, vedi gli esempi seguenti.

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

Oppure

```
    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;
```

## Impostazioni degli endpoint e attributi di connessione aggiuntivi (ECAs) quando si utilizza PostgreSQL come destinazione per AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni degli endpoint e gli attributi di connessione aggiuntivi (ECAs) per configurare il database di destinazione PostgreSQL. 

Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in, con la sintassi JSON [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html). `--postgre-sql-settings '{"EndpointSetting": "value", ...}'`

Specificate ECAs utilizzando il `ExtraConnectionAttributes` parametro per il vostro endpoint.

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con PostgreSQL come destinazione.

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

## Tipi di dati di destinazione per PostgreSQL
<a name="CHAP_Target.PostgreSQL.DataTypes"></a>

L'endpoint del database PostgreSQL per AWS DMS supporta la maggior parte dei tipi di dati del database PostgreSQL. La tabella seguente mostra i tipi di dati di destinazione del database PostgreSQL supportati durante l' AWS DMS utilizzo e la mappatura predefinita dei tipi di dati. AWS DMS 

Per ulteriori informazioni sui tipi di AWS DMS dati, vedere. [Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md)


|  AWS DMS tipo di dati  |  Tipo di dati PostgreSQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  Se il dimensionamento è compreso tra 0 e 6, utilizzare TIMESTAMP. Se il dimensionamento è compreso tra 7 e 9, utilizzare VARCHAR (37).  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  STRING  |  Se la lunghezza è compresa tra 1 e 21.845, utilizzare VARCHAR (lunghezza in byte).  Se la lunghezza è compresa tra 21.846 e 2.147.483.647, utilizzare VARCHAR (65535).  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  Se la lunghezza è compresa tra 1 e 21.845, utilizzare VARCHAR (lunghezza in byte).  Se la lunghezza è compresa tra 21.846 e 2.147.483.647, utilizzare VARCHAR (65535).  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**Nota**  
Quando si esegue la replica da un'origine PostgreSQL AWS DMS , crea la tabella di destinazione con gli stessi tipi di dati per tutte le colonne, ad eccezione delle colonne con tipi di dati definiti dall'utente. In questi casi, il tipo di dati viene creato come "carattere variabile" nella destinazione.

## Usare Babelfish per Aurora PostgreSQL come destinazione per AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Babelfish"></a>

È possibile migrare le tabelle di origine SQL Server in una destinazione Babelfish per Amazon Aurora PostgreSQL mediante AWS Database Migration Service. Con Babelfish, Aurora PostgreSQL comprende T-SQL, il linguaggio SQL di proprietà di Microsoft SQL Server, e supporta lo stesso protocollo di comunicazione. Pertanto, le applicazioni scritte per SQL Server possono ora funzionare con Aurora con meno modifiche al codice. La funzionalità Babelfish è integrata in Amazon Aurora senza costi aggiuntivi. Puoi attivare Babelfish sul tuo cluster Amazon Aurora dalla console Amazon RDS.

**Quando crei l'endpoint di AWS DMS destinazione utilizzando la AWS DMS console, l'API o i comandi CLI, specifica il motore di destinazione **Amazon Aurora PostgreSQL** e assegna un nome al database babelfish\$1db.** Nella sezione **Impostazione dell'endpoint** aggiungi le impostazioni per configurare `DatabaseMode` su `Babelfish` e `BabelfishDatabaseName` sul nome del database T-SQL Babelfish di destinazione.

### Aggiunta delle regole di trasformazione all'attività di migrazione
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Quando definisci un'attività di migrazione per una destinazione Babelfish, è necessario includere le regole di trasformazione che assicurino che DMS utilizzi le tabelle T-SQL Babelfish già create nel database di destinazione.

Innanzitutto, aggiungi all'attività di migrazione una regola di trasformazione che renda tutti i nomi delle tabelle in minuscolo. Babelfish memorizza i nomi delle tabelle create utilizzando T-SQL in lettere minuscole nel catalogo `pg_class` PostgreSQL. Tuttavia, quando le tabelle SQL Server includono nomi in maiuscolo e minuscolo, DMS crea le tabelle utilizzando i tipi di dati nativi PostgreSQL anziché i tipi di dati compatibili con T-SQL. Per questo motivo, assicurati di aggiungere una regola di trasformazione che renda tutti i nomi delle tabelle in minuscolo. I nomi delle colonne non devono essere trasformati in lettere minuscole.

Successivamente, se hai utilizzato la modalità di migrazione di più database quando hai definito il cluster, aggiungi una regola di trasformazione che rinomina lo schema SQL Server originale. Assicurati di rinominare il nome dello schema SQL Server per includere il nome del database T-SQL. Ad esempio, se il nome dello schema originale di SQL Server è dbo e il nome del database T-SQL è mydb, rinomina lo schema in mydb\$1dbo utilizzando una regola di trasformazione.

**Nota**  
Quando si utilizza Babelfish per Aurora PostgreSQL 16 o versioni successive, la modalità di migrazione predefinita è «mutidatabase». Quando esegui attività di migrazione DMS, assicurati di rivedere il parametro della modalità di migrazione e di aggiornare le regole di trasformazione, se necessario.

Se usi la modalità di un database singolo, non è necessaria una regola di trasformazione per rinominare i nomi degli schemi. I nomi degli schemi hanno una one-to-one mappatura con il database T-SQL di destinazione in Babelfish.

La seguente regola di trasformazione di esempio rende tutti i nomi delle tabelle in minuscolo e rinomina il nome dello schema SQL Server originale da `dbo` in `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": []
   }
]
}
```

### Limitazioni all'utilizzo di un endpoint di destinazione PostgreSQL con le tabelle Babelfish
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza un endpoint di destinazione PostgreSQL con tabelle Babelfish:
+ Per **Modalità di preparazione della tabella di destinazione** usa solo le modalità **Nessuna operazione** o **Tronca**. Non utilizzare la modalità **Rilascia tabelle nella destinazione**. In questa modalità, DMS crea le tabelle come tabelle PostgreSQL che T-SQL potrebbe non riconoscere.
+ AWS DMS non supporta il tipo di dati sql\$1variant.
+ Babelfish su Postgres endpoint non supporta i tipi di dati`HEIRARCHYID`, `GEOMETRY` (precedenti alla 3.5.4) e (precedenti alla 3.5.4). `GEOGRAPHY` Per migrare questi tipi di dati, puoi aggiungere regole di trasformazione per convertire il tipo di dati in wstring (250).
+ Babelfish supporta solo la migrazione di tipi di dati `BINARY`, `VARBINARY` e `IMAGE` che utilizzano il tipo di dati `BYTEA`. Per le versioni precedenti di Aurora PostgreSQL, puoi utilizzare DMS per migrare queste tabelle su un [endpoint di destinazione Babelfish](CHAP_Target.Babelfish.md). Non è necessario specificare la lunghezza per il tipo di dati `BYTEA`, come mostrato nell'esempio seguente.

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

  Modifica il tipo di dati T-SQL precedente con il tipo di dati `BYTEA` supportato da T-SQL.

  ```
  [Picture] BYTEA NULL
  ```
+ Per le versioni precedenti di Aurora PostgreSQL Babelfish, se si crea un'attività di migrazione per la replica continua da SQL Server a Babelfish utilizzando l'endpoint di destinazione PostgreSQL, è necessario assegnare il tipo di dati `SERIAL` a tutte le tabelle che utilizzano colonne `IDENTITY`. A partire da Aurora PostgreSQL (versione 15.3/14.8 e successive) e Babelfish (versione 3.2.0 e successive), la colonna identity è supportata e non è più necessario assegnare il tipo di dati SERIAL. Per ulteriori informazioni, consulta [SERIAL Usage](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html) nella sezione Sequences and Identity in *SQL Server to Aurora PostgreSQL Migration Playbook*. Quindi, quando crei la tabella in Babelfish, modifica la definizione della colonna come segue.

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

  Cambia la definizione precedente come segue.

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

  Aurora PostgreSQL compatibile con Babelfish crea una sequenza utilizzando la configurazione predefinita e aggiunge un vincolo `NOT NULL` alla colonna. La sequenza appena creata si comporta come una sequenza normale (con incrementi di 1) e non include alcuna opzione `SERIAL` composita.
+ Dopo aver migrato i dati di tabelle con le colonne `IDENTITY` o il tipo di dati `SERIAL`, reimposta l'oggetto sequenza basato su PostgreSQL in base al valore massimo per la colonna. Dopo aver eseguito il pieno carico delle tabelle, usa la seguente query T-SQL per generare le istruzioni per inizializzare l'oggetto sequenza associato.

  ```
  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(%';
  ```

  La query genera una serie di istruzioni SELECT da eseguire in ordine per aggiornare i valori massimi di IDENTITY e SERIAL.
+ Per le versioni di Babelfish precedenti alla 3.2, la **Modalità LOB completa** potrebbe causare un errore di tabella. In tal caso, crea un'attività separata per le tabelle che non sono state caricate. Utilizza quindi la **Modalità LOB limitata** per specificare il valore appropriato per **Dimensione massima dei LOB (KB)**. Un'altra opzione consiste nell'impostare l'attributo di connessione dell'endpoint `ForceFullLob=True` di SQL Server.
+ Per le versioni di Babelfish precedenti alla 3.2, l'esecuzione della convalida dei dati per tabelle Babelfish che non utilizzano chiavi primarie basate su numeri interi genera un messaggio che indica che non è possibile trovare una chiave univoca adatta. A partire da Aurora PostgreSQL (versione 15.3/14.8 e successive) e Babelfish (versione 3.2.0 e successive), è supportata la convalida dei dati per chiavi primarie basate su numeri non interi. 
+ A causa delle differenze di precisione nel numero di cifre decimali per i secondi, DMS segnala gli errori di convalida dei dati per le tabelle Babelfish che utilizzano tipi di dati `DATETIME`. Per correggere questi errori, puoi aggiungere il seguente tipo di regola di convalida per i tipi di dati `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"
       }
  ```

# Utilizzo di un database compatibile con MySQL come destinazione per AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

È possibile migrare i dati su qualsiasi database compatibile con MySQL utilizzando AWS DMS, da uno qualsiasi dei motori di dati di origine che supporta. AWS DMS Se si esegue la migrazione a un database locale compatibile con MySQL, è AWS DMS necessario che il motore di origine risieda all'interno dell'ecosistema. AWS Il motore può essere su un servizio AWS gestito come Amazon RDS, Amazon Aurora o Amazon S3. In alternativa, il motore può trovarsi su un database autogestito in Amazon EC2. 

Puoi utilizzare il protocollo SSL per crittografare le connessioni tra l'endpoint compatibile con MySQL e l'istanza di replica. Per ulteriori informazioni sull'utilizzo di SSL con un endpoint compatibile con MySQL, consulta [Utilizzo di SSL con AWS Database Migration Service](CHAP_Security.SSL.md). 

Per informazioni sulle versioni di MySQL supportate come AWS DMS destinazione, vedere. [Obiettivi per AWS DMS](CHAP_Introduction.Targets.md)

È possibile utilizzare i seguenti database compatibili con MySQL come destinazioni per: 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**  
Indipendentemente dal motore di storage di origine (MyISAM, MEMORY e così via), AWS DMS crea una tabella di destinazione compatibile con MySQL come tabella InnoDB per impostazione predefinita.   
Se ti occorre una tabella che utilizza un motore di storage diverso da InnoDB, puoi creare manualmente la tabella sulla destinazione compatibile con MySQL e migrare la tabella utilizzando l'opzione **Nessuna azione**. Per ulteriori informazioni, consulta [Impostazioni delle attività di caricamento completo](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

Per ulteriori dettagli sull'utilizzo di un database compatibile con MySQL come destinazione per AWS DMS, consulta le sezioni seguenti. 

**Topics**
+ [Utilizzo di qualsiasi database compatibile con MySQL come destinazione per AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [Limitazioni all'utilizzo di un database compatibile con MySQL come destinazione per AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [Impostazioni degli endpoint quando si utilizza un database compatibile con MySQL come destinazione per AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [Tipi di dati di destinazione per MySQL](#CHAP_Target.MySQL.DataTypes)

## Utilizzo di qualsiasi database compatibile con MySQL come destinazione per AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

Prima di iniziare a utilizzare un database compatibile con MySQL come destinazione per AWS DMS, accertati di aver soddisfatto i seguenti prerequisiti:
+ Fornisci un account utente con AWS DMS read/write privilegi per il database compatibile con MySQL. Per creare i privilegi necessari, esegui i seguenti comandi.

  ```
  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 la fase di migrazione del caricamento completo, devi disabilitare le chiavi esterne sulle tabelle di destinazione. Per disabilitare i controlli delle chiavi esterne su un database compatibile con MySQL durante un caricamento completo, puoi aggiungere il seguente comando alla sezione **Attributi di connessione aggiuntivi** della AWS DMS console per l'endpoint di destinazione.

  ```
  Initstmt=SET FOREIGN_KEY_CHECKS=0;
  ```
+ Imposta il parametro del database `local_infile = 1` per consentire a AWS DMS di caricare i dati nel database di destinazione.
+ Se si utilizzano valutazioni di premigrazione specifiche di MySQL, è necessario fornire i seguenti privilegi.

  ```
  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
  ```

## Limitazioni all'utilizzo di un database compatibile con MySQL come destinazione per AWS Database Migration Service
<a name="CHAP_Target.MySQL.Limitations"></a>

Quando si utilizza un database MySQL come destinazione AWS DMS , non supporta quanto segue:
+ Le istruzioni DDL (Data Definition Language) TRUNCATE PARTITION, DROP TABLE e RENAME TABLE.
+ L'utilizzo di un'istruzione `ALTER TABLE table_name ADD COLUMN column_name` per aggiungere colonne all'inizio o al centro di una tabella.
+ Quando si caricano dati su una destinazione compatibile con MySQL in un'attività a caricamento completo, AWS DMS non riporta gli errori causati da vincoli nei registri delle attività, che possono causare errori di chiave duplicati o mancate corrispondenze con il numero di record. Questo comportamento è riconducibile al modo in cui MySQL gestisce i dati locali con il comando `LOAD DATA`. Effettua le seguenti operazioni durante la fase di pieno carico: 
  + Disabilita le limitazioni.
  + Utilizza AWS DMS la convalida per assicurarti che i dati siano coerenti.
+ Quando si aggiorna il valore di una colonna al valore esistente, i database compatibili con MySQL restituiscono un avviso `0 rows affected`. Sebbene questo comportamento non sia tecnicamente un errore, la situazione è gestita diversamente in altri motori di database. Ad esempio, Oracle esegue un aggiornamento di una riga. Per i database compatibili con MySQL, AWS DMS genera una voce nella tabella di controllo awsdms\$1apply\$1exceptions e registra il seguente avviso.

  ```
  Some changes from the source database had no impact when applied to
  the target database. See awsdms_apply_exceptions table for details.
  ```
+ Aurora serverless è disponibile come destinazione per Amazon Aurora versione 2, compatibile con MySQL versione 5.7. Seleziona Aurora MySQL versione 2.07.1 per utilizzare Aurora serverless compatibile con MySQL 5.7. *Per ulteriori informazioni su Aurora Serverless, consulta Using [Aurora Serverless v2 nella Amazon Aurora](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) User Guide.*
+ AWS DMS non supporta l'utilizzo di un endpoint reader per Aurora o Amazon RDS, a meno che le istanze non siano in modalità scrivibile, `read_only` ovvero i parametri `innodb_read_only` and non siano impostati su o. `0` `OFF` Per ulteriori informazioni sull'utilizzo di Amazon RDS e Aurora come destinazioni, consulta gli argomenti seguenti:
  +  [ Determinazione dell'istanza database a cui si è connessi](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [ Aggiornamento di repliche di lettura con MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ Quando si replica il tipo di dati TIME, il valore della parte temporale frazionaria non viene replicato.
+ Quando si replica il tipo di dati TIME con Extra Connection Attribute, il valore temporale è limitato all'intervallo. `loadUsingCSV=false` `[00:00:00, 23:59:59]`

## Impostazioni degli endpoint quando si utilizza un database compatibile con MySQL come destinazione per AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni degli endpoint per configurare il database di destinazione compatibile con MySQL in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in, con la sintassi JSON. [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)`--my-sql-settings '{"EndpointSetting": "value", ...}'`

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con MySQL come destinazione.

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

Puoi anche utilizzare gli attributi aggiuntivi di connessione per configurare il database di destinazione compatibile con MySQL.

Nella seguente tabella vengono indicati gli attributi aggiuntivi di connessione utilizzabili con MySQL come destinazione.

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

In alternativa, è possibile utilizzare il parametro `AfterConnectScript` del comando `--my-sql-settings` per disabilitare i controlli delle chiavi esterne e specificare il fuso orario del database.

## Tipi di dati di destinazione per MySQL
<a name="CHAP_Target.MySQL.DataTypes"></a>

La tabella seguente mostra i tipi di dati di destinazione del database MySQL supportati durante l' AWS DMS utilizzo e la AWS DMS mappatura predefinita dei tipi di dati.

Per ulteriori informazioni sui tipi di AWS DMS dati, vedere. [Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md)


|  AWS DMS tipi di dati  |  Tipi di dati MySQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BYTES  |  Se la lunghezza è compresa tra 1 e 65.535, utilizzare VARBINARY (lunghezza).  Se la lunghezza è compresa tra 65.536 e 2.147.483.647, utilizzare LONGLOB.  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  "Se il dimensionamento è => 0 e =< 6, DATETIME (dimensionamento) Se il dimensionamento è => 7 e =< 9, VARCHAR (37)"  | 
|  INT1  |  TINYINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  DECIMAL (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  |  DOUBLE PRECISION  | 
|  STRING  |  Se la lunghezza è compresa tra 1 e 21.845, utilizzare VARCHAR (lunghezza). Se la lunghezza è compresa tra 21.846 e 2.147.483.647, utilizzare LONGTEXT.  | 
|  UINT1  |  UNSIGNED TINYINT  | 
|  UINT2  |  UNSIGNED SMALLINT  | 
|  UINT4  |  UNSIGNED INTEGER  | 
|  UINT8  |  UNSIGNED BIGINT  | 
|  WSTRING  |  Se la lunghezza è compresa tra 1 e 32.767, utilizzare VARCHAR (lunghezza).  Se la lunghezza è compresa tra 32.768 e 2.147.483.647, utilizzare LONGTEXT.  | 
|  BLOB  |  Se la lunghezza è compresa tra 1 e 65.535, utilizzare BLOB. Se la lunghezza è compresa tra 65.536 e 2.147.483.647, utilizzare LONGBLOB. Se la lunghezza è 0, utilizzare LONGBLOB (supporto LOB completo).  | 
|  NCLOB  |  Se la lunghezza è compresa tra 1 e 65.535, utilizzare TEXT. Se la lunghezza è compresa tra 65.536 a 2.147.483.647, utilizzare LONGTEXT con ucs2 per CHARACTER SET. Se la lunghezza è 0, utilizzare LONGTEXT (supporto LOB completo) con ucs2 per CHARACTER SET.  | 
|  CLOB  |  Se la lunghezza è compresa tra 1 e 65.535, utilizzare TEXT. Se la lunghezza è compresa tra 65.536 e 2147483647, utilizzare LONGTEXT. Se la lunghezza è 0, utilizzare LONGTEXT (supporto LOB completo).  | 

# Utilizzo di un database Amazon Redshift come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Redshift"></a>

Puoi migrare i dati verso i database Amazon Redshift utilizzando. AWS Database Migration Service Amazon Redshift è un servizio di data warehouse nel cloud in scala petabyte interamente gestito. Con un database Amazon Redshift come destinazione, puoi eseguire la migrazione dei dati da tutti gli altri database di origine supportati.

Puoi utilizzare Amazon Redshift Serverless come destinazione per. AWS DMS Per ulteriori informazioni, consulta la sezione seguente: [Utilizzo AWS DMS con Amazon Redshift Serverless come destinazioneAmazon Redshift Serverless](#CHAP_Target.Redshift.RSServerless).

 Il cluster Amazon Redshift deve trovarsi nello stesso AWS account e nella stessa AWS regione dell'istanza di replica. 

Durante una migrazione di database verso Amazon Redshift, sposta AWS DMS innanzitutto i dati in un bucket Amazon S3. Quando i file risiedono in un bucket Amazon S3 AWS DMS , li trasferisce nelle tabelle appropriate nel data warehouse Amazon Redshift. AWS DMS crea il bucket S3 nella stessa AWS regione del database Amazon Redshift. L'istanza AWS DMS di replica deve trovarsi nella stessa regione. AWS 

Se utilizzi l'API AWS CLI o DMS per migrare i dati su Amazon Redshift, configura AWS Identity and Access Management un ruolo (IAM) per consentire l'accesso a S3. Per ulteriori informazioni sulla creazione di questo ruolo IAM, consulta [Creazione dei ruoli IAM da utilizzare con AWS DMS](security-iam.md#CHAP_Security.APIRole).

L'endpoint Amazon Redshift fornisce l'automazione completa per le operazioni seguenti:
+ Generazione dello schema e mappatura dei tipi di dati
+ Caricamento completo delle tabelle di database di origine
+ Caricamento incrementale delle modifiche apportate alle tabelle di origine
+ Applicazione delle modifiche dello schema nel DDL (Data Definition Language) effettuate sulle tabelle di origine
+ Sincronizzazione tra il caricamento completo e i processi Change Data Capture (CDC).

AWS Database Migration Service supporta sia le operazioni a pieno carico che quelle di elaborazione delle modifiche. AWS DMS legge i dati dal database di origine e crea una serie di file con valori separati da virgole (.csv). Per le operazioni a caricamento completo, crea file per ogni tabella. AWS DMS AWS DMS quindi copia i file di tabella per ogni tabella in una cartella separata in Amazon S3. Quando i file vengono caricati su Amazon S3, AWS DMS invia un comando di copia e i dati contenuti nei file vengono copiati in Amazon Redshift. Per le operazioni di elaborazione delle modifiche, AWS DMS copia le modifiche nette nei file.csv. AWS DMS quindi carica i file di modifica della rete su Amazon S3 e copia i dati su Amazon Redshift.

Per ulteriori dettagli sull'utilizzo di Amazon Redshift come target per AWS DMS, consulta le seguenti sezioni: 

**Topics**
+ [Prerequisiti per l'utilizzo di un database Amazon Redshift come destinazione per AWS Database Migration Service](#CHAP_Target.Redshift.Prerequisites)
+ [Privilegi richiesti per l'utilizzo di Redshift come destinazione](#CHAP_Target.Redshift.Privileges)
+ [Limitazioni all'uso di Amazon Redshift come obiettivo per AWS Database Migration Service](#CHAP_Target.Redshift.Limitations)
+ [Configurazione di un database Amazon Redshift come destinazione per AWS Database Migration Service](#CHAP_Target.Redshift.Configuration)
+ [Utilizzo del routing VPC avanzato con Amazon Redshift come destinazione per AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)
+ [Creazione e utilizzo di AWS KMS chiavi per crittografare i dati di destinazione di Amazon Redshift](#CHAP_Target.Redshift.KMSKeys)
+ [Impostazioni degli endpoint quando si utilizza Amazon Redshift come destinazione per AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)
+ [Utilizzo di una chiave di crittografia dei dati e di un bucket Amazon S3 come storage intermedio](#CHAP_Target.Redshift.EndpointSettings)
+ [Impostazioni delle attività multithread per Amazon Redshift](#CHAP_Target.Redshift.ParallelApply)
+ [Tipi di dati di destinazione per Amazon Redshift.](#CHAP_Target.Redshift.DataTypes)
+ [Utilizzo AWS DMS con Amazon Redshift Serverless come destinazione](#CHAP_Target.Redshift.RSServerless)

## Prerequisiti per l'utilizzo di un database Amazon Redshift come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Redshift.Prerequisites"></a>

Di seguito sono descritti i prerequisiti necessari per l'utilizzo di Amazon Redshift come destinazione per la migrazione dei dati:
+ Usa la console AWS di gestione per avviare un cluster Amazon Redshift. Prendi nota delle informazioni di base sul tuo AWS account e sul tuo cluster Amazon Redshift, come password, nome utente e nome del database. Tali valori sono necessari durante la creazione dell'endpoint di destinazione Amazon Redshift. 
+ Il cluster Amazon Redshift deve trovarsi nello stesso AWS account e nella stessa AWS regione dell'istanza di replica.
+ L'istanza di AWS DMS replica richiede la connettività di rete all'endpoint Amazon Redshift (nome host e porta) utilizzato dal cluster.
+ AWS DMS utilizza un bucket Amazon S3 per trasferire dati al database Amazon Redshift. Per consentire a AWS DMS di creare il bucket, la console utilizza un ruolo IAM, `dms-access-for-endpoint`. Se utilizzi l'API AWS CLI o DMS per creare una migrazione di database con Amazon Redshift come database di destinazione, devi creare questo ruolo IAM. Per ulteriori informazioni sulla creazione di questo ruolo, consultare [Creazione dei ruoli IAM da utilizzare con AWS DMS](security-iam.md#CHAP_Security.APIRole). 
+ AWS DMS converte BLOBs e NCLOBs in un VARCHAR sull'istanza Amazon Redshift di destinazione. CLOBs Amazon Redshift non supporta tipi di dati VARCHAR di dimensioni superiori a 64 KB, quindi non è possibile archiviare dati tradizionali su Amazon LOBs Redshift. 
+ Imposta l'impostazione dell'attività dei metadati di destinazione [BatchApplyEnabled](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)su `true` for per gestire AWS DMS le modifiche alle tabelle di destinazione di Amazon Redshift durante il CDC. È necessaria una chiave primaria nella tabella di origine e nella tabella di destinazione. Senza una chiave primaria, le modifiche vengono applicate istruzione dopo istruzione. E ciò può influire negativamente sulle prestazioni delle attività durante il CDC causando latenza di destinazione e influendo sulla coda di commit del cluster. 
+ Quando la sicurezza a livello di riga è abilitata nelle tabelle in Redshift, è necessario concedere le autorizzazioni appropriate a tutti gli utenti DMS.

## Privilegi richiesti per l'utilizzo di Redshift come destinazione
<a name="CHAP_Target.Redshift.Privileges"></a>

Utilizza il comando GRANT per definire i privilegi di accesso per un utente o un gruppo di utenti. I privilegi includono opzioni di accesso come la possibilità di leggere i dati in tabelle e viste, scrivere dati e creare tabelle. Per ulteriori informazioni sull'utilizzo di GRANT con Amazon Redshift, consulta [GRANT](https://docs.aws.amazon.com//redshift/latest/dg/r_GRANT.html) nella *Guida per gli sviluppatori di database Amazon Redshift*. 

Di seguito è riportata la sintassi per assegnare privilegi specifici per una tabella, un database, uno schema, una funzione, una procedura o privilegi a livello di lingua su tabelle e viste 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 } [, ...]
```

Di seguito è riportata la sintassi per i privilegi a livello di colonna su tabelle e viste Amazon Redshift. 

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

Di seguito è riportata la sintassi per il privilegio ASSUMEROLE concesso a utenti e gruppi con un ruolo specificato.

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

## Limitazioni all'uso di Amazon Redshift come obiettivo per AWS Database Migration Service
<a name="CHAP_Target.Redshift.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza un database Amazon Redshift come destinazione:
+ Non abilitare il controllo delle versioni per il bucket S3 che usi come storage intermedio per la destinazione Amazon Redshift. Se hai bisogno del controllo delle versioni S3, utilizza le policy del ciclo di vita per eliminare attivamente le vecchie versioni. In caso contrario, è possibile che si verifichino errori della connessione di test dell'endpoint a causa del timeout della chiamata `list-object` S3. Per creare una policy del ciclo di vita per un bucket S3, consulta [Gestione del ciclo di vita dello storage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Per eliminare la versione di un oggetto S3, consulta [Eliminazione di versioni di oggetti da un bucket con funzione Controllo delle versioni abilitata](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Il seguente DDL non è supportato:

  ```
  ALTER TABLE table name MODIFY COLUMN column name data type;
  ```
+  AWS DMS non può migrare o replicare le modifiche a uno schema con un nome che inizia con un carattere di sottolineatura (\$1). Se disponi di schemi con un nome che inizia con un carattere di sottolineatura, utilizza le trasformazioni di mappatura per rinominare lo schema sulla destinazione. 
+  Amazon Redshift non supporta VARCHARs dimensioni superiori a 64 KB. LOBs i database tradizionali non possono essere archiviati in Amazon Redshift.
+  L'applicazione di un'istruzione DELETE a una tabella con una chiave primaria a più colonne non è supportata quando uno dei nomi di colonna della chiave primaria utilizza una parola riservata. Vai [qui](https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html) per vedere un elenco di parole riservate Amazon Redshift.
+ Potrebbero verificarsi problemi di prestazioni se il sistema di origine esegue operazioni UPDATE sulla chiave primaria di una tabella di origine. Questi problemi di prestazioni si verificano quando si applicano modifiche alla destinazione. Ciò accade perché le operazioni UPDATE (e DELETE) dipendono dal valore della chiave primaria per identificare la riga di destinazione. Se aggiorni la chiave primaria di una tabella di origine, il log delle attività conterrà messaggi come i seguenti:

  ```
  Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  ```
+ DMS non supporta nomi DNS personalizzati durante la configurazione di un endpoint per un cluster Redshift ed è necessario utilizzare il nome DNS fornito da Amazon. Poiché il cluster Amazon Redshift deve trovarsi nello stesso AWS account e nella stessa regione dell'istanza di replica, la convalida non riesce se si utilizza un endpoint DNS personalizzato.
+ Amazon Redshift prevede un timeout di sessione inattiva predefinito di 4 ore. Quando non c'è alcuna esecuzione all'interno dell'attività di replica DMS, Redshift disconnette la sessione dopo 4 ore. Gli errori possono derivare dall'impossibilità di DMS di connettersi e dalla potenziale necessità di riavviare il sistema. Come soluzione alternativa, imposta per SESSION TIMEOUT un limite superiore a 4 ore per l'utente della replica DMS. In alternativa, consulta la descrizione di [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) nella *Guida per gli sviluppatori di database di Amazon Redshift*.
+ Quando AWS DMS replica i dati della tabella di origine senza una chiave primaria o unica, la latenza CDC potrebbe essere elevata, con conseguente livello di prestazioni inaccettabile.
+ Il troncamento delle partizioni non è supportato durante la replica CDC dalla sorgente Oracle alla destinazione Redshift.
+ I record duplicati potrebbero apparire nelle tabelle di destinazione perché Amazon Redshift non impone le chiavi primarie e AWS DMS può riprodurre CDC quando un'attività viene ripresa. Per evitare duplicati, utilizza l'impostazione. `ApplyErrorInsertPolicy=INSERT_RECORD` Per ulteriori informazioni, consulta [Impostazioni delle attività per la gestione degli errori](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md). In alternativa, è possibile implementare procedure di rilevamento dei duplicati a livello di applicazione e di pulizia post-migrazione.

## Configurazione di un database Amazon Redshift come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Redshift.Configuration"></a>

AWS Database Migration Service deve essere configurato per funzionare con l'istanza Amazon Redshift. Nella tabella seguente vengono descritte le proprietà di configurazione disponibili per l'endpoint Amazon Redshift.


| Proprietà | Description | 
| --- | --- | 
| server | Il nome del cluster Amazon Redshift in uso. | 
| port | Il numero di porta per Amazon Redshift. Il valore predefinito è 5439. | 
| username | Il nome utente Amazon Redshift di un utente registrato. | 
| password | La password per l'utente denominato nella proprietà username. | 
| database | Il nome del data warehouse (servizio) Amazon Redshift in uso. | 

Se desideri aggiungere ulteriori attributi della stringa di connessione all'endpoint Amazon Redshift, puoi specificare `maxFileSize` e `fileTransferUploadStreams`. Per ulteriori informazioni su questi attributi, consulta [Impostazioni degli endpoint quando si utilizza Amazon Redshift come destinazione per AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

## Utilizzo del routing VPC avanzato con Amazon Redshift come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Redshift.EnhancedVPC"></a>

Se usi il routing VPC avanzato con la destinazione Amazon Redshift, tutto il traffico di tipo COPY tra il cluster Amazon Redshift e i repository di dati passa attraverso il VPC. Poiché il routing VPC avanzato influisce sul modo in cui Amazon Redshift accede ad altre risorse, i comandi COPY potrebbero avere esito negativo se non hai configurato correttamente il VPC.

AWS DMS può essere influenzato da questo comportamento perché utilizza il comando COPY per spostare i dati in S3 in un cluster Amazon Redshift.

Di seguito sono riportati i passaggi AWS DMS necessari per caricare i dati in un target Amazon Redshift:

1. AWS DMS copia i dati dall'origine in file.csv sul server di replica.

1. AWS DMS utilizza l' AWS SDK per copiare i file.csv in un bucket S3 sul tuo account.

1. AWS DMS utilizza quindi il comando COPY in Amazon Redshift per copiare i dati dai file.csv in S3 in una tabella appropriata in Amazon Redshift.

Se il routing VPC avanzato non è abilitato, Amazon Redshift indirizza il traffico attraverso Internet, incluso il traffico verso altri servizi all'interno della rete. AWS Se la caratteristica non è abilitata, non è necessario configurare il percorso di rete. Se la caratteristica è abilitata, è necessario creare un percorso di rete tra il VPC del cluster e le risorse di dati. Per ulteriori informazioni sulla configurazione necessaria, consulta [Routing VPC avanzato](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html) nella documentazione di Amazon Redshift. 

## Creazione e utilizzo di AWS KMS chiavi per crittografare i dati di destinazione di Amazon Redshift
<a name="CHAP_Target.Redshift.KMSKeys"></a>

È possibile crittografare i dati di destinazione trasmessi ad Amazon S3 prima di copiarli in Amazon Redshift. A tale scopo, puoi creare e utilizzare chiavi personalizzate. AWS KMS Puoi utilizzare la chiave creata per crittografare i dati di destinazione usando uno dei seguenti meccanismi al momento della creazione dell'endpoint di destinazione Amazon Redshift:
+ Utilizza la seguente opzione quando esegui il comando `create-endpoint` utilizzando la AWS CLI.

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

  Qui, `your-kms-key-ARN` è l'ARN (Amazon Resource Name) per la chiave KMS. Per ulteriori informazioni, consulta [Utilizzo di una chiave di crittografia dei dati e di un bucket Amazon S3 come storage intermedio](#CHAP_Target.Redshift.EndpointSettings).
+ Imposta l'attributo di connessione aggiuntivo `encryptionMode` sul valore `SSE_KMS` e l'attributo della connessione aggiuntiva `serverSideEncryptionKmsKeyId` per l'ARN per la chiave KMS. Per ulteriori informazioni, consulta [Impostazioni degli endpoint quando si utilizza Amazon Redshift come destinazione per AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

Per crittografare i dati di destinazione di Amazon Redshift utilizzando una chiave KMS, è necessario AWS Identity and Access Management un ruolo (IAM) con le autorizzazioni per accedere ai dati di Amazon Redshift. È possibile accedere a questo ruolo IAM in una policy (policy della chiave) collegata alla chiave di crittografia creata. È possibile farlo nella console IAM creando quanto segue:
+ Un ruolo IAM con una policy gestita. AWS
+ Una chiave di crittografia KMS con la policy della chiave che fa riferimento a questo ruolo.

Nelle seguenti procedure viene descritto come procedere.

**Per creare un ruolo IAM con la policy AWS gestita richiesta**

1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Nel riquadro di navigazione, seleziona **Ruoli**. Viene visualizzata la pagina **Roles (Ruoli)**.

1. Scegli **Crea ruolo**. Viene visualizzata la pagina **Create role (Crea ruolo)**.

1. Dopo aver selezionato **Servizio AWS ** come entità attendibile, scegli **DMS** come servizio per l'utilizzo del ruolo.

1. Scegli **Successivo: autorizzazioni**. Verrà visualizzata la pagina **Attach permissions policies (Collega policy di autorizzazioni)**.

1. Trova e seleziona la policy `AmazonDMSRedshiftS3Role`.

1. Scegli **Successivo: Tag**. Viene visualizzata la pagina **Aggiungi tag**. Qui è possibile aggiungere i tag desiderati.

1. Seleziona **Next: Review (Successivo: Rivedi)** ed esamina i risultati.

1. Se le impostazioni sono quelle desiderate, immetti un nome per il ruolo (ad esempio, `DMS-Redshift-endpoint-access-role`) e qualsiasi ulteriore descrizione, quindi scegli **Create role (Crea ruolo)**. Viene visualizzata la pagina **Roles (Ruoli)** con un messaggio che indica che il ruolo è stato creato.

Ora il nuovo ruolo per accedere alle risorse di Amazon Redshift per la crittografia con un nome specifico, ad esempio `DMS-Redshift-endpoint-access-role`, è stato creato.

**Per creare una chiave di AWS KMS crittografia con una policy chiave che faccia riferimento al tuo ruolo IAM**
**Nota**  
Per ulteriori informazioni su come AWS DMS funzionano le chiavi di AWS KMS crittografia, consulta[Impostazione di una chiave di crittografia e specificazione delle autorizzazioni AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Accedi a Console di gestione AWS e apri la console AWS Key Management Service (AWS KMS) in [https://console.aws.amazon.com/kms.](https://console.aws.amazon.com/kms)

1. Per modificare il Regione AWS, usa il selettore della regione nell'angolo in alto a destra della pagina.

1. Nel riquadro di navigazione, scegli **Chiavi gestite dal cliente**.

1. Scegli **Crea chiave**. Verrà visualizzata la pagina **Configure key (Configura chiave)**.

1. Alla voce **Key type (Tipo di chiave)**, scegliere **Symmetric (Simmetrica)**.
**Nota**  
Quando crei questa chiave, puoi creare solo una chiave simmetrica, perché tutti i AWS servizi, come Amazon Redshift, funzionano solo con chiavi di crittografia simmetriche.

1. Scegliere **Advanced Options (Opzioni avanzate)**. Alla voce **Key material origin (Origine del materiale della chiave)**, assicurarsi che sia selezionata la voce **KMS** quindi scegliere **Next (Avanti)**. Verrà visualizzata la pagina **Add labels (Aggiungi etichette)**.

1. Alla voce **Create alias and description (Crea alias e descrizione)**, inserire un alias per la chiave (ad esempio `DMS-Redshift-endpoint-encryption-key`) e qualsiasi descrizione aggiuntiva.

1. Alla voce **Tag**, aggiungere tutti i tag desiderati per identificare la chiave e monitorarne l'utilizzo, quindi scegliere **Next (Avanti)**. Verrà visualizzata la pagina **Define key administrative permissions (Definisci autorizzazioni amministrative della chiave)** che mostra un elenco di utenti e ruoli tra cui è possibile scegliere.

1. Aggiungi gli utenti e i ruoli che desideri gestiscano la chiave. Assicurati che questi utenti e ruoli dispongano delle autorizzazioni necessarie per gestire la chiave. 

1. Alla voce **Key deletion (Eliminazione chiave)**, scegliere se gli amministratori della chiave possono eliminarla, quindi scegliere **Next (Avanti)**. Verrà visualizzata la pagina **Define key usage permissions (Definisci autorizzazioni di utilizzo della chiave)** che mostra un elenco aggiuntivo di utenti e ruoli tra cui è possibile scegliere.

1. Per **Questo account** scegli tra gli utenti disponibili quelli che dovranno eseguire operazioni di crittografia sulle destinazioni Amazon Redshift. Scegli in **Ruoli** il ruolo creato in precedenza per abilitare l'accesso alla crittografia degli oggetti di destinazione Amazon Redshift, ad esempio `DMS-Redshift-endpoint-access-role`.

1. **Se desideri aggiungere altri account non elencati per avere lo stesso accesso, per **Altri AWS account, scegli **Aggiungi un AWS ** altro account**, quindi scegli Avanti.** Verrà visualizzata la pagina **Review and edit key policy (Rivedi e modifica la policy della chiave)** che mostra il JSON associato alla policy della chiave, che è possibile rivedere e modificare digitando all'interno del testo esistente. Qui è possibile visualizzare il punto in cui la policy della chiave fa riferimento al ruolo e agli utenti (ad esempio,`Admin` e `User1`) selezionati nella fase precedente. È anche possibile visualizzare le diverse operazioni di chiave consentite per i diversi principali (utenti e ruoli), come mostrato nel seguente esempio.

------
#### [ 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. Scegli **Fine**. La pagina delle **chiavi di crittografia** si apre con un messaggio che indica che il tuo è AWS KMS key stato creato.

È stata creata una nuova chiave KMS con un alias specificato (ad esempio, `DMS-Redshift-endpoint-encryption-key`). Questa chiave consente di AWS DMS crittografare i dati di destinazione di Amazon Redshift.

## Impostazioni degli endpoint quando si utilizza Amazon Redshift come destinazione per AWS DMS
<a name="CHAP_Target.Redshift.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni degli endpoint per configurare il database di destinazione Amazon Redshift in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la `--redshift-settings '{"EndpointSetting": "value", ...}'` sintassi JSON.

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con Amazon Redshift come destinazione.

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

## Utilizzo di una chiave di crittografia dei dati e di un bucket Amazon S3 come storage intermedio
<a name="CHAP_Target.Redshift.EndpointSettings"></a>

Puoi utilizzare le impostazioni degli endpoint di destinazione Amazon Redshift per configurare:
+ Una chiave di crittografia AWS KMS dei dati personalizzata. Puoi utilizzare quindi questa chiave per crittografare i dati trasmessi ad Amazon S3 prima che siano copiati su Amazon Redshift.
+ Un bucket S3 personalizzato come storage intermedio per i dati migrati in Amazon Redshift.
+ Mappa un booleano come tale da un'origine PostgreSQL. Per impostazione predefinita, il tipo BOOLEAN viene migrato come varchar(1). Puoi specificare `MapBooleanAsBoolean` per consentire alla destinazione Redshift di migrare il tipo booleano come tale, come mostrato nell'esempio seguente.

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

  Tieni presente che questa impostazione, affinché abbia effetto, deve essere configurata sia sull'endpoint di origine che su quello di destinazione.

### Impostazioni delle chiavi KMS per la crittografia dei dati
<a name="CHAP_Target.Redshift.EndpointSettings.KMSkeys"></a>

I seguenti esempi mostrano la configurazione di una chiave KMS personalizzata per crittografare i dati trasmessi a S3. Per iniziare, è possibile effettuare la seguente chiamata `create-endpoint` utilizzando la 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"}'
```

Qui l'oggetto JSON specificato dall'opzione `--redshift-settings` definisce due parametri. Uno è un parametro `EncryptionMode` con il valore `SSE_KMS`. L'altro è un parametro `ServerSideEncryptionKmsKeyId` con il valore `arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1`. Questo valore è un ARN (Amazon Resource Name) per la chiave KMS personalizzata.

Per impostazione predefinita, la crittografia dei dati di S3 viene effettuata utilizzando la crittografia lato server. Per la destinazione Amazon Redshift dell'esempio precedente, ciò equivale a specificare le impostazioni degli endpoint, come nell'esempio seguente.

```
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"}'
```

Per ulteriori informazioni sull'utilizzo della crittografia lato server S3, consulta [Protezione dei dati con la crittografia lato server](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) nella *Guida per l'utente di Amazon Simple Storage Service*.

**Nota**  
È inoltre possibile utilizzare il comando CLI `modify-endpoint` per modificare il valore del parametro `EncryptionMode` per un endpoint esistente da `SSE_KMS` a `SSE_S3`. Tuttavia non puoi modificare il valore di `EncryptionMode` da `SSE_S3` a `SSE_KMS`.

### Impostazioni del bucket Amazon S3
<a name="CHAP_Target.Redshift.EndpointSettings.S3Buckets"></a>

Quando esegui la migrazione dei dati verso un endpoint di destinazione Amazon Redshift AWS DMS , utilizza un bucket Amazon S3 predefinito come storage di attività intermedio prima di copiare i dati migrati su Amazon Redshift. Gli esempi mostrati per la creazione di un endpoint di destinazione Amazon Redshift con una chiave di crittografia dei dati AWS KMS utilizzano questo bucket S3 predefinito (consulta [Impostazioni delle chiavi KMS per la crittografia dei dati](#CHAP_Target.Redshift.EndpointSettings.KMSkeys)). 

Puoi invece specificare un bucket S3 personalizzato per questo storage intermedio includendo i seguenti parametri nel valore della tua opzione sul comando: `--redshift-settings` AWS CLI `create-endpoint`
+ `BucketName`: una stringa che specifichi come nome dello storage del bucket S3. Se il ruolo di accesso al servizio si basa sulla policy `AmazonDMSRedshiftS3Role`, questo valore deve avere il prefisso `dms-`, ad esempio `dms-my-bucket-name`.
+ `BucketFolder` (facoltativo): una stringa che è possibile indicare come nome della cartella di storage nel bucket S3 specificato.
+ `ServiceAccessRoleArn`: l'ARN di un ruolo IAM che consente l'accesso amministrativo al bucket S3. Di solito, è necessario creare questo ruolo in base alla policy `AmazonDMSRedshiftS3Role`. Per un esempio, consulta la procedura per creare un ruolo IAM con la policy gestita da AWS richiesta in [Creazione e utilizzo di AWS KMS chiavi per crittografare i dati di destinazione di Amazon Redshift](#CHAP_Target.Redshift.KMSKeys).
**Nota**  
Se specifichi l'ARN di un altro ruolo IAM utilizzando l'opzione `--service-access-role-arn` del comando `create-endpoint`, questa opzione per il ruolo IAM ha la precedenza.

L'esempio seguente mostra come utilizzare questi parametri per specificare un bucket Amazon S3 personalizzato nella seguente chiamata `create-endpoint` utilizzando la 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"}'
```

## Impostazioni delle attività multithread per Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply"></a>

Puoi migliorare le prestazioni delle attività di pieno carico e acquisizione dei dati di modifica (CDC) per un endpoint di destinazione Amazon Redshift utilizzando le impostazioni delle attività multithread. Ti consentono di specificare il numero di thread simultanei e il numero di record da archiviare in un buffer.

### Impostazioni delle attività di pieno carico multithread per Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.FullLoad"></a>

Per promuovere le prestazioni del pieno carico, puoi utilizzare le seguenti impostazioni dell'attività `ParallelLoad*`:
+ `ParallelLoadThreads`: specifica il numero di thread simultanei che DMS utilizza durante un pieno carico per eseguire il push di record di dati a un endpoint di destinazione Amazon Redshift. Il valore predefinito è zero (0) e il valore massimo è 32. Per ulteriori informazioni, consulta [Impostazioni delle attività di caricamento completo](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

  Puoi impostare l'attributo `enableParallelBatchInMemoryCSVFiles` su `false` quando usi l'impostazione dell'attività `ParallelLoadThreads`. L'attributo migliora le prestazioni delle attività di pieno carico multithread di maggiori dimensioni grazie alla possibilità di DMS di scrivere sul disco anziché sulla memoria. Il valore predefinito è `true`.
+ `ParallelLoadBufferSize`: specifica il numero massimo di richieste di record di dati durante l'utilizzo di thread di caricamento paralleli con la destinazione Redshift. Il valore predefinito è 100 e il valore massimo è 1.000. Ti consigliamo di utilizzare questa opzione quando è ParallelLoadThreads > 1 (maggiore di uno).

**Nota**  
Il supporto per l'uso delle impostazioni delle `ParallelLoad*` attività durante il FULL LOAD sugli endpoint target di Amazon Redshift è disponibile nelle AWS DMS versioni 3.4.5 e successive.  
L'impostazione dell'endpoint `ReplaceInvalidChars` Redshift non è supportata per l'uso durante l'acquisizione dei dati di modifica (CDC) o durante un'attività di migrazione FULL LOAD abilitata al caricamento parallelo. È supportata per la migrazione FULL LOAD quando il caricamento parallelo non è abilitato. *Per ulteriori informazioni, consulta l'API [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)Reference AWS Database Migration Service *

### Impostazioni dell'attività di CDC multithread per Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.CDC"></a>

Per promuovere le prestazioni della CDC, puoi utilizzare le seguenti impostazioni dell'attività `ParallelApply*`.
+ `ParallelApplyThreads`: specifica il numero di thread simultanei AWS DMS utilizzati durante un caricamento CDC per inviare i record di dati a un endpoint di destinazione di Amazon Redshift. Il valore predefinito è zero (0) e il valore massimo è 32. Il valore minimo consigliato è pari al numero di sezioni del cluster.
+ `ParallelApplyBufferSize`: specifica il numero massimo di richieste di record di dati durante l'utilizzo di thread di applicazione paralleli con la destinazione Redshift. Il valore predefinito è 100 e il valore massimo è 1.000. Consigliamo di utilizzare questa opzione quando è ParallelApplyThreads > 1 (maggiore di uno). 

  Per ottenere il massimo vantaggio da Redshift come destinazione, è opportuno che il valore di `ParallelApplyBufferSize` sia almeno due volte (il doppio) il numero di`ParallelApplyThreads`.

**Nota**  
Il supporto per l'uso delle impostazioni delle `ParallelApply*` attività durante il CDC verso gli endpoint di destinazione Amazon Redshift è disponibile AWS DMS nelle versioni 3.4.3 e successive.

Il livello di parallelismo applicato dipende dalla correlazione tra la *dimensione del batch* totale e la *dimensione massima del file* utilizzato per trasferire i dati. Quando si utilizzano impostazioni dell'attività di CDC multithread con una destinazione Redshift, si ottengono vantaggi quando la dimensione del batch è elevata rispetto alla dimensione massima del file. Ad esempio, per ottimizzare le prestazioni è possibile utilizzare la seguente combinazione di impostazioni dell'endpoint e dell'attività. 

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

// Task settings

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

Utilizzando le impostazioni dell'esempio precedente, un cliente con un carico di lavoro transazionale intenso trae vantaggio dal fatto che il buffer batch, contenente 8000 record, viene riempito in 1800 secondi e utilizza 32 thread paralleli con una dimensione massima del file di 250 MB.

Per ulteriori informazioni, consulta [Impostazioni di ottimizzazione dell'elaborazione delle modifiche](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).

**Nota**  
Le query DMS eseguite durante la replica continua su un cluster Redshift possono condividere la stessa coda di gestione del carico di lavoro con altre query applicative in esecuzione. Pertanto, prendi in considerazione la corretta configurazione delle proprietà di gestione del carico di lavoro per influenzare le prestazioni durante la replica continua su una destinazione Redshift. Ad esempio, se sono in esecuzione altre query ETL parallele, DMS viene eseguito più lentamente e i miglioramenti delle prestazioni sono vanificati.

## Tipi di dati di destinazione per Amazon Redshift.
<a name="CHAP_Target.Redshift.DataTypes"></a>

L'endpoint Amazon Redshift per AWS DMS supporta la maggior parte dei tipi di dati Amazon Redshift. La tabella seguente mostra i tipi di dati target di Amazon Redshift supportati durante l'utilizzo AWS DMS e la mappatura predefinita dei tipi di AWS DMS dati.

Per ulteriori informazioni sui tipi di AWS DMS dati, consulta. [Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md)


| AWS DMS tipi di dati | Tipi di dati Amazon Redshift | 
| --- | --- | 
| BOOLEAN | BOOL | 
| BYTES | VARCHAR (lunghezza) | 
| DATE | DATE | 
| TIME | VARCHAR(20) | 
| DATETIME |  Se la scala è => 0 e =< 6, a seconda del tipo di colonna di destinazione Redshift, il valore è uno dei seguenti: TIMESTAMP (s) TIMESTAMPTZ (s): se il timestamp di origine contiene un offset di zona (come in SQL Server oppure Oracle), viene convertito in UTC al momento dell’inserimento/aggiornamento. Se non contiene un offset, l’ora viene già considerata in UTC. Se il dimensionamento è => 7 e =< 9:  VARCHAR (37) | 
| INT1 | INT2 | 
| INT2 | INT2 | 
| INT4 | INT4 | 
| INT8 | INT8 | 
| NUMERIC | Se il dimensionamento è => 0 e =< 37:  NUMERIC (p,s)  Se il dimensionamento è => 38 e =< 127:  VARCHAR (lunghezza) | 
| REAL4 | FLOAT4 | 
| REAL8 | FLOAT8 | 
| STRING | Se la lunghezza è compresa tra 1 e 65.535, utilizza VARCHAR (lunghezza in byte)  Se la lunghezza è compresa tra 65.536 e 2.147.483.647, utilizza VARCHAR (65535) | 
| UINT1 | INT2 | 
| UINT2 | INT2 | 
| UINT4 | INT4 | 
| UINT8 | NUMERIC (20,0) | 
| WSTRING |  Se la lunghezza è compresa tra 1 e 65.535, utilizza NVARCHAR (lunghezza in byte)  Se la lunghezza è compresa tra 65.536 e 2.147.483.647, utilizza NVARCHAR (65535) | 
| BLOB | VARCHAR (dimensioni massime di LOB \$12)  Le dimensioni massime di LOB non possono superare 31 KB. Amazon Redshift non supporta VARCHARs dimensioni superiori a 64 KB. | 
| NCLOB | NVARCHAR (dimensioni massime di LOB)  Le dimensioni massime di LOB non possono superare 63 KB. Amazon Redshift non supporta VARCHARs dimensioni superiori a 64 KB. | 
| CLOB | VARCHAR (dimensioni massime di LOB)  Le dimensioni massime di LOB non possono superare 63 KB. Amazon Redshift non supporta VARCHARs dimensioni superiori a 64 KB. | 

## Utilizzo AWS DMS con Amazon Redshift Serverless come destinazione
<a name="CHAP_Target.Redshift.RSServerless"></a>

AWS DMS supporta l'utilizzo di Amazon Redshift Serverless come endpoint di destinazione. Per informazioni sull'uso di Amazon Redshift serverless, consulta [Amazon Redshift serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html) nella [Guida alla gestione di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html).

Questo argomento descrive come utilizzare un endpoint Serverless Amazon Redshift con. AWS DMS

**Nota**  
Quando crei un endpoint Serverless Amazon Redshift, per il **DatabaseName**campo della configurazione degli [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)endpoint, usa il nome del data warehouse Amazon Redshift o il nome dell'endpoint del gruppo di lavoro. Per il **ServerName**campo, usa il valore di Endpoint visualizzato nella pagina **Workgroup** per il cluster serverless (ad esempio,). `default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com` Per informazioni su come creare un endpoint, vedi [Creazione di endpoint di origine e destinazione](CHAP_Endpoints.Creating.md). Per informazioni sull'endpoint del gruppo di lavoro, consulta [Connessione ad Amazon Redshift serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html).

### Policy di attendibilità con Amazon Redshift serverless come destinazione
<a name="CHAP_Target.Redshift.RSServerless.policy"></a>

Quando utilizzi Amazon Redshift serverless come endpoint di destinazione, devi aggiungere la seguente sezione evidenziata alla policy di attendibilità. Questa policy di attendibilità è associata al ruolo `dms-access-for-endpoint`.

Per ulteriori informazioni sull'utilizzo di una politica di fiducia con AWS DMS, consulta. [Creazione dei ruoli IAM da utilizzare con AWS DMS](security-iam.md#CHAP_Security.APIRole)

### Limitazioni all'utilizzo di Amazon Redshift serverless come destinazione
<a name="CHAP_Target.Redshift.RSServerless.Limitations"></a>

L'utilizzo di Redshift serverless come destinazione prevede le seguenti limitazioni:
+ AWS DMS supporta Amazon Redshift Serverless come endpoint solo nelle regioni che supportano Amazon Redshift Serverless. Per informazioni sulle regioni che supportano Amazon Redshift serverless, consulta **API Redshift serverless** nell'argomento [Endpoint e quote di Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/redshift-service.html) della [Guida di riferimento generale di AWS](https://docs.aws.amazon.com/general/latest/gr/Welcome.html).
+ Quando utilizzi il routing VPC avanzato, assicurati di creare un endpoint Amazon S3 nello stesso VPC del cluster Redshift serverless o del cluster con provisioning Redshift. Per ulteriori informazioni, consulta [Utilizzo del routing VPC avanzato con Amazon Redshift come destinazione per AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC).
+ AWS DMS non supporta Enhanced Throughput for Amazon Redshift Serverless come destinazione. Per ulteriori informazioni, consulta [Throughput migliorato per le migrazioni a pieno carico da Oracle ad Amazon Redshift e Amazon S3](CHAP_Serverless.Components.md#CHAP_Serverless.Throughput).
+ AWS DMS non supporta connessioni ad Amazon Redshift Redshift Serverless quando la modalità SSL è impostata su. `verify-full` Per le connessioni che richiedono la verifica SSL verso destinazioni Serverless di Amazon Redshift, utilizza modalità SSL alternative come o. `require` `verify-ca`

# Utilizzo di un database SAP ASE come destinazione per AWS Database Migration Service
<a name="CHAP_Target.SAP"></a>

È possibile migrare i dati verso i database SAP Adaptive Server Enterprise (ASE), precedentemente noti come SyBase, utilizzando una qualsiasi delle fonti di database supportate. AWS DMS

Per informazioni sulle versioni di SAP ASE supportate come destinazione, vedere. AWS DMS [Obiettivi per AWS DMS](CHAP_Introduction.Targets.md)

## Prerequisiti per l'utilizzo di un database SAP ASE come destinazione per AWS Database Migration Service
<a name="CHAP_Target.SAP.Prerequisites"></a>

Prima di iniziare a utilizzare un database SAP ASE come destinazione per AWS DMS, assicurati di avere i seguenti prerequisiti:
+ Fornisci all'utente l'accesso all'account SAP ASE. AWS DMS Questo utente deve disporre dei read/write privilegi nel database SAP ASE.
+ In alcuni casi, è possibile eseguire la replica in SAP ASE versione 15.7 installato in un'istanza Amazon EC2 di Microsoft Windows configurata con caratteri non latini (ad esempio, cinese). In questi casi, AWS DMS richiede l'installazione di SAP ASE 15.7 sulla SP121 macchina SAP ASE di destinazione.

## Limitazioni nell'utilizzo di un database SAP ASE come destinazione per AWS DMS
<a name="CHAP_Target.SAP.Limitations"></a>

Quando si utilizza un database SAP ASE come destinazione per AWS DMS, si applicano le seguenti limitazioni:
+ AWS DMS non supporta tabelle che includono campi con i seguenti tipi di dati. Le colonne replicate con questi tipi di dati vengono mostrate come null. 
  + Tipo definito dall'utente (UDT, User-Defined Type)

## Impostazioni degli endpoint quando si utilizza SAP ASE come destinazione per AWS DMS
<a name="CHAP_Target.SAP.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni di endpoint per configurare il database di destinazione SAP ASE in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la `--sybase-settings '{"EndpointSetting": "value", ...}'` sintassi JSON.

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con SAP ASE come destinazione.

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

## Tipi di dati di destinazione per SAP ASE
<a name="CHAP_Target.SAP.DataTypes"></a>

La tabella seguente mostra i tipi di dati di destinazione del database SAP ASE supportati durante l'utilizzo AWS DMS e la mappatura predefinita dei tipi di dati. AWS DMS 

Per ulteriori informazioni sui tipi di AWS DMS dati, vedere. [Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md)


|  AWS DMS tipi di dati  |  Tipi di dati SAP ASE  | 
| --- | --- | 
| BOOLEAN | BIT | 
| BYTES | VARBINARY (lunghezza) | 
| DATE | DATE | 
| TIME | TIME | 
| TIMESTAMP |  Se il dimensionamento è => 0 e =< 6: BIGDATETIME  Se il dimensionamento è => 7 e =< 9, VARCHAR (37)  | 
| INT1 | TINYINT | 
| INT2 | SMALLINT | 
| INT4 | INTEGER | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | DOUBLE PRECISION | 
| STRING | VARCHAR (lunghezza) | 
| UINT1 | TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | VARCHAR (lunghezza) | 
| BLOB | IMAGE | 
| CLOB | UNITEXT | 
| NCLOB | TEXT | 

# Utilizzo di Amazon S3 come destinazione per AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

Puoi migrare i dati su Amazon S3 AWS DMS utilizzando una qualsiasi delle fonti di database supportate. Quando si utilizza Amazon S3 come destinazione in un' AWS DMS attività, per impostazione predefinita i dati CDC (full load e change data capture) vengono scritti nel formato con valori separati da virgole (.csv). Per opzioni di storage più compatto e per query più rapide, è possibile scrivere i dati nel formato Apache Parquet (.parquet). 

AWS DMS nomina i file creati durante un caricamento completo utilizzando un contatore esadecimale incrementale, ad esempio .csv,... LOAD00001 LOAD00002 , A e così via per LOAD00009 i LOAD0000 file.csv. AWS DMS nomina i file CDC utilizzando i timestamp, ad esempio 20141029-1134010000.csv. Per ogni tabella di origine che contiene record, AWS DMS crea una cartella nella cartella di destinazione specificata (se la tabella di origine non è vuota). AWS DMS scrive tutti i file a pieno carico e CDC nel bucket Amazon S3 specificato. Puoi controllare la dimensione dei file AWS DMS creati utilizzando l'impostazione dell'[MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-MaxFileSize)endpoint. 

Il parametro `bucketFolder` contiene il percorso in cui i file .csv o .parquet vengono archiviati prima di essere caricati nel bucket S3. Con i file .csv i dati di tabella vengono archiviati nel formato seguente nel bucket S3 con i file di pieno carico.

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

Puoi specificare il delimitatore di colonna, di riga e altri parametri utilizzando gli attributi di connessione aggiuntivi. Per ulteriori informazioni sugli attributi di connessione aggiuntivi, consulta [Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.Configuring) alla fine di questa sezione.

Per evitare lo spoofing, AWS DMS convalida la proprietà del bucket prima di eseguire le operazioni. Per impostazione predefinita, quando l'impostazione dell'endpoint `ExpectedBucketOwner` Amazon S3 non è specificata, AWS DMS utilizza l'ID dell' AWS account che possiede il ruolo di AWS DMS servizio come proprietario previsto del bucket.

Per migrare i dati in un bucket S3 di proprietà di un AWS account diverso, devi specificare esplicitamente il proprietario effettivo del bucket nell'impostazione dell'endpoint Amazon S3`ExpectedBucketOwner`, come illustrato di seguito. In caso contrario, l'attività di replica tra account avrà esito negativo.

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

Quando si esegue la replica delle modifiche AWS DMS ai dati utilizzando un'attività CDC, la prima colonna del file di output .csv o .parquet indica come sono stati modificati i dati di riga, come mostrato per il seguente file.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
```

Per questo esempio, supponiamo che ci sia una tabella nel database di origine. `EMPLOYEE` AWS DMS scrive i dati nel file .csv o .parquet, in risposta ai seguenti eventi:
+ Un nuovo dipendente (Bob Smith, ID dipendente 101) viene assunto il 4 giugno 2014 presso l'ufficio di New York. Nel file .csv o .parquet, il simbolo `I` nella prima colonna indica che una nuova riga è stata inserita con il comando `INSERT` nella tabella EMPLOYEE nel database di origine.
+ In data 8 ottobre 2015, Bob si trasferisce all'ufficio di Los Angeles. Nel file .csv o .parquet il simbolo `U` indica che la riga corrispondente nella tabella EMPLOYEE è stata aggiornata con il comando `UPDATE` per riflettere il trasferimento di Bob nel nuovo ufficio. Il resto della riga riflette la riga nella tabella EMPLOYEE come appare dopo `UPDATE`. 
+ Il 13 marzo 2017 Bob si trasferisce di nuovo all'ufficio di Dallas. Nel file .csv o .parquet `U` indica che la riga è stata nuovamente aggiornata con il comando `UPDATE`. Il resto della riga riflette la riga nella tabella EMPLOYEE come appare dopo `UPDATE`.
+ Dopo un periodo di tempo presso l'ufficio di Dallas, Bob lascia l'azienda. Nel file .csv o .parquet il simbolo `D` indica che la riga è stata eliminata con il comando `DELETE` nella tabella di origine. Il resto della riga riflette come la riga nella tabella EMPLOYEE appariva prima dell'eliminazione.

Si noti che, per impostazione predefinita, per CDC, AWS DMS memorizza le modifiche alle righe per ogni tabella del database indipendentemente dall'ordine delle transazioni. Se desideri archiviare le modifiche della riga nei file CDC in base all'ordine delle transazioni, è necessario utilizzare le impostazioni dell'endpoint S3 per specificarlo e il percorso della cartella in cui desideri che i file delle transazioni CDC vengano archiviati sulla destinazione S3. Per ulteriori informazioni, consulta [Capturing Data Changes (CDC) incluso l'ordine di transazione sulla destinazione S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Per controllare la frequenza delle scritture su una destinazione Amazon S3 durante un'attività di replica dei dati, puoi configurare gli attributi aggiuntivi di connessione `cdcMaxBatchInterval` e `cdcMinFileSize`. In tal modo le prestazioni possono risultare migliori durante l'analisi dei dati senza ulteriori operazioni di sovraccarico. Per ulteriori informazioni, consulta [Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.Configuring) 

**Topics**
+ [Prerequisiti per l'utilizzo di Amazon S3 come destinazione](#CHAP_Target.S3.Prerequisites)
+ [Limitazioni all'utilizzo di Amazon S3 come destinazione](#CHAP_Target.S3.Limitations)
+ [Sicurezza](#CHAP_Target.S3.Security)
+ [Utilizzo di Apache Parquet per l'archiviazione di oggetti Amazon S3](#CHAP_Target.S3.Parquet)
+ [Applicazione di tag agli oggetti Amazon S3](#CHAP_Target.S3.Tagging)
+ [Creazione di AWS KMS chiavi per crittografare gli oggetti di destinazione di Amazon S3](#CHAP_Target.S3.KMSKeys)
+ [Utilizzo del partizionamento delle cartelle in base alla data](#CHAP_Target.S3.DatePartitioning)
+ [Caricamento parallelo di sorgenti partizionate quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.Configuring)
+ [Utilizzo AWS Glue Data Catalog con un target Amazon S3 per AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Utilizzo della crittografia dei dati, dei file parquet e della CDC sulla destinazione Amazon S3](#CHAP_Target.S3.EndpointSettings)
+ [Indicazione delle operazioni del DB di origine nei dati S3 migrati](#CHAP_Target.S3.Configuring.InsertOps)
+ [Tipi di dati di destinazione per Parquet S3](#CHAP_Target.S3.DataTypes)

## Prerequisiti per l'utilizzo di Amazon S3 come destinazione
<a name="CHAP_Target.S3.Prerequisites"></a>

Prima di utilizzare Amazon S3 come destinazione, controlla che le seguenti condizioni siano soddisfatte: 
+ Il bucket S3 che stai utilizzando come destinazione si trova nella stessa AWS regione dell'istanza di replica DMS che stai utilizzando per migrare i dati.
+ L' AWS account che utilizzi per la migrazione ha un ruolo IAM con accesso in scrittura ed eliminazione al bucket S3 che stai utilizzando come destinazione.
+ In questo ruolo ha accesso con il tagging in modo da poter aggiungere tag qualsiasi oggetto S3 scritto nel bucket di destinazione.
+ Il ruolo IAM è stato aggiunto da DMS (dms.amazonaws.com) come *entità attendibile*. 
+ Per la AWS DMS versione 3.4.7 e successive, DMS deve accedere al bucket di origine tramite un endpoint VPC o una route pubblica. Per informazioni sugli endpoint VPC, consulta. [Configurazione degli endpoint VPC per AWS DMS](CHAP_VPC_Endpoints.md)

Per configurare l'accesso a questo account, assicurarsi che il ruolo assegnato all'account utente utilizzato per creare l'attività di migrazione disponga del seguente set di autorizzazioni.

------
#### [ 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"
            ]
        }
    ]
}
```

------

Per i prerequisiti per l'utilizzo della convalida con S3 come destinazione, consulta [Prerequisiti per la convalida della destinazione S3](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites).

## Limitazioni all'utilizzo di Amazon S3 come destinazione
<a name="CHAP_Target.S3.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza Amazon S3 come destinazione:
+ Non abilitare il controllo delle versioni per S3. Se hai bisogno del controllo delle versioni S3, utilizza le policy del ciclo di vita per eliminare attivamente le vecchie versioni. In caso contrario, è possibile che si verifichino errori della connessione di test dell'endpoint a causa del timeout della chiamata `list-object` S3. Per creare una policy del ciclo di vita per un bucket S3, consulta [Gestione del ciclo di vita dello storage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Per eliminare la versione di un oggetto S3, consulta [Eliminazione di versioni di oggetti da un bucket con funzione Controllo delle versioni abilitata](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Un bucket S3 abilitato per VPC (VPC del gateway) è supportato nelle versioni 3.4.7 e successive.
+ Per l'acquisizione dei dati di modifica (CDC) sono supportati i seguenti comandi DDL (Data Definition Language): Truncate Table, Drop Table, Create Table, Rename Table, Add Column, Drop Column, Rename Column e Change Column Data Type. Tieni presente che quando una colonna viene aggiunta, eliminata o rinominata nel database di origine, non viene registrata alcuna istruzione ALTER nel bucket S3 di destinazione e AWS DMS non modifica i record creati in precedenza per adattarli alla nuova struttura. Dopo la modifica, AWS DMS crea tutti i nuovi record utilizzando la nuova struttura della tabella.
**Nota**  
Un'operazione DDL di troncamento rimuove tutti i corrispondenti file e le cartelle della tabella da un bucket S3. È possibile utilizzare le impostazioni delle attività per disabilitare tale comportamento e configurare il modo in cui DMS gestisce l'approccio DDL durante l'acquisizione dei dati di modifica (CDC). Per ulteriori informazioni, consulta [Impostazioni delle attività per la gestione di DDL durante l'elaborazione delle modifiche](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).
+ La modalità LOB completa non è supportata.
+ Le modifiche apportate alla struttura della tabella di origine durante il caricamento completo non sono supportate. Le modifiche apportate ai dati sono supportate durante il pieno carico.
+ Se più attività replicano i dati dalla stessa tabella di origine allo stesso bucket dell'endpoint S3 di destinazione, tali attività scrivono sullo stesso file. Se l'origine dati proviene dalla stessa tabella, è consigliabile specificare endpoint di destinazione (bucket) diversi.
+ `BatchApply` non è supportato per un endpoint S3. L'utilizzo dell'applicazione in batch, ad esempio l'impostazione dell'attività dei metadati di destinazione `BatchApplyEnabled`, per una destinazione S3 potrebbe causare la perdita di dati.
+ Non puoi usare `DatePartitionEnabled` o `addColumnName` insieme con `PreserveTransactions` o `CdcPath`.
+ AWS DMS non supporta la ridenominazione di più tabelle di origine nella stessa cartella di destinazione utilizzando le regole di trasformazione.
+ In caso di scrittura intensiva sulla tabella di origine durante la fase di pieno carico, DMS può scrivere record duplicati nel bucket S3 o modifiche memorizzate nella cache.
+ Se configuri l'attività con il `TargetTablePrepMode` come `DO_NOTHING`, DMS può scrivere record duplicati nel bucket S3 se l'attività si interrompe e riprende improvvisamente durante la fase di pieno carico.
+ Se configuri l'endpoint di destinazione con `PreserveTransactions` impostato su `true`, il ricaricamento di una tabella non cancella i file CDC generati in precedenza. Per ulteriori informazioni, consulta [Capturing Data Changes (CDC) incluso l'ordine di transazione sulla destinazione S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Per le limitazioni all'utilizzo della convalida con S3 come destinazione, consulta [Limitazioni all'utilizzo della convalida della destinazione S3](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations).

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

Per utilizzare Amazon S3 come destinazione, l'account usato per la migrazione deve disporre dell'accesso per scrittura ed eliminazione al bucket Amazon S3 in uso come destinazione. Specifica il nome della risorsa Amazon (ARN) di un ruolo IAM che dispone delle autorizzazioni necessarie per accedere ad Amazon S3. 

AWS DMS supporta una serie di concessioni predefinite per Amazon S3, note come elenchi di controllo degli accessi predefiniti (). ACLs Ogni ACL predefinita dispone di un set di assegnatari e autorizzazioni che sono utilizzabili per impostare le autorizzazioni per il bucket Amazon S3. Puoi specificare un'ACL predefinita mediante `cannedAclForObjects` sull'attributo della stringa di connessione per l'endpoint di destinazione S3. Per ulteriori informazioni sull'utilizzo dell'attributo di connessione aggiuntivo `cannedAclForObjects`, consulta [Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.Configuring). [Per ulteriori informazioni su Amazon S3 in scatola ACLs, consulta Canned ACL.](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)

Il ruolo IAM utilizzato per la migrazione deve essere in grado di eseguire l'operazione API `s3:PutObjectAcl`.

## Utilizzo di Apache Parquet per l'archiviazione di oggetti Amazon S3
<a name="CHAP_Target.S3.Parquet"></a>

Il formato valore separato da virgole (csv) è il formato di archiviazione predefinito per gli oggetti di destinazione Amazon S3. Per storage più compatto e per query più rapide, è possibile utilizzare Apache parquet (.parquet) come formato di archiviazione.

Apache Parquet è un formato di archiviazione dei file open source originariamente progettato per Hadoop. Per ulteriori informazioni su Apache Parquet, consulta [https://parquet.apache.org/](https://parquet.apache.org/).

Per impostare.parquet come formato di storage per gli oggetti di destinazione S3 migrati, è possibile utilizzare i seguenti meccanismi:
+ Le impostazioni dell'endpoint fornite come parametri di un oggetto JSON durante la creazione dell'endpoint utilizzando la AWS CLI o l'API per AWS DMS. Per ulteriori informazioni, consulta [Utilizzo della crittografia dei dati, dei file parquet e della CDC sulla destinazione Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Gli attributi aggiuntivi di connessione forniti come un elenco separato da punti e virgola durante la creazione dell'endpoint. Per ulteriori informazioni, consulta [Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.Configuring).

## Applicazione di tag agli oggetti Amazon S3
<a name="CHAP_Target.S3.Tagging"></a>

È possibile applicare i tag agli oggetti Amazon S3 creati da un'istanza di replica specificando oggetti JSON appropriati come parte delle regole di mappatura attività-tabella. Per ulteriori informazioni sui requisiti e sulle opzioni per l'applicazione di tag agli oggetti S3, inclusi i nomi di tag validi, consulta [Tagging oggetti](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html) nella *Guida per l'utente di Amazon Simple Storage Service*. Per ulteriori informazioni sulla mappatura delle tabelle mediante JSON, consulta [Specifica della selezione delle tabelle e delle regole di trasformazione tramite JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Puoi aggiungere tag agli oggetti S3 creati per tabelle e schemi specifici utilizzando uno o più oggetti JSON del tipo di regola `selection`. Quindi fai seguire all'oggetto (o agli oggetti) `selection` uno o più oggetti JSON del tipo di regola `post-processing` con l'operazione `add-tag`. Tali regole di post elaborazione identificano gli oggetti S3 a cui desideri aggiungere tag e specificano i nomi e i valori dei tag che desideri aggiungere a questi oggetti S3.

Puoi trovare i parametri da specificare negli oggetti JSON del tipo di regola `post-processing` nella tabella riportata di seguito.

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

Quando si specificano più tipi di regole `post-processing` per applicare tag a una selezione di oggetti S3, a ogni oggetto S3 vengono aggiunti tag utilizzando un solo oggetto `tag-set` da una regola di post-elaborazione. Il set di tag utilizzato per aggiungere tag a un determinato oggetto S3 è quello della regola di post-elaborazione il cui localizzatore di oggetti associato è maggiormente corrispondente a tale oggetto S3 

Ad esempio, supponiamo che due regole di post-elaborazione identificano lo stesso oggetto S3. Supponi, inoltre, che il localizzatore di oggetti di una regola utilizza caratteri jolly e che localizzatore di oggetti dell'altra regola utilizza una corrispondenza esatta per identificare l'oggetto S3 (senza caratteri jolly). In questo caso, il set di tag associato alla regola di post-elaborazione con la corrispondenza esatta viene utilizzato per aggiungere i tag all'oggetto S3. Se più regole di post-elaborazione corrispondono a un determinato oggetto S3 in modo ugualmente valido, per aggiungere tag all'oggetto viene utilizzato il set di tag associato con la prima di tali regole di post-elaborazione.

**Example Aggiunta di tag statici a un oggetto S3 creato per una singola tabella e un singolo schema**  
La seguente selezione e regole di post produzione aggiungono tre tag (`tag_1`, `tag_2` e `tag_3` con i corrispondenti valori statici `value_1`, `value_2` e `value_3`) a un oggetto S3 creato. Questo oggetto S3 corrisponde ad una singola tabella nell'origine denominata `STOCK` con uno schema denominato `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 Aggiunta di tag statici e dinamici per oggetti S3 creato per tabelle e schemi multipli**  
L'esempio seguente ha una selezione e due regole di post-elaborazione, dove l'input dall'origine include tutte le tabelle e tutti i relativi schemi.  

```
{
    "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"
              }           ]
        }
    ]
}
```
La prima regola di post-elaborazione aggiunge due tag (`dw-schema-name` e `dw-schema-table`) con i valori dinamici corrispondenti (`${schema-name}` e `my_prefix_${table-name}`) per quasi tutti gli oggetti S3 creati nella destinazione. L'eccezione è l'oggetto S3 identificato e al quale sono applicati tag con la seconda regola di post-elaborazione. Pertanto, ogni oggetto S3 di destinazione identificato dal localizzatore di oggetti jolly viene creato con i tag che identificano lo schema e la tabella a cui corrisponde nell'origine.  
La seconda regola di post-elaborazione aggiunge `tag_1` e `tag_2` con i corrispondenti valori statici `value_1` e `value_2` a un oggetto S3 creato identificato da un localizzatore di oggetti con corrispondenza esatta. Questo oggetto S3 creato corrisponde quindi alla singola tabella nell'origine denominata `ITEM` con uno schema denominato `aat`. A causa della corrispondenza esatta, questi tag sostituiscono qualsiasi tag in questo oggetto aggiunti dalla prima regola di post-elaborazione regola, che corrisponde agli oggetti S3 solo con i caratteri jolly.

**Example Aggiunta di nomi di tag e valori dinamici a oggetti S3**  
L'esempio seguente presenta di due regole di selezione e una regola di post-elaborazione. Qui l'input dall'origine include solo la tabella `ITEM` nello schema `retail` o nello schema `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"
              }
            ]
    ]
}
```
Il set di tag della regola di post-elaborazione aggiunge due tag (`dw-schema-name` e `dw-schema-table`) a tutti gli oggetti S3 creati per la tabella `ITEM` nella destinazione. Il primo tag ha il valore dinamico `"${schema-name}"` e il secondo tag ha un valore statico, `"my_prefix_ITEM"`. Pertanto, ogni oggetto S3 di destinazione viene creato con i tag che identificano lo schema e la tabella a cui corrisponde nell'origine.   
Inoltre, il set di tag aggiunge due ulteriori tag con nomi dinamici (`${schema-name}_ITEM_tag_1` e `"${schema-name}_ITEM_tag_2"`). Questi hanno i corrispondenti valori statici `value_1` e `value_2`. Pertanto, ognuno di questi tag viene denominato per o schema attuale, `retail` o `wholesale`. In questo oggetto non è possibile creare un nome di tag dinamico duplicato, perché ogni oggetto viene creato per un unico nome di schema univoco. Il nome dello schema viene utilizzato per creare un nome di tag univoco.

## Creazione di AWS KMS chiavi per crittografare gli oggetti di destinazione di Amazon S3
<a name="CHAP_Target.S3.KMSKeys"></a>

Puoi creare e utilizzare AWS KMS chiavi personalizzate per crittografare i tuoi oggetti di destinazione Amazon S3. Dopo aver creato una chiave KMS, è possibile utilizzarla per crittografare gli oggetti tramite uno dei seguenti approcci al momento della creazione dell'endpoint di destinazione S3:
+ Utilizza le seguenti opzioni per gli oggetti di destinazione S3 (con l'impostazione predefinita per lo storage di file in formato .csv) quando esegui il comando `create-endpoint` utilizzando la 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"}'
  ```

  Qui, il tuo- `your-KMS-key-ARN` è l'Amazon Resource Name (ARN) per la tua chiave KMS ed è necessario che il tuo ruolo IAM disponga delle autorizzazioni di accesso, vedi. [Utilizzo della crittografia dei dati, dei file parquet e della CDC sulla destinazione Amazon S3](#CHAP_Target.S3.EndpointSettings)
+ Imposta l'attributo di connessione aggiuntivo `encryptionMode` sul valore `SSE_KMS` e l'attributo della connessione aggiuntiva `serverSideEncryptionKmsKeyId` per l'ARN per la chiave KMS. Per ulteriori informazioni, consulta [Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.Configuring).

Per crittografare gli oggetti di destinazione Amazon S3 utilizzando una chiave KMS, è necessario disporre di un ruolo IAM che abbia le autorizzazioni per accedere al bucket Amazon S3. È possibile accedere a questo ruolo IAM in una policy (policy della chiave) collegata alla chiave di crittografia creata. È possibile farlo nella console IAM creando quanto segue:
+ Una policy con le autorizzazioni ad accedere al bucket Amazon S3.
+ Un ruolo IAM con la policy.
+ Una chiave di crittografia KMS con una policy della chiave che fa riferimento a questo ruolo.

Nelle seguenti procedure viene descritto come procedere.

**Per creare una policy IAM con le autorizzazioni ad accedere al bucket Amazon S3**

1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Nel riquadro di navigazione seleziona **Policies (Policy)**. Viene visualizzata la pagina **Policies (Policy)**.

1. Scegli **Crea policy**. Viene visualizzata la pagina **Crea policy**.

1. Scegli **Service (Servizio)**, quindi **S3**. Viene visualizzato un elenco di autorizzazioni di azioni.

1. Scegli **Expand all (Espandi tutto)** per espandere l'elenco e scegli come minimo le seguenti autorizzazioni:
   + **ListBucket**
   + **PutObject**
   + **DeleteObject**

   Scegli qualsiasi altra autorizzazione di cui hai bisogno, quindi scegli **Collapse all (Comprimi tutto)** per comprimere l'elenco.

1. Scegli **Resources (Risorse)** per specificare le risorse di cui desideri accedere. Come minimo, scegli **Tutte le risorse** per fornire l'accesso generale alle risorse Amazon S3.

1. Aggiungi tutte le altre condizioni o le autorizzazioni necessarie, quindi scegli **Review policy (Esamina policy)**. Controlla i tuoi risultati nella pagina **Review policy (Esamina policy)**.

1. Se le impostazioni sono quelle desiderate, immetti un nome per la policy (ad esempio, `DMS-S3-endpoint-access`) e qualsiasi ulteriore descrizione, quindi scegli **Create policy (Crea policy)**. Viene visualizzata la pagina **Policies (Policy)** con un messaggio che indica che la policy è stata creata.

1. Ricerca e scegli il nome della policy nell'elenco **Policies (Policy)** Viene visualizzata la pagina **Summary (Riepilogo)** che visualizza il file JSON per la policy simile al seguente.

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

****  

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

------

È stata creata la nuova policy per accedere alle risorse Amazon S3 per la crittografia con un nome specificato, ad esempio `DMS-S3-endpoint-access`.

**Per creare un ruolo IAM con questa policy**

1. Nella console IAM scegli **Ruoli** nel riquadro di navigazione. Viene visualizzata la pagina dei dettagli **Roles (Ruoli)**.

1. Scegli **Crea ruolo**. Viene visualizzata la pagina **Create role (Crea ruolo)**.

1. Con il AWS servizio selezionato come entità affidabile, scegli **DMS** come servizio per utilizzare il ruolo IAM.

1. Scegli **Successivo: autorizzazioni**. Viene visualizzata la vista **Allega policy di autorizzazione** nella pagina **Crea ruolo**.

1. Individuare e selezionare la policy IAM per il ruolo IAM creato nella procedura precedente (`DMS-S3-endpoint-access`).

1. Scegli **Successivo: Tag**. Viene visualizzata la vista **Aggiungi tag** nella pagina **Crea ruolo**. Qui è possibile aggiungere i tag desiderati.

1. Scegli **Prossimo: Rivedi**. Viene visualizzata la vista **Verifica** nella pagina **Crea ruolo**. Qui è possibile verificare i risultati.

1. Se le impostazioni sono quelle desiderate, immetti un nome per il ruolo (richiesto, ad esempio, `DMS-S3-endpoint-access-role`) e qualsiasi ulteriore descrizione, quindi scegli **Create role (Crea ruolo)**. Viene visualizzata la pagina dei dettagli **Roles (Ruoli)** con un messaggio che indica che il ruolo è stato creato.

È stato creato il nuova ruolo per accedere alle risorse Amazon S3 per la crittografia con un nome specificato, ad esempio `DMS-S3-endpoint-access-role`.

**Per creare una chiave di crittografia KMS con una policy della chiave che faccia riferimento al ruolo IAM**
**Nota**  
Per ulteriori informazioni su come AWS DMS funzionano le chiavi di AWS KMS crittografia, consulta[Impostazione di una chiave di crittografia e specificazione delle autorizzazioni AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Accedi a Console di gestione AWS e apri la console AWS Key Management Service (AWS KMS) in [https://console.aws.amazon.com/kms.](https://console.aws.amazon.com/kms)

1. Per modificare il Regione AWS, usa il selettore della regione nell'angolo in alto a destra della pagina.

1. Nel riquadro di navigazione, scegli **Chiavi gestite dal cliente**.

1. Scegli **Crea chiave**. Verrà visualizzata la pagina **Configure key (Configura chiave)**.

1. Alla voce **Key type (Tipo di chiave)**, scegliere **Symmetric (Simmetrica)**.
**Nota**  
Quando crei questa chiave, puoi creare solo una chiave simmetrica, perché tutti i AWS servizi, come Amazon S3, funzionano solo con chiavi di crittografia simmetriche.

1. Scegliere **Advanced Options (Opzioni avanzate)**. Alla voce **Key material origin (Origine del materiale della chiave)**, assicurarsi che sia selezionata la voce **KMS** quindi scegliere **Next (Avanti)**. Verrà visualizzata la pagina **Add labels (Aggiungi etichette)**.

1. Alla voce **Create alias and description (Crea alias e descrizione)**, inserire un alias per la chiave (ad esempio `DMS-S3-endpoint-encryption-key`) e qualsiasi descrizione aggiuntiva.

1. Alla voce **Tag**, aggiungere tutti i tag desiderati per identificare la chiave e monitorarne l'utilizzo, quindi scegliere **Next (Avanti)**. Verrà visualizzata la pagina **Define key administrative permissions (Definisci autorizzazioni amministrative della chiave)** che mostra un elenco di utenti e ruoli tra cui è possibile scegliere.

1. Aggiungi gli utenti e i ruoli che desideri gestiscano la chiave. Assicurati che questi utenti e ruoli dispongano delle autorizzazioni necessarie per gestire la chiave. 

1. Alla voce **Key deletion (Eliminazione chiave)**, scegliere se gli amministratori della chiave possono eliminarla, quindi scegliere **Next (Avanti)**. Verrà visualizzata la pagina **Define key usage permissions (Definisci autorizzazioni di utilizzo della chiave)** che mostra un elenco aggiuntivo di utenti e ruoli tra cui è possibile scegliere.

1. Per **Questo account** scegli tra gli utenti disponibili quelli che dovranno eseguire operazioni di crittografia sulle destinazioni Amazon S3. Scegli in **Ruoli** il ruolo creato in precedenza per abilitare l'accesso alla crittografia degli oggetti di destinazione Amazon S3, ad esempio `DMS-S3-endpoint-access-role`.

1. **Se desideri aggiungere altri account non elencati per avere lo stesso accesso, per **Altri AWS account, scegli **Aggiungi un AWS ** altro account**, quindi scegli Avanti.** Verrà visualizzata la pagina **Review and edit key policy (Rivedi e modifica la policy della chiave)** che mostra il JSON associato alla policy della chiave, che è possibile rivedere e modificare digitando all'interno del testo esistente. Qui è possibile visualizzare il punto in cui la policy della chiave fa riferimento al ruolo e agli utenti (ad esempio,`Admin` e `User1`) selezionati nella fase precedente. È anche possibile visualizzare le diverse operazioni sulla chiave permesse alle diverse entità (utenti e ruoli), come mostrato nel seguente esempio.

------
#### [ 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. Scegli **Fine**. Viene visualizzata la pagina **Chiavi di crittografia** con un messaggio che indica che la chiave KMS è stata creata.

È stata creata una nuova chiave KMS con un alias specificato (ad esempio, `DMS-S3-endpoint-encryption-key`). Questa chiave consente di AWS DMS crittografare gli oggetti di destinazione di Amazon S3.

## Utilizzo del partizionamento delle cartelle in base alla data
<a name="CHAP_Target.S3.DatePartitioning"></a>

AWS DMS supporta le partizioni di cartelle S3 in base alla data di commit della transazione quando utilizzi Amazon S3 come endpoint di destinazione. Con il partizionamento delle cartelle in base alla data puoi scrivere dati da un'unica tabella di origine in una struttura di cartelle con la gerarchia basata sulla data di un bucket S3. Il partizionamento delle cartelle eseguito durante la creazione di un endpoint di destinazione S3 offre i seguenti vantaggi:
+ Migliore gestione degli oggetti S3
+ Limite della dimensione di ogni cartella S3
+ Ottimizzazione delle query sul data lake o altre operazioni successive

Il partizionamento delle cartelle in base alla data si abilita quando si crea un endpoint di destinazione S3. È possibile abilitarlo quando si migrano i dati esistenti e si replicano le modifiche in corso (pieno carico e CDC) oppure si replicano solo le modifiche ai dati (sola CDC). Quando migri i dati esistenti e replichi le modifiche in corso, verranno partizionate solo le modifiche in corso. Utilizza le seguenti impostazioni dell'endpoint di destinazione:
+ `DatePartitionEnabled`: specifica il partizionamento in base alla data. Imposta questa opzione booleana su `true` per eseguire il partizionamento delle cartelle del bucket S3 in base alla data di commit delle transazioni. 

  Non è possibile utilizzare questa impostazione con `PreserveTransactions` o `CdcPath`.

  Il valore predefinito è `false`. 
+ `DatePartitionSequence`: identifica la sequenza del formato della data da utilizzare durante il partizionamento delle cartelle. Imposta questa opzione ENUM su `YYYYMMDD`, `YYYYMMDDHH`, `YYYYMM`, `MMYYYYDD` o `DDMMYYYY`. Il valore predefinito è `YYYYMMDD`. Utilizza questa impostazione quando `DatePartitionEnabled` è impostato su `true.`
+ `DatePartitionDelimiter`: specifica un delimitatore di separazione della data da utilizzare durante il partizionamento delle cartelle. Imposta questa opzione ENUM su `SLASH`, `DASH`, `UNDERSCORE` o `NONE`. Il valore predefinito è `SLASH`. Utilizza questa impostazione quando `DatePartitionEnabled` è impostato su `true`.
+ `DatePartitionTimezone`— Quando crei un endpoint di destinazione S3, imposta `DatePartitionTimezone` per convertire l'ora UTC corrente in un fuso orario specificato. La conversione avviene quando viene creata una cartella di partizione della data e viene generato un nome di file CDC. Il formato del fuso orario è Area/Posizione. Utilizzate questo parametro quando `DatePartitionedEnabled` è impostato su`true`, come illustrato nell'esempio seguente:

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

L'esempio seguente mostra come abilitare il partizionamento delle cartelle in base alla data, con valori predefiniti per la sequenza di partizione dei dati e il delimitatore. Utilizza l'`--s3-settings '{json-settings}'`opzione di AWS CLI. `create-endpoint`comando. 

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

## Caricamento parallelo di sorgenti partizionate quando si utilizza Amazon S3 come destinazione per AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

Puoi configurare un pieno carico parallelo di origini dati partizionate in destinazioni Amazon S3. Questo approccio migliora i tempi di caricamento per la migrazione dei dati partizionati dai motori di database di origine supportati alla destinazione S3. Per migliorare i tempi di caricamento dei dati di origine partizionati, crei sottocartelle di destinazione S3 mappate alle partizioni di ogni tabella del database di origine. Queste sottocartelle legate a partizioni consentono di AWS DMS eseguire processi paralleli per popolare ogni sottocartella sulla destinazione.

Per configurare un pieno carico parallelo di una destinazione S3, S3 supporta tre tipi di regole `parallel-load` per la regola `table-settings` di mappatura delle tabelle:
+ `partitions-auto`
+ `partitions-list`
+ `ranges`

Per ulteriori informazioni su questi tipi di regole di caricamento parallelo, consulta [Regole e operazioni delle impostazioni di tabella e raccolta](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

Per i tipi di regole `partitions-auto` e `partitions-list`, AWS DMS utilizza ogni nome di partizione dell'endpoint di origine per identificare la struttura della sottocartella di destinazione, come segue.

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

Qui, il percorso della sottocartella in cui i dati vengono migrati e archiviati sulla destinazione S3 include una sottocartella `partition_name` aggiuntiva che corrisponde a una partizione di origine con lo stesso nome. Questa sottocartella `partition_name` archivia uno o più file `LOADseq_num.csv` contenenti i dati migrati dalla partizione di origine specificata. `seq_num` è il suffisso del numero di sequenza nel nome del file.csv, ad esempio `00000001` nel file.csv denominato `LOAD00000001.csv`.

Tuttavia, alcuni motori di database, come MongoDB e DocumentDB, non supportano il concetto di partizione. Per questi motori di database, AWS DMS aggiunge l'indice del segmento di origine in esecuzione come prefisso al nome del file.csv di destinazione, come segue.

```
.../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
```

Qui, i file `SEGMENT1_LOAD00000001.csv` e `SEGMENT1_LOAD00000002.csv` sono denominati con lo stesso prefisso dell'indice del segmento di origine in esecuzione `SEGMENT1`. Sono denominati così perché i dati di origine migrati per questi due file .csv sono associati allo stesso indice del segmento di origine in esecuzione. I dati migrati archiviati in ciascuno dei file `SEGMENT2_LOAD00000009.csv` e `SEGMENT3_LOAD0000000A.csv` di destinazione sono associati a diversi indici dei segmenti di origine in esecuzione. Ogni file ha il nome preceduto dal nome dell'indice del segmento in esecuzione `SEGMENT2` e `SEGMENT3`.

Per il tipo di caricamento parallelo `ranges`, è possibile definire i nomi e i valori delle colonne utilizzando le impostazioni `columns` e `boundaries` delle regole `table-settings`. Con queste regole puoi specificare le partizioni corrispondenti ai nomi dei segmenti, come segue.

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

Qui, l'impostazione `segment-names` definisce i nomi di tre partizioni per migrare i dati in parallelo sulla destinazione S3. I dati migrati vengono caricati in parallelo e archiviati in file.csv nelle sottocartelle delle partizioni nell'ordine, come indicato di seguito.

```
.../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
```

Qui, AWS DMS memorizza una serie di file.csv in ciascuna delle tre sottocartelle di partizione. La serie di file .csv in ogni sottocartella di partizione viene denominata in modo incrementale a partire da `LOAD00000001.csv` fino alla migrazione di tutti i dati.

In alcuni casi, puoi non denominare in modo esplicito le sottocartelle di partizione per il tipo di caricamento parallelo `ranges` utilizzando l'impostazione `segment-names`. In questi casi, AWS DMS applica l'impostazione predefinita di creare ogni serie di file.csv nella relativa sottocartella. `table_name` Qui, AWS DMS antepone ai nomi di file di ogni serie di file .csv il nome dell'indice del segmento di origine in esecuzione, come segue.

```
.../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
```

## Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

È possibile utilizzare le impostazioni degli endpoint per configurare la destinazione Amazon S3 in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la `--s3-settings '{"EndpointSetting": "value", ...}'` sintassi JSON.

**Nota**  
DMS scrive le modifiche ai file Parquet in base all'ordine di commit dal database di origine, ma quando si migrano più tabelle, l'ordine delle transazioni originale non viene mantenuto a causa del partizionamento a livello di tabella. Per mantenere le informazioni sulla sequenza delle transazioni, configura l'impostazione dell'`TimestampColumnName`endpoint in modo da includere il timestamp di commit di origine per ogni riga, che potrai quindi utilizzare nell'elaborazione a valle per ricostruire la sequenza di transazione originale. A differenza del formato CSV, che offre l'`PreserveTransactions`impostazione, i file Parquet gestiscono le transazioni in modo diverso grazie alla loro struttura di archiviazione a colonne, ma questo approccio consente un monitoraggio accurato dei tempi di commit all'origine, supporta la ricostruzione degli ordini delle transazioni post-migrazione e consente un'elaborazione efficiente dei dati mantenendo la coerenza dei dati.

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con Amazon S3 come destinazione.


| **Opzione** | **Descrizione** | 
| --- | --- | 
| CsvNullValue |  Un parametro opzionale che specifica come vengono trattati i valori nulli. AWS DMS Durante la gestione del valore null, puoi utilizzare questo parametro per passare una stringa definita dall'utente come null durante la scrittura nella destinazione. Ad esempio, quando le colonne di destinazione sono nullable, puoi utilizzare questa opzione per distinguere tra il valore di stringa vuoto e il valore null.  Valore predefinito: `""` Valori validi: qualsiasi stringa valida Ad esempio: `--s3-settings '{"CsvNullValue": "NULL"}'` Se il valore della colonna del database di origine è nullo, nel file CSV S3, il valore della colonna è `NULL` al posto della stringa «».  | 
| AddColumnName |  Un parametro facoltativo che, quando impostato a `true` o a `y`, è possibile utilizzare per aggiungere informazioni al nome di colonna nel file .csv di output. Non è possibile utilizzare questo parametro con `PreserveTransactions` o `CdcPath`. Valore predefinito: `false` Valori validi: `true`, `false`, `y`, `n` Ad esempio: `--s3-settings '{"AddColumnName": true}'`  | 
| AddTrailingPaddingCharacter |  Usa l'impostazione dell'endpoint di destinazione S3 `AddTrailingPaddingCharacter` per aggiungere il riempimento ai dati delle stringhe. Il valore predefinito è `false`. Tipo: Booleano Ad esempio: `--s3-settings '{"AddTrailingPaddingCharacter": true}'`  | 
| BucketFolder |  Parametro opzionale per impostare un nome di cartella nel bucket S3. Se forniti, gli oggetti di destinazione vengono creati come file .csv o .parquet nel percorso `BucketFolder/schema_name/table_name/`. Se questo parametro non viene specificato, viene utilizzato il percorso `schema_name/table_name/`.  Ad esempio: `--s3-settings '{"BucketFolder": "testFolder"}'`  | 
| BucketName |  Il nome del bucket S3 in cui gli oggetti di destinazione S3 vengono creati come file .csv o .parquet. Ad esempio: `--s3-settings '{"BucketName": "buckettest"}'`  | 
| CannedAclForObjects |  Un valore che consente di AWS DMS specificare un elenco di controllo degli accessi predefinito (predefinito) per gli oggetti creati nel bucket S3 come file.csv o .parquet. *Per ulteriori informazioni su Amazon S3 in scatola ACLs, consulta [Canned ACL nella](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) Amazon S3 Developer Guide.* Valore predefinito: NONE I valori validi per questo attributo sono: NONE; PRIVATE; PUBLIC\$1READ; PUBLIC\$1READ\$1WRITE; AUTHENTICATED\$1READ; \$1READ; BUCKET\$1OWNER\$1READ; BUCKET\$1OWNER\$1FULL\$1CONTROL. AWS\$1EXEC Ad esempio: `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'`  | 
| CdcInsertsOnly |  Un parametro facoltativo durante il caricamento dell'acquisizione delle modifiche dei dati (Change Data Capture, CDC) per scrivere solo le operazioni INSERT nei file di output con valori separati da virgole (.csv) o file di storage colonnare (.parquet). Per impostazione predefinita (l'impostazione `false`), il primo campo in un record .csv o .parquet record contiene la lettera I (INSERT, inserisci), U (UPDATE, aggiorna) o D (DELETE, elimina). Questa lettera indica se la riga è stata inserita, aggiornata o eliminata nel database di origine di un caricamento CDC sulla destinazione. INSERTs Se è `true` impostato `y` su o, solo `cdcInsertsOnly` dal database di origine viene effettuata la migrazione al file.csv o .parquet. Solo per il formato .csv, la modalità di registrazione di queste istruzioni INSERT varia a seconda del valore di `IncludeOpForFullLoad`. Se `IncludeOpForFullLoad` è impostato su `true`, il primo campo di ogni record CDC è impostato su I per confermare l'operazione INSERT all'origine. Se `IncludeOpForFullLoad` è impostato su `false`, ogni record CDC viene scritto senza un primo campo per confermare l'operazione INSERT all'origine. Per ulteriori informazioni sul funzionamento congiunto di questi parametri, consulta [Indicazione delle operazioni del DB di origine nei dati S3 migrati](#CHAP_Target.S3.Configuring.InsertOps). Valore predefinito: `false` Valori validi: `true`, `false`, `y`, `n` Ad esempio: `--s3-settings '{"CdcInsertsOnly": true}'`  | 
| CdcInsertsAndUpdates |  Permette a una Change Data Capture (CDC) di scrivere le operazioni INSERT e UPDATE nei file di output con estensione .csv o .parquet (memorizzazione in formato colonnare). L'impostazione predefinita è`false`, ma quando `cdcInsertsAndUpdates` è impostata su `true` o `y` INSERTs e UPDATEs dal database di origine vengono migrate al file.csv o .parquet.  Solo per il formato di file.csv, il modo in cui questi annunci INSERTs UPDATEs vengono registrati dipende dal valore del parametro. `includeOpForFullLoad` Se `includeOpForFullLoad` è impostato su `true`, il primo campo di ogni record CDC viene impostato su `I` o `U` per indicare le operazioni INSERT e UPDATE all'origine. Ma se `includeOpForFullLoad` è impostato su `false`, i record CDC vengono scritti senza un'indicazione dell'operazione INSERT o UPDATE all'origine.   Per ulteriori informazioni sul funzionamento congiunto di questi parametri, consulta [Indicazione delle operazioni del DB di origine nei dati S3 migrati](#CHAP_Target.S3.Configuring.InsertOps).  `CdcInsertsOnly` e `cdcInsertsAndUpdates` non possono essere entrambi impostati su true per lo stesso endpoint. Imposta uno tra `cdcInsertsAndUpdates` o `cdcInsertsOnly` su `true` per lo stesso endpoint, ma non entrambi.   Valore predefinito: `false` Valori validi: `true`, `false`, `y`, `n` Ad esempio: `--s3-settings '{"CdcInsertsAndUpdates": true}'`  | 
|  `CdcPath`  |  Specifica il percorso della cartella dei file CDC. Per un'origine S3, questa impostazione è necessaria se un'attività acquisisce i dati modificati; altrimenti, è facoltativa. Se è impostato `CdcPath`, DMS legge i file CDC da questo percorso e replica le modifiche ai dati nell'endpoint di destinazione. Se `PreserveTransactions` impostato su true per una destinazione S3, DMS verifica che questo parametro sia impostato su un percorso di cartella nella destinazione S3 in cui DMS può salvare l'ordine di transazione per il caricamento CDC. DMS crea questo percorso della cartella CDC nella directory di lavoro di destinazione S3 o nella posizione di destinazione S3 specificata da `BucketFolder` e `BucketName`. Non è possibile utilizzare questo parametro con `DatePartitionEnabled` o `AddColumnName`. Tipo: String Ad esempio, se specifichi `CdcPath` come `MyChangedData` e `BucketName` come `MyTargetBucket` senza specificare `BucketFolder`, DMS crea il seguente percorso della cartella CDC: `MyTargetBucket/MyChangedData`.  Se specifichi lo stesso `CdcPath`, quindi specifichi `BucketName` come `MyTargetBucket` e `BucketFolder` come `MyTargetData`, DMS crea il seguente percorso della cartella CDC: `MyTargetBucket/MyTargetData/MyChangedData`. Questa impostazione è supportata nelle AWS DMS versioni 3.4.2 e successive. Quando acquisisce le modifiche ai dati nell'ordine delle transazioni, DMS memorizza sempre le modifiche di riga nei file.csv indipendentemente dal valore dell'impostazione S3 sulla DataFormat destinazione.   | 
|  `CdcMaxBatchInterval`  |  Condizione della lunghezza massima dell'intervallo, definita in secondi, per l'output di un file in Amazon S3. Valore predefinito: 60 secondi Quando `CdcMaxBatchInterval` viene specificato insieme a `CdcMinFileSize`, la scrittura del file viene attivata dalla condizione di parametro che viene soddisfatta per prima.  A partire dalla AWS DMS versione 3.5.3, quando si utilizza PostgreSQL o Aurora PostgreSQL come origine e Amazon S3 con Parquet come destinazione, la frequenza degli aggiornamenti dipende dalla quantità di dati che l'endpoint di destinazione è configurato per conservare in `confirmed_flush_lsn` memoria. AWS DMS `confirmed_flush_lsn`invia i dati all'origine solo dopo che i dati in memoria sono stati scritti su Amazon S3. Se configuri il `CdcMaxBatchInterval` parametro su un valore più alto, potresti osservare un maggiore utilizzo dello slot di replica nel database di origine.   | 
|  `CdcMinFileSize`  |  Condizione della dimensione minima del file, espressa in kilobyte, per l'output di un file in Amazon S3. Valore predefinito: 32000 KB Quando `CdcMinFileSize` viene specificato insieme a `CdcMaxBatchInterval`, la scrittura del file viene attivata dalla condizione di parametro che viene soddisfatta per prima.  | 
|  `PreserveTransactions`  |  Se questa opzione è impostata su `true`, DMS salva l'ordine di transazione per l'acquisizione dei dati di modifica (CDC) nella destinazione Amazon S3 specificata da `CdcPath`. Non è possibile utilizzare questo parametro con `DatePartitionEnabled` o `AddColumnName`. Tipo: Booleano Quando acquisisce le modifiche ai dati nell'ordine delle transazioni, DMS memorizza sempre le modifiche di riga nei file.csv indipendentemente dal valore dell'impostazione S3 sulla DataFormat destinazione. Questa impostazione è supportata nelle versioni 3.4.2 e successive. AWS DMS    | 
| IncludeOpForFullLoad |  Un parametro facoltativo durante il caricamento completo per scrivere le operazioni INSERT nei file di output con i valori separati da virgola (.csv). Per il caricamento completo, i record possono solo essere inseriti. Per impostazione predefinita (impostazione `false`), le informazioni non vengono registrate in questi file di output per un caricamento completo per indicare che le righe sono state inserite nel database di origine. Se `IncludeOpForFullLoad` è impostato su `true` o `y`, l'istruzione INSERT viene registrata come annotazione I nel primo campo del file .csv.  Questo parametro viene utilizzato insieme a `CdcInsertsOnly` o `CdcInsertsAndUpdates` solo per l'output verso file .csv. Per ulteriori informazioni sul funzionamento congiunto di questi parametri, consulta [Indicazione delle operazioni del DB di origine nei dati S3 migrati](#CHAP_Target.S3.Configuring.InsertOps).  Valore predefinito: `false` Valori validi: `true`, `false`, `y`, `n` Ad esempio: `--s3-settings '{"IncludeOpForFullLoad": true}'`  | 
| CompressionType |  Un parametro opzionale, se impostato su, `GZIP` utilizza GZIP per comprimere i file.csv di destinazione. Quando questo parametro è impostato come predefinito, i file di dati non vengono compressi. Valore predefinito: `NONE` Valori validi: `GZIP` o `NONE` Ad esempio: `--s3-settings '{"CompressionType": "GZIP"}'`  | 
| CsvDelimiter |  Delimitatore utilizzato per separare le colonne nei file di origine .csv. L'impostazione predefinita è una virgola (,). Ad esempio: `--s3-settings '{"CsvDelimiter": ","}'`  | 
| CsvRowDelimiter |  Delimitatore utilizzato per separare le righe nei file di origine .csv. L'impostazione predefinita è una nuova riga (\$1n). Ad esempio: `--s3-settings '{"CsvRowDelimiter": "\n"}'`  | 
|   `MaxFileSize`   |  Un valore che specifica le dimensioni massime (in KB) di qualsiasi file .csv da creare durante la migrazione a una destinazione S3 durante il caricamento completo. Valore predefinito: 1.048.576 KB (1 GB) Valori validi: 1-1.048.576 Ad esempio: `--s3-settings '{"MaxFileSize": 512}'`  | 
| Rfc4180 |  Un parametro facoltativo utilizzato per impostare il comportamento di conformità a RFC per i dati migrati ad Amazon S3 utilizzando solo il formato di file .csv. Quando questo valore è impostato `true` o si `y` utilizza Amazon S3 come destinazione, se i dati contengono virgolette, virgole o caratteri di nuova riga, AWS DMS racchiude l'intera colonna con una coppia aggiuntiva di virgolette doppie («). Ogni virgoletta all'interno dei dati viene ripetuta due volte. Questa formattazione è conforme a RFC 4180. Valore predefinito: `true` Valori validi: `true`, `false`, `y`, `n` Ad esempio: `--s3-settings '{"Rfc4180": false}'`  | 
| EncryptionMode |  Le modalità di crittografia lato server desiderata per crittografare i file degli oggetti .csv o .parquet copiati in S3. I valori validi sono `SSE_S3` (crittografia lato server S3) o `SSE_KMS` (crittografia chiave KMS). Se scegli `SSE_KMS`, imposta il parametro `ServerSideEncryptionKmsKeyId` al valore dell'ARN (Amazon Resource Name) della chiave KMS da utilizzare per la crittografia.  È inoltre possibile utilizzare il comando CLI `modify-endpoint` per modificare il valore dell'attributo `EncryptionMode` per un endpoint esistente da `SSE_KMS` a `SSE_S3`. Tuttavia non puoi modificare il valore di `EncryptionMode` da `SSE_S3` a `SSE_KMS`.  Valore predefinito: `SSE_S3` Valori validi: `SSE_S3` o `SSE_KMS` Ad esempio: `--s3-settings '{"EncryptionMode": SSE_S3}'`  | 
| ServerSideEncryptionKmsKeyId |  Se hai impostato `EncryptionMode` su `SSE_KMS`, configura questo parametro sul nome della risorsa Amazon (ARN) della chiave KMS. Puoi trovare questo ARN selezionando l'alias della chiave nell'elenco delle AWS KMS chiavi create per il tuo account. Quando crei la chiave, è necessario associare alla chiave KMS policy e ruoli specifici. Per ulteriori informazioni, consulta [Creazione di AWS KMS chiavi per crittografare gli oggetti di destinazione di Amazon S3](#CHAP_Target.S3.KMSKeys). Ad esempio: `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'`  | 
| DataFormat |  Il formato di output per i file AWS DMS utilizzati per creare oggetti S3. Per le destinazioni Amazon S3, AWS DMS supporta i file.csv o.parquet. Il file .parquet hanno un formato binario di storage colonnare con opzioni di compressione efficaci e prestazioni delle query più veloci. Per ulteriori informazioni sui file .parquet, consulta [https://parquet.apache.org/](https://parquet.apache.org/). Valore predefinito: `csv` Valori validi: `csv` o `parquet` Ad esempio: `--s3-settings '{"DataFormat": "parquet"}'`  | 
| EncodingType |  Il tipo di codifica Parquet. Le opzioni del tipo di codifica includono le seguenti: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/CHAP_Target.S3.html) Valore predefinito: `rle-dictionary` Valori validi: `rle-dictionary`, `plain` o `plain-dictionary` Ad esempio: `--s3-settings '{"EncodingType": "plain-dictionary"}'`  | 
| DictPageSizeLimit |  La dimensione massima consentita, in byte, per una pagina del dizionario in un file .parquet. Se una pagina del dizionario supera questo valore, la pagina utilizza la codifica normale. Valore predefinito: 1.024.000 (1 MB) Valori validi: qualsiasi valore intero valido Ad esempio: `--s3-settings '{"DictPageSizeLimit": 2,048,000}'`  | 
| RowGroupLength |  Il numero di righe in un gruppo di righe di un file .parquet. Valore predefinito: 10.024 (10 KB) Valori validi: qualsiasi intero valido Ad esempio: `--s3-settings '{"RowGroupLength": 20,048}'`  | 
| DataPageSize |  La dimensione massima consentita, in byte, per una pagina di dati in un file .parquet. Valore predefinito: 1.024.000 (1 MB) Valori validi: qualsiasi intero valido Ad esempio: `--s3-settings '{"DataPageSize": 2,048,000}'`  | 
| ParquetVersion |  La versione del formato del file .parquet. Valore predefinito: `PARQUET_1_0` Valori validi: `PARQUET_1_0` o `PARQUET_2_0` Ad esempio: `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'`  | 
| EnableStatistics |  Impostare a `true` o `y` per abilitare le statistiche sulle pagine e sui gruppi di righe del file .parquet. Valore predefinito: `true` Valori validi: `true`, `false`, `y`, `n` Ad esempio: `--s3-settings '{"EnableStatistics": false}'`  | 
| TimestampColumnName |  Un parametro facoltativo per includere una colonna timestamp nei dati dell'endpoint di destinazione S3. AWS DMS include una `STRING` colonna aggiuntiva nei file oggetto .csv o .parquet dei dati migrati quando imposti un valore non vuoto. `TimestampColumnName` Per un caricamento completo, ogni riga della colonna timestamp contiene il timestamp del trasferimento dei dati dall'origine alla destinazione tramite DMS.  Per un caricamento CDC, ogni riga della colonna timestamp contiene il timestamp per il commit di quella riga nel database di origine. Il formato di stringa per questo valore della colonna timestamp è `yyyy-MM-dd HH:mm:ss.SSSSSS`. Per impostazione predefinita, la precisione di questo valore è in microsecondi. Per un carico CDC, l'arrotondamento della precisione dipende dal timestamp di commit supportato da DMS per il database di origine. Quando il parametro `AddColumnName` è impostato su `true`, DMS include anche il nome per la colonna timestamp impostata con il valore non vuoto `TimestampColumnName`. Ad esempio: `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'`  | 
| UseTaskStartTimeForFullLoadTimestamp |  Se impostato su `true`, questo parametro utilizza l'ora di inizio dell'attività come valore della colonna timestamp anziché l'ora in cui i dati vengono scritti nella destinazione. Per il caricamento completo, quando `UseTaskStartTimeForFullLoadTimestamp` è impostato su `true`, ogni riga della colonna timestamp contiene l'ora di inizio dell'attività. Per i caricamenti CDC, ogni riga della colonna timestamp contiene l'orario di esecuzione del commit della transazione. Quando `UseTaskStartTimeForFullLoadTimestamp` è impostato su `false`, il timestamp del caricamento completo nella colonna timestamp aumenta con l'ora di arrivo dei dati a destinazione. Valore predefinito: `false` Valori validi: `true`, `false` Ad esempio: `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'` `UseTaskStartTimeForFullLoadTimestamp: true` consente di rendere ordinabile la destinazione S3 `TimestampColumnName` per un pieno carico con `TimestampColumnName` per un carico CDC.  | 
| ParquetTimestampInMillisecond |  Un parametro opzionale che specifica la precisione di qualsiasi valore della colonna `TIMESTAMP` scritto su un file oggetto S3 in formato .parquet. Quando questo attributo è impostato su `true` o`y`, AWS DMS scrive tutte le `TIMESTAMP` colonne in un file in formato .parquet con una precisione al millisecondo. In caso contrario, DMS le scrive con la precisione del microsecondo. Attualmente, Amazon Athena e AWS Glue può gestire solo una precisione in millisecondi per i valori. `TIMESTAMP` Imposta questo attributo su true per file di oggetti dell'endpoint S3 nel formato .parquet solo se si prevede di eseguire query o elaborare i dati con Athena o AWS Glue.    AWS DMS scrive qualsiasi valore di `TIMESTAMP` colonna scritto in un file S3 in formato.csv con precisione al microsecondo.   L'impostazione di questo attributo non ha effetto sul formato della stringa del valore della colonna timestamp inserito impostando l'attributo `TimestampColumnName`.    Valore predefinito: `false` Valori validi: `true`, `false`, `y`, `n` Ad esempio: `--s3-settings '{"ParquetTimestampInMillisecond": true}'`  | 
| GlueCatalogGeneration |  Per generare un AWS Glue Data Catalog, imposta questa impostazione dell'endpoint su. `true` Valore predefinito: `false` Valori validi: `true`, `false` Ad esempio: `--s3-settings '{"GlueCatalogGeneration": true}'` **Nota:** non utilizzare `GlueCatalogGeneration` con `PreserveTransactions` e `CdcPath`.  | 

## Utilizzo AWS Glue Data Catalog con un target Amazon S3 per AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

AWS Glue è un servizio che fornisce modi semplici per classificare i dati e consiste in un repository di metadati noto come. AWS Glue Data Catalog Puoi integrarti AWS Glue Data Catalog con il tuo endpoint di destinazione Amazon S3 e interrogare i dati Amazon S3 tramite altri servizi AWS come Amazon Athena. Amazon Redshift funziona con questa opzione predefinita, AWS Glue ma AWS DMS non la supporta. 

Per generare il catalogo dati, imposta l'impostazione dell'`GlueCatalogGeneration`endpoint su`true`, come mostrato nell'esempio seguente. AWS CLI 

```
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}'
```

Per un'attività di replica di pieno carico che include dati di tipo `csv`, imposta `IncludeOpForFullLoad` su `true`.

Non utilizzare `GlueCatalogGeneration` con `PreserveTransactions` e `CdcPath`. Il AWS Glue crawler non è in grado di riconciliare i diversi schemi di file memorizzati nell'intervallo specificato. `CdcPath`

Affinché Amazon Athena indicizzi i dati Amazon S3 per poter eseguire le query sui dati utilizzando query SQL standard tramite Amazon Athena, il ruolo IAM associato all'endpoint deve avere la seguente policy:

------
#### [ 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_*"
        }
    ]
}
```

------

**Riferimenti**
+ *Per ulteriori informazioni AWS Glue, consulta [Concepts](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html) nella Developer Guide.AWS Glue *
+ Per ulteriori informazioni, AWS Glue Data Catalog consulta [Components](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) nella *AWS Glue Developer Guide*.

## Utilizzo della crittografia dei dati, dei file parquet e della CDC sulla destinazione Amazon S3
<a name="CHAP_Target.S3.EndpointSettings"></a>

Puoi utilizzare le impostazioni dell'endpoint di destinazione S3 per configurare quanto segue:
+ Una chiave KMS personalizzata per crittografare gli oggetti di destinazione S3.
+ File parquet come formato di storage dei file per gli oggetti di destinazione S3.
+ Acquisizione dei dati di modifica (CDC) incluso l'ordine di transazione sulla destinazione S3.
+ Effettua AWS Glue Data Catalog l'integrazione con il tuo endpoint di destinazione Amazon S3 e interroga i dati di Amazon S3 tramite altri servizi come Amazon Athena.

### AWS KMS impostazioni chiave per la crittografia dei dati
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

I seguenti esempi mostrano la configurazione di una chiave KMS personalizzata per crittografare gli oggetti di destinazione S3. Per iniziare, è possibile eseguire il comando CLI `create-endpoint` seguente.

```
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"}'
```

Qui l'oggetto JSON specificato dall'opzione `--s3-settings` definisce due parametri. Uno è un parametro `EncryptionMode` con il valore `SSE_KMS`. L'altro è un parametro `ServerSideEncryptionKmsKeyId` con il valore `arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480`. Questo valore è un ARN (Amazon Resource Name) per la chiave KMS personalizzata. Per una destinazione S3, è anche possibile specificare impostazioni aggiuntive. Queste identificano il ruolo di accesso al server, specificano i delimitatori per il formato di memorizzazione degli oggetti CSV predefinito e forniscono il nome e la posizione del bucket per la memorizzazione degli oggetti di destinazione S3.

Per impostazione predefinita, la crittografia dei dati di S3 viene effettuata utilizzando la crittografia lato server. Per la destinazione S3 dell'esempio precedente, ciò è anche equivalente a specificare le impostazioni dell'endpoint, come nell'esempio seguente.

```
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"}'
```

Per ulteriori informazioni sulle opzioni di crittografia lato server di S3, consultare [Protezione dei dati con la crittografia lato server](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html).

**Nota**  
È inoltre possibile utilizzare il comando CLI `modify-endpoint` per modificare il valore del parametro `EncryptionMode` per un endpoint esistente da `SSE_KMS` a `SSE_S3`. Tuttavia non puoi modificare il valore di `EncryptionMode` da `SSE_S3` a `SSE_KMS`.

### Impostazioni per l'utilizzo di file .parquet per l'archiviazione di oggetti di destinazione S3
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

Il formato predefinito per la creazione di oggetti di destinazione S3 è file .csv. I seguenti esempi mostrano alcune impostazioni di endpoint per specificare i file .parquet come formato per la creazione di oggetti di destinazione S3. È possibile specificare il formato dei file .parquet con tutte le impostazioni predefinite, come nell'esempio seguente.

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

Qui il parametro `DataFormat` è impostato su `parquet` per abilitare il formato con tutte le impostazioni predefinite di S3. Queste impostazioni predefinite includono una codifica del dizionario (`"EncodingType: "rle-dictionary"`) che utilizza una combinazione di creazione di pacchetti di bit e di codifica runlength per un'archiviazione più efficiente dei valori ripetuti.

È possibile aggiungere ulteriori impostazioni per opzioni diverse dalle impostazioni predefinite come nell'esempio seguente.

```
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 }'
```

Qui, oltre ai parametri per varie opzioni standard del bucket S3 e il parametro `DataFormat`, vengono impostati i seguenti parametri aggiuntivi del file .parquet:
+ `EncodingType`: imposta una codifica di dizionario (`plain-dictionary`) che archivia i valori rilevati in ogni colonna in un blocco per colonna della pagina del dizionario.
+ `DictPageSizeLimit`: imposta la dimensione massima della pagina del dizionario di 3 MB.
+ `EnableStatistics`: disabilita l'impostazione predefinita che consente la raccolta di statistiche sulle pagine e sui gruppi di righe dei file Parquet.

### Capturing Data Changes (CDC) incluso l'ordine di transazione sulla destinazione S3
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

Per impostazione predefinita, quando AWS DMS esegue un'attività CDC, memorizza tutte le modifiche di riga registrate nel database (o nei database) di origine in uno o più file per ogni tabella. Ogni set di file contenente modifiche per la stessa tabella si trova in un'unica directory di destinazione associata a quella tabella. AWS DMS crea tante directory di destinazione quante sono le tabelle di database migrate all'endpoint di destinazione Amazon S3. I file vengono archiviati sulla destinazione S3 in queste directory indipendentemente dall'ordine di transazione. Per ulteriori informazioni sulle convenzioni di denominazione dei file, sul contenuto dei dati e sul formato, consulta [Utilizzo di Amazon S3 come destinazione per AWS Database Migration Service](#CHAP_Target.S3).

Per acquisire le modifiche al database di origine in modo da rilevare anche l'ordine delle transazioni, puoi specificare le impostazioni degli endpoint S3 che consentono di memorizzare le modifiche AWS DMS alle righe per *tutte* le tabelle del database in uno o più file.csv creati in base alla dimensione della transazione. Questi *file di transazione* .csv contengono tutte le modifiche alle righe elencate in sequenza nell'ordine di transazione per tutte le tabelle coinvolte in ciascuna transazione. Questi file di transazione risiedono insieme in un'unica *directory delle transazioni* che specifichi anche sulla destinazione S3. In ogni file di transazione, l'operazione di transazione e l'identità del database e della tabella di origine per ogni modifica alla riga vengono archiviate come parte dei dati di riga, come indicato di seguito. 

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

Qui `operation` è l'operazione di transazione sulla riga modificata, `table_name` è il nome della tabella del database in cui è stata modificata la riga, `database_schema_name` è il nome dello schema del database in cui si trova la tabella e `field_value` è il primo di uno o più valori di campo che specificano i dati per la riga.

Il seguente file di transazione di esempio mostra le righe modificate per una o più transazioni che coinvolgono due tabelle.

```
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
```

Qui, l'operazione di transazione su ogni riga è indicata da `I` (insert, inserisci), `U` (update, aggiorna) o `D` (delete, elimina) nella prima colonna. Il nome della tabella è il valore della seconda colonna (ad esempio, `Names_03cdcad11a`). Il nome dello schema del database è il valore della terza colonna (ad esempio, `rdsTempsdb`). E le colonne rimanenti vengono popolate con i propri dati della riga (ad esempio, `13,Daniel`).

Inoltre, assegna un AWS DMS nome ai file di transazione che crea sulla destinazione Amazon S3 utilizzando un timestamp secondo la seguente convenzione di denominazione.

```
CDC_TXN-timestamp.csv
```

Qui `timestamp` è l'ora in cui stato creato il file di transazione, come nell'esempio seguente. 

```
CDC_TXN-20201117153046033.csv
```

Questo timestamp nel nome del file assicura che i file delle transazioni vengano creati ed elencati nell'ordine di transazione nella rispettiva directory della transazione.

**Nota**  
Quando acquisisci le modifiche ai dati nell'ordine delle transazioni, memorizza AWS DMS sempre le modifiche di riga nei file.csv indipendentemente dal valore dell'impostazione S3 sulla destinazione. `DataFormat`

Per controllare la frequenza delle scritture su una destinazione Amazon S3 durante un'attività di replica dei dati, puoi configurare le impostazioni `CdcMaxBatchInterval` e `CdcMinFileSize`. In tal modo le prestazioni possono risultare migliori durante l'analisi dei dati senza ulteriori operazioni di sovraccarico. Per ulteriori informazioni, consulta [Impostazioni degli endpoint quando si utilizza Amazon S3 come destinazione per AWS DMS](#CHAP_Target.S3.Configuring) 

**Per dire di AWS DMS memorizzare tutte le modifiche di riga nell'ordine delle transazioni**

1. Configura l'impostazione `PreserveTransactions` S3 nella destinazione su `true`.

1. Imposta l'impostazione `CdcPath` S3 sulla destinazione su un percorso di cartella relativo in cui desideri AWS DMS archiviare i file di transazione in formato.csv.

   AWS DMS crea questo percorso nel bucket di destinazione S3 e nella directory di lavoro predefiniti o nella cartella bucket e bucket specificati utilizzando le impostazioni e S3 sulla `BucketName` destinazione. `BucketFolder`

## Indicazione delle operazioni del DB di origine nei dati S3 migrati
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

Quando AWS DMS migra i record su una destinazione S3, può creare un campo aggiuntivo in ogni record migrato. Il campo aggiuntivo indica l'operazione applicata al record nel database di origine. AWS DMS Il modo in cui crea e imposta questo primo campo dipende dal tipo di attività di migrazione e dalle impostazioni di`includeOpForFullLoad`, `cdcInsertsOnly` e. `cdcInsertsAndUpdates`

Per un pieno carico quando `includeOpForFullLoad` è `true`, AWS DMS crea sempre un ulteriore primo campo in ogni record .csv. Il campo contiene la lettera I (INSERT) per confermare che la riga è stata inserita nel database di origine. AWS DMS Inoltre, per un CDC load when `cdcInsertsOnly` is `false` (impostazione predefinita), crea sempre un primo campo aggiuntivo in ogni record.csv o .parquet. Il campo contiene la lettera I (INSERT), U (UPDATE) o D (DELETE) per indicare se la riga è stata inserita, aggiornata o eliminata nel database di origine.

Nella tabella seguente, puoi vedere come le impostazioni degli attributi `includeOpForFullLoad` e `cdcInsertsOnly` interagiscono per influenzare l'impostazione dei record migrati.


| Con queste impostazioni dei parametri | DMS imposta i record di destinazione come segue per l'output .csv e .parquet  | includeOpForFullLoad | cdcInsertsOnly | Per il caricamento completo | Per il caricamento CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Aggiunto il valore del primo campo impostato su I | Aggiunto il valore del primo campo impostato su I | 
| false | false | Nessun campo aggiunto | Aggiunto il valore del primo campo impostato su I, U o D | 
| false | true | Nessun campo aggiunto | Nessun campo aggiunto | 
| true | false | Aggiunto il valore del primo campo impostato su I | Aggiunto il valore del primo campo impostato su I, U o D | 

Quando `includeOpForFullLoad` e `cdcInsertsOnly` sono impostati sullo stesso valore, i record di destinazione sono impostati in base all'attributo che controlla le impostazioni di registrazione per il tipo di migrazione corrente. Questo attributo è `includeOpForFullLoad` per il caricamento completo e `cdcInsertsOnly` per il caricamento CDC.

Se `includeOpForFullLoad` e `cdcInsertsOnly` sono impostati su valori diversi, AWS DMS rende le impostazioni del record di destinazione coerenti sia per il CDC che per il pieno carico. A tale scopo, le impostazioni del record per un caricamento CDC sono conformi alle impostazioni del record per qualsiasi precedente caricamento completo specificato da `includeOpForFullLoad`. 

In altre parole, supponiamo che un caricamento completo sia impostato per aggiungere un primo campo per indicare un record inserito. In questo caso, un caricamento CDC successivo viene impostato per aggiungere un primo campo che indica un record inserito, aggiornato o eliminato come appropriato nell'origine. Al contrario, supponiamo che un caricamento completo è impostato per *non* aggiungere un primo campo per indicare un record inserito. In questo caso, viene impostato un caricamento CDC per non aggiungere un primo campo a ciascun record, indipendentemente dall'operazione di registrazione corrispondente nell'origine.

Analogamente, il modo in cui DMS crea e imposta un primo campo aggiuntivo dipende dalle impostazioni di `includeOpForFullLoad` e `cdcInsertsAndUpdates`. Nella tabella seguente, puoi vedere come le impostazioni degli attributi `includeOpForFullLoad` e `cdcInsertsAndUpdates` interagiscono per influenzare l'impostazione dei record migrati in questo formato. 


| Con queste impostazioni dei parametri | DMS imposta i record di destinazione come segue per l'output .csv  | includeOpForFullLoad | cdcInsertsAndAggiornamenti | Per il caricamento completo | Per il caricamento CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Aggiunto il valore del primo campo impostato su I | Aggiunto il valore del primo campo impostato su I o U | 
| false | false | Nessun campo aggiunto | Aggiunto il valore del primo campo impostato su I, U o D | 
| false | true | Nessun campo aggiunto | Aggiunto il valore del primo campo impostato su I o U | 
| true | false | Aggiunto il valore del primo campo impostato su I | Aggiunto il valore del primo campo impostato su I, U o D | 

## Tipi di dati di destinazione per Parquet S3
<a name="CHAP_Target.S3.DataTypes"></a>

La tabella seguente mostra i tipi di dati di destinazione di Parquet supportati durante l'utilizzo AWS DMS e la mappatura predefinita AWS DMS dei tipi di dati.

Per ulteriori informazioni sui tipi di AWS DMS dati, vedere[Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo di dati  |  Tipo di dati parquet 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 | 

# Utilizzo di un database Amazon DynamoDB come destinazione per AWS Database Migration Service
<a name="CHAP_Target.DynamoDB"></a>

Puoi utilizzarlo AWS DMS per migrare i dati su una tabella Amazon DynamoDB. Amazon DynamoDB è un servizio di database NoSQL completamente gestito che offre prestazioni veloci e prevedibili con una scalabilità perfetta. AWS DMS supporta l'utilizzo di un database relazionale o MongoDB come fonte.

In DynamoDB, le tabelle, le voci e gli attributi sono i componenti principali da utilizzare. Una *tabella *è una raccolta di elementi e ogni *elemento *è una raccolta di attributi. DynamoDB utilizza le chiavi primarie, denominate chiavi di partizione, per identificare in modo univoco ciascuna voce in una tabella. Puoi inoltre utilizzare chiavi e indici secondari per fornire maggiore flessibilità nell'esecuzione di query.

È possibile utilizzare la mappatura degli oggetti per migrare i dati da un database di origine a una tabella DynamoDB di destinazione. La mappatura di oggetti consente di determinare dove sono posizionati i dati di origine nella destinazione. 

Quando AWS DMS crea tabelle su un endpoint di destinazione DynamoDB, crea tante tabelle quante sono nell'endpoint del database di origine. AWS DMS imposta anche diversi valori dei parametri DynamoDB. Il costo per la creazione della tabella dipende dalla quantità di dati e dal numero di tabelle da migrare.

**Nota**  
L'opzione **Modalità SSL** sulla AWS DMS console o sull'API non si applica ad alcuni servizi di streaming di dati e NoSQL come Kinesis e DynamoDB. **Sono sicuri per impostazione predefinita, quindi AWS DMS mostra che l'impostazione della modalità SSL è uguale a none (modalità SSL = Nessuno).** Per utilizzare SSL non è necessario eseguire alcuna configurazione aggiuntiva per l'endpoint. Ad esempio, l'utilizzo di DynamoDB come endpoint di destinazione è sicuro per impostazione predefinita. Tutte le chiamate API a DynamoDB utilizzano SSL, quindi non è necessaria un'opzione SSL aggiuntiva nell'endpoint. AWS DMS È possibile inserire dati e recuperarli in modo sicuro tramite gli endpoint SSL utilizzando il protocollo HTTPS, usato da AWS DMS per impostazione predefinita per la connessione a un database DynamoDB.

Per aumentare la velocità di trasferimento, AWS DMS supporta un caricamento completo multithread su un'istanza di destinazione di DynamoDB. DMS supporta questo multithreading con impostazioni delle attività che includono le seguenti:
+ `MaxFullLoadSubTasks`: imposta questa opzione per indicare il numero massimo di tabelle da caricare in parallelo. DMS carica ogni tabella nella corrispondente tabella di destinazione DynamoDB utilizzando un'attività secondaria dedicata. Il valore predefinito è 8. Il valore massimo è 49.
+ `ParallelLoadThreads`— Utilizzate questa opzione per specificare il numero di thread da utilizzare per caricare ogni tabella nella relativa tabella di destinazione DynamoDB. AWS DMS Il valore predefinito è 0 (a thread singolo). Il valore massimo è 200. Puoi chiedere che questo limite massimo venga aumentato.
**Nota**  
DMS assegna ogni segmento di una tabella al proprio thread per il caricamento. Pertanto, impostare `ParallelLoadThreads` al numero massimo di segmenti specificati dall'utente per una tabella nella sorgente.
+ `ParallelLoadBufferSize`: utilizza questa opzione per specificare il numero massimo di record da archiviare nel buffer utilizzato dai thread di caricamento parallelo per caricare i dati nella destinazione DynamoDB. Il valore predefinito è 50. Il valore massimo è 1.000. Utilizzare questo parametro con `ParallelLoadThreads`; `ParallelLoadBufferSize` è valido solo quando è presente più di un thread.
+ Impostazioni di mappatura delle tabelle per le singole tabelle: utilizza le regole `table-settings` per identificare le singole tabelle dell'origine da caricare in parallelo. Inoltre utilizza queste regole per specificare come segmentare le righe di ciascuna tabella multithreaded per il caricamento. Per ulteriori informazioni, consulta [Regole e operazioni delle impostazioni di tabella e raccolta](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

**Nota**  
Quando si AWS DMS impostano i valori dei parametri DynamoDB per un'attività di migrazione, il valore predefinito del parametro Read Capacity Units (RCU) è impostato su 200.  
Viene inoltre impostato il valore del parametro WCU (Write Capacity Unit, Unità di capacità in scrittura), ma tale valore dipende da diverse altre impostazioni:  
Il valore predefinito per il parametro WCU è 200.
Se l'attività `ParallelLoadThreads` è impostata su un valore superiore a 1 (il valore di default è 0), allora il parametro WCU è impostato su 200 volte il valore `ParallelLoadThreads`.
Le tariffe AWS DMS di utilizzo standard si applicano alle risorse utilizzate.

## Migrazione da un database relazionale a una tabella DynamoDB
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS supporta la migrazione dei dati verso tipi di dati scalari DynamoDB. Durante la migrazione da un database relazionale, ad esempio Oracle o MySQL, a DynamoDB, potresti voler ristrutturare il modo in cui vengono archiviati i dati.

Attualmente AWS DMS supporta la ristrutturazione da singola tabella a tabella singola in base agli attributi di tipo scalare DynamoDB. Se esegui la migrazione dei dati in DynamoDB da una tabella di database relazionale, prelevi i dati da una tabella e li riformatti in attributi del tipo di dati scalare di DynamoDB. Questi attributi possono accettare i dati provenienti da più colonne e puoi mappare direttamente una colonna a un attributo.

AWS DMS supporta i seguenti tipi di dati scalari DynamoDB:
+ Stringa
+ Numero
+ Booleano

**Nota**  
I dati NULL dall'origine vengono ignorati sulla destinazione.

## Prerequisiti per l'utilizzo di DynamoDB come destinazione per AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Prerequisites"></a>

Prima di iniziare a utilizzare un database DynamoDB come destinazione, assicurati AWS DMS di creare un ruolo IAM. Questo ruolo IAM dovrebbe consentire di AWS DMS assumere e concedere l'accesso alle tabelle DynamoDB in cui viene effettuata la migrazione. Nella seguente policy IAM viene mostrato il set minimo di autorizzazioni di accesso.

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

****  

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

------

Il ruolo utilizzato per la migrazione a DynamoDB deve disporre delle seguenti autorizzazioni.

------
#### [ 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": "*"
        }
    ]
}
```

------

## Limitazioni nell'utilizzo di DynamoDB come destinazione per AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza DynamoDB come destinazione:
+ DynamoDB limita la precisione del tipo di dati Number a 38 posizioni. Archivia tutti i tipi di dati con una precisione superiore come String. Devi specificare esplicitamente questo valore mediante la caratteristica di mappatura degli oggetti.
+ Poiché DynamoDB non dispone di un tipo di dati Date, i dati che utilizzano il tipo di dati Date vengono convertiti in stringhe.
+ DynamoDB non consente gli aggiornamenti degli attributi di chiave primaria. Questa restrizione è importante quando si utilizza la replica continua con l'acquisizione dei dati di modifica (CDC), perché può causare la presenza di dati indesiderati nella destinazione. A seconda del tipo di mappatura degli oggetti, un'operazione CDC che aggiorna la chiave primaria può eseguire una delle due seguenti azioni: Può restituire un errore o inserire un nuovo elemento con la chiave primaria aggiornata e dati incompleti.
+ AWS DMS supporta solo la replica di tabelle con chiavi primarie non composite. L'eccezione è se si specifica una mappatura degli oggetti per la tabella di destinazione con una chiave di partizione personalizzata o una chiave di ordinamento o con entrambe.
+ AWS DMS non supporta i dati LOB a meno che non si tratti di un CLOB. AWS DMS converte i dati CLOB in una stringa DynamoDB durante la migrazione dei dati.
+ Quando si utilizza DynamoDB come destinazione, solo la tabella di controllo Apply Exceptions (`dmslogs.awsdms_apply_exceptions`) è supportata. Per ulteriori informazioni sulle tabelle di controllo, consultare [Impostazioni delle attività delle tabelle di controllo](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md).
+ AWS DMS non supporta l'impostazione delle attività `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` per DynamoDB come destinazione. 
+ AWS DMS non supporta l'impostazione delle attività `TaskRecoveryTableEnabled` per DynamoDB come destinazione. 
+ `BatchApply`non è supportato per un endpoint DynamoDB.
+ AWS DMS non può migrare gli attributi i cui nomi corrispondono a parole riservate in DynamoDB. Per ulteriori informazioni, consulta le [parole riservate in DynamoDB nella](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html) Amazon DynamoDB Developer *Guide*.

## Utilizzo della mappatura degli oggetti per la migrazione dei dati a DynamoDB
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS utilizza regole di mappatura delle tabelle per mappare i dati dalla tabella DynamoDB di origine alla tabella DynamoDB di destinazione. Per mappare i dati a una destinazione DynamoDB, è necessario utilizzare una regola di mappatura delle tabelle denominata *object-mapping*. La mappatura degli oggetti consente di definire i nomi degli attributi e i dati da migrare. Quando utilizzi la mappatura degli oggetti, devi disporre di regole di selezione.

DynamoDB non dispone di una struttura preimpostata oltre a una chiave di partizione e una chiave di ordinamento opzionale. Se hai una chiave primaria non composita, la usa. AWS DMS Se disponi di una chiave primaria composita o desideri utilizzare una chiave di ordinamento, definisci tali chiavi e gli altri attributi nella tabella DynamoDB di destinazione.

Per creare una regola di mappatura degli oggetti, è necessario specificare il parametro `rule-type` come *object-mapping*. Questa regola specifica il tipo di mappatura degli oggetti da utilizzare. 

Di seguito è riportata la struttura per la regola:

```
{ "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 attualmente supporta `map-record-to-record` e è `map-record-to-document` l'unico valore valido per il `rule-action` parametro. Questi valori specificano AWS DMS cosa viene fatto di default ai record che non sono esclusi dall'elenco degli `exclude-columns` attributi. Questi valori non influiscono in alcun modo sulle mappature degli attributi. 
+ Puoi utilizzare `map-record-to-record` per la migrazione da un database relazionale a DynamoDB. Questo parametro utilizza la chiave primaria dal database relazionale come chiave di partizione in DynamoDB e crea un attributo per ogni colonna nel database di origine. Quando viene utilizzato`map-record-to-record`, per qualsiasi colonna della tabella di origine non elencata nell'elenco `exclude-columns` degli attributi, AWS DMS crea un attributo corrispondente sull'istanza DynamoDB di destinazione. Questa operazione avviene indipendentemente dal fatto che tale colonna di origine venga utilizzata o meno in una mappatura degli attributi. 
+ Puoi utilizzare `map-record-to-document` per inserire le colonne origine in una singola mappa piana DynamoDB nella destinazione utilizzando il nome di attributo "\$1doc". Quando viene utilizzato`map-record-to-document`, AWS DMS inserisce i dati in un unico attributo di mappa DynamoDB flat sull'origine. Questo attributo è denominato "\$1doc". Questo posizionamento si applica a qualsiasi colonna della tabella di origine non elencata nell'elenco di attributi `exclude-columns`. 

Uno dei modi per comprendere la differenza tra i parametri `rule-action`, `map-record-to-record` e `map-record-to-document` è di osservare i due parametri in azione. Per questo esempio, supponiamo che tu stia iniziando con una riga di tabella del database relazionale con la struttura e i dati seguenti:

![\[database di esempio\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/images/datarep-dynamodb1.png)


Per eseguire la migrazione di queste informazioni a DynamoDB, crei le regole per mappare i dati in una voce di tabella DynamoDB. Nota le colonne elencate per il parametro `exclude-columns`. Queste colonne non sono mappate direttamente alla destinazione. La mappatura degli attributi viene invece utilizzata per combinare i dati in nuovi elementi, ad esempio dove *FirstName*e *LastName*vengono raggruppati insieme per diventare *CustomerName*il target DynamoDB. *NickName*e il *reddito* non è escluso.

```
{
    "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}"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Utilizzando il `rule-action` parametro *map-record-to-record*, i dati *NickName*e le *entrate* vengono mappati su elementi con lo stesso nome nel target DynamoDB. 

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


Tuttavia, supponiamo di utilizzare le stesse regole ma di modificare il `rule-action` parametro in *map-record-to-document*. In questo caso, le colonne non elencate nel `exclude-columns` parametro *NickName*e nel *reddito* vengono mappate su un elemento *\$1doc*.

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


### Utilizzo di espressioni di condizioni personalizzate con mappatura degli oggetti
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

Puoi utilizzare una funzionalità di DynamoDB denominata espressioni condizionali per gestire i dati scritti in una tabella DynamoDB. Per ulteriori informazioni sulle espressioni condizionali in DynamoDB, consulta [Espressioni di condizione](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html).

Un membro di espressione condizionale è costituito dai seguenti elementi: 
+ un'espressione (obbligatoria) 
+ valori degli attributi di espressione (obbligatori). Specifica una struttura json DynamoDB del valore dell'attributo. Questo è utile per confrontare un attributo con un valore in DynamoDB che potresti non conoscere fino al runtime. È possibile definire il valore di un attributo di espressione come segnaposto per un valore effettivo.
+ nomi degli attributi di espressione (obbligatori). Questo aiuta a evitare potenziali conflitti con parole riservate di DynamoDB, nomi di attributo contenenti caratteri speciali e simili.
+ opzioni per i casi in cui utilizzare l'espressione condizionale (opzionali). L'impostazione predefinita è apply-during-cdc = false e apply-during-full-load = true

Di seguito è riportata la struttura per la regola:

```
"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>
        }
```

L'esempio seguente evidenzia le sezioni utilizzate per l'espressione condizionale.

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


### Utilizzo della mappatura degli attributi con la mappatura degli oggetti
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

La mappatura degli attributi consente di specificare una stringa di modello mediante i nomi di colonna di origine per ristrutturare i dati sulla destinazione. Non viene eseguita alcuna formattazione oltre a quella che l'utente specifica nel modello.

L'esempio seguente mostra la struttura del database di origine e la struttura desiderata della destinazione DynamoDB. In primo luogo è riportata la struttura dell'origine, in questo caso un database Oracle, quindi la struttura dei dati in DynamoDB. Al termine dell'esempio, il file JSON viene utilizzato per creare la struttura di destinazione desiderata.

La struttura dei dati Oracle è la seguente:


****  

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

La struttura dei dati DynamoDB è la seguente:


****  

| CustomerName | StoreId | ContactDetails | DateOfBirth | 
| --- | --- | --- | --- | 
| Chiave di partizione | Chiave ordinamento | 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> | 

Il seguente file JSON mostra la mappatura degli oggetti e la mappatura delle colonne utilizzate per ottenere la struttura 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}\"}}"
                    }
                ]
            }
        }
    ]
}
```

Un altro modo per utilizzare la mappatura delle colonne consiste nell'utilizzo del formato DynamoDB come tipo di documento. Il seguente codice di esempio utilizza *dynamodb-map* come `attribute-sub-type` per la mappatura degli attributi. 

```
{
    "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}"
                                        }
                                    }
                                }
                            }
                        }        
                    }
                ]
            }
        }
    ]
}
```

In alternativa`dynamodb-map`, è possibile utilizzare `dynamodb-list` come strumento attribute-sub-type per la mappatura degli attributi, come illustrato nell'esempio seguente.

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

### Esempio 1: utilizzo della mappatura degli attributi con la mappatura degli oggetti
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

L'esempio seguente migra i dati da due tabelle di database MySQL*, nfl\$1data e sport\$1team,* *a due tabelle DynamoDB chiamate and*. *NFLTeams*SportTeams** Di seguito sono riportati la struttura delle tabelle e il file JSON utilizzato per mappare i dati dalle tabelle di database MySQL alle tabelle DynamoDB.

Di seguito è riportata la struttura della tabella di database MySQL *nfl\$1data*:

```
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    |       |
+---------------+-------------+------+-----+---------+-------+
```

Di seguito è riportata la struttura della tabella di database MySQL *sport\$1team*:

```
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    |                |
```

Di seguito sono riportate le regole di mappatura delle tabelle utilizzate per mappare le due tabelle alle due tabelle DynamoDB:

```
{
  "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}\"}"
          }
        ]
      }
    }
  ]
}
```

L'output di esempio per la tabella *NFLTeams*DynamoDB è mostrato di seguito:

```
  "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"
}
```

L'output di esempio per la tabella SportsTeams *DynamoDB* è mostrato di seguito:

```
{
  "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"
}
```

## Tipi di dati di destinazione per DynamoDB
<a name="CHAP_Target.DynamoDB.DataTypes"></a>

L'endpoint DynamoDB per AWS DMS supporta la maggior parte dei tipi di dati DynamoDB. La tabella seguente mostra i tipi di dati di AWS DMS destinazione di Amazon supportati durante l'utilizzo AWS DMS e la mappatura predefinita AWS DMS dei tipi di dati.

Per ulteriori informazioni sui tipi di AWS DMS dati, consulta[Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md).

Quando AWS DMS migriamo dati da database eterogenei, mappiamo i tipi di dati dal database di origine a tipi di dati intermedi denominati tipi di dati. AWS DMS Mappiamo quindi i tipi di dati intermedi ai tipi di dati di destinazione. La tabella seguente mostra ogni tipo di AWS DMS dati e il tipo di dati a cui è mappato in DynamoDB:


| AWS DMS tipo di dati | Tipo di dati DynamoDB | 
| --- | --- | 
|  Stringa  |  Stringa  | 
|  WString  |  Stringa  | 
|  Booleano  |  Booleano  | 
|  Data  |  Stringa  | 
|  DateTime  |  Stringa  | 
|  INT1  |  Numero  | 
|  INT2  |  Numero  | 
|  INT4  |  Numero  | 
|  INT8  |  Numero  | 
|  Numerico  |  Numero  | 
|  Real4  |  Numero  | 
|  Real8  |  Numero  | 
|  UINT1  |  Numero  | 
|  UINT2  |  Numero  | 
|  UINT4  |  Numero  | 
| UINT8 | Numero | 
| CLOB | Stringa | 

# Utilizzo di Amazon Kinesis Data Streams come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Kinesis"></a>

Puoi utilizzarlo AWS DMS per migrare i dati verso un flusso di dati Amazon Kinesis. I flussi di dati Amazon Kinesis fanno parte del servizio Flusso di dati Amazon Kinesis. Puoi utilizzare i flussi di dati Kinesis per raccogliere ed elaborare flussi di grandi dimensioni di record di dati in tempo reale.

Un flusso di dati Kinesis è costituito da partizioni. Gli *shard* sono sequenze identificate in modo univoco di record di dati in un flusso. Per ulteriori informazioni sulle partizioni in Flusso di dati Amazon Kinesis, consulta [Shard](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#shard) nella *Guida per gli sviluppatori di Flusso di dati Amazon Kinesis*.

AWS Database Migration Service pubblica i record in un flusso di dati Kinesis utilizzando JSON. Durante la conversione, AWS DMS serializza ogni record dal database di origine in una coppia attributo-valore in formato JSON o in un formato di messaggio JSON\$1UNFORMATTED. Un formato di messaggio JSON\$1UNFORMATTED è una stringa JSON a riga singola con nuovo delimitatore di riga. Consente ad Amazon Data Firehose di distribuire dati Kinesis a una destinazione Amazon S3 e quindi di interrogarli utilizzando vari motori di query tra cui Amazon Athena.

È possibile utilizzare la mappatura degli oggetti per migrare i dati da qualsiasi origine dati supportata a un flusso di destinazione. Con la mappatura degli oggetti, determini il modo in cui strutturare i record di dati nel flusso. Puoi inoltre definire una chiave di partizione per ogni tabella che viene utilizzata dai flussi di dati Kinesis per raggruppare i dati nelle partizioni. 

AWS DMS imposta anche diversi valori dei parametri Kinesis Data Streams. Il costo per la creazione della tabella dipende dalla quantità di dati e dal numero di tabelle da migrare.

**Nota**  
L'opzione **SSL Mode** sulla AWS DMS console o sull'API non si applica ad alcuni servizi di streaming di dati e NoSQL come Kinesis e DynamoDB. **Sono sicuri per impostazione predefinita, quindi AWS DMS mostra che l'impostazione della modalità SSL è uguale a none (modalità SSL = Nessuno).** Per utilizzare SSL non è necessario eseguire alcuna configurazione aggiuntiva per l'endpoint. Ad esempio, l'utilizzo di Kinesis come endpoint di destinazione è sicuro per impostazione predefinita. Tutte le chiamate API a Kinesis utilizzano SSL, quindi non è necessaria un'opzione SSL aggiuntiva nell'endpoint. AWS DMS È possibile inserire dati e recuperarli in modo sicuro tramite gli endpoint SSL utilizzando il protocollo HTTPS, usato da AWS DMS per impostazione predefinita per la connessione a un flusso di dati Kinesis.

**Impostazioni degli endpoint del flusso di dati Kinesis**

Quando utilizzi gli endpoint target di Kinesis Data Streams, puoi ottenere i dettagli delle transazioni e del controllo `KinesisSettings` utilizzando l'opzione nell'API. AWS DMS 

Puoi configurare le impostazioni di connessione nei modi seguenti:
+ Nella AWS DMS console, utilizzando le impostazioni degli endpoint.
+ Nella CLI, utilizzando l'`kinesis-settings`opzione del [CreateEndpoint](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateEndpoint.html)comando.

Nella CLI utilizza i seguenti parametri di richiesta dell'opzione `kinesis-settings`:
**Nota**  
Il supporto per l'impostazione dell'endpoint `IncludeNullAndEmpty` è disponibile in AWS DMS 3.4.1 e versioni successive. Tuttavia, il supporto per le altre impostazioni degli endpoint seguenti per i target Kinesis Data Streams è disponibile in. AWS DMS
+ `MessageFormat`: il formato di output per i record creati nell'endpoint. Il formato del messaggio è `JSON` (predefinito) o `JSON_UNFORMATTED` (una singola riga senza tabulazione).
+ `IncludeControlDetails`: mostra informazioni dettagliate sul controllo per la definizione di tabella, la definizione di colonna e le modifiche di tabelle e colonne nell'output dei messaggi Kinesis. Il valore predefinito è `false`.
+ `IncludeNullAndEmpty`: include le colonne vuote e NULL nella destinazione. Il valore predefinito è `false`.
+ `IncludePartitionValue`: mostra il valore della partizione all'interno dell'output dei messaggi di Kinesis, a meno che il tipo della partizione non sia `schema-table-type`. Il valore predefinito è `false`.
+ `IncludeTableAlterOperations`: include tutte le operazioni DDL (Data Definition Language) che modificano i dati di controllo della tabella, ad esempio `rename-table`, `drop-table`, `add-column`, `drop-column` e `rename-column`. Il valore predefinito è `false`.
+ `IncludeTransactionDetails`: fornisce informazioni dettagliate sulle transazioni dal database di origine. Tali informazioni includono un timestamp di commit, una posizione nel log e valori per `transaction_id`, `previous_transaction_id` e `transaction_record_id `(l'offset del record all'interno di una transazione). Il valore predefinito è `false`.
+ `PartitionIncludeSchemaTable`: aggiunge ai nomi di schemi e tabelle il prefisso con i valori di partizione, quando il tipo di partizione è `primary-key-type`. In questo modo si aumenta la distribuzione dei dati tra gli shard di Kinesis. Ad esempio, si supponga che uno schema `SysBench` includa migliaia di tabelle e che ogni tabella faccia riferimento solo a un intervallo limitato di valori della chiave primaria. In questo caso, la stessa chiave primaria viene inviata da migliaia di tabelle allo stesso shard, causando un rallentamento. Il valore predefinito è `false`.
+ `UseLargeIntegerValue`— Usa un massimo di 18 cifre int invece di inserire gli int come doppi, disponibile a partire dalla versione 3.5.4. AWS DMS Il valore predefinito è false.

L'esempio seguente mostra l'opzione `kinesis-settings` in uso con un comando `create-endpoint` di esempio emesso utilizzando la 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
```

**Impostazioni attività a pieno carico multithread**

Per contribuire ad aumentare la velocità di trasferimento, AWS DMS supporta un caricamento completo multithread su un'istanza di destinazione Kinesis Data Streams. DMS supporta questo multithreading con impostazioni delle attività che includono le seguenti:
+ `MaxFullLoadSubTasks`: imposta questa opzione per indicare il numero massimo di tabelle da caricare in parallelo. DMS consente di caricare ogni tabella nella corrispondente tabella di destinazione Kinesis utilizzando un'attività secondaria dedicata. Il valore predefinito è 8; il valore il massimo è 49.
+ `ParallelLoadThreads`— Utilizzate questa opzione per specificare il numero di thread da utilizzare per caricare ogni tabella nella relativa tabella di destinazione Kinesis. AWS DMS Il valore massimo per una destinazione del flusso di dati Kinesis è 32. Puoi chiedere che questo limite massimo venga aumentato.
+ `ParallelLoadBufferSize`: utilizza questa opzione per specificare il numero massimo di record da archiviare nel buffer utilizzato dai thread di caricamento parallelo per caricare i dati nella destinazione Kinesis. Il valore predefinito è 50. Il valore massimo è 1.000. Utilizzare questo parametro con `ParallelLoadThreads`; `ParallelLoadBufferSize` è valido solo quando è presente più di un thread.
+ `ParallelLoadQueuesPerThread`: utilizza questa opzione per specificare il numero di code a cui accede ogni thread simultaneo per eliminare i record di dati dalle code e generare un carico batch per la destinazione. Il valore di default è 1. Tuttavia, per le destinazioni Kinesis di varie dimensioni del payload, l'intervallo valido è compreso tra 5 e 512 code per thread.

**Impostazioni attività di carico CDC multithread**

È possibile migliorare le prestazioni dell'acquisizione dei dati di modifica (CDC) per gli endpoint di destinazione in streaming dei dati in tempo reale come Kinesis utilizzando le impostazioni delle attività per modificare il comportamento della chiamata API `PutRecords`. A tale scopo, è possibile specificare il numero di thread simultanei, di code per thread e di record da memorizzare in un buffer utilizzando le impostazioni delle attività `ParallelApply*`. Ad esempio, si supponga di voler eseguire un carico CDC e applicare 128 thread in parallelo. Si desidera inoltre accedere a 64 code per thread, con 50 record memorizzati per buffer. 

Per promuovere le prestazioni del CDC, AWS DMS supporta le seguenti impostazioni delle attività:
+ `ParallelApplyThreads`— specifica il numero di thread simultanei che vengono AWS DMS utilizzati durante un caricamento CDC per inviare i record di dati a un endpoint di destinazione Kinesis. Il valore predefinito è zero (0) e il valore massimo è 32.
+ `ParallelApplyBufferSize`: specifica il numero massimo di record da archiviare in ogni coda di buffer per eseguire il push dei thread simultanei a un endpoint di destinazione Kinesis durante un carico CDC. Il valore predefinito è 100 e il valore massimo è 1.000. Utilizzare questa opzione quando `ParallelApplyThreads` specifica più di un thread. 
+ `ParallelApplyQueuesPerThread`: specifica il numero di code a cui ogni thread accede per eliminare i record di dati dalle code e generare un carico batch per un endpoint Kinesis durante CDC. Il valore predefinito è 1 e il valore massimo è 512.

Quando si utilizzano le impostazioni delle attività `ParallelApply*`, l'impostazione di `partition-key-type` predefinita è la `primary-key` della tabella, non `schema-name.table-name`.

## Utilizzo di un'immagine precedente per visualizzare i valori originali delle righe CDC per un flusso di dati Kinesis come destinazione
<a name="CHAP_Target.Kinesis.BeforeImage"></a>

Quando si scrivono aggiornamenti CDC su una destinazione di streaming dati come Kinesis, è possibile visualizzare i valori originali di una riga di database di origine prima di apportare modifiche da un aggiornamento. Per rendere possibile ciò, AWS DMS compila un'*immagine precedente* degli eventi di aggiornamento sulla base dei dati forniti dal motore di database di origine. 

Diversi motori di database di origine forniscono diverse quantità di informazioni per un'immagine precedente: 
+ Oracle fornisce aggiornamenti alle colonne solo se cambiano. 
+ PostgreSQL fornisce solo i dati per le colonne che fanno parte della chiave primaria (modificata o meno). Per fornire dati per tutte le colonne (modificate o meno), devi impostare su `REPLICA_IDENTITY` su `FULL` invece di `DEFAULT`. Tieni presente che occorre scegliere attentamente l'impostazione `REPLICA_IDENTITY` per ogni tabella. Se si imposta `REPLICA_IDENTITY` su `FULL`, tutti i valori delle colonne vengono scritti continuamente nel WAL (Write-Ahead Logging). Ciò può causare problemi di prestazioni o di risorse con le tabelle che vengono aggiornate frequentemente.
+ MySQL generalmente fornisce dati per tutte le colonne ad eccezione dei tipi di dati BLOB e CLOB (modificati o meno).

Per consentire prima dell'imaging di aggiungere valori originali dal database di origine all'output AWS DMS , utilizzare l'impostazione dell'attività `BeforeImageSettings` o il parametro `add-before-image-columns`. Questo parametro applica una regola di trasformazione della colonna. 

`BeforeImageSettings` aggiunge un nuovo attributo JSON a ogni operazione di aggiornamento con valori raccolti dal sistema di database di origine, come illustrato di seguito.

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

**Nota**  
Si applica solo `BeforeImageSettings` alle AWS DMS attività che contengono un componente CDC, come le attività a pieno carico e le attività CDC (che migrano i dati esistenti e replicano le modifiche in corso) o alle attività solo CDC (che replicano solo le modifiche ai dati). Non applicare `BeforeImageSettings` alle attività a pieno carico.

Per le opzioni `BeforeImageSettings`, si applica quanto segue:
+ Impostare l'opzione `EnableBeforeImage` su `true` da abilitare prima dell'imaging. Il valore predefinito è `false`. 
+ Utilizzare l'opzione `FieldName` per assegnare un nome al nuovo attributo JSON. Quando `EnableBeforeImage` è `true`, `FieldName` è richiesto e non può essere vuoto.
+ L'opzione `ColumnFilter` specifica una colonna da aggiungere utilizzando l'imaging precedente. Per aggiungere solo colonne che fanno parte delle chiavi primarie della tabella, utilizzare il valore predefinito, `pk-only`. Per aggiungere qualsiasi colonna con un valore immagine prima, utilizzare `all`. Tieni presente che l'immagine precedente non contiene colonne con tipi di dati LOB, come CLOB o BLOB.

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

**Nota**  
Le destinazioni Amazon S3 non supportano `BeforeImageSettings`. Per le destinazioni S3, utilizzare solo la regola di trasformazione `add-before-image-columns` da eseguire prima dell'imaging durante CDC.

### Utilizzo di una regola di trasformazione dell'immagine precedente
<a name="CHAP_Target.Kinesis.BeforeImage.Transform-Rule"></a>

In alternativa alle impostazioni delle attività, è possibile utilizzare il parametro `add-before-image-columns`, che applica una regola di trasformazione delle colonne. Con questo parametro, è possibile abilitare l'imaging precedente durante CDC su destinazioni di flusso di dati come Kinesis. 

Utilizzando `add-before-image-columns` in una una regola di trasformazione, è possibile applicare un controllo più dettagliato dei risultati dell'immagine precedente. Le regole di trasformazione consentono di utilizzare un localizzatore di oggetti che consente di controllare le tabelle selezionate per la regola. Inoltre, è possibile concatenare le regole di trasformazione, consentendo l'applicazione di regole diverse a tabelle diverse. È quindi possibile manipolare le colonne prodotte utilizzando altre regole. 

**Nota**  
Non utilizzare il parametro `add-before-image-columns` insieme all'impostazione dell'attività `BeforeImageSettings` all'interno della stessa attività. Utilizzare invece il parametro o l'impostazione, ma non entrambi, per una singola attività.

Un tipo di regola `transformation` regola con il parametro `add-before-image-columns` per una colonna deve fornire una sezione `before-image-def`. Di seguito viene riportato un esempio.

```
    {
      "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,
      }
    }
```

Il valore di `column-prefix` viene anteposto a un nome di colonna e il valore predefinito di `column-prefix` è `BI_`. Il valore di `column-suffix` viene aggiunto al nome della colonna e il valore predefinito è vuoto. Non impostare sia `column-prefix` sia `column-suffix` sull'opzione per svuotare le stringhe.

Scegliere un valore per `column-filter`. Per aggiungere solo colonne che fanno parte delle chiavi primarie della tabella, scegliere `pk-only` . Scegliere `non-lob` per aggiungere solo colonne non di tipo LOB. Oppure scegliere `all` per aggiungere qualsiasi colonna con un valore immagine precedente.

### Esempio di una regola di trasformazione dell'immagine precedente
<a name="CHAP_Target.Kinesis.BeforeImage.Example"></a>

La regola di trasformazione nell'esempio seguente aggiunge una nuova colonna chiamata `BI_emp_no` nella destinazione. Quindi una dichiarazione come `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` popola il campo `BI_emp_no` con 1. Quando si scrivono aggiornamenti CDC alle destinazioni Amazon S3, la colonna `BI_emp_no` indica quale riga originale è stata aggiornata.

```
{
  "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"
      }
    }
  ]
}
```

Per informazioni sull'utilizzo dell'operazione della regola `add-before-image-columns`, consulta [Operazioni e regole di trasformazione](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Prerequisiti per l'utilizzo di un flusso di dati Kinesis come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites"></a>

### Ruolo IAM per l'utilizzo di un flusso di dati Kinesis come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.IAM"></a>

Prima di configurare un flusso di dati Kinesis come destinazione per AWS DMS, assicurati di creare un ruolo IAM. Questo ruolo deve consentire di AWS DMS assumere e concedere l'accesso ai flussi di dati Kinesis in cui viene effettuata la migrazione. Nella seguente policy IAM viene mostrato il set minimo di autorizzazioni di accesso.

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

****  

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

------

Il ruolo utilizzato per la migrazione a un flusso di dati Kinesis deve disporre delle seguenti autorizzazioni.

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

****  

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

------

### Accesso a un flusso di dati Kinesis come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.Access"></a>

Nella AWS DMS versione 3.4.7 e successive, per connetterti a un endpoint Kinesis, devi eseguire una delle seguenti operazioni:
+ Configura DMS per utilizzare gli endpoint VPC. Per informazioni sulla configurazione di DMS per utilizzare gli endpoint VPC, consulta [Configurazione degli endpoint VPC per AWS DMS](CHAP_VPC_Endpoints.md).
+ Configura DMS per utilizzare routing pubblici, ovvero per rendere pubblica l'istanza di replica. Per ulteriori informazioni sulle istanze di replica pubbliche, consulta [Istanze di replica pubbliche e private](CHAP_ReplicationInstance.PublicPrivate.md).

## Limitazioni nell'utilizzo di Kinesis Data Streams come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza il flusso di dati Kinesis come destinazione:
+ AWS DMS pubblica ogni aggiornamento di un singolo record nel database di origine come un unico record di dati in un determinato flusso di dati Kinesis indipendentemente dalle transazioni. Tuttavia, è possibile includere i dettagli della transazione per ogni record di dati utilizzando i parametri pertinenti dell'API `KinesisSettings`.
+ La modalità LOB completa non è supportata.
+ La dimensione massima del LOB supportata è 1 MB.
+ I flussi di dati Kinesis non supportano la deduplicazione. Le applicazioni che utilizzano i dati provenienti da un flusso devono gestire i record duplicati. Per ulteriori informazioni, consulta [Handling duplicate records](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html) nella *Guida per gli sviluppatori di Flusso di dati Amazon Kinesis*.
+ AWS DMS supporta i seguenti quattro moduli per le chiavi di partizione:
  + `SchemaName.TableName`: una combinazione del nome dello schema e quello della tabella.
  + `${AttributeName}`: il valore di uno dei campi nel formato JSON o la chiave primaria della tabella del database di origine.
  + `transaction-id`: L'ID della transazione CDC. Tutti i record all'interno della stessa transazione vengono inseriti nella stessa partizione.
  + `constant`: un valore letterale fisso per ogni record indipendentemente dalla tabella o dai dati. Tutti i record vengono inviati allo stesso valore della chiave di partizione «costante», che fornisce un ordinamento globale rigoroso in tutte le tabelle.

  ```
  {
      "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"
      }
  }
  ```
+ Per informazioni sulla crittografia dei dati a riposo all'interno del flusso di dati Kinesis, consulta [Data protection in Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html.html) nella *Guida per gli sviluppatori di AWS Key Management Service *. 
+ L'impostazione dell'`IncludeTransactionDetails`endpoint è supportata solo quando l'endpoint di origine è Oracle, SQL Server, PostgreSQL o MySQL. Per altri tipi di endpoint di origine, i dettagli della transazione non verranno inclusi.
+ `BatchApply` non è supportato per un endpoint Kinesis. L'utilizzo di Batch Apply (ad esempio, l'impostazione del task dei metadati di `BatchApplyEnabled` destinazione) per un target Kinesis causa il fallimento dell'attività e la perdita di dati. Non abilitarlo `BatchApply` quando si utilizza Kinesis come endpoint di destinazione.
+ Le destinazioni Kinesis sono supportate solo per un flusso di dati Kinesis nello stesso AWS account e nello stesso dell'istanza di replica. Regione AWS 
+ Quando si esegue la migrazione da una fonte MySQL, i dati non includono BeforeImage i tipi di dati CLOB e BLOB. Per ulteriori informazioni, consulta [Utilizzo di un'immagine precedente per visualizzare i valori originali delle righe CDC per un flusso di dati Kinesis come destinazione](#CHAP_Target.Kinesis.BeforeImage).
+ AWS DMS non supporta la migrazione di valori di tipi di `BigInt` dati con più di 16 cifre. Per aggirare questa limitazione puoi utilizzare la seguente regola di trasformazione per convertire la colonna `BigInt` in una stringa. Per ulteriori informazioni sulle regole di trasformazione, consulta [Operazioni e regole di trasformazione](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 più operazioni DML all'interno di una singola transazione modificano una colonna Large Object (LOB) nel database di origine, il database di destinazione conserva solo il valore LOB finale dell'ultima operazione della transazione. I valori LOB intermedi impostati dalle operazioni precedenti nella stessa transazione vengono sovrascritti, il che può causare potenziali perdite di dati o incongruenze. Questo comportamento si verifica a causa del modo in cui i dati LOB vengono elaborati durante la replica.
+ AWS DMS non supporta i dati di origine contenenti `'\0'` caratteri incorporati quando si utilizza Kinesis come endpoint di destinazione. I dati contenenti `'\0'` caratteri incorporati verranno troncati al primo carattere. `'\0'`

## Utilizzo della mappatura degli oggetti per la migrazione dei dati a un flusso di dati Kinesis
<a name="CHAP_Target.Kinesis.ObjectMapping"></a>

AWS DMS utilizza regole di mappatura delle tabelle per mappare i dati dal flusso di dati Kinesis di origine a quello di destinazione. Per mappare i dati a un flusso di destinazione, è necessario utilizzare una regola di mappatura delle tabelle denominata mappatura degli oggetti. La mappatura degli oggetti consente di definire il modo in cui i record di dati nell'origine vengono mappati ai record di dati pubblicati nel flusso di dati Kinesis. 

I flussi di dati Kinesis non dispongono di una struttura preimpostata oltre a una chiave di partizione. In una regola di mapping degli oggetti, i valori possibili di una `partition-key-type` per i record di dati sono `schema-table`, `transaction-id`, `primary-key`, `constant` e `attribute-name`.

Per creare una regola di mappatura degli oggetti, è necessario specificare il parametro `rule-type` come `object-mapping`. Questa regola specifica il tipo di mappatura degli oggetti da utilizzare. 

Di seguito è riportata la struttura per la regola.

```
{
    "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 attualmente supporta `map-record-to-record` e è `map-record-to-document` l'unico valore valido per il parametro. `rule-action` Queste impostazioni influiscono sui valori che non sono esclusi come parte dell'elenco degli attributi `exclude-columns`. I `map-record-to-document` valori `map-record-to-record` and specificano come AWS DMS gestisce questi record per impostazione predefinita. Questi valori non influiscono in alcun modo sulle mappature degli attributi. 

Utilizza `map-record-to-record` per la migrazione da un database relazionale a un flusso di dati Kinesis. Questo tipo di regola utilizza il valore `taskResourceId.schemaName.tableName` dal database relazionale come chiave di partizione nel flusso di dati Kinesis e crea un attributo per ogni colonna nel database di origine. 

Quando utilizzi `map-record-to-record`, tieni presente quanto segue:
+ Questa impostazione ha effetto solo sulle colonne escluse dall'elenco `exclude-columns`.
+ Per ogni colonna di questo tipo, AWS DMS crea un attributo corrispondente nell'argomento di destinazione.
+ AWS DMS crea questo attributo corrispondente indipendentemente dal fatto che la colonna di origine venga utilizzata in una mappatura degli attributi. 

Utilizza `map-record-to-document` per inserire le colonne di origine in un unico documento flat nel flusso di destinazione appropriato utilizzando il nome dell'attributo "\$1doc". AWS DMS posiziona i dati in un'unica mappa flat sull'origine chiamata "`_doc`". Questo posizionamento si applica a qualsiasi colonna della tabella di origine non elencata nell'elenco di attributi `exclude-columns`.

Per comprendere il funzionamento di `map-record-to-record`, è opportuno esaminarne il comportamento in azione. Per questo esempio, supponiamo che tu stia iniziando con una riga di tabella del database relazionale con la struttura e i dati seguenti.


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

Per eseguire la migrazione di queste informazioni da uno schema denominato `Test` a un flusso di dati Kinesis, crea le regole per mappare i dati sul flusso di destinazione. La regola seguente illustra la mappatura. 

```
{
    "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"
            }
        }
    ]
}
```

Di seguito viene illustrato il formato di record risultante nel flusso di dati Kinesis: 
+ StreamName: XXX
+ PartitionKey: Test.Customers //schmaname.tableName
+ Dati: //Il seguente messaggio JSON

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

Supponi tuttavia di utilizzare le stesse regole ma modificando il parametro `rule-action` su `map-record-to-document` ed escludendo determinate colonne. La regola seguente illustra la mappatura.

```
{
	"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"
				]
			}
		}
	]
}
```

In questo caso, le colonne non elencate nel parametro `exclude-columns`, `FirstName`, `LastName`, `StoreId` e `DateOfBirth` sono mappate a `_doc`. Di seguito viene illustrato il formato di record risultante. 

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

### Ristrutturazione dei dati con la mappatura degli attributi
<a name="CHAP_Target.Kinesis.AttributeMapping"></a>

Puoi ristrutturare i dati mentre li stai migrando a un flusso di dati Kinesis utilizzando una mappa degli attributi. Ad esempio, potresti voler combinare più campi nell'origine in un unico campo nella destinazione. La seguente mappa degli attributi illustra come ristrutturare i dati.

```
{
    "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}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Per impostare un valore costante per, specificare`partition-key`, questo imposta il valore della partizione su. `"partition-key-type: "constant"` `constant` Ad esempio, potresti eseguire questa operazione per forzare l'archiviazione di tutti i dati in un singolo shard. Questo approccio viene illustrato nella mappatura seguente. 

```
{
    "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**  
Il valore `partition-key` per un record di controllo per una tabella specifica è `TaskId.SchemaName.TableName`. Il valore `partition-key` per un record di controllo per un'attività specifica è il `TaskId` del record. La specifica si un valore `partition-key` nella mappatura degli oggetti non influisce sul parametro `partition-key` per un record di controllo.  
 Quando `partition-key-type` è impostato su `attribute-name` in una regola di mappatura della tabella, è necessario specificare`partition-key-name`, che deve fare riferimento a una colonna della tabella di origine o a una colonna personalizzata definita nella mappatura. Inoltre, `attribute-mappings` deve essere fornito per definire il modo in cui le colonne di origine vengono mappate al Kinesis Stream di destinazione.

### Formato del messaggio per il flusso di dati Kinesis
<a name="CHAP_Target.Kinesis.Messageformat"></a>

L'output JSON è semplicemente un elenco di coppie chiave-valore. Un formato di messaggio JSON\$1UNFORMATTED è una stringa JSON a riga singola con nuovo delimitatore di riga.

AWS DMS fornisce i seguenti campi riservati per semplificare l'utilizzo dei dati provenienti da Kinesis Data Streams: 

**RecordType**  
Il tipo di record può essere relativo ai dati o al controllo. I *record di dati *rappresentano le righe effettive nell'origine. I *record di controllo* sono per eventi importanti nel flusso, ad esempio un riavvio dell'attività.

**Operation**  
Per i record di dati, l'operazione può essere `load`, `insert`, `update` o `delete`.  
Per i record di controllo, l'operazione può essere `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` o `column-type-change`.

**SchemaName**  
Lo schema di origine per il record. Questo campo può essere vuoto per un record di controllo.

**TableName**  
La tabella di origine per il record. Questo campo può essere vuoto per un record di controllo.

**Time stamp**  
Il timestamp relativo al momento della creazione del messaggio JSON. Il campo viene formattato con il formato ISO 8601.

# Usare Apache Kafka come obiettivo per AWS Database Migration Service
<a name="CHAP_Target.Kafka"></a>

È possibile utilizzarlo AWS DMS per migrare i dati in un cluster Apache Kafka. Apache Kafka è una piattaforma di streaming distribuita. È possibile utilizzare Apache Kafka per l'inserimento e l'elaborazione dei dati di streaming in tempo reale.

AWS offre anche Amazon Managed Streaming for Apache Kafka (Amazon MSK) da utilizzare come destinazione. AWS DMS Amazon MSK è un servizio di streaming Apache Kafka completamente gestito che semplifica l'implementazione e la gestione delle istanze Apache Kafka. Funziona con le versioni open source di Apache Kafka e accedi alle istanze Amazon MSK come AWS DMS destinazioni esattamente come qualsiasi istanza di Apache Kafka. Per ulteriori informazioni, consulta [Che cos'è Amazon MSK?](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) nella *Guida per sviluppatori di Streaming gestito da Amazon per Apache Kafka*.

Un cluster Kafka archivia i flussi di record in categorie denominate argomenti che sono suddivisi in partizioni. Le *partizioni* sono sequenze di record di dati (messaggi) identificate in modo univoco in un argomento. Le partizioni possono essere distribuite tra più broker in un cluster per consentire l'elaborazione parallela dei record dell'argomento. Per ulteriori informazioni su argomenti e partizioni e la loro distribuzione in Apache Kafka, consulta [Argomenti e registri](https://kafka.apache.org/documentation/#intro_topics) e [Distribuzione](https://kafka.apache.org/documentation/#intro_distribution).

Il cluster Kafka può essere un'istanza Amazon MSK, un cluster in esecuzione su un'istanza Amazon EC2 o un cluster on-premise. Un'istanza Amazon MSK o un cluster su un'istanza Amazon EC2 può trovarsi nello stesso VPC o in uno diverso. Se il cluster è on-premise, è possibile utilizzare il server dei nomi on-premise dell'istanza di replica per risolvere il nome host del cluster. Per informazioni sulla configurazione di un server dei nomi per l'istanza di replica, consulta [Utilizzo del server dei nomi in locale](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver). Per ulteriori informazioni sulla configurazione di una rete, consulta [Configurazione di una rete per un'istanza di replica](CHAP_ReplicationInstance.VPC.md).

Quando utilizzi un cluster Amazon MSK, assicurati che il relativo gruppo di sicurezza consenta l'accesso dall'istanza di replica. Per informazioni sulla modifica del gruppo di sicurezza di un cluster Amazon MSK, consulta [Modifica del gruppo di sicurezza di un cluster Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/change-security-group.html).

AWS Database Migration Service pubblica i record relativi a un argomento di Kafka utilizzando JSON. Durante la conversione, AWS DMS serializza ogni record dal database di origine in una coppia attributo-valore in formato JSON.

È possibile usare la mappatura degli oggetti per migrare i dati da qualsiasi origine dati supportata a un cluster Kafka di destinazione. Con la mappatura degli oggetti, determini il modo in cui strutturare i record di dati nell'argomento di destinazione. Puoi inoltre definire una chiave di partizionamento per ogni tabella che viene utilizzata da Kafka per raggruppare i dati nelle sue partizioni. 

Attualmente, AWS DMS supporta un singolo argomento per attività. Per una singola attività con più tabelle, tutti i messaggi vengono indirizzati a un unico argomento. Ogni messaggio include una sezione di metadati che identifica lo schema e la tabella di destinazione. AWS DMS le versioni 3.4.6 e successive supportano la replica multitopica utilizzando la mappatura degli oggetti. Per ulteriori informazioni, consulta [Replica di più argomenti con la mappatura degli oggetti](#CHAP_Target.Kafka.MultiTopic).

**Impostazioni endpoint Apache Kafka**

È possibile specificare i dettagli della connessione tramite le impostazioni dell'endpoint nella AWS DMS console o l'`--kafka-settings`opzione nella CLI. I requisiti per ogni impostazione sono i seguenti:
+ `Broker`: specifica le posizioni di uno o più broker nel cluster Kafka sotto forma di elenco di voci separate da virgole per ogni `broker-hostname:port`. Un esempio è `"ec2-12-345-678-901.compute-1.amazonaws.com:2345,ec2-10-987-654-321.compute-1.amazonaws.com:9876"`. Questa impostazione può specificare le posizioni di uno o tutti i broker del cluster. Tutti i broker del cluster comunicano per gestire il partizionamento dei record di dati migrati verso l'argomento.
+ `Topic` (facoltativo): specifica il nome dell'argomento con una lunghezza massima di 255 lettere e simboli. È possibile utilizzare punto (.), carattere di sottolineatura (\$1) e segno meno (-). I nomi degli argomenti con un punto (.) o un carattere di sottolineatura (\$1) possono interferire con le strutture dati interne. Nel nome dell'argomento utilizzare uno dei due simboli ma non entrambi. Se non specificate il nome di un argomento, AWS DMS lo usa `"kafka-default-topic"` come argomento di migrazione.
**Nota**  
Se desiderate AWS DMS creare un argomento di migrazione specificato dall'utente o l'argomento predefinito, impostatelo `auto.create.topics.enable = true` come parte della configurazione del cluster Kafka. Per ulteriori informazioni, consulta [Limitazioni nell'utilizzo di Apache Kafka come destinazione per AWS Database Migration Service](#CHAP_Target.Kafka.Limitations)
+ `MessageFormat`: il formato di output per i record creati nell'endpoint. Il formato del messaggio è `JSON` (predefinito) o `JSON_UNFORMATTED` (una singola riga senza tabulazione).
+ `MessageMaxBytes`: la dimensione massima in byte per i record creati nell'endpoint. Il valore di default è 1.000.000.
**Nota**  
È possibile utilizzare solo AWS CLI/SDK per passare `MessageMaxBytes` a un valore non predefinito. Ad esempio utilizza il seguente comando per modificare l'endpoint Kafka esistente e cambiare `MessageMaxBytes`.  

  ```
  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`: fornisce informazioni dettagliate sulle transazioni dal database di origine. Tali informazioni includono un timestamp di commit, una posizione nel log e valori per `transaction_id`, `previous_transaction_id` e `transaction_record_id`(l'offset del record all'interno di una transazione). Il valore predefinito è `false`.
+ `IncludePartitionValue`: mostra il valore della partizione nell'output dei messaggi di Kafka, a meno che il tipo della partizione non sia `schema-table-type`. Il valore predefinito è `false`.
+ `PartitionIncludeSchemaTable`: aggiunge ai nomi di schemi e tabelle il prefisso con i valori di partizione, quando il tipo di partizione è `primary-key-type`. In questo modo si aumenta la distribuzione dei dati tra le partizioni di Kafka. Ad esempio, si supponga che uno schema `SysBench` includa migliaia di tabelle e che ogni tabella faccia riferimento solo a un intervallo limitato di valori della chiave primaria. In questo caso, la stessa chiave primaria viene inviata da migliaia di tabelle alla stessa partizione, causando un rallentamento. Il valore predefinito è `false`.
+ `IncludeTableAlterOperations`: include tutte le operazioni DDL (Data Definition Language) che modificano i dati di controllo della tabella, ad esempio `rename-table`, `drop-table`, `add-column`, `drop-column` e `rename-column`. Il valore predefinito è `false`. 
+ `IncludeControlDetails`: mostra le informazioni dettagliate del controllo per la definizione di tabelle, la definizione di colonne e le modifiche di tabelle e colonne nell'output dei messaggi Kafka. Il valore predefinito è `false`.
+ `IncludeNullAndEmpty`: include le colonne vuote e NULL nella destinazione. Il valore predefinito è `false`.
+ `SecurityProtocol`: imposta una connessione sicura a un endpoint di destinazione Kafka utilizzando Transport Layer Security (TLS). Le opzioni includono `ssl-authentication`, `ssl-encryption` e `sasl-ssl`. L'utilizzo di `sasl-ssl` richiede `SaslUsername` e `SaslPassword`.
+ `SslEndpointIdentificationAlgorithm`— Imposta la verifica del nome host per il certificato. Questa impostazione è supportata nella AWS DMS versione 3.5.1 e successive. Le opzioni sono le seguenti: 
  + `NONE`: Disattiva la verifica del nome host del broker nella connessione del client.
  + `HTTPS`: Abilita la verifica del nome host del broker nella connessione del client.
+ `useLargeIntegerValue`— Usa fino a 18 cifre int invece di emettere int come doppi, disponibile a partire dalla AWS DMS versione 3.5.4. Il valore predefinito è false.

È possibile utilizzare le impostazioni per aumentare la velocità del trasferimento. Per farlo, AWS DMS supporta il pieno carico multithread in un cluster Apache Kafka di destinazione. AWS DMS supporta il multithreading con le impostazioni delle attività seguenti:
+ `MaxFullLoadSubTasks`— Utilizzate questa opzione per indicare il numero massimo di tabelle di origine da caricare in parallelo. AWS DMS carica ogni tabella nella tabella di destinazione Kafka corrispondente utilizzando una sottoattività dedicata. Il valore predefinito è 8; il valore il massimo è 49.
+ `ParallelLoadThreads`— Utilizzate questa opzione per specificare il numero di thread da utilizzare per caricare ogni tabella nella relativa tabella di destinazione Kafka. AWS DMS Il valore massimo per una destinazione Apache Kafka è 32. Puoi chiedere che questo limite massimo venga aumentato.
+ `ParallelLoadBufferSize`: utilizza questa opzione per specificare il numero massimo di record da archiviare nel buffer usato dai thread di caricamento parallelo per caricare i dati nella destinazione Kafka. Il valore predefinito è 50. Il valore massimo è 1.000. Utilizzare questo parametro con `ParallelLoadThreads`; `ParallelLoadBufferSize` è valido solo quando è presente più di un thread.
+ `ParallelLoadQueuesPerThread`: utilizza questa opzione per specificare il numero di code a cui accede ogni thread simultaneo per eliminare i record di dati dalle code e generare un carico batch per la destinazione. Il valore di default è 1. Il numero massimo è 512.

È possibile migliorare le prestazioni dell'acquisizione dei dati di modifica (CDC) per gli endpoint Kafka ottimizzando le impostazioni delle attività per thread paralleli e operazioni in blocco. A tale scopo, è possibile specificare il numero di thread simultanei, di code per thread e di record da memorizzare in un buffer utilizzando le impostazioni delle attività `ParallelApply*`. Ad esempio, si supponga di voler eseguire un carico CDC e applicare 128 thread in parallelo. Si desidera inoltre accedere a 64 code per thread, con 50 record memorizzati per buffer. 

Per promuovere le prestazioni del CDC, AWS DMS supporta le seguenti impostazioni delle attività:
+ `ParallelApplyThreads`— specifica il numero di thread simultanei che vengono AWS DMS utilizzati durante un caricamento CDC per inviare i record di dati a un endpoint di destinazione Kafka. Il valore predefinito è zero (0) e il valore massimo è 32.
+ `ParallelApplyBufferSize`: specifica il numero massimo di record da archiviare in ogni coda di buffer per eseguire il push dei thread simultanei a un endpoint di destinazione Kafka durante un carico CDC. Il valore predefinito è 100 e il valore massimo è 1.000. Utilizzare questa opzione quando `ParallelApplyThreads` specifica più di un thread. 
+ `ParallelApplyQueuesPerThread`: specifica il numero di code a cui ogni thread accede per eliminare i record di dati dalle code e generare un carico batch per un endpoint Kafka durante la CDC. Il valore di default è 1. Il numero massimo è 512.

Quando si utilizzano le impostazioni delle attività `ParallelApply*`, l'impostazione di `partition-key-type` predefinita è la `primary-key` della tabella, non `schema-name.table-name`.

## Connessione a Kafka utilizzando Transport Layer Security (TLS)
<a name="CHAP_Target.Kafka.TLS"></a>

Il cluster Kafka accetta solo connessioni protette con Transport Layer Security (TLS). Con DMS, è possibile utilizzare una qualsiasi delle seguenti tre opzioni di protocollo di sicurezza per proteggere la connessione degli endpoint Kafka.

**Crittografia SSL (`server-encryption`)**  
I client convalidano l'identità del server tramite il certificato del server. Quindi viene stabilita una connessione crittografata tra server e client.

**Autenticazione SSL (`mutual-authentication`)**  
Server e client convalidano l'identità reciprocamente tramite i propri certificati. Quindi viene stabilita una connessione crittografata tra server e client.

**SASL-SSL (`mutual-authentication`)**  
Il metodo Simple Authentication and Security Layer (SASL) sostituisce il certificato del client con un nome utente e una password per convalidare l'identità del client. In particolare, si forniscono un nome utente e una password registrati dal server in modo che il server possa convalidare l'identità del client. Quindi viene stabilita una connessione crittografata tra server e client.

**Importante**  
Apache Kafka e Amazon MSK accettano certificati risolti. Questa è una limitazione nota di Kafka e Amazon MSK da risolvere. Per ulteriori informazioni, consulta [Apache Kafka issues, KAFKA-3700](https://issues.apache.org/jira/browse/KAFKA-3700).  
Se utilizzi Amazon MSK, prendi in considerazione l'utilizzo delle liste di controllo degli accessi (ACLs) come soluzione alternativa a questa limitazione nota. Per ulteriori informazioni sull'utilizzo ACLs, consulta la sezione [Apache Kafka ACLs](https://docs.aws.amazon.com//msk/latest/developerguide/msk-acls.html) della *Amazon Managed Streaming for Apache Kafka Developer* Guide.  
Se utilizzi un cluster Kafka autogestito, consulta il [commento datato 21 ottobre 2018](https://issues.apache.org/jira/browse/KAFKA-3700?focusedCommentId=16658376) per informazioni sulla configurazione del cluster.

### Utilizzo della crittografia SSL con Amazon MSK o un cluster Kafka autogestito
<a name="CHAP_Target.Kafka.TLS.SSLencryption"></a>

È possibile utilizzare la crittografia SSL per proteggere la connessione di un endpoint ad Amazon MSK o a un cluster Kafka autogestito. Quando usi il metodo di autenticazione con crittografia SSL, i client convalidano l'identità di un server tramite il certificato del server. Quindi viene stabilita una connessione crittografata tra server e client.

**Per utilizzare la crittografia SSL per connettersi ad Amazon MSK**
+ Configura l'impostazione dell'endpoint del protocollo di sicurezza (`SecurityProtocol`) utilizzando l'opzione `ssl-encryption` quando crei l'endpoint Kafka di destinazione. 

  L'esempio JSON che segue imposta il protocollo di sicurezza come crittografia SSL.

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

**Per utilizzare la crittografia SSL per un cluster Kafka autogestito**

1. Se utilizzi un'autorità di certificazione (CA, Certification Authority) privata nel cluster Kafka on-premise, carica il certificato CA privato e ottieni un nome della risorsa Amazon (ARN). 

1. Configura l'impostazione dell'endpoint del protocollo di sicurezza (`SecurityProtocol`) utilizzando l'opzione `ssl-encryption` quando crei l'endpoint Kafka di destinazione. L'esempio JSON che segue imposta il protocollo di sicurezza come `ssl-encryption`.

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

1. Se utilizzi una CA privata, imposta `SslCaCertificateArn` nell'ARN che hai ottenuto nella prima fase precedente.

### Utilizzo dell'autenticazione SSL
<a name="CHAP_Target.Kafka.TLS.SSLauthentication"></a>

È possibile utilizzare l'autenticazione SSL per proteggere la connessione di un endpoint ad Amazon MSK o a un cluster Kafka autogestito.

Per abilitare l'autenticazione e la crittografia del client utilizzando l'autenticazione SSL per la connessione ad Amazon MSK, procedi come segue:
+ Prepara una chiave privata e un certificato pubblico per Kafka.
+ Carica i certificati nella gestione certificati DMS.
+ Crea un endpoint di destinazione Kafka con il certificato corrispondente specificato nelle impostazioni dell'endpoint Kafka. ARNs 

**Per preparare una chiave privata e un certificato pubblico per Amazon MSK**

1. Crea un'istanza EC2 e configura un client per utilizzare l'autenticazione come descritto nelle fasi da 1 a 9 della sezione [Client Authentication](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) della *Guida per sviluppatori di Streaming gestito da Amazon per Apache Kafka*.

   Dopo aver completato queste fasi, avrai un Certificate-ARN (l'ARN del certificato pubblico salvato in ACM) e una chiave privata contenuta in un file `kafka.client.keystore.jks`.

1. Recupera il certificato pubblico e copia il certificato nel file `signed-certificate-from-acm.pem` utilizzando il comando seguente:

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

   Il comando restituisce informazioni simili a quelle mostrate nell'esempio seguente:

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

   Quindi copia l'equivalente di `"123"` nel file `signed-certificate-from-acm.pem`.

1. Recupera la chiave privata importando la chiave `msk-rsa` da `kafka.client.keystore.jks to keystore.p12`, come mostrato nel seguente esempio.

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

1. Utilizza il comando seguente per esportare `keystore.p12` nel formato `.pem`. 

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

   Viene visualizzato il messaggio **Enter PEM pass phrase** che richiede la chiave applicata per crittografare il certificato.

1. Rimuovi gli attributi contenitore e gli attributi chiave dal file `.pem` per assicurarti che la prima riga inizi con la stringa seguente.

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

**Per caricare un certificato pubblico e una chiave privata nella gestione certificati DMS e testare la connessione ad Amazon MSK**

1. Carica nella gestione certificati DMS utilizzando il comando seguente.

   ```
   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. Crea un endpoint di destinazione Amazon MSK e verifica la connessione per assicurarti che l'autenticazione TLS funzioni.

   ```
   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**  
È possibile utilizzare l'autenticazione SSL per proteggere una connessione a un cluster Kafka autogestito. In alcuni casi, si potrebbe utilizzare un'autorità di certificazione (CA) privata nel cluster Kafka on-premise. In tal caso, carica la catena di CA, il certificato pubblico e la chiave privata nella gestione certificati DMS. Quindi, utilizza il corrispondente nome della risorsa Amazon (ARN) nelle impostazioni degli endpoint quando crei l'endpoint di destinazione Kafka on-premise.

**Per preparare una chiave privata e un certificato firmato per un cluster Kafka autogestito**

1. Genera una coppia di chiavi come nel seguente esempio.

   ```
   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. Genera una richiesta di firma del certificato (CSR, Certificate Sign Request). 

   ```
   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. Usa la CA nel truststore del cluster per firmare la CSR. Se non disponi di una CA, puoi creare una CA privata.

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

1. Importa `ca-cert` nel truststore e nel keystore del server. Se non si dispone di un truststore, utilizza il comando seguente per crearlo e importare `ca-cert `. 

   ```
   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. Firma il certificato.

   ```
   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. Importa il certificato firmato nel 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. Utilizza il seguente comando per importare la chiave `on-premise-rsa` da `kafka.server.keystore.jks` a `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. Utilizza il comando seguente per esportare `keystore.p12` nel formato `.pem`.

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

1. Carica `encrypted-private-server-key.pem` e `signed-certificate.pem` e `ca-cert` nella gestione certificati DMS.

1. Crea un endpoint utilizzando il valore restituito. 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
   ```

### Utilizzo dell'autenticazione SASL-SSL per connettersi ad Amazon MSK
<a name="CHAP_Target.Kafka.TLS.SSL-SASL"></a>

Il metodo Simple Authentication and Security Layer (SASL) utilizza un nome utente e una password per convalidare l'identità di un client e stabilisce una connessione crittografata tra server e client.

Per utilizzare SASL, devi prima creare un nome utente e una password sicuri quando configuri il cluster Amazon MSK. Per una descrizione di come configurare un nome utente e una password sicuri per un cluster Amazon MSK, consulta [Configurazione dell' SASL/SCRAM autenticazione per un cluster Amazon MSK nella Amazon Managed Streaming for](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) *Apache Kafka Developer Guide*.

Quindi, quando crei l'endpoint di destinazione Kafka, imposta l'impostazione dell'endpoint del protocollo di sicurezza (`SecurityProtocol`) utilizzando l'opzione `sasl-ssl`. Imposti anche le opzioni `SaslUsername` e `SaslPassword`. Assicurati che siano coerenti con il nome utente e la password sicuri creati durante la configurazione del cluster Amazon MSK, come mostrato nel seguente esempio JSON.

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

**Nota**  
Attualmente, AWS DMS supporta solo SASL-SSL pubblico supportato da CA. DMS non supporta SASL-SSL per l'uso con Kafka autogestito supportato da una CA privata.
Per l'autenticazione SASL-SSL, supporta il meccanismo SCRAM-SHA-512 per impostazione predefinita. AWS DMS AWS DMS le versioni 3.5.0 e successive supportano anche il meccanismo Plain. Per supportare il meccanismo Plain, imposta il parametro `SaslMechanism` del tipo di dati API `KafkaSettings` su `PLAIN`. Il tipo di dati `PLAIN` è supportato da Kafka, ma non da Amazon Kafka (MSK).

## Utilizzo di un'immagine precedente per visualizzare i valori originali delle righe CDC per Apache Kafka come destinazione
<a name="CHAP_Target.Kafka.BeforeImage"></a>

Quando si scrivono aggiornamenti CDC su una destinazione di streaming dati come Kafka, è possibile visualizzare i valori originali di una riga di database di origine prima di apportare modifiche da un aggiornamento. Per rendere possibile ciò, AWS DMS compila un'*immagine precedente degli eventi di aggiornamento in base ai dati forniti* dal motore di database di origine. 

Diversi motori di database di origine forniscono diverse quantità di informazioni per un'immagine precedente: 
+ Oracle fornisce aggiornamenti alle colonne solo se cambiano. 
+ PostgreSQL fornisce solo i dati per le colonne che fanno parte della chiave primaria (modificata o meno). Se è in uso la replica logica e REPLICA IDENTITY FULL è impostato per la tabella di origine, è possibile ottenere informazioni complete prima e dopo sulla riga scritta WALs e disponibile qui.
+ MySQL generalmente fornisce dati per tutte le colonne (modificate o meno).

Per consentire prima dell'imaging di aggiungere valori originali dal database di origine all'output AWS DMS , utilizzare l'impostazione dell'attività `BeforeImageSettings` o il parametro `add-before-image-columns`. Questo parametro applica una regola di trasformazione della colonna. 

`BeforeImageSettings` aggiunge un nuovo attributo JSON a ogni operazione di aggiornamento con valori raccolti dal sistema di database di origine, come illustrato di seguito.

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

**Nota**  
Applicare `BeforeImageSettings` alle attività CDC a pieno carico e alle attività CDC (che eseguono la migrazione dei dati esistenti e replicano le modifiche in corso) o solo alle attività CDC (che replicano solo le modifiche dei dati). Non applicare `BeforeImageSettings` alle attività a pieno carico.

Per le opzioni `BeforeImageSettings`, si applica quanto segue:
+ Impostare l'opzione `EnableBeforeImage` su `true` da abilitare prima dell'imaging. Il valore predefinito è `false`. 
+ Utilizzare l'opzione `FieldName` per assegnare un nome al nuovo attributo JSON. Quando `EnableBeforeImage` è `true`, `FieldName` è richiesto e non può essere vuoto.
+ L'opzione `ColumnFilter` specifica una colonna da aggiungere utilizzando l'imaging precedente. Per aggiungere solo colonne che fanno parte delle chiavi primarie della tabella, utilizzare il valore predefinito, `pk-only`. Per aggiungere solo colonne non di tipo LOB, utilizzare `non-lob`. Per aggiungere qualsiasi colonna con un valore immagine prima, utilizzare `all`. 

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

### Utilizzo di una regola di trasformazione dell'immagine precedente
<a name="CHAP_Target.Kafka.BeforeImage.Transform-Rule"></a>

In alternativa alle impostazioni delle attività, è possibile utilizzare il parametro `add-before-image-columns`, che applica una regola di trasformazione delle colonne. Con questo parametro, è possibile abilitare l'imaging precedente durante il CDC su destinazioni di streaming dati come Kafka.

Utilizzando `add-before-image-columns` in una una regola di trasformazione, è possibile applicare un controllo più dettagliato dei risultati dell'immagine precedente. Le regole di trasformazione consentono di utilizzare un localizzatore di oggetti che consente di controllare le tabelle selezionate per la regola. Inoltre, è possibile concatenare le regole di trasformazione, consentendo l'applicazione di regole diverse a tabelle diverse. È quindi possibile manipolare le colonne prodotte utilizzando altre regole. 

**Nota**  
Non utilizzare il parametro `add-before-image-columns` insieme all'impostazione dell'attività `BeforeImageSettings` all'interno della stessa attività. Utilizzare invece il parametro o l'impostazione, ma non entrambi, per una singola attività.

Un tipo di regola `transformation` regola con il parametro `add-before-image-columns` per una colonna deve fornire una sezione `before-image-def`. Di seguito viene riportato un esempio.

```
    {
      "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,
      }
    }
```

Il valore di `column-prefix` viene anteposto a un nome di colonna e il valore predefinito di `column-prefix` è `BI_`. Il valore di `column-suffix` viene aggiunto al nome della colonna e il valore predefinito è vuoto. Non impostare sia `column-prefix` sia `column-suffix` sull'opzione per svuotare le stringhe.

Scegliere un valore per `column-filter`. Per aggiungere solo colonne che fanno parte delle chiavi primarie della tabella, scegliere `pk-only` . Scegliere `non-lob` per aggiungere solo colonne non di tipo LOB. Oppure scegliere `all` per aggiungere qualsiasi colonna con un valore immagine precedente.

### Esempio di una regola di trasformazione dell'immagine precedente
<a name="CHAP_Target.Kafka.BeforeImage.Example"></a>

La regola di trasformazione nell'esempio seguente aggiunge una nuova colonna chiamata `BI_emp_no` nella destinazione. Quindi una dichiarazione come `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` popola il campo `BI_emp_no` con 1. Quando si scrivono aggiornamenti CDC alle destinazioni Amazon S3, la colonna `BI_emp_no` indica quale riga originale è stata aggiornata.

```
{
  "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"
      }
    }
  ]
}
```

Per informazioni sull'utilizzo dell'operazione della regola `add-before-image-columns`, consulta [Operazioni e regole di trasformazione](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Limitazioni nell'utilizzo di Apache Kafka come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Kafka.Limitations"></a>

Utilizzando Apache Kafka come destinazione valgono le seguenti limitazioni:
+ AWS DMS Gli endpoint target Kafka non supportano il controllo degli accessi IAM per Amazon Managed Streaming for Apache Kafka (Amazon MSK).
+ La modalità LOB completa non è supportata.
+ Specificate un file di configurazione Kafka per il vostro cluster con proprietà che consentano di creare automaticamente nuovi argomenti. AWS DMS Includere l'impostazione `auto.create.topics.enable = true`. Se si utilizza Amazon MSK, è possibile specificare la configurazione predefinita alla creazione del cluster Kafka, quindi modificare l'impostazione `auto.create.topics.enable` su `true`. Per ulteriori informazioni sulle impostazioni di configurazione predefinite, consulta [La configurazione predefinita di Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html) nella *Guida per gli sviluppatori di Streaming gestito da Amazon per Apache Kafka*. Se devi modificare un cluster Kafka esistente creato utilizzando Amazon MSK, esegui il AWS CLI comando `aws kafka create-configuration` per aggiornare la configurazione di Kafka, come nell'esempio seguente:

  ```
  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"
  }
  ```

  Qui, `//~/kafka_configuration` è il file di configurazione creato con le impostazioni delle proprietà richieste.

  Se utilizzi la tua istanza Kafka installata su Amazon EC2, modifica la configurazione del cluster Kafka con l'impostazione per AWS DMS consentire `auto.create.topics.enable = true` la creazione automatica di nuovi argomenti, utilizzando le opzioni fornite con l'istanza.
+ AWS DMS pubblica ogni aggiornamento di un singolo record nel database di origine come un unico record di dati (messaggio) in un determinato argomento Kafka indipendentemente dalle transazioni.
+ AWS DMS supporta i seguenti quattro moduli per le chiavi di partizione:
  + `SchemaName.TableName`: una combinazione del nome dello schema e quello della tabella.
  + `${AttributeName}`: il valore di uno dei campi nel formato JSON o la chiave primaria della tabella del database di origine.
  + `transaction-id`: L'ID della transazione CDC. Tutti i record all'interno della stessa transazione vengono inseriti nella stessa partizione.
  + `constant`: un valore letterale fisso per ogni record indipendentemente dalla tabella o dai dati. Tutti i record vengono inviati allo stesso valore della chiave di partizione «costante», che fornisce un ordinamento globale rigoroso in tutte le tabelle.

  ```
  {
      "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"
      }
  }
  ```
+ L'impostazione dell'`IncludeTransactionDetails`endpoint è supportata solo quando l'endpoint di origine è Oracle, SQL Server, PostgreSQL o MySQL. Per altri tipi di endpoint di origine, i dettagli della transazione non verranno inclusi.
+ `BatchApply` non è supportato per un endpoint Kafka. L'utilizzo dell'applicazione in batch, ad esempio l'impostazione dell'attività dei metadati di destinazione `BatchApplyEnabled`, per una destinazione Kafka potrebbe causare la perdita di dati.
+ AWS DMS non supporta la migrazione di valori di tipo di `BigInt` dati con più di 16 cifre. Per aggirare questa limitazione puoi utilizzare la seguente regola di trasformazione per convertire la colonna `BigInt` in una stringa. Per ulteriori informazioni sulle regole di trasformazione, consulta [Operazioni e regole di trasformazione](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 Gli endpoint target Kafka non supportano Amazon MSK servless.
+ Quando si definiscono regole di mappatura, non sono supportate sia la regola di mappatura degli oggetti che una regola di trasformazione. È necessario impostare una sola regola. 
+ AWS DMS supporta l'autenticazione SASL per le versioni di Apache Kafka fino alla 3.8. Se utilizzi Kafka 4.0 o versioni successive, puoi connetterti solo senza autenticazione SASL.
+ AWS DMS non supporta i dati di origine contenenti `'\0'` caratteri incorporati quando si utilizza Kafka come endpoint di destinazione. I dati contenenti `'\0'` caratteri incorporati verranno troncati al primo carattere. `'\0'`

## Utilizzo della mappatura degli oggetti per la migrazione dei dati in un argomento Kafka
<a name="CHAP_Target.Kafka.ObjectMapping"></a>

AWS DMS utilizza regole di mappatura delle tabelle per mappare i dati dall'argomento Kafka di origine a quello di destinazione. Per mappare i dati a un argomento di destinazione, è necessario utilizzare una regola di mappatura delle tabelle denominata mappatura degli oggetti. La mappatura degli oggetti consente di definire il modo in cui i record di dati nell'origine vengono mappati ai record di dati pubblicati nell'argomento Kafka. 

Gli argomenti Kafka non dispongono di una struttura preimpostata oltre a una chiave di partizione.

**Nota**  
Non è necessario utilizzare la mappatura degli oggetti. È possibile utilizzare la normale mappatura delle tabelle per varie trasformazioni. Tuttavia, il tipo di chiave della partizione segue questi comportamenti predefiniti:   
La chiave primaria viene utilizzata come chiave di partizione per il pieno carico.
Se non vengono utilizzate le impostazioni delle attività di applicazione parallela, `schema.table` viene usato come chiave di partizione per la CDC.
Se vengono utilizzate le impostazioni delle attività di applicazione parallela, la chiave primaria viene utilizzata come chiave di partizione per CDC.

Per creare una regola di mappatura degli oggetti, è necessario impostare il parametro `rule-type` su `object-mapping`. Questa regola specifica il tipo di mappatura degli oggetti da utilizzare. 

Di seguito è riportata la struttura per la regola.

```
{
    "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 attualmente supporta `map-record-to-record` e `map-record-to-document` è l'unico valore valido per il parametro. `rule-action` Queste impostazioni influiscono sui valori che non sono esclusi come parte dell'elenco degli attributi `exclude-columns`. I `map-record-to-document` valori `map-record-to-record` and specificano come AWS DMS gestisce questi record per impostazione predefinita. Questi valori non influiscono in alcun modo sulle mappature degli attributi. 

Nel caso di migrazione da un database relazionale a un argomento Kafka utilizza `map-record-to-record`. Questo tipo di regola utilizza il valore `taskResourceId.schemaName.tableName` dal database relazionale come chiave di partizione nell'argomento Kafka e crea un attributo per ogni colonna nel database di origine. 

Quando utilizzi `map-record-to-record`, tieni presente quanto segue:
+ Questa impostazione ha effetto solo sulle colonne escluse dall'elenco `exclude-columns`.
+ Per ogni colonna di questo tipo, AWS DMS crea un attributo corrispondente nell'argomento di destinazione.
+ AWS DMS crea questo attributo corrispondente indipendentemente dal fatto che la colonna di origine venga utilizzata in una mappatura degli attributi. 

Per comprendere il funzionamento di `map-record-to-record`, è opportuno esaminarne il comportamento in azione. Per questo esempio, supponiamo che tu stia iniziando con una riga di tabella del database relazionale con la struttura e i dati seguenti.


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

Per eseguire la migrazione di queste informazioni da uno schema denominato `Test` verso un argomento Kafka, crea le regole per mappare i dati sull'argomento di destinazione. La regola seguente illustra la mappatura. 

```
{
    "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"
            }
        }
    ]
}
```

Dato un argomento Kafka e una chiave di partizione (in questo caso, `taskResourceId.schemaName.tableName`), il seguente esempio illustra il formato di record risultante per l'argomento di destinazione Kafka utilizzando i dati di esempio: 

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

**Topics**
+ [Ristrutturazione dei dati con la mappatura degli attributi](#CHAP_Target.Kafka.AttributeMapping)
+ [Replica di più argomenti con la mappatura degli oggetti](#CHAP_Target.Kafka.MultiTopic)
+ [Formato dei messaggi per Apache Kafka](#CHAP_Target.Kafka.Messageformat)

### Ristrutturazione dei dati con la mappatura degli attributi
<a name="CHAP_Target.Kafka.AttributeMapping"></a>

Utilizzando una mappa degli attributi puoi modificare la struttura dei dati mentre li stai migrando verso un argomento Kafka. Ad esempio, potresti voler combinare più campi nell'origine in un unico campo nella destinazione. La seguente mappa degli attributi illustra come ristrutturare i dati.

```
{
    "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}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Per impostare un valore costante per`partition-key`, specifica`"partition-key-type: "constant"`, questo imposta il valore della partizione su. `constant` Ad esempio, potresti eseguire questa operazione per forzare la memorizzazione di tutti i dati in una singola partizione. Questo approccio viene illustrato nella mappatura seguente. 

```
{
    "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**  
Il valore `partition-key` per un record di controllo per una tabella specifica è `TaskId.SchemaName.TableName`. Il valore `partition-key` per un record di controllo per un'attività specifica è il `TaskId` del record. La specifica si un valore `partition-key` nella mappatura degli oggetti non influisce sul parametro `partition-key` per un record di controllo.  
 Quando `partition-key-type` è impostato su `attribute-name` in una regola di mappatura della tabella, è necessario specificare`partition-key-name`, che deve fare riferimento a una colonna della tabella di origine o a una colonna personalizzata definita nella mappatura. Inoltre, `attribute-mappings` deve essere fornito per definire il modo in cui le colonne di origine vengono mappate all'argomento Kafka di destinazione.

### Replica di più argomenti con la mappatura degli oggetti
<a name="CHAP_Target.Kafka.MultiTopic"></a>

Per impostazione predefinita, AWS DMS le attività migrano tutti i dati di origine su uno degli argomenti di Kafka seguenti:
+ Come specificato nel campo **Argomento** dell'endpoint di destinazione. AWS DMS 
+ quello specificato da `kafka-default-topic` se il campo **Argomento** dell'endpoint di destinazione non è compilato e l'impostazione Kafka `auto.create.topics.enable` è impostata su `true`.

Con le versioni AWS DMS del motore 3.4.6 e successive, è possibile utilizzare l'`kafka-target-topic`attributo per mappare ogni tabella di origine migrata su un argomento separato. Ad esempio, le regole di mappatura degli oggetti riportate di seguito migrano le tabelle di origine `Customer` e `Address` agli argomenti Kafka `customer_topic` e `address_topic` rispettivamente. Allo stesso tempo, AWS DMS migra tutte le altre tabelle di origine, inclusa la `Bills` tabella nello `Test` schema, all'argomento specificato nell'endpoint di destinazione.

```
{
    "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"
            }
        }
    ]
}
```

Utilizzando la replica di più argomenti Kafka, è possibile raggruppare e migrare le tabelle di origine su argomenti Kafka separati utilizzando un'unica attività di replica.

### Formato dei messaggi per Apache Kafka
<a name="CHAP_Target.Kafka.Messageformat"></a>

L'output JSON è semplicemente un elenco di coppie chiave-valore. 

**RecordType**  
Il tipo di record può essere relativo ai dati o al controllo. I *record di dati *rappresentano le righe effettive nell'origine. I *record di controllo* sono per eventi importanti nel flusso, ad esempio un riavvio dell'attività.

**Operation**  
Per i record di dati, l'operazione può essere `load`, `insert`, `update` o `delete`.  
Per i record di controllo, l'operazione può essere `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` o `column-type-change`.

**SchemaName**  
Lo schema di origine per il record. Questo campo può essere vuoto per un record di controllo.

**TableName**  
La tabella di origine per il record. Questo campo può essere vuoto per un record di controllo.

**Time stamp**  
Il timestamp relativo al momento della creazione del messaggio JSON. Il campo viene formattato con il formato ISO 8601.

Il seguente esempio di messaggio JSON illustra un tipo di dati con tutti i metadati aggiuntivi.

```
{ 
   "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"
   }
}
```

Il seguente esempio di messaggio JSON illustra un tipo di controllo.

```
{ 
   "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"
   }
}
```

# Utilizzo di un cluster Amazon OpenSearch Service come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch"></a>

Puoi utilizzarlo AWS DMS per migrare i dati su Amazon OpenSearch Service (OpenSearch Service). OpenSearch Service è un servizio gestito che semplifica la distribuzione, il funzionamento e la scalabilità di un cluster di OpenSearch servizi. 

In OpenSearch Service, si lavora con indici e documenti. Un *indice* è una raccolta di documenti e un *documento* è un oggetto JSON contenente valori scalari, matrici e altri oggetti. OpenSearch fornisce un linguaggio di interrogazione basato su JSON, in modo da poter interrogare i dati in un indice e recuperare i documenti corrispondenti.

Quando AWS DMS crea indici per un endpoint di destinazione per OpenSearch Service, crea un indice per ogni tabella dall'endpoint di origine. Il costo per la creazione di un indice di OpenSearch servizio dipende da diversi fattori. Questi sono il numero di indici creati, la quantità totale di dati in questi indici e la piccola quantità di metadati archiviati per ogni documento. OpenSearch 

Configura il cluster OpenSearch di servizi con risorse di elaborazione e archiviazione appropriate per l'ambito della migrazione. È consigliabile considerare i seguenti fattori, a seconda dell'attività di replica che desideri utilizzare:
+ Per un caricamento di dati completo, considera la quantità totale di dati da migrare, nonché la velocità del trasferimento.
+ Per replicare le modifiche in corso, considera la frequenza degli aggiornamenti e i requisiti di end-to-end latenza.

Inoltre, configura le impostazioni dell'indice sul OpenSearch cluster, prestando molta attenzione al numero di documenti.

**Impostazioni attività a pieno carico multithread**

Per contribuire ad aumentare la velocità di trasferimento, AWS DMS supporta un caricamento completo multithread su un cluster di destinazione OpenSearch del servizio. AWS DMS supporta questo multithreading con impostazioni delle attività che includono quanto segue:
+ `MaxFullLoadSubTasks`: imposta questa opzione per indicare il numero massimo di tabelle da caricare in parallelo. DMS carica ogni tabella nell'indice di destinazione del OpenSearch servizio corrispondente utilizzando una sottoattività dedicata. Il valore predefinito è 8; il valore il massimo è 49.
+ `ParallelLoadThreads`— Utilizzate questa opzione per specificare il numero di thread da utilizzare per caricare ogni tabella nel relativo indice di destinazione del OpenSearch servizio. AWS DMS Il valore massimo per un oggetto OpenSearch di servizio è 32. Puoi chiedere che questo limite massimo venga aumentato.
**Nota**  
Se non si modifica il valore predefinito di `ParallelLoadThreads` (0), AWS DMS trasferisce un singolo record alla volta. Questo approccio comporta un carico eccessivo sul cluster OpenSearch di servizi. Assicurati di impostare questa opzione per 1 o più.
+ `ParallelLoadBufferSize`— Utilizzare questa opzione per specificare il numero massimo di record da archiviare nel buffer utilizzato dai thread di caricamento parallelo per caricare i dati nella destinazione del OpenSearch servizio. Il valore predefinito è 50. Il valore massimo è 1.000. Utilizzare questo parametro con `ParallelLoadThreads`; `ParallelLoadBufferSize` è valido solo quando è presente più di un thread.

Per ulteriori informazioni su come DMS carica un cluster di OpenSearch servizi utilizzando il multithreading, consulta il AWS post del blog Scale [Amazon OpenSearch Service](https://aws.amazon.com/blogs/database/scale-amazon-elasticsearch-service-for-aws-database-migration-service-migrations/) for migations. AWS Database Migration Service 

**Impostazioni attività di carico CDC multithread**

Puoi migliorare le prestazioni dell'acquisizione dei dati di modifica (CDC) per un cluster di destinazione del OpenSearch servizio utilizzando le impostazioni delle attività per modificare il comportamento della chiamata API. `PutRecords` A tale scopo, è possibile specificare il numero di thread simultanei, di code per thread e di record da memorizzare in un buffer utilizzando le impostazioni delle attività `ParallelApply*`. Ad esempio, si supponga di voler eseguire un carico CDC e applicare 32 thread in parallelo. Si desidera inoltre accedere a 64 code per thread, con 50 record memorizzati per buffer. 
**Nota**  
Il supporto per l'uso delle impostazioni delle `ParallelApply*` attività durante gli endpoint di destinazione CDC to Amazon OpenSearch Service è disponibile nelle AWS DMS versioni 3.4.0 e successive.

Per promuovere le prestazioni del CDC, AWS DMS supporta le seguenti impostazioni delle attività:
+ `ParallelApplyThreads`— specifica il numero di thread simultanei che vengono AWS DMS utilizzati durante un caricamento CDC per inviare i record di dati a un endpoint di destinazione del servizio. OpenSearch Il valore predefinito è zero (0) e il valore massimo è 32.
+ `ParallelApplyBufferSize`— Speciifica il numero massimo di record da archiviare in ogni coda di buffer per i thread simultanei da inviare a un endpoint di destinazione del servizio durante un caricamento CDC. OpenSearch Il valore predefinito è 100 e il valore massimo è 1.000. Utilizzare questa opzione quando `ParallelApplyThreads` specifica più di un thread. 
+ `ParallelApplyQueuesPerThread`— Speciifica il numero di code a cui ogni thread accede per estrarre i record di dati dalle code e generare un caricamento in batch per un endpoint di servizio durante il CDC. OpenSearch 

Quando si utilizzano le impostazioni delle attività `ParallelApply*`, l'impostazione di `partition-key-type` predefinita è la `primary-key` della tabella, non `schema-name.table-name`.

## Migrazione da una tabella di database relazionale a un indice di servizio OpenSearch
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

AWS DMS supporta la migrazione dei dati verso i tipi di dati scalari del OpenSearch Servizio. Durante la migrazione da un database relazionale come Oracle o MySQL a OpenSearch Service, potresti voler ristrutturare il modo in cui archivi questi dati.

AWS DMS supporta i seguenti tipi di dati scalari di Service: OpenSearch 
+ Booleano 
+ Data
+ Float
+ Int
+ Stringa

AWS DMS converte i dati di tipo Date in dati di tipo String. Puoi specificare la mappatura personalizzata per interpretare queste date.

AWS DMS non supporta la migrazione dei tipi di dati LOB.

## Prerequisiti per l'utilizzo OpenSearch di Amazon Service come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Prerequisites"></a>

Prima di iniziare a utilizzare un database di OpenSearch Service come destinazione AWS DMS, assicurati di creare un ruolo AWS Identity and Access Management (IAM). Questo ruolo dovrebbe consentire AWS DMS l'accesso agli indici del OpenSearch servizio sull'endpoint di destinazione. Nella seguente policy IAM viene mostrato il set minimo di autorizzazioni di accesso.

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

****  

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

------

Il ruolo utilizzato per la migrazione al OpenSearch Servizio deve disporre delle seguenti autorizzazioni.

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

****  

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

------

Nell'esempio precedente, sostituiscilo `region` con l'identificativo AWS della regione, *`account-id`* con l'ID del tuo AWS account e `domain-name` con il nome del tuo dominio Amazon OpenSearch Service. Un esempio è `arn:aws:es:us-west-2:123456789012:domain/my-es-domain`

## Impostazioni degli endpoint quando si utilizza OpenSearch Service come destinazione per AWS DMS
<a name="CHAP_Target.Elasticsearch.Configuration"></a>

Puoi utilizzare le impostazioni degli endpoint per configurare il database di destinazione OpenSearch del servizio in modo simile all'utilizzo di attributi di connessione aggiuntivi. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintassi `--elasticsearch-settings '{"EndpointSetting": "value", ...}'` JSON.

La tabella seguente mostra le impostazioni dell'endpoint che è possibile utilizzare con OpenSearch Service come destinazione.


| Nome attributo | Valori validi | Valore predefinito e descrizione | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  Un numero intero positivo maggiore di 0 ma non superiore a 100.  |  10 - Per un'attività di caricamento completo, questo attributo determina la soglia di errori consentita prima che l'attività abbia esito negativo. Ad esempio, supponiamo che vi siano 1.500 righe sull'endpoint di origine e che questo parametro sia impostato su 10. Quindi l'operazione ha esito negativo se AWS DMS rileva più di 150 errori (il 10% del conteggio delle righe) durante la scrittura sull'endpoint di destinazione.  | 
|   `ErrorRetryDuration`   |  Un numero intero positivo maggiore di 0.  |  300 — Se si verifica un errore sull'endpoint di destinazione, AWS DMS riprova per questo numero di secondi. In caso contrario, l'attività ha esito negativo.  | 
|  `UseNewMappingType`  | true o false |  `false`, ma per funzionare con opensearch v2.x dovrebbe essere impostato su. `true`  | 

## Limitazioni nell'utilizzo OpenSearch di Amazon Service come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza Amazon OpenSearch Service come destinazione:
+ OpenSearch Il servizio utilizza la mappatura dinamica (ipotesi automatica) per determinare i tipi di dati da utilizzare per i dati migrati.
+ OpenSearch Il servizio archivia ogni documento con un ID univoco. Di seguito è riportato un ID di esempio. 

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

  Ogni ID documento è lungo 64 byte, quindi è possibile prevedere questo valore come requisito di storage. Ad esempio, se si migrano 100.000 righe da un' AWS DMS origine, l'indice di OpenSearch servizio risultante richiede lo spazio di archiviazione per altri 6.400.000 byte.
+ Con OpenSearch Service, non è possibile apportare aggiornamenti agli attributi della chiave primaria. Questa restrizione è importante quando si utilizza la replica continua con l'acquisizione dei dati di modifica (CDC), perché può causare la presenza di dati indesiderati nella destinazione. In modalità CDC, le chiavi primarie vengono mappate su SHA256 valori lunghi 32 byte. Queste vengono convertite in stringhe da 64 byte leggibili dall'uomo e vengono utilizzate come documento di servizio. OpenSearch IDs
+ Se AWS DMS rileva elementi che non possono essere migrati, scrive messaggi di errore su Amazon Logs. CloudWatch Questo comportamento è diverso da quello di altri endpoint di AWS DMS destinazione, che scrivono errori in una tabella di eccezioni.
+ AWS DMS non supporta la connessione a un cluster Amazon ES con controllo granulare degli accessi abilitato con utente principale e password.
+ AWS DMS non supporta Service serverless OpenSearch .
+ OpenSearch Il servizio non supporta la scrittura di dati su indici preesistenti.
+ L'impostazione dell'attività di replica non `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` è supportata per l'uso con un endpoint di destinazione. OpenSearch 
+ Quando si migrano i dati su Amazon Elasticsearch utilizzando AWS DMS, i dati di origine devono avere una chiave primaria o una colonna identificativa univoca. Se i dati di origine non hanno una chiave primaria o un identificatore univoco, devi definirne uno utilizzando la regola di trasformazione. define-primary-key

## Tipi di dati di destinazione per Amazon OpenSearch Service
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

Quando AWS DMS migra dati da database eterogenei, il servizio mappa i tipi di dati dal database di origine a tipi di dati intermedi chiamati tipi di dati. AWS DMS Il servizio mappa quindi i tipi di dati intermedi ai tipi di dati di destinazione. La tabella seguente mostra ogni tipo di dati e il tipo di AWS DMS dati a cui è mappato nel Servizio. OpenSearch 


| AWS DMS tipo di dati | OpenSearch tipo di dati del servizio | 
| --- | --- | 
|  Booleano  |  Booleano  | 
|  Data  |  stringa  | 
|  Orario  |  data  | 
|  Timestamp  |  data  | 
|  INT4  |  intero  | 
|  Real4  |  virgola mobile  | 
|  UINT4  |  intero  | 

Per ulteriori informazioni sui tipi di AWS DMS dati, vedere[Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md).

# Utilizzo di Amazon DocumentDB come destinazione per AWS Database Migration Service
<a name="CHAP_Target.DocumentDB"></a>

 Per informazioni sulle versioni di Amazon DocumentDB (con compatibilità con MongoDB) supportate, consulta. AWS DMS [Obiettivi per AWS DMS](CHAP_Introduction.Targets.md) Puoi utilizzare AWS DMS per eseguire la migrazione dei dati a Amazon DocumentDB (compatibile con MongoDB) da uno qualsiasi dei motori dei dati di origine supportati da AWS DMS . Il motore di origine può trovarsi su un servizio AWS gestito come Amazon RDS, Aurora o Amazon S3. In alternativa, il motore può essere un database autogestito, ad esempio MongoDB in esecuzione su Amazon EC2 o on-premise.

Puoi utilizzarli AWS DMS per replicare i dati di origine su database, raccolte o documenti Amazon DocumentDB. 

**Nota**  
Se l'endpoint di origine è MongoDB o Amazon DocumentDB, esegui la migrazione in **modalità documento**.

MongoDB archivia i dati in un formato JSON binario (BSON). AWS DMS supporta tutti i tipi di dati BSON supportati da Amazon DocumentDB. Per un elenco di questi tipi di dati, consulta [Supported APIs MongoDB, operations and data](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html) types nella *Amazon DocumentDB* Developer Guide.

Se l'endpoint di origine è un database relazionale, AWS DMS mappa gli oggetti del database su Amazon DocumentDB come segue:
+ Un database relazionale, o schema di database, viene mappato a un *database* Amazon DocumentDB. 
+ Le tabelle all'interno di un database relazionale vengono mappate a *raccolte* in Amazon DocumentDB.
+ I record in una tabella relazionale vengono mappati a *documenti* in Amazon DocumentDB. Ogni documento viene costruito da dati nel record di origine.

Se l'endpoint di origine è Amazon S3, allora gli oggetti Amazon DocumentDB risultanti corrispondono a regole di mappatura AWS DMS per Amazon S3. Considera, ad esempio, l'URI seguente:

```
s3://amzn-s3-demo-bucket/hr/employee
```

In questo caso, AWS DMS mappa gli oggetti in `amzn-s3-demo-bucket` Amazon DocumentDB come segue:
+ La parte URI di alto livello (`hr`) viene mappata a un database Amazon DocumentDB. 
+ La parte URI successiva (`employee`) viene mappata a una raccolta Amazon DocumentDB.
+ Ogni oggetto in `employee` viene mappato a un documento in Amazon DocumentDB.

Per ulteriori informazioni sulle regole di mappatura per Amazon S3, consulta [Utilizzo di Amazon S3 come sorgente per AWS DMS](CHAP_Source.S3.md).

**Impostazioni degli endpoint Amazon DocumentDB**

Nelle AWS DMS versioni 3.5.0 e successive, puoi migliorare le prestazioni del change data capture (CDC) per gli endpoint Amazon DocumentDB ottimizzando le impostazioni delle attività per thread paralleli e operazioni in blocco. A tale scopo, è possibile specificare il numero di thread simultanei, di code per thread e di record da memorizzare in un buffer utilizzando le impostazioni delle attività `ParallelApply*`. Ad esempio, si supponga di voler eseguire un carico CDC e applicare 128 thread in parallelo. Si desidera inoltre accedere a 64 code per thread, con 50 record memorizzati per buffer. 

Per promuovere le prestazioni del CDC, supporta le seguenti impostazioni delle attività: AWS DMS 
+ `ParallelApplyThreads`: specifica il numero di thread simultanei da AWS DMS utilizzare durante un caricamento CDC per inviare i record di dati a un endpoint di destinazione Amazon DocumentDB. Il valore predefinito è zero (0) e il valore massimo è 32.
+ `ParallelApplyBufferSize`: specifica il numero massimo di record da archiviare in ogni coda di buffer per eseguire il push dei thread simultanei a un endpoint di destinazione Amazon DocumentDB durante un carico CDC. Il valore predefinito è 100 e il valore massimo è 1.000. Utilizzare questa opzione quando `ParallelApplyThreads` specifica più di un thread. 
+ `ParallelApplyQueuesPerThread`: specifica il numero di code a cui ogni thread accede per eliminare i record di dati dalle code e generare un carico batch per un endpoint Amazon DocumentDB durante CDC. Il valore di default è 1. Il numero massimo è 512.

**Nota**  
 Per le destinazioni Amazon DocumentDB, l'applicazione CDC parallela può causare errori di chiave duplicati o l'applicazione di CDC in stallo per carichi di lavoro che utilizzano indici univoci secondari o richiedono un ordine rigoroso delle modifiche. Utilizza la configurazione di applicazione CDC a thread singolo predefinita per questi carichi di lavoro. 

Per ulteriori dettagli sull'utilizzo di Amazon DocumentDB come destinazione AWS DMS, consulta le seguenti sezioni:

**Topics**
+ [Mappatura dei dati da un'origine a una destinazione Amazon DocumentDB](#CHAP_Target.DocumentDB.data-mapping)
+ [Connessione ai cluster elastici Amazon DocumentDB come destinazione](#CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect)
+ [Replica continua con Amazon DocumentDB come destinazione](#CHAP_Target.DocumentDB.data-mapping.ongoing-replication)
+ [Limitazioni all'utilizzo di Amazon DocumentDB come destinazione](#CHAP_Target.DocumentDB.limitations)
+ [Utilizzo delle impostazioni degli endpoint con Amazon DocumentDB come destinazione](#CHAP_Target.DocumentDB.ECAs)
+ [Tipi di dati di destinazione per Amazon DocumentDB](#CHAP_Target.DocumentDB.datatypes)

**Nota**  
Per una step-by-step procedura dettagliata del processo di migrazione, consulta Migrazione [da MongoDB ad Amazon DocumentDB nella Guida alla migrazione](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MongoDB2DocumentDB.html). AWS Database Migration Service Step-by-Step 

## Mappatura dei dati da un'origine a una destinazione Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.data-mapping"></a>

AWS DMS legge i record dall'endpoint di origine e costruisce documenti JSON in base ai dati letti. Per ogni documento JSON, AWS DMS deve determinare un `_id` campo che funga da identificatore univoco. Quindi scrive il documento JSON in una raccolta Amazon DocumentDB, utilizzando il campo `_id` come chiave primaria.

### Dati di origine che sono una singola colonna
<a name="CHAP_Target.DocumentDB.data-mapping.single-column"></a>

Se i dati di origine sono costituiti da una singola colonna, i dati devono essere di un tipo stringa. (A seconda del motore di origine, il tipo di dati effettivo potrebbe essere VARCHAR, NVARCHAR, TEXT, LOB, CLOB o simili.) AWS DMS presuppone che i dati siano un documento JSON valido e li replica su Amazon DocumentDB così come sono.

Se il documento JSON risultante contiene un campo denominato `_id`, tale campo viene utilizzato come `_id` univoco in Amazon DocumentDB.

Se il documento JSON non contiene un campo `_id`, Amazon DocumentDB. genera automaticamente un valore `_id`.

### Dati di origine che sono colonne multiple
<a name="CHAP_Target.DocumentDB.data-mapping.multiple-columns"></a>

Se i dati di origine sono composti da più colonne, AWS DMS costruisce un documento JSON da tutte queste colonne. Per determinare il `_id` campo per il documento, AWS DMS procedi come segue:
+ Se una delle colonne è denominata `_id`, allora i dati in tale colonna vengono utilizzati come destinazione`_id`.
+ Se non è presente alcuna `_id` colonna, ma i dati di origine hanno una chiave primaria o un indice univoco, AWS DMS utilizza tale chiave o valore di indice come `_id` valore. I dati della chiave primaria o dell'indice univoco vengono visualizzati come campi espliciti nel documento JSON.
+ Se non esiste una colonna `_id` né una chiave primaria o indice univoco, Amazon DocumentDB genera automaticamente un valore `_id`.

### Assegnazione forzata di un tipo di dati all'endpoint di destinazione
<a name="CHAP_Target.DocumentDB.coercing-datatype"></a>

AWS DMS può modificare le strutture di dati quando scrive su un endpoint di destinazione Amazon DocumentDB. Puoi richiedere tali modifiche rinominando colonne e tabelle a livello di endpoint di origine, oppure fornendo le regole di trasformazione che vengono applicate durante l'esecuzione di un'attività.

#### Utilizzo di un documento JSON nidificato (prefisso json\$1)
<a name="CHAP_Target.DocumentDB.coercing-datatype.json"></a>

Per forzare un tipo di dati, puoi anteporre al nome della colonna di origine `json_` (ovvero `json_columnName`) manualmente o utilizzando una trasformazione. In questo caso, la colonna viene creata come un documento JSON nidificato all'interno del documento di destinazione, anziché come un campo stringa.

Ad esempio, supponiamo di voler migrare il seguente documento da un endpoint di origine MongoDB.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}"
}
```

Se non forzi uno qualsiasi dei tipi di dati di origine, il documento `ContactDetails` incorporato viene migrato come stringa.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}"
}
```

Tuttavia, puoi aggiungere una regola di trasformazione per forzare `ContactDetails` a un oggetto JSON. Ad esempio, supponiamo che il nome della colonna di origine originale sia `ContactDetails`. Per forzare il tipo di dati a Nested JSON, la colonna sull'endpoint di origine deve essere rinominata come «json\$1ContactDetails» aggiungendo il prefisso «\$1json\$1\$1 «all'origine manualmente o tramite regole di trasformazione. Ad esempio, puoi utilizzare la seguente regola di trasformazione:

```
{
    "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 ContactDetails replica il campo come JSON annidato, come segue. 

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactDetails": {
        "Home": {
            "Address": "Boston",
            "Phone": "1111111111"
        },
        "Work": {
            "Address": "Boston",
            "Phone": "2222222222"
        }
    }
}
```

#### Utilizzo di un array JSON (prefisso array\$1)
<a name="CHAP_Target.DocumentDB.coercing-datatype.array"></a>

Per forzare un tipo di dati, puoi anteporre al nome della colonna `array_` (ovvero `array_columnName`) manualmente o utilizzando una trasformazione. In questo caso, AWS DMS considera la colonna come una matrice JSON e la crea come tale nel documento di destinazione.

Supponiamo di voler migrare il seguente documento da un endpoint di origine MongoDB.

```
{
    "_id" : "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": ["Boston", "New York"],             
    "ContactPhoneNumbers": ["1111111111", "2222222222"]
}
```

Se non forzi uno qualsiasi dei tipi di dati di origine, il documento `ContactDetails` incorporato viene migrato come stringa.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": "[\"Boston\", \"New York\"]",             
    "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]" 
}
```

 Tuttavia, puoi aggiungere regole di trasformazione per forzare `ContactAddress` e `ContactPhoneNumbers` ad array JSON, come mostrato nella seguente tabella.


****  

| Nome colonna di origine originale | Colonna di origine rinominata | 
| --- | --- | 
| ContactAddress | array\$1ContactAddress | 
| ContactPhoneNumbers | array\$1ContactPhoneNumbers | 

AWS DMS replica `ContactAddress` e `ContactPhoneNumbers` come segue.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactAddresses": [
        "Boston",
        "New York"
    ],
    "ContactPhoneNumbers": [
        "1111111111",
        "2222222222"
    ]
}
```

### Connessione ad Amazon DocumentDB tramite TLS
<a name="CHAP_Target.DocumentDB.tls"></a>

Per impostazione predefinita, un nuovo cluster Amazon DocumentDB creato accetta solo connessioni protette con Transport Layer Security (TLS). Quando TLS è abilitato, ogni connessione ad Amazon DocumentDB richiede una chiave pubblica.

Puoi recuperare la chiave pubblica per Amazon DocumentDB scaricando il file da AWS un `rds-combined-ca-bundle.pem` bucket Amazon S3 ospitato. Per ulteriori informazioni sul download di questo file, consulta [Crittografia delle connessioni con TLS](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html) nella *Guida per gli sviluppatori di Amazon DocumentDB*

Dopo aver scaricato questo file.pem, puoi importare la chiave pubblica che contiene come descritto di seguito. AWS DMS 

#### Console di gestione AWS
<a name="CHAP_Target.DocumentDB.tls.con"></a>

**Per importare il file della chiave pubblica (.pem)**

1. [Apri la AWS DMS console in /dms. https://console.aws.amazon.com](https://console.aws.amazon.com/dms)

1. Nel riquadro di navigazione, scegliere **Certificates (Certificati)**.

1. Scegliere **Import certificate (Importa certificato)** ed effettuare le seguenti operazioni:
   + Per **Certificate identifier (Identificatore certificato)**, immettere un nome univoco per il certificato, ad esempio `docdb-cert`.
   + Per **Import file (Importa file)**, passare al percorso in cui è stato salvato il file .pem.

   Dopo aver selezionato le impostazioni desiderate, selezionare **Add new CA certificate (Aggiungi un nuovo certificato CA)**.

#### AWS CLI
<a name="CHAP_Target.DocumentDB.tls.cli"></a>

Utilizza il comando `aws dms import-certificate` come visualizzato nell'esempio seguente.

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

Quando crei un endpoint di AWS DMS destinazione, fornisci l'identificatore del certificato (ad esempio,). `docdb-cert` Inoltre, imposta il parametro Modalità SSL su `verify-full`.

## Connessione ai cluster elastici Amazon DocumentDB come destinazione
<a name="CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect"></a>

Nelle AWS DMS versioni 3.4.7 e successive, puoi creare un endpoint di destinazione Amazon DocumentDB come cluster elastico. Se crei l'endpoint di destinazione come cluster elastico, è necessario allegare un nuovo certificato SSL all'endpoint del cluster elastico Amazon DocumentDB in quanto il certificato SSL esistente non funzionerà.

**Per collegare un nuovo certificato SSL all'endpoint del cluster elastico Amazon DocumentDB**

1. In un browser, apri [ https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) e salva il contenuto in un `.pem` file con un nome file univoco, ad esempio. `SFSRootCAG2.pem` Questo è il file di certificato che dovrai importare nelle fasi successive.

1. Crea l'endpoint del cluster elastico e imposta le seguenti opzioni:

   1. In **Configurazione dell'endpoint** scegli **Aggiungi un nuovo certificato CA**.

   1. Per **Identificativo del certificato** immetti **SFSRootCAG2.pem**.

   1. Per **Importa file del certificato** seleziona **Scegli file** e passa al file `SFSRootCAG2.pem` scaricato in precedenza.

   1. Seleziona e apri il file `SFSRootCAG2.pem` scaricato.

   1. Selezionare **Import certificate (Importa certificato)**.

   1. **Dal menu a discesa **Scegli un certificato**, scegli SFSRoot CAG2 .pem.**

Il nuovo certificato SSL del file `SFSRootCAG2.pem` scaricato è ora collegato all'endpoint del cluster elastico Amazon DocumentDB.

## Replica continua con Amazon DocumentDB come destinazione
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication"></a>

Se la replica continua (acquisizione dei dati di modifica o CDC) è abilitata per Amazon DocumentDB come destinazione, AWS DMS 3.5.0 e versioni successive forniscono un miglioramento delle prestazioni venti volte superiore rispetto alle versioni precedenti. Nelle versioni precedenti, in cui AWS DMS gestiva fino a 250 record al secondo, AWS DMS ora elabora in modo efficiente oltre 5000 record al secondo. AWS DMS assicura inoltre che i documenti in Amazon DocumentDB rimangano sincronizzati con il codice sorgente. Quando un record di origine viene creato o aggiornato, AWS DMS deve prima determinare quale record Amazon DocumentDB è interessato effettuando le seguenti operazioni:
+ Se il record di origine dispone di una colonna denominata `_id`, il valore di tale colonna determina l'elemento `_id` corrispondente nella raccolta Amazon DocumentDB.
+ Se non è presente alcuna `_id` colonna, ma i dati di origine hanno una chiave primaria o un indice univoco, AWS DMS utilizza tale chiave o valore di indice come `_id` raccolta Amazon DocumentDB.
+ Se il record di origine non ha una `_id` colonna, una chiave primaria o un indice univoco, AWS DMS abbina tutte le colonne di origine ai campi corrispondenti nella raccolta Amazon DocumentDB.

Quando viene creato un nuovo record sorgente, AWS DMS scrive un documento corrispondente su Amazon DocumentDB. Se viene aggiornato un record di origine esistente, AWS DMS aggiorna i campi corrispondenti nel documento di destinazione in Amazon DocumentDB. Gli eventuali campi esistenti nel documento di destinazione ma non nel record di origine non vengono modificati.

Quando viene eliminato un record di origine, AWS DMS elimina il documento corrispondente da Amazon DocumentDB.

### Modifiche strutturali (DDL) all'origine
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication.ddl"></a>

Con la replica continua, le eventuali modifiche alle strutture di dati di origine (ad esempio tabelle, colonne e così via) vengono propagate alle relative controparti in Amazon DocumentDB. Nei database relazionali, tali modifiche vengono avviate utilizzando istruzioni DDL (Data Definition Language). Puoi vedere come AWS DMS propaga queste modifiche ad Amazon DocumentDB nella tabella seguente.


****  

| DDL all'origine | Effetto sulla destinazione Amazon DocumentDB | 
| --- | --- | 
| CREATE TABLE | Crea una raccolta vuota. | 
| Istruzione che rinomina una tabella (RENAME TABLE, ALTER TABLE...RENAME e simili) | Rinomina la raccolta. | 
| TRUNCATE TABLE | Rimuove tutti i documenti dalla raccolta, ma solo se HandleSourceTableTruncated è true. Per ulteriori informazioni, consulta [Impostazioni delle attività per la gestione di DDL durante l'elaborazione delle modifiche](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| DROP TABLE | Elimina la raccolta, ma solo se HandleSourceTableDropped è true. Per ulteriori informazioni, consulta [Impostazioni delle attività per la gestione di DDL durante l'elaborazione delle modifiche](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| Istruzione che aggiunge una colonna a una tabella (ALTER TABLE...ADD e simili) | L'istruzione DDL viene ignorata e viene emesso un avviso. Quando viene eseguita la prima istruzione INSERT presso l'origine, il nuovo campo viene aggiunto al documento di destinazione. | 
| ALTER TABLE...RENAME COLUMN | L'istruzione DDL viene ignorata e viene emesso un avviso. Quando viene eseguita la prima istruzione INSERT presso l'origine, il campo con il nuovo nome viene aggiunto al documento di destinazione. | 
| ALTER TABLE...DROP COLUMN | L'istruzione DDL viene ignorata e viene emesso un avviso. | 
| Istruzione che modifica il tipo di dati della colonna (ALTER COLUMN...MODIFY e simili) | L'istruzione DDL viene ignorata e viene emesso un avviso. Quando la prima istruzione INSERT viene eseguita presso l'origine con il nuovo tipo di dati, il documento di destinazione viene creato con un campo di tale nuovo tipo di dati. | 

## Limitazioni all'utilizzo di Amazon DocumentDB come destinazione
<a name="CHAP_Target.DocumentDB.limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza Amazon DocumentDB come destinazione per: AWS DMS
+ In Amazon DocumentDB i nomi di raccolte non possono contenere il simbolo di dollaro (\$1). Inoltre, i nomi di database non possono contenere caratteri Unicode.
+ AWS DMS non supporta l'unione di più tabelle di origine in un'unica raccolta Amazon DocumentDB.
+ Quando AWS DMS i processi vengono modificati da una tabella di origine che non ha una chiave primaria, tutte le colonne LOB in quella tabella vengono ignorate.
+ Se l'opzione **Change table (Modifica tabella)** è abilitata e AWS DMS incontra una colonna di origine denominata "*\$1id*", allora tale colonna viene visualizzata come "*\$1\$1id*" (due trattini bassi) nella tabella di modifica.
+ Se scegli Oracle come un endpoint di origine, allora l'abilitazione del log supplementare deve essere abilitata nell'origine Oracle. In caso contrario, se presso l'origine sono presenti colonne che non sono state modificate, allora i dati vengono caricati in Amazon DocumentDB come valori nulli.
+ L'impostazione dell'attività di replica `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` non è supportata per l'uso con un endpoint di destinazione DocumentDB. 
+ Le raccolte limitate di MongoDB non sono supportate in Amazon DocumentDB. Tuttavia, migra AWS DMS automaticamente tali oggetti come raccolte illimitate su DocumentDB di destinazione.
+ L'applicazione di un CDC parallelo alle destinazioni di Amazon DocumentDB può causare errori di chiave duplicati o un CDC in stallo per carichi di lavoro che utilizzano indici univoci secondari o richiedono un ordine rigoroso delle modifiche. Per tali carichi di lavoro, utilizza la configurazione di applicazione CDC a thread singolo predefinita.

## Utilizzo delle impostazioni degli endpoint con Amazon DocumentDB come destinazione
<a name="CHAP_Target.DocumentDB.ECAs"></a>

È possibile utilizzare le impostazioni degli endpoint per configurare il database di destinazione Amazon DocumentDB in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in, con la sintassi JSON [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html). `--doc-db-settings '{"EndpointSetting": "value", ...}'`

La tabella seguente mostra le impostazioni degli endpoint che puoi utilizzare con Amazon DocumentDB come destinazione.


| Nome attributo | Valori validi | Valore predefinito e descrizione | 
| --- | --- | --- | 
|   `replicateShardCollections`   |  booleano `true` `false`  |  Quando questa impostazione dell'endpoint è `true` ha gli effetti e le limitazioni indicati di seguito: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/CHAP_Target.DocumentDB.html)  | 

## Tipi di dati di destinazione per Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.datatypes"></a>

Nella tabella seguente, puoi trovare i tipi di dati di destinazione di Amazon DocumentDB supportati quando si utilizza AWS DMS e la mappatura predefinita dei tipi di dati AWS DMS. Per ulteriori informazioni sui tipi di dati AWS DMS, consulta. [Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md)


|  AWS Tipo di dati DMS  |  Tipi di dati Amazon DocumentDB  | 
| --- | --- | 
|  BOOLEAN  |  Booleano  | 
|  BYTES  |  Dati binari  | 
|  DATE  | Data | 
|  TIME  | Stringa () UTF8 | 
|  DATETIME  | Data | 
|  INT1  | Intero a 32 bit | 
|  INT2  |  Intero a 32 bit  | 
|  INT4  | Intero a 32 bit | 
|  INT8  |  Intero a 64 bit  | 
|  NUMERIC  | Stringa (UTF8) | 
|  REAL4  |  Double  | 
|  REAL8  | Double | 
|  STRING  |  Se i dati vengono riconosciuti come JSON, li AWS DMS migra in Amazon DocumentDB come documento. Altrimenti, i dati vengono mappati su String (). UTF8  | 
|  UINT1  | Intero a 32 bit | 
|  UINT2  | Intero a 32 bit | 
|  UINT4  | Intero a 64 bit | 
|  UINT8  |  Stringa () UTF8  | 
|  WSTRING  | Se i dati vengono riconosciuti come JSON, li AWS DMS migra in Amazon DocumentDB come documento. Altrimenti, i dati vengono mappati su String (). UTF8 | 
|  BLOB  | Binario | 
|  CLOB  | Se i dati vengono riconosciuti come JSON, li AWS DMS migra in Amazon DocumentDB come documento. Altrimenti, i dati vengono mappati su String (). UTF8 | 
|  NCLOB  | Se i dati vengono riconosciuti come JSON, li AWS DMS migra in Amazon DocumentDB come documento. Altrimenti, i dati vengono mappati su String (). UTF8 | 

# Utilizzo di Amazon Neptune come obiettivo per AWS Database Migration Service
<a name="CHAP_Target.Neptune"></a>

Amazon Neptune è un servizio di database a grafo gestito rapido e affidabile che rende più semplice la creazione e l'esecuzione di applicazioni che funzionano con set di dati altamente connessi. Il cuore di Neptune è un motore di database a grafo ad alte prestazioni appositamente progettato. Questo motore è ottimizzato per archiviare miliardi di relazioni ed eseguire query sul database a grafo con una latenza di millisecondi. Neptune supporta i popolari linguaggi di query grafiche TinkerPop Apache Gremlin e SPARQL del W3C. Per ulteriori informazioni su Amazon Neptune, consulta [What is Amazon Neptune?](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) nella *Guida per l'utente di Amazon Neptune*. 

Senza un database a grafo come Neptune, è probabile che dati altamente connessi vengano modellati in un database relazionale. Poiché i dati dispongono di connessioni potenzialmente dinamiche, le applicazioni che utilizzano tali origini dati devono modellare query di dati connessi in SQL. Questo approccio richiede la scrittura di un livello aggiuntivo per convertire le query a grafo in SQL. Inoltre, i database relazionali sono dotati di uno schema rigido. Qualsiasi modifica nello schema per modellare il cambio di connessioni richiede tempi di inattività e una ulteriore manutenzione della conversione della query per supportare il nuovo schema. Le prestazioni delle query sono un altro grande limite da considerare durante la progettazione delle applicazioni.

I database a grafo possono semplificare notevolmente tali situazioni. Libero da uno schema, un livello avanzato di query a grafo (Gremlin o SPARQL) e indici ottimizzati per le query a grafo aumentano la flessibilità e le prestazioni. Il database a grafo Amazon Neptune dispone anche di funzionalità aziendali come la crittografia a riposo, un livello di autorizzazione sicuro, backup predefiniti, supporto Multi-AZ, supporto delle repliche di lettura e altre ancora.

Utilizzando AWS DMS, è possibile migrare i dati relazionali che modellano un grafo altamente connesso a un endpoint di destinazione Neptune da un endpoint di origine DMS per qualsiasi database SQL supportato.

Per ulteriori dettagli, consulta quanto segue:

**Topics**
+ [Panoramica sulla migrazione a Amazon Neptune come destinazione](#CHAP_Target.Neptune.MigrationOverview)
+ [Specifica delle impostazioni degli endpoint per Amazon Neptune come destinazione](#CHAP_Target.Neptune.EndpointSettings)
+ [Creazione di un ruolo di servizio IAM per l'accesso ad Amazon Neptune come destinazione](#CHAP_Target.Neptune.ServiceRole)
+ [Specifica delle regole di mappatura del grafo utilizzando Gremlin e R2RML per Amazon Neptune come destinazione](#CHAP_Target.Neptune.GraphMapping)
+ [Tipi di dati per la migrazione di Gremlin e R2RML ad Amazon Neptune come destinazione](#CHAP_Target.Neptune.DataTypes)
+ [Limitazioni all'utilizzo di Amazon Neptune come destinazione](#CHAP_Target.Neptune.Limitations)

## Panoramica sulla migrazione a Amazon Neptune come destinazione
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Prima di iniziare una migrazione verso un target di Neptune, crea le seguenti risorse nel tuo account: AWS 
+ Un cluster Neptune per l'endpoint di destinazione. 
+ Un database relazionale SQL supportato da AWS DMS per l'endpoint di origine. 
+ Un bucket Amazon S3 per l'endpoint di destinazione. Crea questo bucket S3 nella stessa AWS regione del tuo cluster Neptune. AWS DMS utilizza questo bucket S3 come archivio di file intermedio per i dati di destinazione che carica in blocco nel database Neptune. Per ulteriori informazioni sulla creazione di un bucket S3, consulta [Creazione di un bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) nella *Guida per l'utente di Amazon Simple Storage Service*.
+ Un endpoint del cloud privato virtuale (VPC) per S3 nello stesso VPC del cluster Neptune. 
+ Un ruolo AWS Identity and Access Management (IAM) che include una policy IAM. Questa policy deve specificare al bucket S3 le autorizzazioni `GetObject`, `PutObject`, `DeleteObject` e `ListObject` per l'endpoint di destinazione. Questo ruolo viene assunto sia AWS DMS da Neptune che da Neptune con accesso IAM sia al bucket S3 di destinazione che al database Neptune. Per ulteriori informazioni, consulta [Creazione di un ruolo di servizio IAM per l'accesso ad Amazon Neptune come destinazione](#CHAP_Target.Neptune.ServiceRole).

Una volta in possesso di queste risorse, la configurazione e l'avvio di una migrazione a una destinazione Neptune è simile a qualsiasi migrazione di pieno carico tramite la console o l'API DMS. Tuttavia, una migrazione a una destinazione Neptune richiede alcuni passaggi specifici.

**Per migrare un database AWS DMS relazionale su Neptune**

1. Creare un'istanza di replica nel modo descritto in [Creazione di un'istanza di replica](CHAP_ReplicationInstance.Creating.md).

1. Crea e testa un database relazionale SQL supportato da AWS DMS per l'endpoint di origine.

1. Crea e testa l'endpoint di destinazione per il database Neptune. 

   Per connettere l'endpoint di destinazione al database Neptune, specifica il nome del server per l'endpoint del cluster Neptune o per l'endpoint dell'istanza di scrittura Neptune. Inoltre, specifica la cartella del bucket S3 in cui AWS DMS archiviare i file intermedi per il caricamento in blocco nel database Neptune. 

   Durante la migrazione, AWS DMS archivia tutti i dati di destinazione migrati in questa cartella bucket S3 fino alla dimensione massima del file specificata. Quando questo archivio di file raggiunge questa dimensione massima, carica in AWS DMS blocco i dati S3 archiviati nel database di destinazione. Cancella la cartella per consentire lo storage di eventuali altri dati di destinazione per un successivo caricamento nel database di destinazione. Per ulteriori informazioni su come specificare queste impostazioni, consulta [Specifica delle impostazioni degli endpoint per Amazon Neptune come destinazione](#CHAP_Target.Neptune.EndpointSettings).

1. Crea un'attività di replica di pieno carico con le risorse create nelle fasi da 1 a 3 ed effettua le seguenti operazioni: 

   1. Utilizzare come sempre la mappatura delle tabelle dell'attività per identificare schemi, tabelle e viste di origine specifici di cui eseguire la migrazione dal database relazionale utilizzando le regole di selezione e trasformazione appropriate. Per ulteriori informazioni, consulta [Utilizzo della mappatura delle tabelle per specificare le impostazioni delle attività](CHAP_Tasks.CustomizingTasks.TableMapping.md). 

   1. Specifica le mappature di destinazione scegliendo una delle seguenti opzioni per indicare le regole di mappatura dalle tabelle e dalle viste di origine al database a grafo di destinazione Neptune:
      + Gremlin JSON: per informazioni sull'utilizzo di Gremlin JSON per caricare un database Neptune, consulta [Gremlin load data format](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) nella *Guida per l'utente di Amazon Neptune*.
      + SPARQL RDB to Resource Description Framework Mapping Language (R2RML): per informazioni sull'utilizzo di SPARQL R2RML, consulta la specifica W3C [R2RML: RDB to RDF mapping language](https://www.w3.org/TR/r2rml/).

   1. Esegui una delle seguenti operazioni:
      + **Utilizzando la AWS DMS console, specificate le opzioni di mappatura grafica utilizzando le **regole di mappatura dei grafici nella pagina Crea** attività di migrazione del database.** 
      + Utilizzando l' AWS DMS API, specificate queste opzioni utilizzando il parametro di `TaskData` richiesta della chiamata API. `CreateReplicationTask` 

      Per ulteriori informazioni ed esempi sull'utilizzo di Gremlin JSON e SPARQL R2RML per specificare le regole di mappatura a grafo, consulta [Specifica delle regole di mappatura del grafo utilizzando Gremlin e R2RML per Amazon Neptune come destinazione](#CHAP_Target.Neptune.GraphMapping).

1. Avviare la replica per l'attività di migrazione.

## Specifica delle impostazioni degli endpoint per Amazon Neptune come destinazione
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

Per creare o modificare un endpoint di destinazione, è possibile utilizzare la console o le operazioni API `CreateEndpoint` o `ModifyEndpoint`. 

**Per un target Neptune nella console, **specifica le impostazioni specifiche AWS DMS dell'endpoint nella pagina **Crea** endpoint** o Modifica console endpoint.** Per `CreateEndpoint` e `ModifyEndpoint`, specificare i parametri di richiesta per l'opzione `NeptuneSettings`. Nell'esempio seguente viene illustrato come eseguire questa operazione utilizzando la 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}‘
```

Qui, l'opzione `--server-name` della CLI indica il nome del server per l'endpoint di scrittura del cluster Neptune. In alternativa, è possibile specificare il nome del server per un endpoint dell'istanza di scrittura Neptune. 

Seguono i parametri di richiesta dell'opzione `--neptune-settings`:
+ `ServiceAccessRoleArn` (obbligatorio): il nome della risorsa Amazon (ARN) del ruolo di servizio creato per l'endpoint di destinazione Neptune. Per ulteriori informazioni, consulta [Creazione di un ruolo di servizio IAM per l'accesso ad Amazon Neptune come destinazione](#CHAP_Target.Neptune.ServiceRole).
+ `S3BucketName` (obbligatorio): il nome del bucket Amazon S3 in cui DMS può archiviare temporaneamente i dati a grafo migrati in file.csv prima di caricarli in blocco nel database di destinazione Neptune. DMS mappa i dati di origine SQL ai dati a grafo prima di archiviarli in questi file .csv.
+ `S3BucketFolder` (obbligatorio): il percorso di una cartella in cui si desidera che DMS archivi i dati a grafo migrati nel bucket S3 specificato da `S3BucketName`.
+ `ErrorRetryDuration` (facoltativo): il numero di millisecondi che DMS deve attendere per riprovare a caricare in blocco dati a grafo migrati nel database di destinazione Neptune prima di generare un errore. Il valore di default è 250.
+ `MaxFileSize` (facoltativo): la dimensione massima in KB di dati a grafo migrati archiviati in un file con estensione .csv prima che DMS carichi in blocco i dati nel database di destinazione Neptune. Il valore predefinito è 1.048.576 KB (1 GB). In caso di esito positivo del caricamento, DMS cancella il bucket, pronto per memorizzare il successivo batch di dati a grafo migrati.
+ `MaxRetryCount` (facoltativo): il numero di tentativi eseguiti da DMS per caricare in blocco i dati a grafo migrati nel database di destinazione Neptune prima di generare un errore. Il predefinito è 5.
+ `IAMAuthEnabled` (facoltativo): per abilitare l'autorizzazione IAM per l'endpoint, imposta questo parametro su `true` e collega il documento della policy IAM appropriato al ruolo di servizio specificato da `ServiceAccessRoleArn`. Il valore predefinito è `false`.

## Creazione di un ruolo di servizio IAM per l'accesso ad Amazon Neptune come destinazione
<a name="CHAP_Target.Neptune.ServiceRole"></a>

Per accedere a Neptune come destinazione, creare un ruolo del servizio utilizzando IAM. A seconda della configurazione dell'endpoint Neptune, collega a questo ruolo alcuni o tutti i documenti di trust e della policy IAM descritti di seguito. Quando si crea l'endpoint Neptune, occorre fornire l'ARN del ruolo di servizio. In questo modo, AWS DMS Amazon Neptune può assumere le autorizzazioni per accedere sia a Neptune che al bucket Amazon S3 associato.

Se imposti il parametro `IAMAuthEnabled` in `NeptuneSettings` su `true` nella configurazione dell'endpoint Neptune, collega al ruolo di servizio una policy IAM come la seguente. Se si imposta `IAMAuthEnabled` su `false`, è possibile ignorare questa policy.

```
// 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/*"
            }
        ]
    }
```

La policy IAM precedente consente l'accesso completo al cluster di destinazione Neptune specificato da `Resource`.

Collegare una policy IAM come la seguente al ruolo del servizio. Questa policy consente a DMS di archiviare temporaneamente i dati a grafo migrati nel bucket S3 creato per il caricamento in blocco nel database di destinazione 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/"
			]
		}
	]
}
```

La policy IAM precedente consente all'account di eseguire query sui contenuti del bucket S3 (`arn:aws:s3:::amzn-s3-demo-bucket`) creato per la destinazione Neptune. Permette inoltre all'account di operare in modo completo sui contenuti di tutti i file e le cartelle del bucket (`arn:aws:s3:::amzn-s3-demo-bucket/`).

Modifica la relazione di trust e associa il seguente ruolo IAM al tuo ruolo di servizio per consentire AWS DMS sia al servizio di database Amazon Neptune di assumere il ruolo.

------
#### [ 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"
    }
  ]
}
```

------

Per informazioni su come specificare questo ruolo di servizio per l'endpoint di destinazione Neptune, consulta [Specifica delle impostazioni degli endpoint per Amazon Neptune come destinazione](#CHAP_Target.Neptune.EndpointSettings).

## Specifica delle regole di mappatura del grafo utilizzando Gremlin e R2RML per Amazon Neptune come destinazione
<a name="CHAP_Target.Neptune.GraphMapping"></a>

Le regole di mappatura del grafo create specificano il modo in cui i dati estratti da un'origine di database relazionale SQL vengono caricati in una destinazione del cluster di database Neptune. Il formato di queste regole di mappatura varia a seconda che si tratti di regole per caricare i dati del grafico delle proprietà utilizzando TinkerPop Apache Gremlin o i dati del Resource Description Framework (RDF) utilizzando R2RML. Di seguito è possibile trovare informazioni su questi formati e su dove approfondirle.

È possibile specificare queste regole di mappatura quando si crea l'attività di migrazione utilizzando la console o l'API DMS. 

Tramite la console, specificare queste regole di mappatura utilizzando le **Regole di mappatura a grafo** nella pagina **Crea attività di migrazione del database** . In **Regole di mappatura a grafo** è possibile immettere e modificare le regole di mappatura direttamente utilizzando l'editor fornito. In alternativa, è possibile cercare un file che contenga le regole di mappatura nel formato di mappatura a grafo appropriato. 

Tramite l'API, specificare queste opzioni utilizzando il parametro di richiesta `TaskData` della chiamata API `CreateReplicationTask`. Impostare `TaskData` sul percorso di un file contenente le regole di mappatura nel formato di mappatura a grafo appropriato.

### Regole di mappatura a grafo per la generazione di dati del grafo di proprietà mediante Gremlin
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

Utilizzando Gremlin per generare i dati del grafo di proprietà, specificare un oggetto JSON con una regola di mappatura per ogni entità a grafo da generare dai dati di origine. Il formato di questo JSON è definito specificamente per il caricamento in blocco su Amazon Neptune. Il modello seguente mostra l'aspetto di ogni regola in questo oggetto.

```
{
    "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)"
                        }
                    ]
                }
            ]
        }
    ]
}
```

La presenza di un'etichetta del vertice implica che il vertice viene creato qui. La sua assenza implica che il vertice viene creato da un'origine diversa e che questa definizione aggiunge solo le proprietà del vertice. Specificare tutte le definizioni di vertici e di edge necessarie per specificare le mappature per l'intera origine del database relazionale.

Segue una regola di esempio per una tabella `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"
                        }
                    ]
                }
            ]
        }
    ]
}
```

Qui, le definizioni dei vertici e degli edge mappano una relazione gerarchica da un nodo `employee` con ID dipendente (`EmpID`) e un nodo `employee` con un ID manager (`managerId`).

Per ulteriori informazioni sulla creazione di regole di mappatura a grafo utilizzando Gremlin JSON, consulta [Gremlin load data format](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) nella *Guida per l'utente di Amazon Neptune*.

### Regole di RDF/SPARQL mappatura grafica per la generazione di dati
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

Se si caricano dati RDF di cui eseguire query tramite SPARQL, scrivere le regole di mappatura a grafo in R2RML. R2RML è un linguaggio W3C standard per la mappatura dei dati relazionali a RDF. In un file R2RML, una *mappa delle triple* (ad esempio `<#TriplesMap1>` di seguito) specifica una regola per convertire ogni riga di una tabella logica in zero o più triple RDF. Una *mappa dei soggetti* (ad esempio, qualsiasi `rr:subjectMap` seguente) specifica una regola per generare i soggetti delle triple RDF generate da una mappa delle triple. Una *mappa predicato-oggetto* (ad esempio, qualsiasi `rr:predicateObjectMap` seguente) è una funzione che crea una o più coppie predicato-oggetto per ogni riga di una tabella logica.

Segue un semplice esempio per una tabella `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" ];
    ]
```

Nell'esempio precedente, la mappatura definisce i nodi del grafo mappati da una tabella di dipendenti.

Segue un altro semplice esempio per una tabella `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" ]
    ].
```

Nell'esempio precedente, la mappatura definisce i nodi grafici che mappano friend-of-a-friend le relazioni tra le persone in una tabella. `Student`

Per ulteriori informazioni sulla creazione di regole di mappatura a grafo utilizzando SPARQL R2RML, consulta la specifica W3C [R2RML: RDB to RDF Mapping Language](https://www.w3.org/TR/r2rml/).

## Tipi di dati per la migrazione di Gremlin e R2RML ad Amazon Neptune come destinazione
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS esegue la mappatura dei tipi di dati dall'endpoint di origine SQL al target Neptune in due modi. Il modo che scegli dipende dal formato di mappatura del grafo utilizzato per caricare il database Neptune: 
+ Apache TinkerPop Gremlin, utilizzando una rappresentazione JSON dei dati di migrazione.
+ SPARQL di W3C, tramite una rappresentazione R2RML dei dati di migrazione. 

Per ulteriori informazioni su questi due formati di mappatura del grafo, consulta [Specifica delle regole di mappatura del grafo utilizzando Gremlin e R2RML per Amazon Neptune come destinazione](#CHAP_Target.Neptune.GraphMapping).

Di seguito è possibile trovare le descrizioni delle mappature dei tipi di dati per ogni formato.

### Mappatura dei tipi di dati da un'origine SQL a una destinazione Gremlin
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

Nella tabella seguente vengono illustrate le mappature dei tipi di dati da un'origine SQL a una destinazione in formato Gremlin. 

AWS DMS mappa qualsiasi tipo di dati sorgente SQL non elencato su un Gremlin. `String`



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

Per ulteriori informazioni sui tipi di dati Gremlin per il caricamento di Neptune, consulta [Gremlin data types](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes) nella *Guida per l'utente di Amazon Neptune*.

### Mappatura dei tipi di dati da un'origine SQL a una destinazione R2RML (RDF)
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

Nella tabella seguente vengono illustrate le mappature dei tipi di dati da un'origine SQL a una destinazione in formato R2RML.

Tutti i tipi di dati RDF elencati fanno distinzione tra maiuscole e minuscole, ad eccezione del formato RDF letterale. AWS DMS mappa qualsiasi tipo di dati sorgente SQL non elencato su un valore letterale RDF. 

Un *letterale RDF* è un valore di una serie di forme lessicali letterali e di tipi di dati. Per ulteriori informazioni, consulta [RDF Literals](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal) nella specifica W3C *Resource Description Framework (RDF): Concepts and Abstract Syntax*.

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

Per ulteriori informazioni sui tipi di dati RDF per il caricamento su Neptune e le relative mappature ai tipi di dati di origine SQL, consulta [Datatype conversions](https://www.w3.org/TR/r2rml/#datatype-conversions) nella specifica W3C *R2RML: RDB to RDF Mapping Language*.

## Limitazioni all'utilizzo di Amazon Neptune come destinazione
<a name="CHAP_Target.Neptune.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza Neptune come destinazione:
+ AWS DMS attualmente supporta attività a pieno carico solo per la migrazione verso un target Neptune. La migrazione di acquisizione dei dati di modifica (CDC) a una destinazione Neptune non è supportata.
+ Assicurati di eliminare manualmente tutti i dati nel database Neptune di destinazione prima di avviare l'attività di migrazione, come negli esempi seguenti.

  Per eliminare tutti i dati (vertici ed edge) all'interno del grafo, esegui il comando Gremlin seguente.

  ```
  gremlin> g.V().drop().iterate()
  ```

  Per eliminare i vertici con etichetta `'customer'`, esegui il comando Gremlin seguente.

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**Nota**  
L’eliminazione di un set di dati di grandi dimensioni può richiedere del tempo. È consigliabile ripetere `drop()` con un limite, ad esempio `limit(1000)`.

  Per eliminare gli edge con etichetta `'rated'`, esegui il comando Gremlin seguente.

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**Nota**  
L’eliminazione di un set di dati di grandi dimensioni può richiedere del tempo. È consigliabile ripetere `drop()` con un limite, ad esempio `limit(1000)`.
+ L'operazione API DMS `DescribeTableStatistics` può restituire risultati imprecisi su una determinata tabella a causa della natura della struttura dei dati a grafo di Neptune.

  Durante la migrazione, AWS DMS analizza ogni tabella di origine e utilizza la mappatura grafica per convertire i dati di origine in un grafico di Neptune. I dati convertiti vengono innanzitutto archiviati nella cartella del bucket S3 specificata per l'endpoint di destinazione. Se l'origine viene sottoposta a scansione e questi dati intermedi S3 vengono generati correttamente, `DescribeTableStatistics` presuppone che i dati siano stati caricati correttamente nel database di destinazione Neptune. Ma ciò non è sempre vero. Per verificare che i dati siano stati caricati correttamente per una determinata tabella, confrontare i valori `count()` restituiti a entrambe le estremità della migrazione per tale tabella. 

  Nell'esempio seguente, AWS DMS ha caricato una `customer` tabella dal database di origine, a cui viene assegnata l'etichetta `'customer'` nel grafico del database Neptune di destinazione. È possibile verificare che questa etichetta sia scritta nel database di destinazione. A tale scopo, confronta il numero di righe `customer` disponibili nel database di origine con il numero di righe con etichetta `'customer'` caricate nel database di destinazione Neptune al termine dell'attività.

  Per ottenere il numero di righe cliente disponibili dal database di origine tramite SQL, eseguire le operazioni seguenti.

  ```
  select count(*) from customer;
  ```

  Per ottenere il numero di righe con etichetta `'customer'` caricate nel grafo del database di destinazione tramite Gremlin, eseguire le operazioni seguenti.

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ Attualmente, se il caricamento di una singola tabella non riesce, l'intera attività ha esito negativo. A differenza di una destinazione di database relazionale, i dati in Neptune sono altamente connessi, il che rende impossibile in molti casi il ripristino di un'attività. Se non è possibile ripristinare un'attività a causa di questo tipo di errore nel caricamento dei dati, creare una nuova attività per caricare la tabella che non è stato possibile caricare. Prima di eseguire questa nuova attività, elimina manualmente dalla destinazione Neptune la tabella parzialmente caricata.
**Nota**  
È possibile ripristinare un'attività che non riesce a eseguire la migrazione a una destinazione Neptune se l'errore è recuperabile (ad esempio un errore di transito di rete).
+ AWS DMS supporta la maggior parte degli standard per R2RML. Tuttavia, AWS DMS non supporta determinati standard R2RML, tra cui espressioni inverse, join e viste. Una soluzione alternativa per una vista R2RML consiste nel creare una vista SQL personalizzata corrispondente nel database di origine. Nell'attività di migrazione, utilizzare la mappatura delle tabelle per scegliere la vista come input. Quindi, mappare la vista a una tabella che viene quindi utilizzata da R2RML per generare dati a grafo.
+ Quando si esegue la migrazione dei dati di origine con tipi di dati SQL non supportati, i dati di destinazione risultanti possono difettare di precisione. Per ulteriori informazioni, consulta [Tipi di dati per la migrazione di Gremlin e R2RML ad Amazon Neptune come destinazione](#CHAP_Target.Neptune.DataTypes).
+ AWS DMS non supporta la migrazione dei dati LOB in un target Neptune.

# Utilizzo di Redis OSS come obiettivo per AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

Redis OSS è un archivio di strutture di dati in memoria open source utilizzato come database, cache e broker di messaggi. La gestione dei dati in memoria può eseguire operazioni di lettura o scrittura che richiedono meno di un millisecondo e centinaia di milioni di operazioni ogni secondo. In qualità di archivio dati in memoria, Redis OSS supporta le applicazioni più esigenti che richiedono tempi di risposta inferiori al millisecondo.

Utilizzando AWS DMS, è possibile migrare i dati da qualsiasi database di origine supportato a un data store Redis OSS di destinazione con tempi di inattività minimi. [Per ulteriori informazioni su Redis OSS, consulta la documentazione Redis OSS.](https://redis.io/documentation)

Oltre a Redis OSS locale, AWS Database Migration Service supporta quanto segue:
+ [Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/elasticache/redis/) come archivio dati di destinazione. ElastiCache (Redis OSS) funziona con i client Redis OSS e utilizza il formato di dati Redis OSS aperto per archiviare i dati.
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) come archivio dati di destinazione. MemoryDB è compatibile con Redis OSS e consente di creare applicazioni utilizzando tutte le strutture di dati e i comandi Redis OSS attualmente in uso. APIs

Per ulteriori informazioni sull'utilizzo di Redis OSS come destinazione per AWS DMS, consulta le seguenti sezioni: 

**Topics**
+ [Prerequisiti per l'utilizzo di un cluster Redis OSS come destinazione per AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [Limitazioni nell'utilizzo di Redis come destinazione per AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [Migrazione dei dati da un database relazionale o non relazionale a un target Redis OSS](#CHAP_Target.Redis.Migrating)
+ [Specificazione delle impostazioni degli endpoint per Redis OSS come destinazione](#CHAP_Target.Redis.EndpointSettings)

## Prerequisiti per l'utilizzo di un cluster Redis OSS come destinazione per AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

*DMS supporta un target Redis OSS locale in una configurazione autonoma o come cluster Redis OSS in cui i dati vengono automaticamente condivisi su più nodi.* Il partizionamento è il processo di separazione dei dati in blocchi più piccoli, denominati partizioni, distribuiti su più server o nodi. In effetti, si tratta di una partizione di dati che contiene un sottoinsieme del set di dati totale e serve una parte del carico di lavoro complessivo.

**Poiché Redis OSS è un data store NoSQL chiave-valore, la convenzione di denominazione delle chiavi Redis OSS da utilizzare quando l'origine è un database relazionale è schema-name.table-name.primary-key.** In Redis OSS, la chiave e il valore non devono contenere il carattere speciale%. In caso contrario, DMS ignora il record. 

**Nota**  
Se si utilizza ElastiCache (Redis OSS) come destinazione, DMS supporta solo configurazioni *abilitate per la modalità cluster*. Per ulteriori informazioni sull'utilizzo di ElastiCache (Redis OSS) versione 6.x o successiva per creare un data store di destinazione abilitato alla modalità cluster, consulta la [Guida introduttiva](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html) alla *Amazon ElastiCache (Redis OSS)* User Guide. 

Prima di iniziare una migrazione del database, avvia il cluster Redis OSS con i seguenti criteri.
+ Il cluster ha una o più partizioni.
+ Se utilizzi un target ElastiCache (Redis OSS), assicurati che il cluster non utilizzi il controllo degli accessi basato sui ruoli IAM. Utilizza invece Redis OSS Auth per autenticare gli utenti.
+ Abilita Multi-AZ (zone di disponibilità).
+ Assicurati che il cluster abbia memoria disponibile sufficiente per contenere i dati da migrare dal database. 
+ Assicurati che il cluster Redis OSS di destinazione sia privo di tutti i dati prima di iniziare l'attività di migrazione iniziale.

È necessario determinare i requisiti di sicurezza per la migrazione dei dati prima di creare la configurazione del cluster. DMS supporta la migrazione in gruppi di replica di destinazione indipendentemente dalla configurazione della crittografia. Tuttavia, è possibile abilitare o disabilitare la crittografia solo quando si crea la configurazione del cluster.

## Limitazioni nell'utilizzo di Redis come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza Redis OSS come destinazione:
+ Poiché Redis OSS è un archivio dati no-sql con valore chiave, la convenzione di denominazione delle chiavi Redis OSS da utilizzare quando l'origine è un database relazionale è. `schema-name.table-name.primary-key` 
+ In Redis OSS, il valore-chiave non può contenere il carattere speciale. `%` In caso contrario, DMS ignora il record.
+ DMS non migrerà le righe che contengono il carattere. `%`
+ DMS non migrerà i campi che contengono il `%` carattere nel nome del campo.
+ La modalità LOB completa non è supportata.
+  Un'autorità di certificazione (CA) privata non è supportata quando si utilizza ElastiCache (Redis OSS) come destinazione.
+ AWS DMS non supporta i dati di origine contenenti `'\0'` caratteri incorporati quando si utilizza Redis come endpoint di destinazione. I dati contenenti `'\0'` caratteri incorporati verranno troncati al primo carattere. `'\0'`

## Migrazione dei dati da un database relazionale o non relazionale a un target Redis OSS
<a name="CHAP_Target.Redis.Migrating"></a>

È possibile migrare i dati da qualsiasi data store SQL o NoSQL di origine direttamente su una destinazione Redis OSS. La configurazione e l'avvio di una migrazione verso un target Redis OSS sono simili a qualsiasi migrazione di acquisizione dati a pieno carico e modifica tramite la console DMS o l'API. Per eseguire una migrazione del database verso una destinazione Redis OSS, procedi come segue.
+ Crea un'istanza di replica che esegua tutti i processi per la migrazione. Per ulteriori informazioni, consulta [Creazione di un'istanza di replica](CHAP_ReplicationInstance.Creating.md).
+ Specifica un endpoint di origine. Per ulteriori informazioni, consulta [Creazione di endpoint di origine e destinazione](CHAP_Endpoints.Creating.md).
+ Individua il nome DNS e il numero della porta del cluster.
+ Scarica un bundle di certificati che puoi usare per verificare le connessioni SSL.
+ Specifica un endpoint di destinazione, come descritto di seguito.
+ Crea un'attività o una serie di attività per definire le tabelle e i processi di replica da utilizzare. Per ulteriori informazioni, consulta [Creazione di un'attività](CHAP_Tasks.Creating.md).
+ Esegui la migrazione dei dati dal database di origine al cluster di destinazione.

È possibile avviare una migrazione del database in due modi:

1. Puoi scegliere la AWS DMS console ed eseguire ogni passaggio da lì.

1. Puoi usare il AWS Command Line Interface (AWS CLI). [Per ulteriori informazioni sull'utilizzo della CLI con AWS DMS, vedere AWS CLI for. AWS DMS](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)

**Per individuare il nome DNS e il numero della pota del cluster**
+ Utilizzate il AWS CLI comando seguente per `replication-group-id` fornire il nome del gruppo di replica.

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  Qui, l'output mostra il nome DNS nell'attributo `Address` e il numero di porta nell'attributo `Port` del nodo primario del cluster. 

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  Se utilizzate MemoryDB come destinazione, utilizzate il AWS CLI comando seguente per fornire un indirizzo endpoint al cluster Redis OSS. 

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**Download di un bundle di certificati da usare per verificare le connessioni SSL**
+ Nella riga di comando, immetti il comando `wget` seguente. Wget è uno strumento di utilità a riga di comando GNU gratuito utilizzato per scaricare i file da Internet.

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  Qui, `aws-api-domain` completa il dominio Amazon S3 nella AWS tua regione necessario per accedere al bucket S3 specificato e rds-combined-ca-bundle al file.pem che fornisce.

**Per creare un AWS DMS endpoint di destinazione utilizzando la console**

Questo endpoint è destinato al target Redis OSS già in esecuzione. 
+ Nel riquadro di navigazione della console IAM, scegli **Endpoint** quindi seleziona **Crea endpoint**. Nella tabella seguente vengono illustrate le impostazioni.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/CHAP_Target.Redis.html)

Quando hai finito di fornire tutte le informazioni per l'endpoint, AWS DMS crea l'endpoint di destinazione Redis OSS da utilizzare durante la migrazione del database.

Per informazioni sulla creazione di un'attività di migrazione e sull'avvio della migrazione del database, consulta [Creazione di un'attività](CHAP_Tasks.Creating.md).

## Specificazione delle impostazioni degli endpoint per Redis OSS come destinazione
<a name="CHAP_Target.Redis.EndpointSettings"></a>

Per creare o modificare un endpoint di destinazione, è possibile utilizzare la console o le operazioni API `CreateEndpoint` o `ModifyEndpoint`. 

**Per un target Redis OSS nella AWS DMS console, specifica le **impostazioni specifiche dell'endpoint** nella pagina **Crea** endpoint o Modifica console endpoint.**

Quando si utilizzano le operazioni API `CreateEndpoint` e `ModifyEndpoint`, specifica i parametri della richiesta per l'opzione `RedisSettings`. Nell'esempio seguente viene illustrato come eseguire questa operazione utilizzando la 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"
        }
    }
}
```

Di seguito sono riportati i parametri `--redis-settings`:
+ `ServerName`— (Obbligatorio) Di tipo`string`, specifica il cluster Redis OSS verso cui verranno migrati i dati e si trova nello stesso VPC.
+ `Port` (obbligatorio): di tipo `number`, il valore della porta utilizzato per accedere all'endpoint.
+ `SslSecurityProtocol` (facoltativo): i valori validi sono `plaintext` e `ssl-encryption`. Il valore predefinito è `ssl-encryption`. 

  L'opzione `plaintext` non fornisce la crittografia Transport Layer Security (TLS) per il traffico tra endpoint e database. 

  Utilizza `ssl-encryption` per creare una connessione crittografata. `ssl-encryption` non richiede l'ARN dell'Autorità di certificazione (CA) SSL per verificare il certificato di un server, ma è possibile indentificarne facoltativamente uno utilizzando l'impostazione `SslCaCertificateArn`. Se non viene fornito l'ARN dell'Autorità di certificazione, DMS utilizza la CA root di Amazon.

  Quando si utilizza un target Redis OSS locale, è possibile `SslCaCertificateArn` importare un'Autorità di certificazione (CA) pubblica o privata in DMS e fornire tale ARN per l'autenticazione del server. Una CA privata non è supportata quando si utilizza ElastiCache (Redis OSS) come destinazione.
+ `AuthType`— (Obbligatorio) Indica il tipo di autenticazione da eseguire durante la connessione a Redis OSS. I valori validi includono `none`, `auth-token` e `auth-role`.

  L'`auth-token`opzione richiede che venga fornito un *AuthPassword* "", mentre l'`auth-role`opzione richiede che vengano forniti *AuthUserName* "" e *AuthPassword* "».

# Usare Babelfish come bersaglio per AWS Database Migration Service
<a name="CHAP_Target.Babelfish"></a>

È possibile migrare i dati da un database di origine di Microsoft SQL Server a un target Babelfish utilizzando. AWS Database Migration Service

Babelfish per Aurora PostgreSQL estende l'Edizione compatibile con PostgreSQL database Amazon Aurora con la possibilità di accettare connessioni al database dai client Microsoft SQL Server. In questo modo, le applicazioni create originariamente per SQL Server possono funzionare direttamente con Aurora PostgreSQL con poche modifiche al codice rispetto a una migrazione tradizionale e senza modificare i driver del database. 

Per informazioni sulle versioni di Babelfish AWS DMS supportate come destinazione, consulta. [Obiettivi per AWS DMS](CHAP_Introduction.Targets.md) Le versioni precedenti di Babelfish su Aurora PostgreSQL richiedono un aggiornamento prima di utilizzare l'endpoint Babelfish.

**Nota**  
L'endpoint di destinazione Aurora PostgreSQL è il modo preferito per migrare i dati su Babelfish. Per ulteriori informazioni, consulta [Utilizzo di Babelfish per Aurora PostgreSQL come destinazione](CHAP_Target.PostgreSQL.md#CHAP_Target.PostgreSQL.Babelfish). 

Per informazioni sull'utilizzo di Babelfish come endpoint di database, consulta [Babelfish per Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) nella *Guida per l'utente di Amazon Aurora User Guide* 

## Prerequisiti per utilizzare Babelfish come bersaglio per AWS DMS
<a name="CHAP_Target.Babelfish.Prerequisites"></a>

È necessario creare le tabelle prima di migrare i dati per assicurarsi che vengano AWS DMS utilizzati i tipi di dati e i metadati delle tabelle corretti. Se non crei le tabelle sulla destinazione prima di eseguire la migrazione, è possibile che le tabelle AWS DMS vengano create con tipi di dati e autorizzazioni errati. Ad esempio, AWS DMS crea invece una colonna timestamp come binaria (8) e non fornisce le funzionalità previste. timestamp/rowversion 

**Per preparare e creare le tabelle prima della migrazione**

1. Esegui le istruzioni DDL di creazione della tabella che includono vincoli univoci, chiavi primarie o limiti predefiniti. 

   Non includere vincoli di chiave esterna o istruzioni DDL per oggetti come viste, stored procedure, funzioni o trigger. È possibile applicarli dopo la migrazione del database di origine.

1. Identifica eventuali colonne di identità, colonne calcolate o colonne contenenti tipi di dati rowversion o timestamp per le tabelle. Quindi, crea le regole di trasformazione necessarie per gestire i problemi noti durante l'esecuzione dell'attività di migrazione. Per ulteriori informazioni, consultare [Operazioni e regole di trasformazione](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

1. Identifica le colonne con tipi di dati che Babelfish non supporta. Quindi, modifica le colonne interessate nella tabella di destinazione per utilizzare i tipi di dati supportati o crea una regola di trasformazione che le rimuova durante l'attività di migrazione. Per ulteriori informazioni, consultare [Operazioni e regole di trasformazione](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

   La tabella seguente elenca i tipi di dati di origine non supportati da Babelfish e il corrispondente tipo di dati di destinazione consigliato per l'uso.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/CHAP_Target.Babelfish.html)

**Per impostare il livello delle unità di capacità Aurora (ACUs) per il database di origine Aurora PostgreSQL Serverless V2**

È possibile migliorare le prestazioni dell'attività di AWS DMS migrazione prima di eseguirla impostando il valore ACU minimo.
+ Nella finestra delle **impostazioni della capacità Severless v2**, imposta **Minimo ACUs** su o un livello ragionevole per il tuo cluster Aurora DB. **2**

  Per ulteriori informazioni sulle unità di capacità di Aurora, consulta [Scelta dell'intervallo di capacità di Aurora serverless v2 per un cluster Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html) nella *Guida per l'utente di Amazon Aurora*. 

Dopo aver eseguito l'attività di AWS DMS migrazione, puoi reimpostare il valore minimo del tuo database di ACUs origine Aurora PostgreSQL Serverless V2 a un livello ragionevole.

## Requisiti di sicurezza quando si utilizza Babelfish come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Security"></a>

Di seguito vengono descritti i requisiti di sicurezza per l'utilizzo AWS DMS con un target Babelfish:
+ Il nome utente dell'amministratore (l'utente Admin) utilizzato per creare il database.
+ Accesso PSQL e utente con le autorizzazioni SELECT, INSERT, UPDATE, DELETE e REFERENCES sufficienti.

## Autorizzazioni utente per l'utilizzo di Babelfish come destinazione per AWS DMS
<a name="CHAP_Target.Babelfish.Permissions"></a>

**Importante**  
Per motivi di sicurezza, l'account utente utilizzato per la migrazione dei dati deve corrispondere a un utente registrato in qualsiasi database Babelfish utilizzato come destinazione.

L'endpoint di destinazione Babelfish richiede le autorizzazioni utente minime per eseguire una migrazione AWS DMS .

**Per creare un accesso e un utente Transact-SQL (T-SQL) con privilegi limitati**

1. Crea un accesso e una password da utilizzare per la connessione al server.

   ```
   CREATE LOGIN dms_user WITH PASSWORD = 'password';
   GO
   ```

1. Crea il database virtuale per il cluster Babelfish.

   ```
   CREATE DATABASE my_database;
   GO
   ```

1. Crea l'utente T-SQL per il database di destinazione.

   ```
   USE my_database
   GO
   CREATE USER dms_user FOR LOGIN dms_user;
   GO
   ```

1. Per ogni tabella del database Babelfish, CONCEDI le autorizzazioni alle tabelle.

   ```
   GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;  
   ```

## Limitazioni all'uso di Babelfish come obiettivo per AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Limitations"></a>

Quando si utilizza un database Babelfish come destinazione per AWS DMS, si applicano le seguenti limitazioni:
+ È supportata solo la modalità di preparazione delle tabelle "**Nessuna operazione**".
+ Il tipo di dati ROWVERSION richiede una regola di mappatura delle tabelle che rimuove il nome della colonna dalla tabella durante l'attività di migrazione.
+ Il tipo di dati sql\$1variant non è supportato.
+ La modalità LOB completa è supportata. L'utilizzo di SQL Server come endpoint di origine richiede l'impostazione `ForceFullLob=True` dell'attributo di connessione di SQL Server Endpoint per la migrazione LOBs all'endpoint di destinazione.
+ Le impostazioni delle attività di replica presentano le seguenti limitazioni:

  ```
  {
     "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        }.
      
  }
  ```
+ I tipi di dati TIME (7), DATETIME2 (7) e DATETIMEOFFSET (7) in Babelfish limitano il valore di precisione per la parte in secondi del tempo a 6 cifre. Prendi in considerazione l'utilizzo di un valore di precisione di 6 cifre per la tabella di destinazione quando utilizzi questi tipi di dati. Per le versioni 2.2.0 e successive di Babelfish, quando si utilizza TIME (7) e DATETIME2 (7), la settima cifra di precisione è sempre zero.
+ In modalità DO\$1NOTHING, DMS verifica se la tabella è già presente. Se la tabella non esiste nello schema di destinazione, DMS crea la tabella in base alla definizione della tabella di origine e mappa i tipi di dati definiti dall'utente al relativo tipo di dati di base.
+ Un'attività di AWS DMS migrazione verso un target Babelfish non supporta tabelle con colonne che utilizzano tipi di dati ROWVERSION o TIMESTAMP. È possibile utilizzare una regola di mappatura delle tabelle che rimuove il nome della colonna dalla tabella durante il processo di trasferimento. Nell'esempio di regola di trasformazione seguente, viene trasformata la tabella denominata `Actor` nell'origine per rimuovere tutte le colonne che iniziano con i caratteri `col` nella tabella `Actor` della destinazione.

  ```
  {
   	"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%"
  		}
  	}]
   }
  ```
+ Per le tabelle con colonne identiche o calcolate, in cui le tabelle di destinazione utilizzano nomi con maiuscole e minuscole come Categorie, è necessario creare un'azione della regola di trasformazione che converta i nomi delle tabelle in lettere minuscole per l'attività DMS. L'esempio seguente mostra come creare l'azione della regola di trasformazione, **Make** lowercase utilizzando la console. AWS DMS Per ulteriori informazioni, consulta [Operazioni e regole di trasformazione](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).  
![\[Regola di trasformazione di Babelfish\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/images/datarep-babelfish-transform-1.png)
+ Prima di Babelfish 2.2.0, DMS limitava a venti (20) il numero di colonne che era possibile replicare su un endpoint di destinazione Babelfish. Con Babelfish 2.2.0 il limite è aumentato a 100 colonne. Con Babelfish 2.4.0 e versioni successive il numero di colonne che è possibile replicare aumenta nuovamente. È possibile eseguire il seguente esempio di codice sul database SQL Server per determinare quali tabelle sono troppo lunghe.

  ```
  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
  ;
  ```

## Tipi di dati di destinazione per Babelfish
<a name="CHAP_Target.Babelfish.DataTypes"></a>

La tabella seguente mostra i tipi di dati target di Babelfish supportati durante l'utilizzo AWS DMS e la mappatura predefinita dei tipi di dati. AWS DMS 

Per ulteriori informazioni sui tipi di AWS DMS dati, vedere. [Tipi di dati per AWS Database Migration Service](CHAP_Reference.DataTypes.md) 


|  AWS DMS tipo di dati  |  Tipo di dati di Babelfish   | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY (lunghezza)  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INT  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  NUMERIC(p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  |  FLOAT  | 
|  STRING  |  Se la colonna è di ora o data, effettuare le seguenti operazioni:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/dms/latest/userguide/CHAP_Target.Babelfish.html) Se la colonna non è di ora o data, utilizzare VARCHAR (lunghezza).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR(length)  | 
|  BLOB  |  VARBINARY(max) Per utilizzare questo tipo di dati con DMS, è necessario abilitare l'uso di BLOBs per un'attività specifica. DMS supporta i tipi di dati BLOB solo nelle tabelle che includono una chiave primaria.  | 
|  CLOB  |  VARCHAR(max) Per utilizzare questo tipo di dati con DMS, è necessario abilitarne l'uso CLOBs per un'attività specifica.  | 
|  NCLOB  |  NVARCHAR(max) Per utilizzare questo tipo di dati con DMS, è necessario abilitarne l'uso NCLOBs per un'attività specifica. Durante la CDC, DMS supporta i tipi di dati NCLOB solo nelle tabelle che includono una chiave primaria.  | 

# Utilizzo di Amazon Timestream come obiettivo per AWS Database Migration Service
<a name="CHAP_Target.Timestream"></a>

Puoi utilizzarli AWS Database Migration Service per migrare i dati dal tuo database di origine a un endpoint di destinazione Amazon Timestream, con supporto per le migrazioni di dati Full Load e CDC.

Amazon Timestream è un servizio di database di serie temporali veloce, dimensionabile e serverless creato per l'importazione di grandi volumi di dati. I dati di serie temporali sono una sequenza di punti dati raccolti in un intervallo di tempo che vengono utilizzati per misurare gli eventi che cambiano nel tempo. Viene utilizzato per raccogliere, archiviare e analizzare metriche da applicazioni IoT, DevOps applicazioni e applicazioni di analisi. Una volta che i dati sono disponibili in Timestream, puoi visualizzarne e identificarne le tendenze e i modelli pressoché in tempo reale. Per informazioni su Amazon Timestream, consulta [What is Amazon Timestream?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) nella *Guida per gli sviluppatori di Amazon Timestream*.

**Topics**
+ [Prerequisiti per l'utilizzo di Amazon Timestream come destinazione per AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [Impostazioni attività a pieno carico multithread](#CHAP_Target.Timestream.FLTaskSettings)
+ [Impostazioni attività di carico CDC multithread](#CHAP_Target.Timestream.CDCTaskSettings)
+ [Impostazioni dell'endpoint quando si utilizza Timestream come destinazione per AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [Creazione e modifica di un endpoint di destinazione Amazon Timestream](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [Utilizzo della mappatura degli oggetti per la migrazione dei dati in un argomento Timestream](#CHAP_Target.Timestream.ObjectMapping)
+ [Limitazioni nell'utilizzo di Amazon Timestream come destinazione per AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

## Prerequisiti per l'utilizzo di Amazon Timestream come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Timestream.Prerequisites"></a>

Prima di configurare Amazon Timestream come obiettivo AWS DMS per, assicurati di creare un ruolo IAM. Questo ruolo deve consentire l'accesso AWS DMS ai dati migrati in Amazon Timestream. Il set minimo di autorizzazioni di accesso per il ruolo utilizzato per la migrazione a Timestream è illustrato nella seguente policy IAM.

------
#### [ 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 intendi migrare tutte le tabelle, usa `*` for *TABLE\$1NAME* nell'esempio precedente.

Tieni presenti le seguenti indicazioni sull'utilizzo di Timestream come destinazione:
+ Se intendi importare dati storici con timestamp creati da più di un anno, ti consigliamo di usare AWS DMS per scrivere i dati su Amazon S3 nel formato con valori separati da virgole (csv). Quindi, utilizza il caricamento in batch di Timestream per importare i dati in Timestream. Per ulteriori informazioni, consulta [Using batch load in Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html) nella [Guida per gli sviluppatori di Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).
+ Per le migrazioni di dati di tipo pieno carico eseguite da meno di un anno, ti consigliamo di impostare un periodo di conservazione dell'archivio di memoria della tabella Timestream maggiore o uguale al timestamp più vecchio. Quindi, una volta completata la migrazione, modifica il periodo di conservazione dell'archivio di memoria della tabella impostando il valore desiderato. Ad esempio, per migrare i dati con un timestamp creato da più 2 mesi, procedi come segue:
  + Imposta il periodo di conservazione dell'archivio di memoria della tabella di destinazione Timestream su 2 mesi.
  + Inizia la migrazione dei dati utilizzando AWS DMS.
  + Una volta completata la migrazione dei dati, modifica il periodo di conservazione della tabella di destinazione Timestream impostando il valore desiderato. 

   Ti consigliamo di stimare il costo dell'archivio di memoria prima della migrazione utilizzando le informazioni presenti nelle pagine seguenti:
  + [Prezzi di Amazon Timestream](https://aws.amazon.com/timestream/pricing)
  + [AWS calcolatore dei prezzi](https://calculator.aws/#/addService) 
+ Per le migrazioni dei dati di tipo CDC, ti consigliamo di impostare il periodo di conservazione dell'archivio di memoria della tabella di destinazione in modo che i dati importati rientrino nei limiti stabiliti. Per ulteriori informazioni, consulta [Writes Best Practices](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html) nella [Guida per gli sviluppatori di Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).

## Impostazioni attività a pieno carico multithread
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

Per contribuire ad aumentare la velocità di trasferimento dei dati, AWS DMS supporta un'attività di migrazione multithread a pieno carico verso un endpoint di destinazione Timestream con queste impostazioni di attività:
+ `MaxFullLoadSubTasks`: imposta questa opzione per indicare il numero massimo di tabelle da caricare in parallelo. DMS carica ogni tabella nella tabella di destinazione Amazon Timestream corrispondente utilizzando una sottoattività dedicata. Il valore predefinito è 8; il valore il massimo è 49.
+ `ParallelLoadThreads`— Usa questa opzione per specificare il numero di thread da utilizzare per caricare ogni tabella nella relativa tabella di destinazione Amazon Timestream. AWS DMS Il valore massimo per una destinazione Timestream è 32. Puoi chiedere che questo limite massimo venga aumentato.
+ `ParallelLoadBufferSize`: utilizza questa opzione per specificare il numero massimo di record da archiviare nel buffer usato dai thread di caricamento parallelo per caricare i dati nella destinazione Amazon Timestream. Il valore predefinito è 50. Il valore massimo è 1.000. Utilizzare questo parametro con `ParallelLoadThreads`; `ParallelLoadBufferSize` è valido solo quando è presente più di un thread.
+ `ParallelLoadQueuesPerThread`: utilizza questa opzione per specificare il numero di code a cui accede ogni thread simultaneo per eliminare i record di dati dalle code e generare un carico batch per la destinazione. Il valore di default è 1. Tuttavia, per le destinazioni Amazon Timestream con varie dimensioni del payload, l'intervallo valido è compreso tra 5 e 512 code per thread.

## Impostazioni attività di carico CDC multithread
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

Per promuovere le prestazioni del CDC, AWS DMS supporta le seguenti impostazioni delle attività:
+ `ParallelApplyThreads`— specifica il numero di thread simultanei che vengono AWS DMS utilizzati durante un caricamento CDC per inviare i record di dati a un endpoint di destinazione Timestream. Il valore predefinito è 0 e il valore massimo è 32.
+ `ParallelApplyBufferSize`: specifica il numero massimo di record da archiviare in ogni coda di buffer per eseguire il push dei thread simultanei a un endpoint di destinazione Timestream durante un carico CDC. Il valore predefinito è 100 e il valore massimo è 1.000. Utilizzare questa opzione quando `ParallelApplyThreads` specifica più di un thread. 
+ `ParallelApplyQueuesPerThread`: specifica il numero di code a cui ogni thread accede per eliminare i record di dati dalle code e generare un carico in batch per un endpoint Timestream durante la CDC. Il valore predefinito è 1 e il valore massimo è 512.

## Impostazioni dell'endpoint quando si utilizza Timestream come destinazione per AWS DMS
<a name="CHAP_Target.Timestream.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni di endpoint per configurare il database di destinazione Timestream in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintassi JSON. `--timestream-settings '{"EndpointSetting": "value", ...}'`

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con Timestream come destinazione.

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

## Creazione e modifica di un endpoint di destinazione Amazon Timestream
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

Dopo aver creato un ruolo IAM e stabilito il set minimo di autorizzazioni di accesso, puoi creare un endpoint di destinazione Amazon Timestream AWS DMS utilizzando la console o `create-endpoint` utilizzando il comando [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)in, con la sintassi JSON. `--timestream-settings '{"EndpointSetting": "value", ...}'`

Negli esempi seguenti viene illustrato come creare o modificare un endpoint di destinazione Timestream mediante la AWS CLI.

**Comando per creare l'endpoint di destinazione 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,
}
```

**Comando per modificare l'endpoint di destinazione 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,
}
```

## Utilizzo della mappatura degli oggetti per la migrazione dei dati in un argomento Timestream
<a name="CHAP_Target.Timestream.ObjectMapping"></a>

AWS DMS utilizza regole di mappatura delle tabelle per mappare i dati dall'argomento Timestream di origine a quello di destinazione. Per mappare i dati a un argomento di destinazione, è necessario utilizzare una regola di mappatura delle tabelle denominata mappatura degli oggetti. La mappatura degli oggetti consente di definire il modo in cui i record di dati dell'origine vengono mappati ai record di dati pubblicati nell'argomento Timestream. 

Gli argomenti Timestream non dispongono di una struttura preimpostata oltre a una chiave di partizione.

**Nota**  
Non è necessario utilizzare la mappatura degli oggetti. È possibile utilizzare la normale mappatura delle tabelle per varie trasformazioni. Tuttavia, il tipo di chiave della partizione segue questi comportamenti predefiniti:   
La chiave primaria viene utilizzata come chiave di partizione per il pieno carico.
Se non vengono utilizzate le impostazioni delle attività di applicazione parallela, `schema.table` viene usato come chiave di partizione per la CDC.
Se vengono utilizzate le impostazioni delle attività di applicazione parallela, la chiave primaria viene utilizzata come chiave di partizione per CDC.

Per creare una regola di mappatura degli oggetti, è necessario impostare il parametro `rule-type` su `object-mapping`. Questa regola specifica il tipo di mappatura degli oggetti da utilizzare. Di seguito è riportata la struttura per la regola.

```
{
    "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 attualmente supporta `map-record-to-record` e `map-record-to-document` è l'unico valore valido per il parametro. `rule-action` `map-record-to-document`I valori `map-record-to-record` and specificano cosa AWS DMS fa per impostazione predefinita ai record che non sono esclusi dall'elenco degli `exclude-columns` attributi. Questi valori non influiscono in alcun modo sulle mappature degli attributi. 

Utilizza `map-record-to-record` per la migrazione da un database relazionale a un argomento Timestream. Questo tipo di regola utilizza il valore `taskResourceId.schemaName.tableName` del database relazionale come chiave di partizione nell'argomento Timestream e crea un attributo per ogni colonna del database di origine. Quando si utilizza`map-record-to-record`, per ogni colonna della tabella di origine non elencata nell'elenco `exclude-columns` degli attributi, AWS DMS crea un attributo corrispondente nell'argomento di destinazione. Questo attributo corrispondente viene creato indipendentemente dal fatto che tale colonna di origine venga utilizzata o meno in una mappatura degli attributi. 

Per comprendere il funzionamento di `map-record-to-record`, è opportuno esaminarne il comportamento in azione. Per questo esempio, supponiamo che tu stia iniziando con una riga di tabella del database relazionale con la struttura e i dati seguenti.


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

Per eseguire la migrazione di queste informazioni da uno schema denominato `Test` a un argomento Timestream, crea le regole per mappare i dati sull'argomento di destinazione. La regola seguente illustra la mappatura. 

```
{
    "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"
            }
        }
    ]
}
```

Dato un argomento Timestream e una chiave di partizione (in questo caso, `taskResourceId.schemaName.tableName`), il seguente esempio illustra il formato di record risultante per l'argomento di destinazione Timestream utilizzando i dati di esempio: 

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

## Limitazioni nell'utilizzo di Amazon Timestream come destinazione per AWS Database Migration Service
<a name="CHAP_Target.Timestream.Limitations"></a>

Quando si utilizza Amazon Timestream come destinazione si applicano le seguenti limitazioni:
+ **Dimensioni e timestamp:** Timestream utilizza le dimensioni e i timestamp dei dati di origine come chiave primaria composita e non consente di alterare questi valori. Ciò significa che se modifichi il timestamp o le dimensioni di un record nel database di origine, il database Timestream prova a creare un nuovo record. È quindi possibile che, se modifichi la dimensione o il timestamp di un record in modo che corrispondano a quelli di un altro record esistente, AWS DMS aggiorni i valori dell'altro record anziché creare un nuovo record o aggiornare il record precedente corrispondente.
+ **Comandi DDL:** la versione corrente dei AWS DMS soli supporti `CREATE TABLE` e `DROP TABLE` comandi DDL.
+ **Limitazioni relative ai record:** Timestream include delle limitazioni per i record, ad esempio la dimensione del record e la dimensione della misura. Per ulteriori informazioni, consultare [Quote](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) nella [Guida per gli sviluppatori di Amazon Timestream](https://docs.aws.amazon.com/).
+ **Eliminazione di record e valori nulli:** Timestream non supporta l'eliminazione di record. Per supportare la migrazione dei record eliminati dall'origine, AWS DMS cancella i campi corrispondenti nei record nel database di destinazione Timestream. AWS DMS **modifica i valori nei campi del record di destinazione corrispondente con **0** per i campi numerici, **null** per i campi di testo e false per i campi booleani.**
+ Timestream come destinazione non supporta origini diverse da database relazionali.
+ AWS DMS supporta Timestream come destinazione solo nelle seguenti regioni:
  + Stati Uniti orientali (Virginia settentrionale)
  + Stati Uniti orientali (Ohio)
  + Stati Uniti occidentali (Oregon)
  + Europa (Irlanda)
  + Europa (Francoforte)
  + Asia Pacifico (Sydney)
  + Asia Pacifico (Tokyo)
+ Timestream come destinazione non supporta l'impostazione di `TargetTablePrepMode` su `TRUNCATE_BEFORE_LOAD`. Ti consigliamo di utilizzare `DROP_AND_CREATE` per questa impostazione.

# Utilizzo di Amazon RDS for Db2 e IBM Db2 LUW come destinazione per AWS DMS
<a name="CHAP_Target.DB2"></a>

Puoi migrare i dati verso un Amazon RDS for Db2 o un database Db2 locale da un database Db2 LUW utilizzando (). AWS Database Migration Service AWS DMS

Per informazioni sulle versioni di Db2 LUW supportate come destinazione, consulta. AWS DMS [Obiettivi per AWS DMS](CHAP_Introduction.Targets.md)

Puoi utilizzare il protocollo Secure Sockets Layer (SSL) per crittografare le connessioni tra l'endpoint Db2 LUW e l'istanza di replica. Per ulteriori informazioni sull'utilizzo di SSL con un endpoint Db2 LUW, consulta [Utilizzo di SSL con AWS Database Migration Service](CHAP_Security.SSL.md).

## Limitazioni nell'utilizzo di Db2 LUW come destinazione per AWS DMS
<a name="CHAP_Target.DB2.Limitations"></a>

Le seguenti limitazioni si applicano quando si utilizza il database Db2 LUW come destinazione per. AWS DMS Per le limitazioni relative all'utilizzo di Db2 LUW come origine, consulta [Limitazioni nell'utilizzo di Db2 LUW come sorgente per AWS DMS](CHAP_Source.DB2.md#CHAP_Source.DB2.Limitations).
+ AWS DMS supporta Db2 LUW come destinazione solo quando la sorgente è Db2 LUW o Db2 for z/OS.
+ L'utilizzo di Db2 LUW come destinazione non supporta le repliche con la modalità LOB completa.
+ L'utilizzo di Db2 LUW come destinazione non supporta il tipo di dati XML nella fase di pieno carico. Questa è una limitazione dell'utilità IBM dbload. Per ulteriori informazioni, consulta [The dbload utility](https://www.ibm.com/docs/en/informix-servers/14.10?topic=utilities-dbload-utility) nella documentazione *IBM Informix Servers*.
+ AWS DMS tronca i campi BLOB con valori corrispondenti alle virgolette doppie («). Questa è una limitazione dell'utilità IBM dbload. 
+ AWS DMS non supporta l'opzione parallel full load durante la migrazione a un target Db2 LUW nella versione DMS 3.5.3. Questa opzione è disponibile a partire dalla versione DMS 3.5.4 o successiva.

## Impostazioni degli endpoint quando si utilizza Db2 LUW come destinazione per AWS DMS
<a name="CHAP_Target.DB2.ConnectionAttrib"></a>

È possibile utilizzare le impostazioni degli endpoint per configurare il database di destinazione Db2 LUW in modo simile a come si usano gli attributi aggiuntivi di connessione. Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il `create-endpoint` comando in [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintassi JSON. `--ibm-db2-settings '{"EndpointSetting": "value", ...}'`

La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con Db2 LUW come destinazione.


| Nome | Description | 
| --- | --- | 
|  `KeepCsvFiles`  |  Se impostato su true, AWS DMS salva tutti i file.csv nella destinazione Db2 LUW che sono stati utilizzati per replicare i dati. DMS utilizza questi file per l'analisi e la risoluzione dei problemi.  | 
|  `LoadTimeout`  |  La quantità di tempo (in millisecondi) prima delle operazioni di AWS DMS timeout eseguite da DMS sulla destinazione Db2. Il valore predefinito è di 1200 (20 minuti).  | 
|  `MaxFileSize`  |  Specifica la dimensione massima (in KB) dei file .csv utilizzati per il trasferimento dei dati a Db2 LUW.  | 
|  `WriteBufferSize`  |  La dimensione (in KB) del buffer di scrittura dei file in memoria utilizzato durante la generazione di file .csv sul disco locale nell'istanza di replica DMS. Il valore predefinito è 1024 (1 MB).  | 