Snowflake CLI で Streamlit in Snowflake の GitHub Actions 経由でのデプロイを試してみた

Snowflake CLI で Streamlit in Snowflake の GitHub Actions 経由でのデプロイを試してみた

2026.01.08

はじめに

Snowflake CLI を使用し、Streamlit in Snowflake の GitHub Actions 経由のデプロイを試してみましたので、その内容を本記事でまとめます。

前提条件

作成する Streamlit アプリは、以下の記事の環境をそのまま使用しています。そのため、ローカルでのアプリ実行などはできる状態です。

https://dev.classmethod.jp/articles/streamlit-in-snowflake-contaner-runtime-snowflake-cli-deploy-try/

この時点でのディレクトリ構成は以下の通りです。

my_sis_app/
├── .keys/                   # ローカルのみ(Git管理しない)
├── .streamlit/              # ローカルのみ(Git管理しない)
│   └── secrets.toml
├── output/                  # 生成物
│   └── bundle/
├── pyproject.toml
├── snowcli.toml             # ローカルのみ(Git管理しない)
├── snowflake.yml
├── streamlit_app.py
└── yasuhara_streamlit_app.egg-info/  # 生成物

GitHub Actions に向けたリポジトリ準備

.gitignore を作成

検証開始時点では特に Git 管理していなかったので、まず.gitignoreを作成しました。

touch .gitignore

.gitignoreの内容は以下の通りです。

gitignore
# Secrets / keys 
.streamlit/secrets.toml
.keys/

# Local venv
.venv/

# Generated by Snowflake CLI / builds
output/
*.egg-info/

# Python cache
__pycache__/
*.pyc

# Snowflake CLI config 
snowcli.toml

.keys/.streamlit/secrets.tomlはローカル実行のための機密情報を含むため、Git では管理しない想定です。また output/*.egg-info/ は実行・デプロイ過程で生成されるファイルです。

ワークフロー用の Snowflake CLI 設定(config.toml)を作成

GitHub Actions から Snowflake CLI を実行するために、接続名だけを定義したconfig/config.tomlを作成します(認証情報は GitHub Secrets から環境変数から取得します)。

mkdir -p config

cat > config/config.toml << 'EOF'
default_connection_name = "workflow"

[connections.workflow]
EOF

作成したファイルの内容は以下の通りです。

config/config.toml
default_connection_name = "workflow"

[connections.workflow]

Git リポジトリを初期化

リポジトリを初期化します。

git init
git status

ローカルで初回コミットまで済ませます。

git add .gitignore config/ pyproject.toml snowflake.yml streamlit_app.py
git commit -m "Initial commit"

GitHub 側で新規リポジトリを作成し、リモートリポジトリとして設定

GitHub 上で新規リポジトリを作成した後、表示された URL を origin として登録します。

git remote add origin git@github.com:<ユーザー>/<リポジトリ名>.git

main ブランチを push します。

git push -u origin main

Snowflake 側:GitHub Actions 用のサービスユーザーを作成

デプロイは GitHub Actions 経由で行うため、Snowflake 側に サービスユーザーを作成し、キーペア認証を設定します。ロールは前提条件の記事で作成済みのものを使用しています。

USE ROLE USERADMIN;

CREATE OR REPLACE USER yasuhara_git_user
    DEFAULT_ROLE = yasuhara_st_creator
    DEFAULT_SECONDARY_ROLES = ()
    TYPE = SERVICE;

GRANT ROLE yasuhara_st_creator TO USER yasuhara_git_user;

ALTER USER yasuhara_git_user SET RSA_PUBLIC_KEY = 'MII・・・';

GitHub Actions の実行元 IP からのみアクセスを許可したいため、ネットワークポリシーを設定します。

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE NETWORK POLICY yasuhara_github_actions_network_policy
  ALLOWED_NETWORK_RULE_LIST = ('SNOWFLAKE.NETWORK_SECURITY.GITHUBACTIONS_GLOBAL');

-- ポリシーをユーザーレベルで適用
ALTER USER yasuhara_git_user SET NETWORK_POLICY = yasuhara_github_actions_network_policy;

GitHub 側:Secrets を追加

GitHub Actions から Snowflake CLI の認証に使用する情報を GitHub Secrets に登録します。今回は以下を登録しました。

  • SNOWFLAKE_ACCOUNT
  • SNOWFLAKE_USER
  • SNOWFLAKE_PRIVATEKEY

image

GitHub Actions:ワークフローファイルを追加

リポジトリ直下に .github/workflows を作成し、デプロイ用ワークフローを追加します。

mkdir -p .github/workflows
code .github/workflows/deploy_streamlit_app.yml

ワークフローファイルの内容は以下のようにしました。最低限、Streamlit のデプロイのみを行う構成です。

.github/workflows/deploy_streamlit_app.yml
name: Deploy Streamlit App to Snowflake

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  deploy-to-snowflake:
    runs-on: ubuntu-latest

    env:
      SNOWFLAKE_CONNECTIONS_WORKFLOW_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
      SNOWFLAKE_CONNECTIONS_WORKFLOW_USER: ${{ secrets.SNOWFLAKE_USER }}
      SNOWFLAKE_CONNECTIONS_WORKFLOW_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATEKEY }}
      SNOWFLAKE_CONNECTIONS_WORKFLOW_WAREHOUSE: "X_SMALL_WH"
      SNOWFLAKE_CONNECTIONS_WORKFLOW_ROLE: "yasuhara_st_creator"
      SNOWFLAKE_CONNECTIONS_WORKFLOW_AUTHENTICATOR: "SNOWFLAKE_JWT"

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install Snowflake CLI
        uses: Snowflake-Labs/snowflake-cli-action@v1.5
        with:
          cli-version: "latest"
          default-config-file-path: 'config/config.toml'

      - name: Deploy to Snowflake
        run: |
          snow streamlit deploy yasuhara_streamlit --replace

ワークフローファイルについては以下が参考になります。

https://docs.snowflake.com/ja/developer-guide/streamlit/create-streamlit-snowflake-cli

追加・コミットします。

git add .github/workflows/deploy_streamlit_app.yml
git commit -m "Add workflow"
git push

これで main へ push したタイミングで、GitHub Actions 経由のデプロイが実行されます。

アプリを変更

開発ブランチでローカル検証 → PR(プルリクエスト) → デプロイまでの手順を試してみます。

ローカルで動作確認

開発ブランチを作成します。

git checkout -b feature/add-note

アプリを修正します。ここでは簡単にタイトル直下に1行メッセージを追加しました。

streamlit_app.py
import streamlit as st
import pendulum

st.title("コンテナランタイムのローカルからの開発テスト")

+st.write("開発ブランチでのローカル検証用に1行追加しました。")

st.subheader("PyPI package test: pendulum")

st.write("Now (Tokyo):", pendulum.now("Asia/Tokyo").to_iso8601_string())

# Snowflake接続確認(ローカルでは .streamlit/secrets.toml の [connections.snowflake] を使う)
st.subheader("Snowflake session check")
conn = st.connection("snowflake")
session = conn.session()

row = session.sql("""
select
  current_account() as acct,
  current_user() as usr,
  current_role() as role,
  current_timestamp() as ts
""").collect()[0]

st.json(row.as_dict())

ローカルで動作を確認します。

streamlit run streamlit_app.py

下図赤枠のメッセージが追加されています。

image 1

変更をコミットして push します。

git add streamlit_app.py
git commit -m "Add a note to the app"
git push -u origin feature/add-note

プルリクエストを作成し main へマージします。

image 2

GitHub Actions でデプロイ確認

マージ後、ワークフローが実行されます。

image 3

その後、Snowsight で確認すると Streamlit アプリが更新されていることを確認できました。

2026-01-08_21h46_39

さいごに

最小構成ではありますが、Snowflake CLI で Streamlit in Snowflake の GitHub Actions 経由のデプロイを試してみました。
本記事の内容がどなたかの参考になれば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事