View a markdown version of this page

Amazon DataZone でデータソースとして Snowflake を接続する - Amazon DataZone

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon DataZone でデータソースとして Snowflake を接続する

Amazon DataZone は、サードパーティーのデータソースとして Snowflake をサポートしています。Snowflake を Amazon DataZone プロジェクトに接続すると、カタログは Snowflake データベースとスキーマのインデックスを作成し、Snowflake のクエリ履歴から列レベルの系統をキャプチャし、フェデレーションを通じて から Snowflake テーブルをクエリできます。このページでは、 CLI を使用して Snowflake AWS 接続を作成する方法について説明します。

前提条件

開始する前に、以下が設定されていることを確認します。

  • Amazon DataZone ドメインと Snowflake データをカタログ化するプロジェクト。「Amazon DataZone のドメインおよびユーザーアクセス」および「Amazon DataZone プロジェクトと環境」を参照してください。

  • カタログ化するデータベース、スキーマ、ウェアハウスでロールを作成し、権限を付与するアクセス許可を持つ Snowflake アカウント。

  • Amazon DataZone ドメイン AWS Secrets Manager と同じ AWS アカウントの へのアクセス。

  • から Snowflake データをクエリする場合、クエリスピル用の Amazon S3 バケット。

Snowflake ロールの作成、Snowflake 認証情報の保存 AWS Secrets Manager、Amazon DataZone プロジェクト環境 ID の検索、 の呼び出しの順序で手順を実行しますaws datazone create-connection

ステップ 1: Amazon DataZone の Snowflake ロールを作成する

Amazon DataZone は、作成して特定の権限を付与するロールを使用して Snowflake に接続します。ロールの付与は 4 つのカテゴリに分類されます。

  • メタデータ同期 — Amazon DataZone はテーブルとビューの構造を読み取り、カタログを入力します。

  • 系統同期 — Amazon DataZone は Snowflake の QUERY_HISTORY と ACCESS_HISTORY を読み取り、列レベルの系統を取得します。

  • クエリアクセス — からのクエリを含め、Amazon DataZone を介して発行されるクエリに必要です。

  • ウェアハウスの使用状況 — ロールが実行するクエリに必要です。

Snowflake で次のステートメントを実行し、プレースホルダーを値に置き換えます。

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>;
重要

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE は系統に必要です。これがないと、メタデータ同期は成功しますが、系統レコードはキャプチャされません。

ステップ 2: Snowflake 認証情報を に保存する AWS Secrets Manager

Amazon DataZone ドメインと同じ AWS アカウントで AWS Secrets Manager、 にシークレットを作成します。Amazon DataZone は、ユーザー名とパスワード、またはキーペアの 2 つの認証方法をサポートしています。

ユーザー名とパスワード認証には、次の JSON 本文を使用します。

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

キーペア認証には、次の JSON 本文を使用します。

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

Amazon DataZone がシークレットを検出できるように、シークレットにタグを付けます。両方のタグが必要です。

タグキー
AmazonDataZoneDomain Amazon DataZone ドメイン ID
AmazonDataZoneProject Amazon DataZone プロジェクト ID

シークレットの ARN を書き留めます。ステップ 4 create-connectionで に渡します。

ステップ 3: プロジェクト環境 ID を検索する

create-connection API コールには、接続が存在するプロジェクト環境の ID が必要です。これは、プロジェクトユーザーロール ARN から取得できます。

プロジェクトユーザーロール ARN は次のパターンに従います。

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

最後のアンダースコアの後の最後のセグメントは環境 ID です。たとえば、次のようにします。

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

58cjkfdsjfd は環境 ID です。これは、ステップ 4 --environment-identifierのように渡す値です。環境 ID は、プロジェクトのツール環境に対応します。

ステップ 4: Snowflake 接続を作成する

次の AWS CLI コマンドを実行し、プレースホルダーを値に置き換えます。

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

接続プロパティリファレンス

プロパティ 説明
HOST Snowflake アカウントの URL。
PORT Snowflake ポート。443 を使用します。
DATABASE カタログ化する Snowflake データベース。
WAREHOUSE Snowflake ウェアハウス Amazon DataZone は を使用してクエリを実行します。
SCHEMA カタログ化する Snowflake スキーマ。
ROLE_ARN プロジェクトユーザーロール ARN (ステップ 3 を参照)。
CATALOG_CASING_FILTER カタログ化された識別子の大文字と小文字の正規化を制御します。有効な値は、UPPERCASE_ONLY および LOWERCASE_ONLY です。省略すると、デフォルトで になりますUPPERCASE_ONLY
spill_bucket クエリスピルの S3 バケット名。から Snowflake をクエリするときに必要です。
spill_prefix スピルの S3 プレフィックス。形式は です<domain_id>/<project_id>/dev/sys/athena
authenticationType BASIC ユーザー名/パスワードまたはキーペア認証用。
secretArn ステップ 2 で作成したシークレットの ARN。
snowflakeRole ステップ 1 の Snowflake ロール名。
identityMapping.usernameAttribute EMAIL に設定します。

接続の検証

ドメイン ID と によって返される接続識別子aws datazone get-connectionを使用して を呼び出しますcreate-connection。最初のメタデータ同期の実行後、カタログ化された Snowflake テーブルがプロジェクトの Amazon DataZone カタログに表示されます。