☃️

Amazon QuicksightからSnowflakeに接続する

2023/06/26に公開

こんにちは! スターフェスティバルでインフラエンジニア/データ基盤エンジニアをやっております @koonagiです。

現在ラスベガスでSnowflake Summit 2023が開催中ですね!
日本でお留守番なので、Streamlit on Snowflakeなどの機能リリースをワクワク待ちながら、今回もSnowflakeに関してブログを書いていこうと思います。
来年は現地参加したい!!

https://www.snowflake.com/summit/?lang=ja

さて、本題ですが、最近Snowflake上のデータの可視化をするために、Amazon Quicksightを利用したので、連携方法や詰まりどころについて書いて行こうと思います!!
検証ブログとかだと、SYSADMINやACCOUNTADMINなど強い権限でアクセステストしていますが、本番利用を想定して必要最低限の権限でのアクセスにしてみました。

前提条件

  • Snowflake上のデータベース/スキーマ/テーブル/ウェアハウスが作成済みであること

やること

テーブルやウェアハウスが作成済みの状態だと、Amazon QuickSightからSnowflakeへ接続するために必要なことは大きく以下の2つです。

  • ① Amazon QuickSight用のロール & ユーザーの作成
  • ② Amazon Quicksight データソース作成

ステップとしては少ないのですが、意外とドキュメントが少なく詰まりました...

① Amazon QuickSight用のロール & ユーザーの作成

Snowflake上でAmazon QuickSight用のロールとユーザーを発行します。
作成方法はコンソールからポチポチすればできるので、以下を参考にしてみてください。
https://docs.snowflake.com/ja/user-guide/admin-user-management#user-roles

肝心のロールに付与する権限ですが、以下を想定して、最小限にするとテーブルの通りかなと思います。(より最小限の権限があれば教えてください🙇)

  • 特定のテーブルのみSELECTできる
  • ウェアハウスを自身で起動できる
アクセス付与先 必要な権限
データベース USAGE
スキーマ USAGE
テーブル SELECT
ウェアハウス USAGE/OPERATION

テーブルのSELECTをするためには、データベースやスキーマのUSAGE権限が必須なのに気が付かず、結構ハマりました。

https://docs.snowflake.com/ja/user-guide/security-access-control-privileges#table-privileges

Amazon Quicksight側でSnowflakeのキーペア認証がまだできないため、ユーザー名とパスワードが後から必要になるので、ユーザー作成時に控えておいてください。

"超"ハマりどころ

各ユーザーにはデフォルトロールの設定があるのですが、デフォルトロールがAmazon QuickSight用に作成したロールになっていることを確認してください!!!!
Amazon QuickSight側でロールを指定してSnowflakeに接続できないため、このデフォルトロールに指定されたロール権限でアクセスしにいきます。

# デフォルトロールの確認
DESC USER <ユーザー名>;
# デフォルトロールの変更
ALTER USER <ユーザー名> SET DEFAULT_ROLE = <ロール名>;

デフォルトロールの存在をしらなかったので、ロールにいくら権限を振ってもSnowflakeに接続できず以下のエラーが出ており、死ぬほど詰まりました😭

データベースで SQL 例外が生成されました。このエラーは、クエリのタイムアウト、リソース制約、クエリ前またはクエリ中の予期しない DDL 操作などのデータベースエラーが原因で発生します。データベース設定とクエリを確認して、もう一度試してください。

② Amazon Quicksight データソース作成

ユーザーが作成できたら、後はAmazon Quicksight上でデータセットを作成するだけです!

Amazon Quicksightにログインし、データセットの作成画面で、Snowflakeがあるので選択します。

後は項目を入力し、検証、データソースの作成で完了です!
今回はパブリックネットワークからのアクセスで設定しています。

アクセス付与先 必要な権限
データソース名 任意
接続タイプ パブリックネットワーク
データベースサーバー <組織名>-<接続名>.snowflakecomputing.com
データベース名 接続先のデータベース名
ウェアハウス 権限付与したウェアハウス名
ユーザー名 先程作成したユーザー名
パスワード 先程作成したユーザーのパスワード

組織名、接続名は、Snowflake上の以下の部分をクリックするとクリップボードに保存されます!

以上で、Amazon QuicksightからSnowflakeに接続については完了です!

ちなみに

Snowflakeの取り込み方法は、SPICEにしたほうがコスト的には良さそうです。直クエリだとフィルタをするだけでも、ウェアハウスが起動するので、ユーザー数が多い場合は結構ウェアハウスのコストがかさみそうです。

さいごに

デフォルトロールのところで、だいぶハマりましたが、なんとかSnowflake上のデータを可視化するところまで行くことができました。AWSを使っている会社さんだと、Quicksightを使っているところも多いと思うので、是非Snowflakeへの連携を試していただければと思います!

スタフェステックブログ

Discussion