

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Criar uma integração ETL zero para o DynamoDB
<a name="zero-etl-setting-up.create-integration-ddb"></a>

Antes de criar uma integração ETL zero, analise as considerações e os requisitos descritos em [Considerações ao usar integrações ETL zero com o Amazon Redshift](zero-etl.reqs-lims.md). Siga esse fluxo geral para criar uma integração ETL zero do DynamoDB no Amazon Redshift

**Para replicar dados do DynamoDB para o Amazon Redshift com integração ETL zero**

1. Confirme que suas credenciais de login permitem que as permissões funcionem com integrações ETL zero com o Amazon Redshift e o DynamoDB. Para ver um exemplo de política do IAM, consulte [Política do IAM para trabalhar com integrações ETL zero do DynamoDB](#zero-etl-signin-iam-policy).

1. No console do DynamoDB, [configure sua tabela do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/RedshiftforDynamoDB-zero-etl.html#RedshiftforDynamoDB-zero-etl-prereqs) para ter recuperação para um ponto no tempo (PITR), políticas de recursos, políticas baseadas em identidade e permissões de chave de criptografia, conforme descrito no *Guia do desenvolvedor do Amazon DynamoDB*.

1. No console do Amazon Redshift: [Criar e configurar um data warehouse do Amazon Redshift de destino](zero-etl-setting-up.rs-data-warehouse.md). 
   + Na AWS CLI ou no console do Amazon Redshift: [Ative a diferenciação entre letras maiúsculas e minúsculas no data warehouse](zero-etl-setting-up.case-sensitivity.md).
   + No console do Amazon Redshift: [Configurar a autorização para o data warehouse do Amazon Redshift](zero-etl-using.redshift-iam.md).

1. No console do Amazon Redshift, crie a integração ETL zero conforme descrito mais adiante neste tópico.

1. No console do Amazon Redshift, crie o banco de dados de destino em seu data warehouse do Amazon Redshift. Para obter mais informações, consulte [Criar bancos de dados de destino no Amazon Redshift](zero-etl-using.creating-db.md).

1. No console do Amazon Redshift, consulte seus dados replicados no data warehouse do Amazon Redshift. Para obter mais informações, consulte [Consulta de dados replicados no Amazon Redshift](zero-etl-using.querying-and-creating-materialized-views.md).

Nesta etapa, você cria uma integração ETL zero do Amazon DynamoDB com o Amazon Redshift.

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

**Para criar uma integração ETL zero do Amazon DynamoDB com o Amazon Redshift usando o console do Amazon Redshift**

1. No console do Amazon Redshift, escolha **Integrações ETL zero**. No painel com a lista de integrações ETL zero, escolha **Criar integração ETL zero**, **Criar integração do DynamoDB**.

1. Nas páginas para criar uma integração, insira as respectivas informações a seguir:
   + Insira um **nome de integração**, que é um nome exclusivo que pode ser usado para referenciar sua integração.
   + Insira uma **descrição**, que descreve os dados que devem ser replicados da origem para o destino.
   + Escolha a **tabela de origem** do DynamoDB; uma tabela do DynamoDB pode ser escolhida. A recuperação para um ponto no tempo (PITR) precisa estar habilitada na tabela. Somente são mostradas tabelas com tamanho de até 100 tebibytes (TiB). A tabela de origem do DynamoDB precisa ser criptografada. A origem também precisa ter uma política de recursos com entidades principais e origens de integração autorizadas. Se a política não estiver correta, você verá a opção **Corrigir isso para mim**. 
   + Escolha o **data warehouse do Amazon Redshift** de destino: o data warehouse pode ser um cluster provisionado do Amazon Redshift ou um grupo de trabalho do Redshift sem servidor. Se o Amazon Redshift de destino estiver na mesma conta, você poderá selecionar o destino. Se o destino estiver em uma conta diferente, especifique o **ARN do data warehouse do Redshift**. O destino deve ter uma política de recursos com entidades principais e origem de integração autorizadas e o parâmetro `enable_case_sensitive_identifier` definido como verdadeiro. Se você não tiver as políticas de recursos corretas no destino e ele estiver na mesma conta, selecione a opção **Corrigir isso para mim** para aplicar automaticamente as políticas de recursos durante o processo de criação da integração. Se o destino estiver em uma Conta da AWS diferente, você precisará aplicar manualmente a política de recursos no warehouse do Amazon Redshift. Se seu data warehouse de destino do Amazon Redshift não tiver a opção correta do grupo de parâmetros `enable_case_sensitive_identifier` configurada como `true`, você poderá selecionar a opção **Corrigir isso para mim** para atualizar automaticamente esse grupo de parâmetros e reinicializar o warehouse durante o processo de criação da integração.
   + Insira até 50 **Chaves** de tag e com um **valor** opcional para fornecer metadados adicionais sobre a integração. Para obter mais informações, consulte [Marcar recursos no Amazon Redshift](amazon-redshift-tagging.md).
   + Escolha as opções de **Criptografia** para criptografar a integração. Para obter mais informações, consulte [Criptografar integrações do DynamoDB com uma chave gerenciada pelo cliente](#zero-etl.create-encrypt).

     Ao criptografar a integração, você também pode adicionar **Contextos de criptografia adicionais**. Para obter mais informações, consulte [Contexto de criptografia](#zero-etl.add-encryption-context).

1. É exibida uma página de revisão na qual você pode escolher **Criar integração do DynamoDB**.

1. É exibida uma página de progresso na qual você pode ver o progresso das várias tarefas para criar a integração ETL zero.

1. Depois que a integração for criada e ativada, na página de detalhes da integração, escolha **Conectar-se ao banco de dados**. Quando seu data warehouse do Amazon Redshift foi criado pela primeira vez, um banco de dados também foi criado. Você precisa se conectar a qualquer banco de dados em seu data warehouse de destino para criar outro banco de dados para a integração. Na página **Conectar-se ao banco de dados**, determine se você pode usar uma conexão recente e escolher um método de **Autenticação**. Dependendo do seu método de autenticação, insira as informações para se conectar a um banco de dados existente no destino. Essas informações de autenticação podem incluir o **Nome do banco de dados** existente (normalmente `dev`) e o **Usuário do banco de dados** especificado quando o banco de dados foi criado com o data warehouse do Amazon Redshift.

1. Depois de se conectar a um banco de dados, escolha **Criar banco de dados a partir da integração** para criar o banco de dados que recebe os dados da origem. Ao criar o banco de dados, você fornece a **ID de integração**, o **Nome do data warehouse** e o **Nome do banco de dados**.

1. Depois que o status da integração e o banco de dados de destino passarem a `Active`, será iniciada a replicação dos dados da tabela do DynamoDB para a tabela de destino. Conforme você adiciona dados à origem, eles são replicados automaticamente no data warehouse do Amazon Redshift de destino.

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

Para criar uma integração ETL zero do Amazon DynamoDB com o Amazon Redshift usando a AWS CLI, use o comando `create-integration` com as seguintes opções:
+ `integration-name`: especifique um nome para a integração.
+ `source-arn`: especifique o ARN de origem do DynamoDB.
+ `target-arn`: especifique o ARN do namespace do cluster provisionado do Amazon Redshift ou do destino do grupo de trabalho do Redshift sem servidor.

O exemplo a seguir cria uma integração fornecendo o nome da integração, o ARN de origem e o ARN de destino. A integração não é criptografada.

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

O exemplo a seguir cria uma integração usando uma chave gerenciada pelo cliente para criptografia. Antes de criar a integração:
+ Crie uma chave gerenciada pelo cliente (chamada “CMCMK” no exemplo) na mesma conta (chamada “AccountA” no exemplo) na tabela de origem do DynamoDB.
+ Certifique-se de que o usuário/perfil (chamado de “RoleA” no exemplo) esteja sendo usado para criar a integração tendo as permissões `kms:CreateGrant` e `kms:DescribeKey` nessa chave do KMS. 
+ Adicione o seguinte à política de chave.

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

------

## Política do IAM para trabalhar com integrações ETL zero do DynamoDB
<a name="zero-etl-signin-iam-policy"></a>

Ao criar integrações ETL zero, suas credenciais de login devem ter permissão nas ações do DynamoDB e do Amazon Redshift e também nos recursos envolvidos como origens e destinos da integração. Veja a seguir um exemplo que demonstra as permissões mínimas necessárias.

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

------

## Criptografar integrações do DynamoDB com uma chave gerenciada pelo cliente
<a name="zero-etl.create-encrypt"></a>

Se você especificar uma chave do KMS personalizada em vez de uma Chave pertencente à AWS ao criar uma Integração ETL zero do DynamoDB, a política de chave deverá fornecer à entidade principal do serviço Amazon Redshift um acesso à ação `CreateGrant`. Além disso, ela deve permitir que a conta ou o perfil do solicitante execute as ações `DescribeKey` e `CreateGrant`.

Os exemplos de declaração de política de chave a seguir demonstram as permissões necessárias em sua política. Alguns exemplos incluem chaves de contexto para reduzir ainda mais o escopo das permissões.

### Exemplos de declaração de política de chaves
<a name="zero-etl.kms-sample-policy"></a>

A declaração de política a seguir permite que a conta ou o perfil do solicitante recupere informações sobre uma chave do KMS.

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

A declaração de política a seguir permite que a conta ou o perfil do solicitante adicione uma concessão a uma chave do KMS. A chave de condição [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 o uso da chave do KMS para solicitações provenientes do 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"
         ]
      }
   }
}
```

A declaração de política a seguir permite que a entidade principal do serviço Amazon Redshift adicione uma concessão a uma chave do 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:*"
      }
   }
}
```

Para obter mais informações, consulte [Criar uma política de chave](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html) no *Guia do desenvolvedor do AWS Key Management Service*.

## Contexto de criptografia
<a name="zero-etl.add-encryption-context"></a>

Ao criptografar uma integração ETL zero, você pode adicionar pares de valores-chave como um **Contexto de criptografia adicional**. Talvez você queira adicionar esses pares de valores-chave para adicionar informações contextuais adicionais sobre os dados que estão sendo replicados. Para obter mais informações, consulte [Contexto de criptografia](https://docs.aws.amazon.com//kms/latest/developerguide/encrypt_context.html) no *Guia do desenvolvedor AWS Key Management Service*.

O Amazon Redshift adiciona os seguintes pares de contexto de criptografia, além dos adicionados por você:
+ `aws:redshift:integration:arn` - `IntegrationArn`
+ `aws:servicename:id` - `Redshift`

Isso reduz o número geral de pares que você pode adicionar de oito para seis e contribui com o limite geral de caracteres da restrição de concessão. Para ter mais informações, consulte [Using grant constraints](https://docs.aws.amazon.com/kms/latest/developerguide/create-grant-overview.html#grant-constraints) no *Guia do desenvolvedor do AWS Key Management Service*.