

# Integrar com as Tabelas do Amazon S3
<a name="glue-federation-s3tables"></a>

A integração do Catálogo de Dados do AWS Glue com as Tabelas do Amazon S3 permite descobrir, consultar e juntar tabelas do S3 com dados nos data lakes do Amazon S3 usando um único catálogo. Quando você integra as Tabelas do S3 ao Catálogo de Dados, o serviço cria uma estrutura de catálogo federado que mapeia os recursos das Tabelas do S3 em objetos do catálogo do AWS Glue:
+ Um bucket de tabela do S3 se torna um catálogo no Catálogo de Dados
+ Um namespace do S3 se torna um banco de dados do AWS Glue
+ Uma tabela do S3 se torna uma tabela do AWS Glue

## Controles de acesso
<a name="s3-tables-access-controls"></a>

O Catálogo de Dados oferece suporte a dois modos de controle de acesso para integração com as Tabelas do S3:
+ **Controle de acesso do IAM**: usa políticas do IAM para controlar o acesso às Tabelas do S3 e ao Catálogo de Dados. Nessa abordagem, você precisa de permissões do IAM nos recursos das Tabelas do S3 e nos objetos do Catálogo de Dados para acessar os recursos.
+ **Controle de acesso do AWS Lake Formation**: usa concessões do AWS Lake Formation, além de permissões do IAM do AWS Glue, para controlar o acesso às Tabelas do S3 por meio do Catálogo de Dados. Nesse modo, as entidades principais exigem permissões do IAM para interagir com o Catálogo de Dados, e as concessões do AWS Lake Formation determinam quais recursos do catálogo (bancos de dados, tabelas, colunas, linhas) a entidade principal pode acessar. Esse modo oferece suporte a controle de acesso de baixa granularidade (concessões em nível de banco de dados e em nível de tabela) e controle de acesso refinado (segurança em nível de coluna e nível de linha). Quando um perfil registrado é configurado e a venda de credenciais está habilitada, as permissões do IAM das Tabelas do S3 não são necessárias para a entidade principal, pois o AWS Lake Formation vende credenciais em nome da entidade principal usando o perfil registrado. O controle de acesso do AWS Lake Formation também oferece suporte à venda de credenciais para mecanismos de análise de terceiros. Para obter mais informações, consulte [Criar um catálogo de Tabelas do S3](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) no *Guia do desenvolvedor do AWS Lake Formation*.

É possível migrar entre os modos de controle de acesso à medida que seus requisitos evoluem.

## Hierarquia de catálogos para montagem automática
<a name="s3-tables-catalog-hierarchy"></a>

Quando você integra as Tabelas do S3 com o Catálogo de Dados usando o console de gerenciamento do Amazon S3, o console cria um catálogo federado chamado `s3tablescatalog` no Catálogo de Dados da sua conta nessa região da AWS. Esse catálogo federado atua como catálogo principal para todos os buckets de tabelas do S3 existentes e futuros nessa conta e região. A integração mapeia recursos de bucket da tabela do Amazon S3 na seguinte hierarquia:
+ **Catálogo federado**: `s3tablescatalog` (criado automaticamente)
+ **Catálogos secundários**: cada bucket de tabela do S3 se torna um catálogo secundário em `s3tablescatalog`
+ **Bancos de dados**: cada namespace do S3 em um bucket de tabela se torna um banco de dados
+ **Tabelas**: cada tabela do S3 em um namespace se torna uma tabela

Por exemplo, se você tiver um bucket de tabela do S3 chamado "analytics-bucket" com um namespace "sales" contendo uma tabela "transactions", o caminho completo no catálogo de dados seria: `s3tablescatalog/analytics-bucket/sales/transactions`

Essa hierarquia de quatro partes se aplica aos cenários da mesma conta em que as Tabelas do S3 e o catálogo de dados estão na mesma conta da AWS. Para cenários com várias contas, você monta manualmente buckets de tabelas do S3 individuais no Catálogo de Dados, o que cria uma hierarquia de três partes.

## Regiões com suporte
<a name="s3-tables-supported-regions"></a>

A integração das Tabelas do S3 com o Catálogo de Dados está disponível nas seguintes regiões da AWS:


| Código da região | Nome da região | 
| --- | --- | 
| us-east-1 | Leste dos EUA (Norte da Virgínia) | 
| us-east-2 | Leste dos EUA (Ohio) | 
| us-west-1 | Oeste dos EUA (N. da Califórnia) | 
| us-west-2 | Oeste dos EUA (Oregon) | 
| af-south-1 | África (Cidade do Cabo) | 
| ap-east-1 | Ásia-Pacífico (Hong Kong) | 
| ap-east-2 | Ásia-Pacífico (Taipei) | 
| ap-northeast-1 | Ásia-Pacífico (Tóquio) | 
| ap-northeast-2 | Ásia-Pacífico (Seul) | 
| ap-northeast-3 | Ásia-Pacífico (Osaka) | 
| ap-south-1 | Ásia-Pacífico (Mumbai) | 
| ap-south-2 | Ásia-Pacífico (Hyderabad) | 
| ap-southeast-1 | Ásia-Pacífico (Singapura) | 
| ap-southeast-2 | Ásia-Pacífico (Sydney) | 
| ap-southeast-3 | Ásia-Pacífico (Jacarta) | 
| ap-southeast-4 | Ásia-Pacífico (Melbourne) | 
| ap-southeast-5 | Ásia-Pacífico (Malásia) | 
| ap-southeast-6 | Ásia-Pacífico (Nova Zelândia) | 
| ap-southeast-7 | Ásia-Pacífico (Tailândia) | 
| ca-central-1 | Canadá (Central) | 
| ca-west-1 | Oeste do Canadá (Calgary) | 
| eu-central-1 | Europa (Frankfurt) | 
| eu-central-2 | Europa (Zurique) | 
| eu-north-1 | Europa (Estocolmo) | 
| eu-south-1 | Europa (Milão) | 
| eu-south-2 | Europa (Espanha) | 
| eu-west-1 | Europa (Irlanda) | 
| eu-west-2 | Europa (Londres) | 
| eu-west-3 | Europa (Paris) | 
| il-central-1 | Israel (Tel Aviv) | 
| mx-central-1 | México (Centro) | 
| sa-east-1 | América do Sul (São Paulo) | 

**Topics**
+ [Controles de acesso](#s3-tables-access-controls)
+ [Hierarquia de catálogos para montagem automática](#s3-tables-catalog-hierarchy)
+ [Regiões com suporte](#s3-tables-supported-regions)
+ [Pré-requisitos](s3tables-catalog-prerequisites.md)
+ [Habilitar a integração das Tabelas do S3 com o catálogo de dados](enable-s3-tables-catalog-integration.md)
+ [Adicionar bancos de dados e tabelas ao catálogo das Tabelas do S3](create-databases-tables-s3-catalog.md)
+ [Compartilhar objetos do catálogo das Tabelas do S3](share-s3-tables-catalog.md)
+ [Gerenciar a integração das Tabelas do S3](manage-s3-tables-catalog-integration.md)

# Pré-requisitos
<a name="s3tables-catalog-prerequisites"></a>

Antes de criar um catálogo federado para Tabelas do S3 no Catálogo de Dados do AWS Glue, certifique-se de que sua entidade principal do IAM (usuário ou função) tenha as permissões necessárias.

## Permissões obrigatórias do IAM
<a name="s3tables-required-iam-permissions"></a>

A entidade principal do IAM precisa das seguintes permissões para habilitar a integração das tabelas do S3:

**Permissões do AWS Glue**:
+ `glue:CreateCatalog`: necessário para criar o catálogo federado `s3tablescatalog`
+ `glue:GetCatalog`: necessário para visualizar detalhes do catálogo
+ `glue:GetDatabase`: necessário para visualizar namespaces do S3 como bancos de dados
+ `glue:GetTable`: necessário para visualizar tabelas do S3
+ `glue:passConnection`: concede à entidade principal responsável pela chamada o direito de delegar a conexão `aws:s3tables` ao serviço AWS Glue

**Permissões de tabelas do S3** (para controle de acesso do IAM):
+ `s3tables:CreateTableBucket`
+ `s3tables:GetTableBucket`
+ `s3tables:CreateNamespace`
+ `s3tables:GetNamespace`
+ `s3tables:ListNamespaces`
+ `s3tables:CreateTable`
+ `s3tables:GetTable`
+ `s3tables:ListTables`
+ `s3tables:UpdateTableMetadataLocation`
+ `s3tables:GetTableMetadataLocation`
+ `s3tables:GetTableData`
+ `s3tables:PutTableData`

## Exemplo de política do IAM
<a name="s3tables-iam-policy-example"></a>

A política do IAM a seguir fornece as permissões mínimas necessárias para permitir a integração das Tabelas do S3 com o catálogo de dados no modo IAM:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GlueDataCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:CreateCatalog",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:region:account-id:catalog/s3tablescatalog",
        "arn:aws:glue:region:account-id:database/s3tablescatalog/*/*",
        "arn:aws:glue:region:account-id:table/s3tablescatalog/*/*/*"
      ]
    },
    {
      "Sid": "S3TablesDataAccessPermissions",
      "Effect": "Allow",
      "Action": [
        "s3tables:GetTableBucket",
        "s3tables:GetNamespace",
        "s3tables:GetTable",
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": [
        "arn:aws:s3tables:region:account-id:bucket/*",
        "arn:aws:s3tables:region:account-id:bucket/*/table/*"
      ]
    }
  ]
}
```

# Habilitar a integração das Tabelas do S3 com o catálogo de dados
<a name="enable-s3-tables-catalog-integration"></a>

É possível habilitar a integração das Tabelas do Amazon S3 com o Catálogo de Dados do AWS Glue usando o console de gerenciamento ou a AWS CLI do Amazon S3. Quando você habilita a integração usando o console, a AWS cria um catálogo federado chamado `s3tablescatalog` que descobre e monta automaticamente todos os buckets de tabela do S3 em sua conta e região da AWS.

## Habilitar a integração das Tabelas do Amazon S3 com o console de gerenciamento do Amazon S3
<a name="enable-s3-tables-console"></a>

1. Abra o console do Amazon S3, em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets de tabela**.

1. Escolha **Criar bucket de tabela**.

1. Insira um **Nome do bucket de tabela** e marque a caixa de seleção **Habilitar integração**.

1. Escolha **Criar bucket de tabela**.

O Amazon S3 integrará automaticamente os buckets de tabela nessa região. Na primeira vez que você integra buckets de tabela em qualquer região, o Amazon S3 cria `s3tablescatalog` no catálogo de dados na região.

Depois que o catálogo é criado, todos os buckets de tabela do S3 em sua conta e região são montados automaticamente como catálogos secundários. É possível visualizar os bancos de dados (namespaces) e as tabelas navegando até o catálogo no Catálogo de Dados.

## Habilitar a integração das Tabelas do S3 com a AWS CLI
<a name="enable-s3-tables-cli"></a>

Use o comando `glue create-catalog` para criar o catálogo `s3tablescatalog`.

```
aws glue create-catalog \
  --name "s3tablescatalog" \
  --catalog-input '{
    "Description": "Federated catalog for S3 Tables",
    "FederatedCatalog": {
      "Identifier": "arn:aws:s3tables:region:account-id:bucket/*",
      "ConnectionName": "aws:s3tables"
    },
    "CreateDatabaseDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }],
    "CreateTableDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }]
  }'
```

Substitua *region* por sua região da AWS e *account-id* pelo ID da sua conta da AWS.

## Verificar a integração
<a name="verify-s3-tables-integration"></a>

Depois de criar o catálogo, você pode verificar se os buckets de tabela do S3 estão montados listando os catálogos secundários:

```
aws glue get-catalogs \
  --parent-catalog-id s3tablescatalog
```

# Adicionar bancos de dados e tabelas ao catálogo das Tabelas do S3
<a name="create-databases-tables-s3-catalog"></a>

Certifique-se de ter as permissões necessárias para listar e criar catálogos, bancos de dados e tabelas no catálogo de dados na sua região. Certifique-se de que a integração das Tabelas do S3 esteja habilitada em sua conta e região da AWS.

## Adicionar um banco de dados ao catálogo de Tabelas do S3
<a name="add-database-s3-tables-catalog"></a>

### Adicionar um banco de dados (Console)
<a name="add-database-s3-tables-console"></a>

1. Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home).

1. No painel de navegação à esquerda, selecione **Bancos de dados**.

1. Selecione **Adicionar banco de dados**.

1. Escolha **Glue Database no Catálogo federado de Tabelas do S3**.

1. Insira um nome exclusivo para o banco de dados.

1. Selecione o catálogo de destino que mapeia em um bucket de tabelas nas Tabelas do S3.

1. Escolha **Create Database (Criar banco de dados)**.

### Adicionar um banco de dados (AWS CLI)
<a name="add-database-s3-tables-cli"></a>

```
aws glue create-database \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-input '{"Name": "my-database"}'
```

## Adicionar uma tabela ao catálogo de Tabelas do S3
<a name="add-table-s3-tables-catalog"></a>

### Adicionar uma tag (console)
<a name="add-table-s3-tables-console"></a>

1. Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home).

1. No painel de navegação à esquerda, selecione **Tables (Tabelas)**.

1. Selecione o catálogo de Tabelas do S3 no menu suspenso do catálogo.

1. Escolha **Adicionar tabela**.

1. Insira um nome exclusivo para a tabela.

1. Confirme se o catálogo correto de Tabelas do S3 está selecionado na lista suspensa do catálogo.

1. Selecione o banco de dados na lista suspensa do banco de dados.

1. Insira o esquema da tabela inserindo um JSON ou adicionando cada coluna individualmente.

1. Escolha **Criar tabela**.

### Adicionar uma tabela (AWS CLI)
<a name="add-table-s3-tables-cli"></a>

```
aws glue create-table \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-name "my-database" \
  --table-input '{
    "Name": "my-table",
    "Parameters": {
      "classification": "",
      "format": "ICEBERG"
    },
    "StorageDescriptor": {
      "Columns": [
        {"Name": "id", "Type": "int", "Parameters": {}},
        {"Name": "val", "Type": "string", "Parameters": {}}
      ]
    }
  }'
```

# Compartilhar objetos do catálogo das Tabelas do S3
<a name="share-s3-tables-catalog"></a>

Ao usar o controle de acesso do IAM, você pode compartilhar objetos do catálogo das Tabelas do S3 com outros usuários usando links de recursos do AWS Glue para compartilhar a mesma conta. Para o compartilhamento entre contas, você pode compartilhar buckets de tabela do S3 com outra conta da AWS e o perfil do IAM ou o usuário na conta do destinatário pode criar um objeto de catálogo do AWS Glue usando o bucket de tabela compartilhado.

## Compartilhar na mesma conta usando links de recursos
<a name="share-s3-tables-resource-links"></a>

Os links de recursos permitem que você crie referências a bancos de dados do AWS Glue e tabelas no `s3tablescatalog` que aparecem em seu catálogo padrão do AWS Glue. Isso é útil para organizar o acesso aos dados ou criar agrupamentos lógicos de tabelas.

### Criar um link de recurso (console)
<a name="share-s3-tables-resource-link-console"></a>

1. Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. No painel de navegação, escolha **Catálogos**.

1. Na lista **Catálogo**, selecione **s3tablescatalog**.

1. Selecione a tabela que você deseja compartilhar no `s3tablescatalog`.

1. Escolha **Ações** e, em seguida, escolha **Criar link de recurso**.

1. Em **Nome do link de recurso**, insira um nome para o link de recurso.

1. Em **Banco de dados de destino**, selecione o banco de dados em que você deseja criar o link de recurso.

1. (Opcional) Em **Description (Descrição)**, insira uma descrição.

1. Escolha **Criar**.

O link de recurso aparece no banco de dados de destino e aponta para a tabela original em `s3tablescatalog`.

### Criar links de recursos (AWS CLI)
<a name="share-s3-tables-resource-link-cli"></a>

Crie um link de recurso de banco de dados:

```
aws glue create-database \
  --database-name "my-database-resource-link" \
  --database-input '{
    "Name": "sales_data_link",
    "TargetDatabase": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales"
    }
  }'
```

Crie um link de recurso de tabela:

```
aws glue create-table \
  --table-name "my-table-resource-link" \
  --table-input '{
    "Name": "sales_data_link",
    "TargetTable": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales",
      "Name": "transactions"
    }
  }'
```

# Gerenciar a integração das Tabelas do S3
<a name="manage-s3-tables-catalog-integration"></a>

## Habilitar AWS Lake Formation
<a name="manage-s3-tables-enable-lf"></a>

Você poderá habilitar AWS Lake Formation para seu catálogo de Tabelas do S3 quando quiser escalar seus requisitos de governança de dados. O AWS Lake Formation fornece concessões no estilo de banco de dados para gerenciar o acesso refinado, escalar permissões usando o acesso baseado em tags e conceder permissões com base nos atributos do usuário, como associações de grupos às suas tabelas nas Tabelas do S3.

Acesse o console de gerenciamento do AWS Lake Formation para habilitar AWS Lake Formation para seu catálogo de Tabelas do S3 no AWS Glue. Para obter mais informações, consulte [Criar um catálogo de Tabelas do S3](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) no *Guia do desenvolvedor do AWS Lake Formation*.

## Excluir integração das Tabelas do S3
<a name="manage-s3-tables-delete-integration"></a>

É possível excluir a integração das Tabelas do S3 removendo a integração do catálogo no Catálogo de Dados. Essa operação exclui somente os metadados no Catálogo de Dados, e não os recursos nas Tabelas do S3.

Certifique-se de ter as permissões necessárias para listar, editar e excluir objetos do catálogo no AWS Glue.

### Excluir integração (console)
<a name="delete-s3-tables-console"></a>

1. Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home).

1. No painel de navegação, escolha **Catálogos**.

1. Na lista **Catálogo**, selecione **s3tablescatalog**.

1. Selecione a opção **Excluir**.

1. Confirme se a exclusão do catálogo também exclui todos os objetos de catálogo associados no Catálogo de Dados.

1. Escolha **Excluir**.

### Excluir integração (AWS CLI)
<a name="delete-s3-tables-cli"></a>

```
aws glue delete-catalog \
  --region region \
  --catalog-id "s3tablescatalog"
```