View a markdown version of this page

Connect Snowflake como fonte de dados na Amazon DataZone - Amazon DataZone

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 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

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 e DataZone Projetos e ambientes da Amazon.

  • 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 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

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 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

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

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

Ligue aws datazone get-connection com seu ID de domínio e o identificador de conexão retornado porcreate-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.