Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.
Creare un’integrazione Zero-ETL per DynamoDB
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. Segui questo flusso generale per creare un’integrazione Zero-ETL da DynamoDB ad Amazon Redshift
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
-
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.
-
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 di origine DynamoDB: puoi scegliere una tabella DynamoDB. Il recupero point-in-time (PITR) deve essere abilitato nella 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.
-
Scegli le opzioni per Crittografia per crittografare l’integrazione. Per ulteriori informazioni, consulta Crittografia delle integrazioni DynamoDB con una chiave gestita dal cliente.
Quando crittografi l’integrazione, puoi anche aggiungere Contesti di crittografia aggiuntivi. Per ulteriori informazioni, consulta Contesto di crittografia.
-
Viene visualizzata una pagina di revisione in cui puoi scegliere Crea integrazione DynamoDB.
-
Viene visualizzata una pagina di avanzamento in cui puoi visualizzare lo stato di avanzamento delle varie attività per creare l’integrazione Zero-ETL.
-
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.
-
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.
-
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 Zero-ETL di Amazon DynamoDB con Amazon Redshift utilizzando AWS CLI, esegui il comando create-integration con le 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 l’utente o il ruolo (denominato “RoleA” nell’esempio) utilizzato per creare l’integrazione disponga delle autorizzazioni kms:CreateGrant e kms:DescribeKey per questa 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
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
Se specifichi una chiave KMS personalizzata anziché una Chiave di proprietà di AWS al momento della creazione di un’integrazione Zero-ETL di DynamoDB, la policy della chiave deve fornire al principale del servizio Amazon Redshift l’accesso 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.
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 kms:ViaService 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 nella Guida per gli sviluppatori di AWS Key Management Service.
Contesto di crittografia
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 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:
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 nella Guida per gli sviluppatori di AWS Key Management Service.