カスタムサービス(MCP)をSnowflakeと連携させる方法:mcp-snowflake-service の活用
💡 はじめに
Snowflakeは強力なデータウェアハウスですが、カスタムアプリケーションやマイクロサービスをセキュアに連携させるためには、適切なプロキシやサービスレイヤーが必要です。
本記事では、GitHubで公開されている datawiz168/mcp-snowflake-service を利用して、Snowflakeにアクセスするカスタムサービスを簡単にセットアップする方法を、特に認証と接続の側面に焦点を当てて解説します。
🚀 ステップ 1: 前提条件と環境設定
このサービスはGo言語で記述されているため、Go環境が必要です。
1. リポジトリのクローンと環境準備
まず、GitHubリポジトリをローカルにクローンします。
承知いたしました。GitHubリポジトリ datawiz168/mcp-snowflake-service を使用して、SnowflakeのMCP(Multi-Cluster Protocol または Multi-Channel Protocol を指していると想定されますが、このリポジトリのコンテキストでは恐らくCustom/Micro-service Proxyの意図と解釈し、ここではカスタムサービスと表記します)サーバーを設定する方法を解説するブログ記事を作成します。
git clone https://github.com/datawiz168/mcp-snowflake-service.git
cd mcp-snowflake-service2. Snowflake接続情報の準備
サービスがSnowflakeに接続するためには、認証情報が必要です。このサービスは、セキュリティの観点から推奨される鍵ペア認証(Key Pair Authentication)をサポートしています。
- 秘密鍵の生成:
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
# パスフレーズを設定します- 公開鍵の生成:
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub- Snowflakeユーザーへの登録:公開鍵の内容をコピーし、Snowflakeのユーザーに割り当てます。
ALTER USER <your_user_name> SET RSA_PUBLIC_KEY='<rsa_key.pubの内容(-----BEGIN PUBLIC KEY-----と-----END PUBLIC KEY-----の間)>';🛠️ ステップ 2: サービスの設定ファイル作成
このサービスは、環境変数または設定ファイルを通じてSnowflakeへの接続情報を読み込みます。
1. 設定ファイル(config.json)の準備
プロジェクトルートに config.json を作成し、Snowflake接続情報と鍵ペア認証の情報を記述します。
{
"snowflake": {
"account_name": "<your_snowflake_account_name>",
"user": "<your_user_name>",
"role": "<role_to_use>",
"warehouse": "<warehouse_to_use>",
"database": "<default_database>",
"schema": "<default_schema>",
"key_config": {
"private_key_path": "./path/to/rsa_key.p8",
"private_key_passphrase": "<your_passphrase>"
}
},
"server": {
"port": "8080"
}
}📌 重要:
private_key_pathは、サービスが実行される環境からの相対パスまたは絶対パスを正確に指定してください。
⚙️ ステップ 3: サービスのビルドと実行
設定ファイルが準備できたら、Go言語でサービスをビルドし、実行します。
1. 依存関係のインストール
go mod tidy2. サービスのビルド
go build3. サービスの実行
ビルドされた実行ファイルを実行します。
./mcp-snowflake-service -config=config.jsonサービスが起動すると、指定されたポート(例: 8080)でリクエストを受け付ける状態になります。
🔍 ステップ 4: 動作確認(APIエンドポイントのテスト)
このカスタムサービスは、Snowflakeへのクエリ実行を抽象化したAPIエンドポイントを提供します。
1. サンプルクエリの実行(cURLを使用)
サービスが提供するクエリエンドポイントに対して、JSON形式でクエリを送信します。
リクエスト例:
curl -X POST http://localhost:8080/query \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT COUNT(*) FROM YOUR_DATABASE.YOUR_SCHEMA.YOUR_TABLE;"}'レスポンス:
サービスは、Snowflakeから取得したクエリ結果をJSON形式で返します。
{
"data": [
{
"COUNT(*)": 1000
}
],
"message": "Query executed successfully"
}


