Snowflake Cortex Analyst をプライベート環境（AWS PrivateLink等）で動作させる方法

## はじめに

この記事では，インターネット接続がないプライベート環境（AWS PrivateLink環境など）でSnowflake Cortex Analystを動作させる方法について説明する．

元記事「[Streamlit in Snowflake（SiS） でsemantic-model-generator とcortex-analyst と動作させる方法](https://qiita.com/mshdtksk/items/3359bb95971489219c37)」では，インターネット接続が前提となっていたが，セキュリティ要件により外部接続が制限された環境での実装方法を紹介する．

大まかな流れは元記事と同じであるが，**SnowflakeからGitHubを直接参照しない**点が異なる．

## プライベート環境での課題

通常のCortex Analystの実装では以下の外部リソースへのアクセスが必要であるが，プライベート環境では制限される：

- 外部リポジトリ（GitHub等）との連携
- Snowflakeの公開エンドポイント  
- CDNからの静的リソース

## 環境構成

### 前提条件

- AWS PrivateLink経由でSnowflakeに接続
- 必要なファイルを事前にローカル環境に配置済み

### 必要なファイル構成

```
project/
├── semantic-model-generator-main-local/
└── sfguide-getting-started-with-cortex-analyst-main-local/
```

## セットアップ手順

### 1. リポジトリのファイルの準備

プライベート環境用に準備されたリポジトリをクローンまたはダウンロードする：

```bash
# ローカル環境またはプライベートGitサーバーから取得
git clone <your-private-repo>/semantic-model-generator-main-local
git clone <your-private-repo>/sfguide-getting-started-with-cortex-analyst-main-local
```
または，以下からローカル環境にファイルを直接ダウンロードし，該当環境にファイル移送してもよい：

- https://github.com/mshdtksk/semantic-model-generator-main-local
- https://github.com/mshdtksk/sfguide-getting-started-with-cortex-analyst-main-local

### 2. セマンティックモデルの生成（テーブルのメタ情報を作成する処理の実装）
セマンティックモデル（テーブルのメタ情報を作成する処理）を実装する．

#### 2-1. 初期SQLの実行

`semantic-model-generator-main-local`内のファイルを使用する．

1. SnowparkのSQLシートで以下のSQLを実行する
2. `[YOUR_STREAM_DATABASE]`を構築環境に合わせて任意の値に置換する

**実行ファイル:** [sissetup_snowsightgit_local_1.sql](https://github.com/mshdtksk/semantic-model-generator-main-local/blob/main/sissetup_snowsightgit_local_1.sql)

![SQLの実行画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/32527552-48cf-47de-b1c5-5e2a8126f74f.png)

#### 2-2. ファイルのアップロード

[semantic-model-generator-main-local](https://github.com/mshdtksk/semantic-model-generator-main-local/tree/main)のファイルをSnowflakeの内部ステージにアップロードする．

:::note warn
ディレクトリ内のファイルは一度にアップロードできないため，**ディレクトリ単位**でフォルダーパスを指定してアップロードする必要がある．
:::

![ファイルアップロード画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/9fc2e90e-e2cc-4ecc-9738-87a92269cdc4.png)

#### 2-3. セットアップSQLの実行

SnowparkのSQLシートで以下のSQLを実行する：

**実行ファイル:** [sissetup_snowsightgit_local_2.sql](https://github.com/mshdtksk/semantic-model-generator-main-local/blob/main/sissetup_snowsightgit_local_2.sql)

:::note info
`[YOUR_STREAM_DATABASE]`を構築環境に合わせて置換する．
:::

![SQLの実行画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/d3146a41-bb44-4e91-b300-78bf1f24075f.png)


### 3. セマンティックモデル（テーブルのメタ情報）の作成
[元記事のテーブルのメタ情報を作成する処理](https://qiita.com/mshdtksk/items/3359bb95971489219c37#1-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E3%83%A1%E3%82%BF%E6%83%85%E5%A0%B1%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E5%87%A6%E7%90%86%E3%81%AE%E5%AE%9F%E8%A3%85)と同様の手順のため割愛する．


### 4. Cortex Analystアプリケーションの起動

`sfguide-getting-started-with-cortex-analyst-main-local`内のファイルを使用する．

#### 4-1. Snowflakeオブジェクトの作成

SnowparkのSQLシートで以下のSQLを実行する：

**実行ファイル:** [create_snowflake_objects_local.sql](https://github.com/mshdtksk/sfguide-getting-started-with-cortex-analyst-main-local/blob/main/create_snowflake_objects_local.sql)

:::note info  
`[YOUR_STREAM_DATABASE]`を構築環境に合わせて置換する．
:::

![SQLの実行画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/e06334ed-d96a-45bd-a006-ac33caf133a2.png)

#### 4-2. Streamlit権限の付与

作成したデータベースに対し，Streamlitの権限を付与する：

![権限付与画面1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/5d3957e9-2d54-4206-9672-14d143dbc098.png)

![権限付与画面2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/b3a19061-7d71-4948-af96-e2c16f4bdbd5.png)

#### 4-3. Streamlitアプリケーションの実行

SnowparkのStreamlitシートで以下のコードを実行する：

**実行ファイル:** [cortex_analyst_sis_demo_app_local.py](https://github.com/mshdtksk/sfguide-getting-started-with-cortex-analyst-main-local/blob/main/cortex_analyst_sis_demo_app_local.py)

:::note warn
**重要:** 25，26行目を先ほど作成したセマンティックモデルのyamlファイルパスに修正する必要がある．
:::

![Streamlitアプリ画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/8d94b9ea-2c20-4dcf-992c-dbae37551c58.png)

## まとめ

プライベート環境でのCortex Analystの構築方法について紹介した．

この構成により，**厳格なセキュリティ要件が求められる企業環境**でも，Snowflake Cortex Analystの自然言語データ分析機能を安全に活用することが可能である．

## 参考リンク

- [元記事："Streamlit in Snowflake（SiS）" でsemantic-model-generator とcortex-analyst と動作させる方法](https://qiita.com/mshdtksk/items/3359bb95971489219c37)
- [Semantic Model Generator (Private)](https://github.com/mshdtksk/semantic-model-generator-main-local)
- [Cortex Analyst Guide (Private)](https://github.com/mshdtksk/sfguide-getting-started-with-cortex-analyst-main-local)