1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

snow connection test がエラーになったとき、それが「認証の問題」なのか「ネットワークの問題」なのか分からず困った——という方向けの記事です。Snowflake 公式の接続診断ツール SnowCD を使い、認証情報なしでネットワーク層だけを先に切り分ける方法をまとめます。

私はデータ基盤の運用保守に携わっており、主にバッチ処理まわりの保守や追加開発を担っています。
シリーズ第1回「Snowflake CLI で並列接続を安全に動かすための実践ガイド」では、snow connection test を使った接続確認まで触れました。今回はその続編として、snow connection test がエラーになったときに 「認証の問題か、ネットワークの問題か」を切り分ける ための公式ツール SnowCD(Snowflake Connectivity Diagnostic Tool) をまとめます。

結論から言うと、私は snow connection test が落ちたときの一次切り分けに SnowCD を使っています。SnowCD は認証情報なしでネットワーク層(DNS・TCP・OCSP)だけを検査してくれるため、「そもそも経路が通っているのか」を先に確定できます。ここが通っていれば認証設定を、通っていなければファイアウォールやプロキシを疑う、という順序で原因を絞り込めます。

SnowCDとは

SnowCD は、Snowflake が公式に提供する接続診断ツールです。SYSTEM$ALLOWLIST() または SYSTEM$ALLOWLIST_PRIVATELINK() 関数が返すホスト名とポートの一覧をもとに、Snowflake への接続経路を一連のチェックで検査します。検査結果は「All checks passed(正常)」か、「どのチェックが失敗したか+対処の示唆」のいずれかで返ってきます(公式ドキュメント)。

公式ドキュメントでは、次のようなユースケースが挙げられています。

  • 自動デプロイスクリプトへの組み込み
  • Snowflake に接続するサービスをデプロイする前の事前チェック
  • 新しいマシンを立ち上げたときの環境チェック
  • 稼働中マシンへの定期チェック

なお SnowCD はステージ(一時データ置き場)への基本的な到達性は確認しますが、ステージには追加の認証が必要なため、HTTP レスポンスコードの厳密なチェックまでは行いません。公式も「SnowCD でステージへの到達を確認できたら、続けて PUT コマンドで実際にファイルを置けるか確認する」ことを推奨しています。SnowCD はあくまで一次切り分け、と捉えるのが正確です。

snow connection test との使い分け

観点 snow connection test SnowCD
目的 認証込みの疎通確認 ネットワーク層の診断
認証情報 必要 不要
主なチェック ログイン可否 DNS / TCP / OCSP などの経路到達性
実行環境 Snowflake CLI が必要 単体の実行ファイル
向いている場面 設定後の動作確認 インフラ起因の問題の切り分け

💡 私のルーティンは、snow connection test でエラーが出たら、それが認証の問題かネットワークの問題かを分けるために SnowCD を回す、という流れです。

ℹ️ なお snow connection test 自体にも、--enable-diag オプションで診断レポートを出力する機能があります(公式)。CLI が入っている環境ではこちらも併用できますが、本記事では「CLI に依存せず単体で経路だけを見たい」ケースを想定して SnowCD を扱います。

インストール

SnowCD は SnowCD Download ページ から OS 別のパッケージを入手します。手順は公式の SnowCD ドキュメント に準拠します(バージョン番号やチェックサムは配布ページの最新値に読み替えてください)。

Windows

  1. Download ページから Windows 用インストーラ(MSI)をダウンロードする。
  2. MSI を Windows インストーラーで実行する。
  3. インストール先のディレクトリ(snowcd.exe が置かれる場所)を環境変数 PATH に追加すると、snowcd コマンドが通ります。

macOSやLinuxなどは公式をご確認ください。

使い方の手順

Step 1:allowlist を取得してファイルに保存する

SnowCD は、Snowflake が返す接続先ホスト一覧(allowlist)を入力として受け取ります。公式の手順は「Web インターフェースで SELECT SYSTEM$ALLOWLIST(); を実行し、結果をファイル(例 allowlist.json)に保存する」です。

-- 通常環境
SELECT SYSTEM$ALLOWLIST();

-- PrivateLink 環境
SELECT SYSTEM$ALLOWLIST_PRIVATELINK();

私は自動化フローに寄せたいので、手元では snow コマンドで取得してそのままファイルに落としています(前回の記事の続きで snow を使っているため)。

snow sql -q "SELECT SYSTEM\$ALLOWLIST()" --format json \
  | jq -r '.[0]["SYSTEM$ALLOWLIST()"]' > allowlist.json

allowlist.json の中身は、公式ドキュメントの例ではこのような形式です(値はリダクト済み)。

[
  {"type": "STAGE", "host": "<storage_location>.s3.<region_id>.amazonaws.com", "port": 443},
  {"type": "SNOWSQL_REPO", "host": "<repository_name>.snowflakecomputing.com", "port": 443},
  {"type": "OUT_OF_BAND_TELEMETRY", "host": "<telemetry_subdomain>.snowflakecomputing.com", "port": 443},
  {"type": "OCSP_CACHE", "host": "ocsp.snowflakecomputing.com", "port": 80},
  {"type": "OCSP_RESPONDER", "host": "ocsp.digicert.com", "port": 80}
]

ℹ️ 入力は JSON のほか CSV / TSV 形式も受け付けます。Web UI の結果をダウンロードする際に CSV / TSV を選んでもかまいません。

Step 2:snowcd を実行する

snowcd allowlist.json

Windows では snowcd.exe allowlist.json のように実行します。

Step 3:結果を確認する

すべてのチェックが通った場合は、検査したホスト数・チェック数とともに All checks passed が表示されます。

Performing 30 checks on 12 hosts
All checks passed

失敗した場合は、失敗したチェックごとに対象ホスト・ポート・種別・失敗したチェック内容・エラー・対処の示唆が表示されます。公式ドキュメントの例は次の形式です。

Check for 1 hosts failed, display as follow:
==============================================
Host: www.google1.com
Port: 443
Type: SNOWFLAKE_DEPLOYMENT
Failed Check: DNS Check
Error: lookup www.google1.com: no such host
Suggestion: Check your configuration on DNS server

⚠️ All checks passed 以外が出た場合、その HostPort への経路がファイアウォールやプロキシで遮断されている可能性が高いです。表示されたホスト名・ポート・Suggestion をそのままインフラ担当に共有すると、確認依頼がスムーズになります。

PrivateLink 環境での注意点

⚠️ PrivateLink(AWS PrivateLink / Azure Private Link / Google Cloud Private Service Connect)を使っている場合は、必ず SYSTEM$ALLOWLIST_PRIVATELINK() を使ってください。通常の SYSTEM$ALLOWLIST() が返すのはパブリックエンドポイント向けのホストなので、PrivateLink 環境で使うと診断対象が実態とずれてしまいます。

SYSTEM$ALLOWLIST_PRIVATELINK() を使うと、SNOWFLAKE_DEPLOYMENTOCSP_CACHE のホストが privatelink.snowflakecomputing.com を含むプライベート用のドメインで返ってきます。つまり「診断したいのはプライベート経路なのに、パブリックのホストを検査してしまう」事故を避けられる、ということです。どちらの関数を使うべきかは、自分のアカウントがプライベート接続を使っているかどうかで判断します(SYSTEM$ALLOWLIST_PRIVATELINK の公式ドキュメント)。

実体験:プロキシ起因の接続不良を切り分けた話

最後に、私が実際に SnowCD で助けられたケースを紹介します。

本記事では Snowflake CLI を使った例で説明しましたが、別の場面で .NET ドライバーを使った接続がうまくいかない ことがありました。

SnowCD で確認したところ、複数のチェックが失敗しており、その内容から 原因がネットワーク環境、またはプロキシサーバー側にある と切り分けられました。結果的には、プロキシ経由の接続だったため、プロキシ関連の接続パラメータの設定が必要でした。

「はじめに」で書いたとおり、SnowCD で「ネットワークの問題」と先に確定できたおかげで、原因究明と解決まで素早くたどり着けました。アプリ側(ドライバー)の設定をいくら見直しても解決しなかった問題が、経路の診断で一気に前進した好例でした。

まとめ

  • SnowCD は 認証情報なしでネットワーク層(DNS / TCP / OCSP)だけを検査 する公式ツール。snow connection test が落ちたときの一次切り分けに向く。
  • 使い方は3ステップ。SYSTEM$ALLOWLIST() で allowlist を取得 → ②snowcd allowlist.json を実行 → ③結果を確認
  • PrivateLink 環境では SYSTEM$ALLOWLIST_PRIVATELINK() を使う。ここを間違えると診断対象がずれる。
  • SnowCD はあくまで一次切り分け。ステージは到達確認止まりなので、最後は PUT などで実利用を確認する。

「ネットワーク → 認証」の順に確定させていくと、原因不明の「繋がらない」に振り回される時間をかなり減らせます。

参考リンク(公式ドキュメント)

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?