はじめに
AWS GlueでSnowflakeと接続するために必要なことを確認したときの記録です。
前提
Snowflakeのアカウントを作成済みである必要があります。
ゴール
AWS Glue StudioでSnowflakeに接続できるノードを作成できるようになることです。
必要なこと
- 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の認証情報(ユーザー名、パスワード)を使用してシークレットを作成
AWS Glue StudioでソースノードとしてSnowflakeを指定して接続できることを確認する
-
Snowflake上でテーブル・データを準備
-
AWS Glue StudioでSnowflakeのノードを指定してアクセスする
注意点(つまづいたところ)
- GlueでSnowflakeの接続情報を設定するにあたって、入力するSnowflake URLが違っていたため接続できないということがありました。入力するべきURLは前述の補足説明の通りです。
- GlueからSecrets Managerにアクセスする権限がなく接続できないことがありました。GlueでSecrets Managerを使用するには、AWS Glue の IAM ロールにシークレット値を取得するアクセス許可を付与する必要があります。公式情報「AWS Secrets Manager への接続認証情報の保存」を参考に設定し解消しました。
まとめ
AWS Glue StudioでSnowflakeと接続するために必要なこと実施すれば、Snowflakeに接続できるノードを作成でき、Glueを使用してETLができるようになります。