

# Pré-requisitos para configurar uma integração ETL zero
<a name="zero-etl-prerequisites"></a>

Configurar uma integração entre a origem e o destino exige alguns pré-requisitos, como a configuração de perfis do IAM que o AWS Glue usa para acessar dados da origem e gravar no destino, e o uso de chaves do KMS para criptografar os dados no local intermediário ou de destino.

**Topics**
+ [Configurar recursos de origem](#zero-etl-setup-source-resources)
+ [Configurar recursos de destino](#zero-etl-setup-target-resources)
+ [Criar um data warehouse do Amazon Redshift](#zero-etl-setup-target-redshift-data-warehouse)
+ [Configurar uma VPC para sua integração ETL zero](#zero-etl-setup-vpc)
+ [Configurar uma integração entre contas ETL zero](#zero-etl-setup-cross-account-integration)

## Configurar recursos de origem
<a name="zero-etl-setup-source-resources"></a>

Execute as seguintes tarefas de configuração conforme necessário para sua origem.

### Configurar o perfil de origem
<a name="zero-etl-setup-source-role"></a>

Esta seção descreve como passar um perfil de origem para permitir que a integração ETL zero acesse sua conexão. Isso também é aplicável somente para origens SaaS.

**nota**  
Para restringir o acesso a apenas algumas conexões, primeiro você pode criar a conexão para obter o ARN da conexão. Consulte [Configurar uma origem para uma integração ETL zero](zero-etl-sources.md).

Crie um perfil que tenha permissões para que a integração acesse a conexão:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
							"arn:aws:glue:*:111122223333:catalog",
							"arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GlueActionBasedPermissions",
            "Effect": "Allow",
            "Action": [
                "glue:ListEntities",
                "glue:RefreshOAuth2Tokens"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

Política de confiança:

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

****  

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

------

## Configurar recursos de destino
<a name="zero-etl-setup-target-resources"></a>

Execute as tarefas de configuração a seguir conforme necessário para o destino de integração do data warehouse do Catálogo de Dados do AWS Glue ou do Amazon Redshift.

Para integrações com um destino de banco de dados do AWS Glue:
+ [Configurar um banco de dados do AWS Glue](#zero-etl-setup-target-resources-glue-database)
+ [Fornecer uma política de acesso baseado em recursos (RBAC) do catálogo](#zero-etl-setup-target-resources-rbac-policy)
+ [Criar um perfil do IAM de destino](#zero-etl-setup-target-resources-target-iam-role)

Para integrações com um destino de data warehouse do Amazon Redshift:
+ [https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html#zero-etl-setup-target-redshift-data-warehouse](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html#zero-etl-setup-target-redshift-data-warehouse)

### Configurar um banco de dados do AWS Glue
<a name="zero-etl-setup-target-resources-glue-database"></a>

Para integrações que usam um banco de dados do AWS Glue:

Para configurar um banco de dados de destino no Catálogo de Dados do AWS Glue com uma localização no Amazon S3:

1. Na página inicial do console do AWS Glue, selecione **Banco de dados** em Catálogo de Dados.

1. Escolha **Adicionar dados** no canto superior direito. Se você já criou um banco de dados, certifique-se de que o local com o URI do Amazon S3 esteja definido para o banco de dados.

1. Insira um nome e um **Local** (URI do Amazon S3). Observe que o local é necessário para a integração ETL zero. Clique em **Criar banco de dados** quando terminar.
**nota**  
O bucket do Amazon S3 deve estar na mesma região que o banco de dados do AWS Glue.

Para obter informações sobre como criar um novo banco de dados no AWS Glue, consulte [Introdução ao Catálogo de Dados do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/start-data-catalog.htm).

Você também pode usar a CLI [https://docs.aws.amazon.com/cli/latest/reference/glue/create-database.html](https://docs.aws.amazon.com/cli/latest/reference/glue/create-database.html) para criar o banco de dados no AWS Glue. Observe que o `LocationUri` em `--database-input` é obrigatório.

#### Otimizar tabelas Iceberg
<a name="zero-etl-common-setup-table-optimization"></a>

Depois que uma tabela é criada pelo AWS Glue no banco de dados de destino, é possível habilitar a compactação para acelerar as consultas no Amazon Athena. Para obter informações sobre como configurar os recursos (perfil do IAM) para compactação, consulte [Pré-requisitos da otimização de tabelas](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html).

Para obter mais informações sobre como configurar a compactação na tabela do AWS Glue criada pela integração, consulte [Otimizar tabelas do Iceberg](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html).

### Fornecer uma política de acesso baseado em recursos (RBAC) do catálogo
<a name="zero-etl-setup-target-resources-rbac-policy"></a>

Para integrações que usam um banco de dados do AWS Glue, adicione as seguintes permissões à política RBAC do catálogo para permitir integrações entre a origem e o destino.

**nota**  
Para integrações entre contas, tanto a política do perfil de Alice (usuária que está criando a integração) quanto a política de recursos do catálogo precisam permitir `glue:CreateInboundIntegration` no recurso. Para a mesma conta, uma política de recursos ou uma política de perfil que permita `glue:CreateInboundIntegration` no recurso é suficiente. Ambos os cenários ainda precisam permitir `glue.amazonaws.com` em `glue:AuthorizeInboundIntegration`.

Você pode acessar as **Configurações do catálogo** em **Catálogo de Dados**. Em seguida, forneça as permissões a seguir e preencha as informações que faltam.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
        	"arn:aws:iam::123456789012:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:CreateInboundIntegration"
      ],
      "Resource": [
      	"arn:aws:glue:us-east-1:111122223333:catalog",
				"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
      ],
      "Condition": {
        "StringLike": {
        "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/<table-name>"
        }
      }
    },
    {
      "Principal": {
        "Service": [
          "glue.amazonaws.com"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:AuthorizeInboundIntegration"
      ],
      "Resource": [
      	"arn:aws:glue:us-east-1:111122223333:catalog",
				"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
      ],
      "Condition": {
        "StringEquals": {
        "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/<table-name>"
        }
      }
    }
  ]
}
```

------

### Criar um perfil do IAM de destino
<a name="zero-etl-setup-target-resources-target-iam-role"></a>

Crie um perfil do IAM de destino com as permissões e relação de confiança a seguir.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "glue:GetDatabase"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "glue:CreateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:DeleteTable",
                "glue:UpdateTable",
                "glue:GetTableVersion",
                "glue:GetTableVersions",
                "glue:GetResourcePolicy"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/DatabaseName",
                "arn:aws:glue:us-east-1:111122223333:table/DatabaseName/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "AWS/Glue/ZeroETL"
                }
            },
            "Effect": "Allow"
        },
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

Adicione seguinte a política de confiança para permitir que o serviço AWS Glue assuma o perfil:

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

****  

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

------

## Criar um data warehouse do Amazon Redshift
<a name="zero-etl-setup-target-redshift-data-warehouse"></a>

Quando sua meta de integração ETL zero for um data warehouse do Amazon Redshift, crie o data warehouse se você ainda não tiver um. Para criar um grupo de trabalho do Amazon Redshift sem servidor, consulte [Criar um grupo de trabalho com um namespace](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-workgroups-create-workgroup-wizard.html). Para criar um cluster do Amazon Redshift, consulte [Criar um cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html).

O grupo de trabalho ou cluster de destino do Amazon Redshift deve ter o parâmetro `enable_case_sensitive_identifier` ativado para que a integração seja bem-sucedida. Para obter mais informações sobre como habilitar a diferenciação de maiúsculas e minúsculas, consulte [Ativar diferenciação de maiúsculas e minúsculas para seu data warehouse](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-setting-up.case-sensitivity.html) no guia de gerenciamento do Amazon Redshift.

Depois que a configuração do grupo de trabalho ou cluster do Amazon Redshift estiver concluída, você precisará configurar o data warehouse. Consulte [Conceitos básicos das integrações ETL zero](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html) no Guia de gerenciamento do Amazon Redshift para obter mais informações.

## Configurar uma VPC para sua integração ETL zero
<a name="zero-etl-setup-vpc"></a>

Para configurar uma VPC para sua integração ETL zero:

1. Vá para **VPC** > Suas VPCs e escolha **Criar VPC**.

   1. Selecione **VPC e mais**.

   1. Defina o nome da VPC.

   1. Configure o CIDR IPv4: 10.0.0.0/16.

   1. Defina o número de AZ como 1.

   1. Defina o número de sub-redes públicas e privadas como 1.

   1. Defina **Gateways NAT** como Nenhum.

   1. Defina **Endpoints da VPC** como Gateway do S3.

   1. Habilitar os nomes de host DNS e a resolução de DNS.

1. Vá para **Endpoints** e escolha **Criar endpoint**.

1. Crie endpoints para esses serviços na sub-rede privada da sua VPC (use o grupo de segurança padrão):

   1. com.amazonaws.us-east-1.lambda

   1. com.amazonaws.us-east-1.glue

   1. com.amazonaws.us-east-1.sts

Crie a conexão do AWS Glue:

1. Vá até **AWS Glue** > **Conexões de dados** e escolha **Criar conexão**.

1. Selecione **Rede**.

1. Selecione a VPC, a sub-rede (privada) e o grupo de segurança padrão que você criou.

### Configurar o perfil de destino para a VPC
<a name="zero-etl-setup-vpc-target-role"></a>

O perfil de destino deve ter essas permissões (além das outras permissões exigidas pelas integrações ETL zero):

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CustomerVpc",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags",
        "ec2:DescribeRouteTables",
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:CreateNetworkInterface",
        "ec2:DeleteNetworkInterface",
        "glue:GetConnection"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### Configurar as propriedades do recurso da perna de destino
<a name="zero-etl-setup-vpc-target-leg"></a>



Se estiver usando a CLI, defina as propriedades do recurso da perna de destino para o banco de dados do AWS Glue de destino que você criou. Passe o ARN do perfil de destino, bem como o nome da conexão do AWS Glue.

```
aws glue create-integration-resource-property \
--resource-arn arn:aws:glue:us-east-1:<account-id>:database/exampletarget \
--target-processing-properties '{"RoleArn" : "arn:aws:iam::<account-id>:role/example-role", "ConnectionName":"example-vpc-3"}' \
--endpoint-url https://example.amazonaws.com --region us-east-1
```

### Possíveis erros de clientes
<a name="zero-etl-setup-vpc-client-errors"></a>

A seguir estão os possíveis erros do cliente para uma integração configurada com uma VPC.


| A mensagem de erro | Ação necessária | 
| --- | --- | 
| O perfil fornecido não está autorizado a executar glue:GetConnection na conexão. Adicione essa permissão à política do perfil e aguarde a recuperação da integração. | Atualizar política de perfil | 
| O perfil fornecido não está autorizado a executar ec2:DescribeSubnets. Adicione essa permissão à política do perfil e aguarde a recuperação da integração. | Atualizar política de perfil | 
| O perfil fornecido não está autorizado a executar ec2:DescribeSecurityGroups. Adicione essa permissão à política do perfil e aguarde a recuperação da integração. | Atualizar política de perfil | 
| O perfil fornecido não está autorizado a executar ec2:DescribeVpcEndpoints. Adicione essa permissão à política do perfil e aguarde a recuperação da integração. | Atualizar política de perfil | 
| O perfil fornecido não está autorizado a executar ec2:DescribeRouteTables. Adicione essa permissão à política do perfil e aguarde a recuperação da integração. | Atualizar política de perfil | 
| O perfil fornecido não está autorizado a executar ec2:CreateTags. Adicione essa permissão à política do perfil e aguarde a recuperação da integração. | Atualizar política de perfil | 
| O perfil fornecido não está autorizado a executar ec2:CreateNetworkInterface. Adicione essa permissão à política do perfil e aguarde a recuperação da integração. | Atualizar política de perfil | 
| A sub-rede de conexão fornecida não contém um endpoint do S3 nem um gateway NAT gateway válido. Atualize a sub-rede e aguarde a recuperação da integração. | Atualizar endpoints da sub-rede da VPC | 
| Sub-rede de conexão não encontrada. Atualize a sub-rede de conexão e aguarde a recuperação da integração. | Atualize a conexão do AWS Glue | 
| Grupo de segurança da conexão não encontrado. Atualize o grupo de rede da conexão e aguarde a recuperação da integração. | Atualize a conexão do AWS Glue | 
| Não é possível conectar ao S3 via conexão de VPC fornecida. Atualize as configurações da sub-rede e aguarde a recuperação da integração. | Atualizar endpoints da sub-rede da VPC | 
| Não é possível conectar ao Lambda via conexão de VPC fornecida. Atualize as configurações da sub-rede e aguarde a recuperação da integração. | Atualizar endpoints da sub-rede da VPC | 

## Configurar uma integração entre contas ETL zero
<a name="zero-etl-setup-cross-account-integration"></a>

Para configurar uma integração entre contas ETL zero:

1. Configure uma política de recursos de destino conforme descrito em [Fornecer uma política de acesso baseado em recursos (RBAC) do catálogo](#zero-etl-setup-target-resources-rbac-policy). Certifique-se de que o perfil da conta de origem seja explicitamente permitido no recurso de destino.

1. Verifique se o perfil da conta de origem (a função usada para criar a integração) tem o seguinte:

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt123456789012",
               "Action": [
                   "glue:CreateInboundIntegration"
               ],
               "Effect": "Allow",
               "Resource": [
               	"arn:aws:glue:us-east-1:111122223333:catalog",
   							"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
               ]
           }
       ]
   }
   ```

------

1. Crie a integração conforme descrito em [Criar uma integração](zero-etl-common-integration-tasks.md#zero-etl-creating).