こんにちは!
分析官の望月です。
いきなりですが、皆さんはStreamlitをご存じでしょうか??
StreamlitはPythonのコードのみでWebアプリ開発ができるPythonパッケージで、データ分析や機械学習の結果などを可視化する際に重宝されています。Streamlit Cloudによってアプリを公開することも可能ですが、社内向けアプリなど閲覧権限を柔軟に設定したくなる場合などはあまり向いていないようです。ググってみた感じ、GCPを利用する場合だとCloud RunとIAP(Identity-Aware Proxy)の組み合わせが良さそうでしたので、勉強がてら自分でも試してみることにしました。
本記事ではファーストステップとしてStreamlitで作成したアプリをCloud Runで公開するまでの流れをざっくりご紹介します!
Cloud Runとは?
Cloud Runは自分で作成したコンテナをGoogleが所有するサーバー環境上で動かすことができるサービスです。スケーリング等を自動でやってくれるのでユーザーはアプリ開発に集中できます。
下準備
アプリ作成(app.py)
本題と直接関係しないので、テキストとデータフレームが表示されるだけの非常にシンプルな構成にしています。
import pandas as pd
import streamlit as st
df = pd.DataFrame({'審査員A': [5, 9, 6, 8, 7],
'審査員B': [4, 7, 5, 6, 8],
'審査員C': [6, 5, 7, 9, 8]})
st.subheader('スコア')
st.dataframe(df)
Dockerfile作成
下記のような感じでこちらも最小限の構成にしています。
FROM python:3.11.1
WORKDIR /app
COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8080
CMD streamlit run --server.port 8080 src/app.py
requirements.txt作成
必要なパッケージを記載します。
pandas
streamlit
※全体のフォルダ構成はこんな感じにしておきます。
│─ Dockerfile
│─ requirements.txt
└─ src/
└─ app.py
いざ、アプリ公開
1. Cloud Buildでコンテナをビルド
Cloud SDKにて、Dockerfileが格納されているディレクトリに移動し、下記コマンドを実行します。
gcloud builds submit --project [プロジェクト名] --tag gcr.io/[プロジェクト名]/[アプリ名]
成功すると次のようなメッセージが表示されます。
※あらかじめGCPのコンソール画面左のメニューから「Cloud Build」を選択して、APIを有効にしておく必要があります。
PUSH
Pushing gcr.io/[プロジェクト名]/[アプリ名]
The push refers to repository [gcr.io/[プロジェクト名]/[アプリ名]]
... 省略 ...
DONE
2. Cloud Runでコンテナをデプロイ
CloudRunのトップ画面から「サービスの作成」をクリックします。
- 「既存のコンテナイメージから1つのリビジョンをデプロイする」にチェックを入れた状態で「コンテナイメージのURL欄」から前もってビルドしたコンテナを選択
- 任意のサービス名を付与→リージョンを選択
- 「すべてのトラフィックを許可する」にチェック
- 「未認証の呼び出しを許可」にチェック
最後に「作成」をクリックするとデプロイは完了です。
発行されたURLにアクセスするとアプリが表示されるようになります。
※Cloud Build同様、あらかじめGCPのコンソール画面左のメニューから「Cloud Run」を選択して、APIを有効にしておく必要があります。
さいごに
ここまででCloud Runを用いてWebアプリを公開することができました。
このままだと誰でもアクセス可能になっているので、次回の記事ではIAPを用いてアクセス制御を実装したいと思います。