0
0

AWS GlueでSnowflakeと接続するために必要なこと

Posted at

はじめに

AWS GlueでSnowflakeと接続するために必要なことを確認したときの記録です。

前提

Snowflakeのアカウントを作成済みである必要があります。

ゴール

AWS Glue StudioでSnowflakeに接続できるノードを作成できるようになることです。
image.png

必要なこと

- Snowflake上で以下を実施
    - ロール作成
    - ウェアハウスへのUSAGEアクセス権の付与
    - データベースへのUSAGEアクセス権の付与
    - スキーマへのアクセス権の付与
    - テーブルへの権限の付与
    - ユーザーの作成
    - ユーザーへのロールの付与
- AWSで以下を実施
    - Secrets ManagerでSnowflakeの認証情報(ユーザー名、パスワード)を使用してシークレットを作成

やってみた

Snowflake上で以下を実施
こちらのサイトがとてもわかりやすかったので参考にさせて頂きました。)

ロール作成(ここではロール名をGLUEJOB_ROLEとする)
CREATE ROLE GLUEJOB_ROLE;
ウェアハウスへのUSAGEアクセス権の付与(ここではウェアハウス名をCOMPUTE_WHとする)
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE GLUEJOB_ROLE;
データベースへのUSAGEアクセス権の付与(ここではデータベース名をMY_DATABASEとする)
GRANT USAGE ON DATABASE MY_DATABASE TO ROLE GLUEJOB_ROLE;
スキーマへのアクセス権の付与(ここではスキーマとしてPUBLICを使用する)
GRANT USAGE ON SCHEMA MY_DATABASE.PUBLIC TO ROLE GLUEJOB_ROLE;
GRANT CREATE TABLE ON SCHEMA MY_DATABASE.PUBLIC TO ROLE GLUEJOB_ROLE;
テーブルへの権限の付与
GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA PUBLIC TO ROLE GLUEJOB_ROLE;

※ 将来的に追加されるテーブルに対しても権限をつけたい場合は「GRANT 〜 ON FUTURE TABLES 〜」とする

ユーザーの作成(ここではユーザー名をGLUEJOB_OPERATORとする)
CREATE USER GLUEJOB_OPERATOR         -- 任意のユーザー名
    PASSWORD = '*******'             -- 任意のパスワード
    DEFAULT_ROLE = 'GLUEJOB_ROLE'    -- 任意のロール名
    DEFAULT_WAREHOUSE = 'COMPUTE_WH' -- 任意のウェアハウス名
    MUST_CHANGE_PASSWORD = FALSE;    -- 初期ログイン時にパスワード変更要求をするかどうか
ユーザーへのロールの付与
GRANT ROLE GLUEJOB_ROLE TO USER GLUEJOB_OPERATOR;

AWSで以下を実施

  • Secrets ManagerでSnowflakeの認証情報(ユーザー名、パスワード)を使用してシークレットを作成
    • 「新しいシークレットを保存する」を選択
      image.png

    • 「その他のシークレットのタイプ」を選択
      image.png

    • 「キー/値のペア」でsfUser、sfPasswordをキーとするペアを入力
      (sfUserはSnowflakeで作成したユーザー、sfPasswordはそのユーザーのパスワード)
      image.png

    • シークレットの名前を入力
      image.png
      (ローテーションスケジュール、ローテーション関数はデフォルトまたは任意の設定でOK)

AWS Glue StudioでソースノードとしてSnowflakeを指定して接続できることを確認する

  • Snowflake上でテーブル・データを準備

    • テーブルを作成
      image.png

    • データを準備
      image.png

  • Connectionを作成(図中右側のcreate a new connectionを選択)
    image.png

  • Snowflakeの接続情報を入力
    image.png

  • 補足:Snowflake URLはここ
    image.png

  • AWS Glue StudioでSnowflakeのノードを指定してアクセスする

    • Glueジョブを作成
      image.png

    • Snowflakeのノードを設定
      image.png

注意点(つまづいたところ)

  • GlueでSnowflakeの接続情報を設定するにあたって、入力するSnowflake URLが違っていたため接続できないということがありました。入力するべきURLは前述の補足説明の通りです。
  • GlueからSecrets Managerにアクセスする権限がなく接続できないことがありました。GlueでSecrets Managerを使用するには、AWS Glue の IAM ロールにシークレット値を取得するアクセス許可を付与する必要があります。公式情報「AWS Secrets Manager への接続認証情報の保存」を参考に設定し解消しました。

まとめ

AWS Glue StudioでSnowflakeと接続するために必要なこと実施すれば、Snowflakeに接続できるノードを作成でき、Glueを使用してETLができるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0