

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

# Amazon DataZone でデータソースとして Snowflake を接続する
<a name="snowflake-data-source"></a>

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

## 前提条件
<a name="snowflake-data-source-prerequisites"></a>

開始する前に、以下が設定されていることを確認します。
+ Amazon DataZone ドメインと Snowflake データをカタログ化するプロジェクト。「[Amazon DataZone のドメインおよびユーザーアクセス](working-with-domains-users.md)」および「[Amazon DataZone プロジェクトと環境](working-with-projects.md)」を参照してください。
+ カタログ化するデータベース、スキーマ、ウェアハウスでロールを作成し、権限を付与するアクセス許可を持つ 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 ロールを作成する
<a name="snowflake-data-source-step1"></a>

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
<a name="snowflake-data-source-step2"></a>

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 を検索する
<a name="snowflake-data-source-step3"></a>

`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 接続を作成する
<a name="snowflake-data-source-step4"></a>

次の 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"
        }
      }
    }'
```

### 接続プロパティリファレンス
<a name="snowflake-data-source-connection-properties"></a>


| プロパティ | 説明 | 
| --- | --- | 
| 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 に設定します。 | 

## 接続の検証
<a name="snowflake-data-source-verify"></a>

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