BeeX Tech blog

BeeXではクラウドネイティブアプリ開発、企業の基幹クラウド基盤構築、システム移行、運用保守を行っています。

【Snowflake】UbuntuにSnowflake CLIをインストールしよう!

はじめに

こんにちは。
BeeX エンタープライズソリューション本部 データインテリジェンス部の安倍です。

Snowflakeも他クラウドのようにCLIで操作できないかな…と思った方はいないでしょうか?
もちろん、SnowflakeもCLI操作ができます。

今回は、SnowflakeをCLIで操作できる「Snowflake CLI」についてご紹介します。
Snowflake CLIは、Cortex Code CLIの前提条件として必要になるので、Cortex Code CLIを使いたい方はぜひご確認ください。

環境

WSL2上のUbuntu 24.04.3

今回の手順

  • CLI接続に使うユーザの設定
  • Snowflake CLIのインストール
  • Snowflake CLIの設定
  • Snowflake CLIによるクエリ実行

CLI接続に使うユーザの設定

今回は、キーペア認証による接続を行います。
キーペア認証は、秘密鍵と公開鍵を使った認証方式です。
パスワードを設定しないため、ブルートフォース攻撃やパスワード流出のセキュリティリスクに対して一定の効果があります。
一方で、手元で秘密鍵を管理する必要があるため、秘密鍵の管理については十分に注意する必要があります。

キーペア認証では、最低でも2048ビットの RSA キーペアが必要となりますが複数の暗号化アルゴリズムに対応しているので、導入時に企業のセキュリティポリシーを確認するようにしてください。
今回は、ドキュメントに記載のあるコマンドラインを利用するため、2048ビットのRSAキーペアを作成します。

【キーペア認証に利用できる暗号化アルゴリズムはこちら】

キーペア認証とキーペアローテーション | Snowflake Documentation

キーペアの作成

Ubuntuでキーペアを作成します。 他に作成したキーペアがあったので、別ディレクトリを作成してそちらでキーペアを作成していきます。

【コマンド】

mkdir .snowflake_key
cd .snowflake_key/

2048ビットのRSAキーペアを作成して、権限を設定します。

作成と権限変更が完了したら、Snowflakeのユーザに公開鍵の内容を設定するために整形します。

【コマンド】

# 秘密鍵の作成
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out <秘密鍵の名前> -nocrypt

# 公開鍵の作成
openssl rsa -in <秘密鍵の名前> -pubout -out <公開鍵の名前>

# 秘密鍵と公開鍵の権限修正
chmod 400 <秘密鍵の名前/公開鍵の名前>

# 公開鍵の内容表示(整形)
cat <公開鍵の名前> | tr -d "\n" | sed "s/-----BEGIN PUBLIC KEY-----//g" | sed "s/-----END PUBLIC KEY-----//g"

Snowflakeで利用するユーザの作成

実際にSnowflakeを操作するときのユーザを作成し、公開鍵の内容を設定します。
ユーザが作成できたら、ユーザに適用する権限の設定を行います。

今回は、CLI用ユーザはSERVICEユーザとして作成しました。
Snowflakeでは、トライアル期間中を除き、PERSONユーザは2段階認証を設定する必要があります。
今回は検証目的として2段階認証を不要とするためSERVICEユーザとしていますが、利用用途や権限セットによっては2段階認証を行うべき状況もあるため、適切な設定を行ってください。

【クエリ】

-- ユーザを作成
CREATE USER <ユーザ名> TYPE = 'SERVICE' RSA_PUBLIC_KEY = '<整形した公開鍵の内容>';

-- ユーザにアタッチするロールを作成
CREATE ROLE <ロール名>;

-- ロールをユーザにアタッチ
GRANT ROLE <ロール名> TO <ユーザ名>;

-- デフォルトロールを設定
ALTER USER <ユーザ名> SET DEFAULT_ROLE = '<ロール名>';

-- デフォルトウェアハウスを設定
ALTER USER <ユーザ名> SET DEFAULT_WAREHOUSE= '<ウェアハウス名>';

-- デフォルトのデータベース(またはデータベース.スキーマ)を設定
ALTER USER <ユーザ名> SET DEFAULT_NAMESPACE = '<データベース名/データベース名.スキーマ名>';

-- ウェアハウスの利用権限をロールに付与
GRANT USAGE ON WAREHOUSE <ウェアハウス名> TO ROLE <ロール名>;

-- データベースの管理者権限をロールに付与(検証のため管理者権限を付与していますが、実運用では正しい権限にしてください)
GRANT OWNERSHIP ON DATABASE <データベース名> TO ROLE <ロール名> REVOKE CURRENT GRANTS;

これでCLI接続に使うユーザの設定は完了です。

Snowflake CLIのインストール

Snowflake CLIのインストールを行います。
インストールは様々な方法で行うことができますが、今回はaptパッケージマネージャを利用してインストールします。

Snowflake CLI のインストール | Snowflake Documentation

こちらのSnowflake CLI リポジトリから、インストールしたい対象のパッケージのリンクをコピーします。 Snowflake Repository

今回は、こちらのバージョンを利用します。

wgetコマンドでパッケージをダウンロード後、apt installでSnowflake CLIをインストールします。

【コマンド】

# パッケージのダウンロード(ダウンロード対象は適宜変更してください)
wget https://sfc-repo.snowflakecomputing.com/snowflake-cli/linux_x86_64/3.15.0/snowflake-cli-3.15.0.x86_64.deb

# Snowflake CLIのインストール(パッケージ名は適宜変更してください)
sudo apt install snowflake-cli-3.15.0.x86_64.deb

これでSnowflake CLIのインストールは完了です。

Snowflake CLIの設定

Snowflake CLIの設定を行います。
接続情報を作成する際、アカウントロケーターを使った接続が必要になります。

Snowflakeに接続するためのクライアント、ドライバー、ライブラリ、またはサードパーティアプリケーションの構成 | Snowflake Documentation

アカウント識別子 | Snowflake Documentation

例えば、クラウドプラットフォームがAWS、リージョンは東京リージョンを利用している場合は以下の形式になります。

xy12345.ap-northeast-1.aws

SnowflakeのWebコンソールで以下のクエリを実行して情報を取得してください。

【クエリ】

SELECT CURRENT_ACCOUNT(), CURRENT_REGION();

接続情報の作成

Snowflakeに接続するための接続情報を作成します。
空欄にしているところは入力しなくても問題ないですが、もし必要な場合は設定してください。
なお、今回はキーペア認証を行うため「--authenticator SNOWFLAKE_JWT --private-key-file」を設定しています。

Snowflake接続の管理 | Snowflake Documentation

接続情報の作成ができたら、接続テストを行います。
接続情報が表示されればOKです。

デフォルトの接続情報とすることもできるので、今回はしておきます。

【コマンド】

# 接続情報の新規作成
snow connection add --connection-name <接続情報名> --authenticator SNOWFLAKE_JWT --private-key-file <秘密鍵のパス(絶対パスor相対パス)>

# 接続テスト
snow connection test -c <接続情報名>

# 認証情報のデフォルト設定
snow connection set-default <接続情報名>

なお、認証情報の削除は以下の通りです。

snow connection remove <接続情報名>

これでSnowflake CLIの設定は完了です。

Snowflake CLIによるクエリ実行

先ほど作成した接続情報を使って、クエリを実行します。
構文は非常にシンプルで以下の通りです。

snow sql -q "<SQL文>;"

SQL文は以下の通り複数記載することができます。

snow sql -q "<SQL1>; <SQL2>;"

今回の動作確認として、データベースの選択とスキーマの作成を実施してみます。

若干見にくいですが、無事成功しました! これで、Snowflake CLI を使ったクエリ実行は完了です。

まとめ

Snowflake CLIを活用して、ローカルからクエリを実行することでより様々な利用用途で活用ができるようになりました。
例えば、IDEなどと組み合わせて活用したり、CI/CDワークフローに活用したりすることができます。

Snowflakeは単純なデータウェアハウスというわけではなく、データ全体を取り扱う上で様々な機能を統合してよりデータを活用しやすい環境を整えることができる製品だと感じました。

おわりに

BeeXでは、SAPをはじめとした様々なデータソースに散在するデータを統合・活用するご支援をいたします。

データ活用に関するご相談がございましたら、お気軽にお問い合わせください。

お問い合わせはこちらから