

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Creare un’integrazione Zero-ETL per DynamoDB
<a name="zero-etl-setting-up.create-integration-ddb"></a>

Prima di creare un’integrazione Zero-ETL, esamina le considerazioni e i requisiti descritti in [Considerazioni sull'utilizzo delle integrazioni Zero-ETL con Amazon Redshift](zero-etl.reqs-lims.md). Segui questo flusso generale per creare un’integrazione Zero-ETL da DynamoDB ad Amazon Redshift

**Come replicare i dati di DynamoDB in Amazon Redshift con un’integrazione Zero-ETL**

1. Conferma le credenziali di accesso e concedi le autorizzazioni per utilizzare le integrazioni Zero-ETL con Amazon Redshift e DynamoDB. Per un esempio di policy IAM, consulta [Policy IAM per l’utilizzo delle integrazioni Zero-ETL di DynamoDB](#zero-etl-signin-iam-policy).

1. *Dalla console DynamoDB, [configura la tabella DynamoDB per point-in-time disporre di autorizzazioni per il ripristino (PITR), le politiche delle risorse, le politiche basate sull'identità e le autorizzazioni per le chiavi di crittografia, come descritto nella Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/RedshiftforDynamoDB-zero-etl.html#RedshiftforDynamoDB-zero-etl-prereqs) Developer Guide.*

1. Dalla console Amazon Redshift: [Creazione e configurazione di un data warehouse Amazon Redshift di destinazione](zero-etl-setting-up.rs-data-warehouse.md). 
   + Dalla nostra AWS CLI console Amazon Redshift:. [Attivazione della distinzione tra maiuscole e minuscole per il data warehouse](zero-etl-setting-up.case-sensitivity.md)
   + Dalla console Amazon Redshift: [Configurazione dell'autorizzazione per il data warehouse Amazon Redshift](zero-etl-using.redshift-iam.md).

1. Sulla console Amazon Redshift crea l’integrazione Zero-ETL come descritto più avanti in questo argomento.

1. Sulla console Amazon Redshift crea il database di destinazione nel data warehouse Amazon Redshift. Per ulteriori informazioni, consulta [Creazione di database di destinazione in Amazon Redshift](zero-etl-using.creating-db.md).

1. Sulla console Amazon Redshift esegui query sui dati replicati nel data warehouse Amazon Redshift. Per ulteriori informazioni, consulta [Esecuzione di query sui dati replicati in Amazon Redshift](zero-etl-using.querying-and-creating-materialized-views.md).

In questa fase crei un’integrazione Zero-ETL di Amazon DynamoDB con Amazon Redshift.

------
#### [ Amazon Redshift console ]

**Come creare un’integrazione Zero-ETL di Amazon DynamoDB con Amazon Redshift utilizzando la console Amazon Redshift**

1. Sulla console Amazon Redshift scegli **Integrazioni Zero-ETL**. Nel riquadro con l’elenco delle integrazioni Zero-ETL scegli **Crea integrazione Zero-ETL**, **Crea integrazione DynamoDB**.

1. Nelle pagine per creare un’integrazione, inserisci le informazioni sull’integrazione come segue:
   + Inserisci il **Nome dell’integrazione**: si tratta di un nome univoco che può essere utilizzato per fare riferimento all’integrazione.
   + Inserisci una **Descrizione**: descrive i dati che devono essere replicati dall’origine alla destinazione.
   + Scegli la tabella **DynamoDB Source** — È possibile scegliere una tabella DynamoDB. Point-in-timeil ripristino (PITR) deve essere abilitato sulla tabella. Vengono mostrate solo le tabelle con dimensioni fino a 100 tebibyte (TiB). La tabella DynamoDB di origine deve essere crittografata. L’origine deve inoltre avere una policy delle risorse con principali autorizzati e origini di integrazione. Se questa policy non è corretta, viene visualizzata l’opzione **Correggi per me**. 
   + Scegli il **Data warehouse Amazon Redshift** di destinazione: il data warehouse può essere un cluster con provisioning Amazon Redshift o un gruppo di lavoro Redshift serverless. Se il warehouse Amazon Redshift di destinazione si trova nello stesso account, puoi selezionare la destinazione. Se la destinazione si trova in un account diverso, specifichi l’**ARN del data warehouse Redshift**. La destinazione deve avere una policy delle risorse con i principali autorizzati e un’origine di integrazione e il parametro `enable_case_sensitive_identifier` impostato su true. Se non disponi delle policy delle risorse corrette sulla destinazione e la destinazione si trova nello stesso account, puoi selezionare l’opzione **Correggi per me** per applicare automaticamente le policy delle risorse durante il processo di creazione dell’integrazione. Se la destinazione si trova in un Account AWS diverso, devi applicare manualmente la policy delle risorse nel warehouse Amazon Redshift. Se il data warehouse Amazon Redshift di destinazione non ha l’opzione del gruppo di parametri corretta `enable_case_sensitive_identifier` configurata come `true`, puoi selezionare l’opzione **Correggi per me** per aggiornare automaticamente questo gruppo di parametri e riavviare il warehouse durante il processo di creazione dell’integrazione.
   + Inserisci fino a 50 **Chiavi** di tag e con un **Valore** facoltativo per fornire metadati aggiuntivi sull’integrazione. Per ulteriori informazioni, consulta [Assegnare tag alle risorse in Amazon Redshift](amazon-redshift-tagging.md).
   + Scegli le opzioni per **Crittografia** per crittografare l’integrazione. Per ulteriori informazioni, consulta [Crittografia delle integrazioni DynamoDB con una chiave gestita dal cliente](#zero-etl.create-encrypt).

     Quando crittografi l’integrazione, puoi anche aggiungere **Contesti di crittografia aggiuntivi**. Per ulteriori informazioni, consulta [Contesto di crittografia](#zero-etl.add-encryption-context).

1. Viene visualizzata una pagina di revisione in cui puoi scegliere **Crea integrazione DynamoDB**.

1. Viene visualizzata una pagina di avanzamento in cui puoi visualizzare lo stato di avanzamento delle varie attività per creare l’integrazione Zero-ETL.

1. Dopo avere creato e attivato l’integrazione, nella pagina dei dettagli dell’integrazione scegli **Connettiti al database**. Quando il data warehouse Amazon Redshift è stato creato per la prima volta, è stato creato anche un database. Devi connetterti a qualsiasi database nel data warehouse di destinazione per creare un altro database per l’integrazione. Nella pagina **Connettiti al database** determina se puoi utilizzare una connessione recente e scegli un metodo di **Autenticazione**. A seconda del metodo di autenticazione, inserisci le informazioni per connetterti a un database esistente nella destinazione. Queste informazioni di autenticazione possono includere il **Nome del database** esistente (in genere `dev`) e l’**Utente del database** specificato al momento della creazione del database con il data warehouse Amazon Redshift.

1. Dopo avere stabilito una connessione a un database, scegli **Crea un database dall’integrazione** per creare il database che riceve i dati dall’origine. Quando crei il database, fornisci l’**ID di integrazione**, il **Nome del data warehouse** e il **Nome del database**.

1. Dopo che lo stato di integrazione e il database di destinazione diventa `Active`, i dati iniziano a replicarsi dalla tabella DynamoDB alla tabella di destinazione. Quando aggiungi dati all’origine, questi vengono replicati automaticamente nel data warehouse Amazon Redshift di destinazione.

------
#### [ AWS CLI ]

Per creare un'integrazione Amazon DynamoDB zero-ETL con Amazon AWS CLI Redshift utilizzando, utilizza il comando con le `create-integration` seguenti opzioni:
+ `integration-name`: specifica un nome per l’integrazione.
+ `source-arn`: specifica l’ARN dell’origine DynamoDB.
+ `target-arn`: specifica l’ARN del namespace della destinazione del cluster con provisioning Amazon Redshift o del gruppo di lavoro Redshift serverless.

L’esempio seguente crea un’integrazione fornendo il nome dell’integrazione, l’ARN di origine e l’ARN di destinazione. L’integrazione non è crittografata.

```
aws redshift create-integration \
--integration-name ddb-integration \
--source-arn arn:aws:dynamodb:us-east-1:123456789012:table/books \
--target-arn arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222
          
{
    "Status": "creating",
    "IntegrationArn": "arn:aws:redshift:us-east-1:123456789012:integration:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
    "Errors": [],
    "ResponseMetadata": {
        "RetryAttempts": 0,
        "HTTPStatusCode": 200,
        "RequestId": "132cbe27-fd10-4f0a-aacb-b68f10bb2bfb",
        "HTTPHeaders": {
            "x-amzn-requestid": "132cbe27-fd10-4f0a-aacb-b68f10bb2bfb",
            "date": "Sat, 24 Aug 2024 05:44:08 GMT",
            "content-length": "934",
            "content-type": "text/xml"
        }
    },
    "Tags": [],
    "CreateTime": "2024-08-24T05:44:08.573Z",
    "KMSKeyId": "arn:aws:kms:us-east-1:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "AdditionalEncryptionContext": {},
    "TargetArn": "arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "IntegrationName": "ddb-integration",
    "SourceArn": "arn:aws:dynamodb:us-east-1:123456789012:table/books"
}
```

L’esempio seguente crea un’integrazione utilizzando una chiave gestita dal cliente per la crittografia. Prima di creare l’integrazione:
+ Crea una chiave gestita dal cliente (denominata “CMCMK” nell’esempio) nello stesso account (denominato “AccountA” nell’esempio) nella tabella DynamoDB di origine.
+ Assicurati che user/role (chiamato «roLEA» nell'esempio) venga utilizzato per creare i permessi `kms:DescribeKey` e i permessi di integrazione su questa `kms:CreateGrant` chiave KMS. 
+ Aggiungi la policy seguente alla policy della chiave.

```
{
    "Sid": "Enable RoleA to create grants with key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "RoleA-ARN"
    },
    "Action": "kms:CreateGrant",
    "Resource": "*",
    "Condition": {
        // Add "StringEquals" condition if you plan to provide additional encryption context
        // for the zero-ETL integration. Ensure that the key-value pairs added here match
        // the key-value pair you plan to use while creating the integration.
        // Remove this if you don't plan to use additional encryption context
        "StringEquals": {
            "kms:EncryptionContext:context-key1": "context-value1"
        },
        "ForAllValues:StringEquals": {
            "kms:GrantOperations": [
                "Decrypt",
                "GenerateDataKey",
                "CreateGrant"
            ]
        }
    }
},
{
    "Sid": "Enable RoleA to describe key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "RoleA-ARN"
    },
    "Action": "kms:DescribeKey",
    "Resource": "*"
},
{
    "Sid": "Allow use by RS SP",
    "Effect": "Allow",
    "Principal": {
        "Service": "redshift.amazonaws.com" 
           },
    "Action": "kms:CreateGrant",
    "Resource": "*"
}
```

```
aws redshift create-integration \
--integration-name ddb-integration \
--source-arn arn:aws:dynamodb:us-east-1:123456789012:table/books \
--target-arn arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222 \
--kms-key-id arn:aws:kms:us-east-1:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE33333 \
--additional-encryption-context key33=value33  // This matches the condition in the key policy.
          {
    "IntegrationArn": "arn:aws:redshift:us-east-1:123456789012:integration:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
    "IntegrationName": "ddb-integration",
    "SourceArn": "arn:aws:dynamodb:us-east-1:123456789012:table/books",
    "SourceType": "dynamodb",
    "TargetArn": "arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "Status": "creating",
    "Errors": [],
    "CreateTime": "2024-10-02T18:29:26.710Z",
    "KMSKeyId": "arn:aws:kms:us-east-1:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "AdditionalEncryptionContext": {
        "key33": "value33"
    },
    "Tags": []
}
```

------

## Policy IAM per l’utilizzo delle integrazioni Zero-ETL di DynamoDB
<a name="zero-etl-signin-iam-policy"></a>

Quando crei integrazioni Zero-ETL, le credenziali di accesso devono disporre dell’autorizzazione per le azioni di DynamoDB e Amazon Redshift e anche per le risorse coinvolte come origini e destinazioni dell’integrazione. Di seguito è riportato un esempio che illustra le autorizzazioni minime richieste.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListTables"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetResourcePolicy",
                "dynamodb:PutResourcePolicy",
                "dynamodb:UpdateContinuousBackups"
            ],
            "Resource": [
            "arn:aws:dynamodb:us-east-1:111122223333:table/my-ddb-table"
            ]
        },
        {
            "Sid": "AllowRedshiftDescribeIntegration",
            "Effect": "Allow",
            "Action": [
                "redshift:DescribeIntegrations"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowRedshiftCreateIntegration",
            "Effect": "Allow",
            "Action": "redshift:CreateIntegration",
            "Resource": "arn:aws:redshift:us-east-1:111122223333:integration:*"
        },
        {
            "Sid": "AllowRedshiftModifyDeleteIntegration",
            "Effect": "Allow",
            "Action": [
                "redshift:ModifyIntegration",
                "redshift:DeleteIntegration"
            ],
            "Resource": "arn:aws:redshift:us-east-1:111122223333:integration:<uuid>"
        },
        {
            "Sid": "AllowRedshiftCreateInboundIntegration",
            "Effect": "Allow",
            "Action": "redshift:CreateInboundIntegration",
            "Resource": "arn:aws:redshift:us-east-1:111122223333:namespace:<uuid>"
        }
    ]
}
```

------

## Crittografia delle integrazioni DynamoDB con una chiave gestita dal cliente
<a name="zero-etl.create-encrypt"></a>

Se specifichi una chiave KMS personalizzata anziché una Chiave di proprietà di AWS quando crei un'integrazione DynamoDB zero-ETL, la policy chiave deve fornire al servizio Amazon Redshift l'accesso principale all'azione. `CreateGrant` Inoltre deve consentire all’account o al ruolo del richiedente l’autorizzazione a eseguire le azioni `DescribeKey` e `CreateGrant`.

Le seguenti istruzioni di policy della chiave di esempio illustrano le autorizzazioni richieste nella policy. Alcuni esempi includono chiavi contestuali per ridurre ulteriormente l’ambito delle autorizzazioni.

### Istruzioni di policy della chiave di esempio
<a name="zero-etl.kms-sample-policy"></a>

La seguente istruzione di policy consente all’account o al ruolo del richiedente di recuperare informazioni su una chiave KMS.

```
{
   "Effect":"Allow",
   "Principal":{
      "AWS":"arn:aws:iam::{account-ID}:role/{role-name}"
   },
   "Action":"kms:DescribeKey",
   "Resource":"*"
}
```

La seguente istruzione di policy consente all’account o al ruolo del richiedente di aggiungere una concessione a una chiave KMS. La chiave di condizione [https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service) limita l’uso della chiave KMS alle richieste di Amazon Redshift.

```
{
   "Effect":"Allow",
   "Principal":{
      "AWS":"arn:aws:iam::{account-ID}:role/{role-name}"
   },
   "Action":"kms:CreateGrant",
   "Resource":"*",
   "Condition":{
      "StringEquals":{
         "kms:EncryptionContext:{context-key}":"{context-value}",
         "kms:ViaService":"redshift.{region}.amazonaws.com"
      },
      "ForAllValues:StringEquals":{
         "kms:GrantOperations":[
            "Decrypt",
            "GenerateDataKey",
            "CreateGrant"
         ]
      }
   }
}
```

La seguente istruzione di policy consente al principale del servizio Amazon Redshift di aggiungere una concessione a una chiave KMS.

```
{
   "Effect":"Allow",
   "Principal":{
      "Service":"redshift.amazonaws.com"
   },
   "Action":"kms:CreateGrant",
   "Resource":"*",
   "Condition":{
      "StringEquals":{
         "kms:EncryptionContext:{context-key}":"{context-value}",
         "aws:SourceAccount":"{account-ID}"
      },
      "ForAllValues:StringEquals":{
         "kms:GrantOperations":[
            "Decrypt",
            "GenerateDataKey",
            "CreateGrant"
         ]
      },
      "ArnLike":{
         "aws:SourceArn":"arn:aws:*:{region}:{account-ID}:integration:*"
      }
   }
}
```

Per ulteriori informazioni, consulta [Creazione di una policy delle chiavi](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html) nella *Guida per gli sviluppatori di AWS Key Management Service *.

## Contesto di crittografia
<a name="zero-etl.add-encryption-context"></a>

Quando crittografi un’integrazione Zero-ETL, puoi aggiungere coppie chiave-valore come **Contesto di crittografia aggiuntivo**. Consigliamo di aggiungere queste coppie chiave-valore per aggiungere ulteriori informazioni contestuali sui dati replicati. Per ulteriori informazioni, consultare [Contesto della crittografia](https://docs.aws.amazon.com//kms/latest/developerguide/encrypt_context.html) nella *Guida per gli sviluppatori di AWS Key Management Service *.

Amazon Redshift aggiunge le seguenti coppie di contesti di crittografia oltre a quelle che aggiungi tu:
+ `aws:redshift:integration:arn` - `IntegrationArn`
+ `aws:servicename:id` - `Redshift`

Ciò riduce il numero complessivo di coppie che puoi aggiungere da 8 a 6 e contribuisce al limite complessivo di caratteri del vincolo di concessione. Per ulteriori informazioni, consulta [Utilizzo dei vincoli di concessione](https://docs.aws.amazon.com/kms/latest/developerguide/create-grant-overview.html#grant-constraints) nella *Guida per gli sviluppatori di AWS Key Management Service *.