Snowflakeの接続診断ツール「SnowCD」を使ってみよう

2020.03.31

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

SnowflakeのPython Connectorを試していた際に、接続診断ツールとして「SnowCD」というツールがあることを知りました。今回はこの「SnowCD」を早速使ってみたいと思います。

前提

OSはUbuntuの18.04を利用しています。(WindowsのWSLです)

「SnowCD」とは?

SnowCD(Snowflake Connectivity Diagnostic Tool)は、その名の通りSnowflake用の接続診断ツールで、Snowflakeへの接続診断やトラブルシューティングに利用できるツール、とのことです。

ウェブインターフェースからSYSTEM$WHITELISTを実行してホワイトリストを取得します。なお、「AWS PrivateLink」または「Azure Private Link」を利用している場合にはSYSTEM$WHITELIST_PRIVATELINKを実行します。

SELECT SYSTEM$WHITELIST();

実行結果をクリックすると詳細ダイアログが表示されるので、「COPY」をクリックしてクリップボードにコピーします。

コピーした結果は、以下のように「whitelist.json」として保存します。なお、文字コードは「UTF-8」で保存しました。

whitelist.json

[{"type":"SNOWFLAKE_DEPLOYMENT","host":"xxx.snowflakecomputing.com","port":443},{"type":"OCSP_RESPONDER","host":"ocsp.xxx.amazontrust.com","port":80}]

また、結果を一覧形式で見たい場合には、下記のクエリで確認可能です。

select value:type as type,
       value:host as host,
       value:port as port
   from table(flatten(input => parse_json(system$whitelist())));

「SnowCD」をインストールする

ダウンロードとインストールをドキュメントに沿って行います。

今回はLinuxなので、Linux用のファイルをドキュメント内リンクからダウンロードします。また、Debian系のUbuntuを利用しているので、*.debファイルをダウンロードしました。Redhat系の場合は*.rpmが良いかと思います。

# ダウンロード
$ curl -O https://sfc-repo.snowflakecomputing.com/snowcd/linux/latest/snowflake-snowcd-1.0.2.x86_64.deb

# aptでインストール
$ sudo apt install ./snowflake-snowcd-1.0.2.x86_64.deb 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'snowflake-snowcd' instead of './snowflake-snowcd-1.0.2.x86_64.deb'
The following NEW packages will be installed:
  snowflake-snowcd
0 upgraded, 1 newly installed, 0 to remove and 156 not upgraded.
After this operation, 10.0 MB of additional disk space will be used.
Get:1 /home/ubuntu/snowcd/snowflake-snowcd-1.0.2.x86_64.deb snowflake-snowcd amd64 1.0.2 [5003 kB]
Selecting previously unselected package snowflake-snowcd.
(Reading database ... 38364 files and directories currently installed.)
Preparing to unpack .../snowflake-snowcd-1.0.2.x86_64.deb ...
Unpacking snowflake-snowcd (1.0.2) ...
Setting up snowflake-snowcd (1.0.2) ...

# バージョン確認
$ snowcd --version
snowcd version 1.0.2

簡単ですね。なお、この場合パッケージはsnowflake-snowcdとしてインストールされるので、アンインストール時には以下のようにアンインストールすることになります。

$ sudo apt remove snowflake-snowcd

「SnowCD」を実行する

では、さっそく先程用意したwhitelist.jsonを使って試してみましょう。

$ snowcd whitelist.json 
Performing 33 checks for 13 hosts
All checks passed

問題ないようですね。なお、詳細なオプションは以下のようです。

$ snowcd --help
The Snowflake Connectivity Diagnostic tool to diagnose network connectivity issue.

Usage:
  snowcd <path to input json file> [flags]

Examples:
snowcd test.json

Flags:
  -h, --help                   help for snowcd
      --logLevel string        log level (panic, fatal[default], error, warning, info, debug, trace) (default "fatal")
      --logPath string         Output directory for log. When not specified, no log is generated
      --printCertificates      print certificates for the whitelist, no checks are perform. Remember to specify proxy if you use it during check. (default false)
      --proxyHost string       host for http proxy. (When not specified, does not use proxy at all
      --proxyIsHTTPS           Is connection to proxy secure, i.e. https. (default false)
      --proxyPassword string   password for http proxy.(default empty)
      --proxyPort int          port for http proxy.(default 8080) (default 8080)
      --proxyUser string       user name for http proxy.(default empty)
  -t, --timeout int            timeout for each hostname's checks in seconds (default 5) (default 5)
      --version                version for snowcd

試しに、以下のように詳細ログを出力してみます。ログレベルとログファイルパスを指定して、ファイルにログを出力します。

$ snowcd whitelist.json --logLevel=trace --logPath=./snowcd.log
Performing 33 checks for 13 hosts
All checks passed

すると、こんな感じでログが出力されました。

time="2020-03-31T09:57:17+09:00" level=trace msg="ip addresses: [{xx.xxx.x.x }]" CheckType="DNS Check" Host=xxx.s3.amazonaws.com Port=443 Type=STAGE
(略)
time="2020-03-31T09:57:20+09:00" level=info msg="Check clear. No error presented." CheckType="HTTP checker" Host=xxx.s3.us-west-2.amazonaws.com Port=443 Type=SNOWSQL_REPO

なにか問題があった場合には、このようなログから原因解析が進められそうですね。

まとめ

以上、Snowflakeの接続診断ツール「SnowCD」の紹介でした。 Snowflakeへの接続に問題があった場合には、こちらのツールなどを活用して原因分析に役立てればと思います。

どなたかのお役に立てば幸いです。それでは!