

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Connect Snowflake como fonte de dados na Amazon DataZone
<a name="snowflake-data-source"></a>

A Amazon DataZone oferece suporte ao Snowflake como fonte de dados terceirizada. Depois de conectar o Snowflake a um DataZone projeto da Amazon, o catálogo pode indexar seus bancos de dados e esquemas do Snowflake, capturar a linhagem em nível de coluna do histórico de consultas do Snowflake e permitir que você consulte tabelas do Snowflake por meio da federação. Esta página mostra como criar uma conexão com o Snowflake usando a CLI AWS .

## Pré-requisitos
<a name="snowflake-data-source-prerequisites"></a>

Antes de começar, confirme se o seguinte está em vigor:
+ Um DataZone domínio da Amazon e um projeto em que você deseja que os dados do Snowflake sejam catalogados. Consulte [Domínios e acesso de usuários na Amazon DataZone](working-with-domains-users.md) e [DataZone Projetos e ambientes da Amazon](working-with-projects.md).
+ Uma conta do Snowflake, com permissão para criar funções e conceder privilégios no banco de dados, no esquema e no depósito que você deseja catalogar.
+ Acesse AWS Secrets Manager na mesma AWS conta do seu DataZone domínio da Amazon.
+ Um bucket do Amazon S3 para derramamento de consultas, se você planeja consultar dados do Snowflake a partir de.

Você executará as etapas nesta ordem: criar uma função do Snowflake, armazenar as credenciais do Snowflake, AWS Secrets Manager encontrar o ID do ambiente do DataZone projeto da Amazon e ligar. `aws datazone create-connection`

## Etapa 1: criar uma função do Snowflake para a Amazon DataZone
<a name="snowflake-data-source-step1"></a>

A Amazon DataZone se conecta ao Snowflake usando uma função que você cria e à qual concede privilégios específicos. As bolsas de funções se enquadram em quatro categorias:
+ **Sincronização de metadados** — A Amazon DataZone lê a estrutura de suas tabelas e visualizações para preencher o catálogo.
+ **Sincronização de linhagem** — A Amazon DataZone lê QUERY\_HISTORY e ACCESS\_HISTORY do Snowflake para derivar a linhagem em nível de coluna.
+ **Acesso à consulta** — necessário para consultas emitidas pela Amazon DataZone, inclusive de.
+ **Uso do armazém** — necessário para qualquer consulta que a função execute.

Execute as seguintes declarações no Snowflake, substituindo os espaços reservados por seus valores:

```
CREATE ROLE <role_name>;

-- Metadata: database and schema access
GRANT USAGE ON DATABASE <database_name> TO ROLE <role_name>;
GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;

-- Metadata: table and view structure (no data access)
GRANT REFERENCES ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;
GRANT REFERENCES ON ALL VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;
GRANT REFERENCES ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;
GRANT REFERENCES ON FUTURE VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;

-- Lineage: access to QUERY_HISTORY and ACCESS_HISTORY
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE <role_name>;

-- Query access
GRANT SELECT ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;

-- Optional: include tables created after the role is granted
GRANT SELECT ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>;

-- Warehouse access
GRANT USAGE ON WAREHOUSE <warehouse_name> TO ROLE <role_name>;

-- Assign the role to the Snowflake user whose credentials DataZone will use
GRANT ROLE <role_name> TO USER <snowflake_username>;
```

**Importante**  
`GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE`é necessário para a linhagem. Sem isso, a sincronização de metadados é bem-sucedida, mas nenhum registro de linhagem é capturado.

## Etapa 2: Armazene as credenciais do Snowflake no AWS Secrets Manager
<a name="snowflake-data-source-step2"></a>

Crie um segredo na AWS Secrets Manager mesma AWS conta do seu DataZone domínio da Amazon. A Amazon DataZone oferece suporte a dois métodos de autenticação: nome de usuário e senha ou par de chaves.

Para autenticação de nome de usuário e senha, use este corpo JSON:

```
{
  "username": "<snowflake_username>",
  "password": "<snowflake_password>"
}
```

Para autenticação por par de chaves, use este corpo JSON:

```
{
  "sfUser": "<snowflake_username>",
  "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
}
```

Marque o segredo para que a Amazon DataZone possa descobri-lo. Ambas as tags são obrigatórias:


| Chave de tag | Valor | 
| --- | --- | 
| AmazonDataZoneDomain | Seu ID de DataZone domínio da Amazon | 
| AmazonDataZoneProject | Seu ID de DataZone projeto da Amazon | 

Anote o ARN do segredo. Você o passará para `create-connection` a Etapa 4.

## Etapa 3: Encontre o ID do ambiente do seu projeto
<a name="snowflake-data-source-step3"></a>

A chamada `create-connection` da API exige o ID do ambiente do projeto em que a conexão está localizada. Você pode derivar isso do ARN da função de usuário do projeto.

O ARN da função de usuário do projeto segue esse padrão:

```
arn:aws:iam::<account_id>:role/datazone_usr_role_<project_id>_<environment_id>
```

O segmento final, após o último sublinhado, é o ID do ambiente. Por exemplo, em:

```
arn:aws:iam::123456789012:role/datazone_usr_role_a1b2c3dfadsf_58cjkfdsjfd
```

`58cjkfdsjfd` é o ID do ambiente. Esse é o valor a ser passado como `--environment-identifier` na Etapa 4. O ID do ambiente corresponde ao ambiente de ferramentas do seu projeto.

## Etapa 4: criar a conexão Snowflake
<a name="snowflake-data-source-step4"></a>

Execute o seguinte comando da AWS CLI, substituindo os espaços reservados pelos seus valores:

```
aws datazone create-connection \
    --domain-identifier <domain_id> \
    --environment-identifier <environment_id> \
    --name "<connection_name>" \
    --description "<optional_description>" \
    --props '{
      "snowflakeProperties": {
        "connectivityProperties": {
          "connectionProperties": {
            "HOST": "<account>.snowflakecomputing.com",
            "PORT": "443",
            "DATABASE": "<database_name>",
            "WAREHOUSE": "<warehouse_name>",
            "SCHEMA": "<schema_name>",
            "ROLE_ARN": "<project_user_role_arn>",
            "CATALOG_CASING_FILTER": "UPPERCASE_ONLY"
          },
          "athenaProperties": {
            "spill_bucket": "<project_s3_bucket_name>",
            "spill_prefix": "<domain_id>/<project_id>/dev/sys/athena"
          },
          "authenticationConfiguration": {
            "authenticationType": "BASIC",
            "secretArn": "<secret_arn_from_step_2>"
          }
        },
        "snowflakeRole": "<role_name_from_step_1>",
        "identityMapping": {
          "usernameAttribute": "EMAIL"
        }
      }
    }'
```

### Referência de propriedades de conexão
<a name="snowflake-data-source-connection-properties"></a>


| Propriedade | Description | 
| --- | --- | 
| HOST | URL da sua conta do Snowflake. | 
| PORT | O porto Snowflake. Use 443. | 
| DATABASE | O banco de dados Snowflake para catalogar. | 
| WAREHOUSE | O armazém Snowflake que a Amazon DataZone usa para executar consultas. | 
| SCHEMA | O esquema Snowflake para catalogar. | 
| ROLE\_ARN | O ARN da função de usuário do projeto (consulte a Etapa 3). | 
| CATALOG\_CASING\_FILTER | Controla a normalização de casos para identificadores catalogados. Os valores válidos são UPPERCASE\_ONLY e LOWERCASE\_ONLY. Se omitido, o padrão é. UPPERCASE\_ONLY | 
| spill\_bucket | Nome do bucket S3 para vazamento de consultas. Obrigatório ao consultar o Snowflake em. | 
| spill\_prefix | Prefixo S3 para derramamento, no formato. <domain\_id>/<project\_id>/dev/sys/athena | 
| authenticationType | BASICpara nossa username/password autenticação por par de chaves. | 
| secretArn | O ARN do segredo criado na Etapa 2. | 
| snowflakeRole | O nome da função do Snowflake da Etapa 1. | 
| identityMapping.usernameAttribute | Definido como EMAIL. | 

## Verificando a conexão
<a name="snowflake-data-source-verify"></a>

Ligue `aws datazone get-connection` com seu ID de domínio e o identificador de conexão retornado por`create-connection`. Após a execução da primeira sincronização de metadados, as tabelas catalogadas do Snowflake aparecem no DataZone catálogo da Amazon para o projeto.