View a markdown version of this page

Connect Snowflake en tant que source de données sur Amazon DataZone - Amazon DataZone

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connect Snowflake en tant que source de données sur Amazon DataZone

Amazon DataZone prend en charge Snowflake en tant que source de données tierce. Une fois que vous avez connecté Snowflake à un DataZone projet Amazon, le catalogue peut indexer vos bases de données et schémas Snowflake, capturer le lignage au niveau des colonnes à partir de l'historique des requêtes de Snowflake et vous permettre d'interroger les tables Snowflake via la fédération. Cette page explique comment créer une connexion Snowflake à l'aide de la CLI AWS .

Conditions préalables

Avant de commencer, vérifiez que les éléments suivants sont en place :

  • Un DataZone domaine Amazon et un projet dans lesquels vous souhaitez que les données Snowflake soient cataloguées. Consultez Domaines et accès utilisateur sur Amazon DataZone et DataZone Projets et environnements Amazon.

  • Un compte Snowflake, autorisé à créer des rôles et à accorder des privilèges dans la base de données, le schéma et l'entrepôt que vous souhaitez cataloguer.

  • Accès AWS Secrets Manager à depuis le même AWS compte que votre DataZone domaine Amazon.

  • Un compartiment Amazon S3 pour la diffusion des requêtes, si vous prévoyez d'interroger des données Snowflake à partir de.

Vous allez effectuer les étapes dans cet ordre : créer un rôle Snowflake, y stocker les informations d'identification Snowflake, AWS Secrets Manager rechercher l'ID d'environnement de votre DataZone projet Amazon, puis appeler. aws datazone create-connection

Étape 1 : créer un rôle Snowflake pour Amazon DataZone

Amazon DataZone se connecte à Snowflake à l'aide d'un rôle que vous créez et auquel vous accordez des privilèges spécifiques. Les subventions de rôle se répartissent en quatre catégories :

  • Synchronisation des métadonnées : Amazon DataZone lit la structure de vos tables et de vos vues pour alimenter le catalogue.

  • Synchronisation du lignage : Amazon DataZone lit QUERY_HISTORY et ACCESS_HISTORY de Snowflake pour en déduire le lignage au niveau des colonnes.

  • Accès aux requêtes : obligatoire pour les requêtes émises via Amazon DataZone, y compris depuis.

  • Utilisation de l'entrepôt : obligatoire pour toute requête exécutée par le rôle.

Exécutez les instructions suivantes dans Snowflake, en remplaçant les espaces réservés par vos valeurs :

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

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKEest nécessaire pour le lignage. Sans cela, la synchronisation des métadonnées réussit, mais aucun enregistrement de lignage n'est capturé.

Étape 2 : Stockez les informations d'identification Snowflake dans AWS Secrets Manager

Créez un secret dans AWS Secrets Manager, dans le même AWS compte que votre DataZone domaine Amazon. Amazon DataZone prend en charge deux méthodes d'authentification : nom d'utilisateur et mot de passe, ou paire de clés.

Pour l'authentification par nom d'utilisateur et mot de passe, utilisez le corps JSON suivant :

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

Pour l'authentification par paire de clés, utilisez le corps JSON suivant :

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

Marquez le secret pour qu'Amazon DataZone puisse le découvrir. Les deux balises sont obligatoires :

Clé de balise Value
AmazonDataZoneDomain Votre identifiant DataZone de domaine Amazon
AmazonDataZoneProject Votre identifiant de DataZone projet Amazon

Notez l'ARN du secret. Vous le transmettrez create-connection à l'étape 4.

Étape 3 : Trouvez l'ID d'environnement de votre projet

L'appel create-connection d'API nécessite l'ID de l'environnement de projet dans lequel réside la connexion. Vous pouvez le déduire de l'ARN du rôle utilisateur du projet.

L'ARN du rôle utilisateur du projet suit le modèle suivant :

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

Le dernier segment, après le dernier trait de soulignement, est l'ID d'environnement. Par exemple, dans :

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

58cjkfdsjfd correspond à l'ID de l'environnement. Il s'agit de la valeur à transmettre comme --environment-identifier à l'étape 4. L'ID d'environnement correspond à l'environnement Tooling de votre projet.

Étape 4 : Création de la connexion Snowflake

Exécutez la commande AWS CLI suivante, en remplaçant les espaces réservés par vos valeurs :

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

Référence des propriétés de connexion

Propriété Description
HOST URL de votre compte Snowflake.
PORT Le port de Snowflake. Utilisez 443.
DATABASE La base de données Snowflake à cataloguer.
WAREHOUSE L'entrepôt Snowflake qu'Amazon DataZone utilise pour exécuter des requêtes.
SCHEMA Le schéma Snowflake à cataloguer.
ROLE_ARN L'ARN du rôle utilisateur du projet (voir étape 3).
CATALOG_CASING_FILTER Contrôle la normalisation des cas pour les identifiants catalogués. Les valeurs valides sont UPPERCASE_ONLY et LOWERCASE_ONLY. En cas d'omission, la valeur par défaut est. UPPERCASE_ONLY
spill_bucket Nom du compartiment S3 pour le dépôt des requêtes. Obligatoire lors de la requête de Snowflake à partir de.
spill_prefix Préfixe S3 pour Spill, au format. <domain_id>/<project_id>/dev/sys/athena
authenticationType BASICpour l' username/password authentification par paire de clés.
secretArn L'ARN du secret créé à l'étape 2.
snowflakeRole Le nom du rôle Snowflake indiqué à l'étape 1.
identityMapping.usernameAttribute Définie sur EMAIL.

Vérification de la connexion

Appelez aws datazone get-connection avec votre identifiant de domaine et l'identifiant de connexion renvoyés parcreate-connection. Après la première exécution de synchronisation des métadonnées, les tables Snowflake cataloguées apparaissent dans le DataZone catalogue Amazon du projet.