翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 カタログに表示されます。