まるっとワーク

データ分析・電子工作など気になることを残していきます

WEBアプリをクラウドでデプロイ(Cloud Run + Streamlit or Flask)

WEBアプリを色々な方に使って貰うようにするには、クラウド等にアプリをデプロイする必要があります。
過去 AWSのサービスを使って、アプリのデプロイを試みてみましたが、Google CloudのCloud Runというサービスが、非常に良いなぁと思ったので、こちらを使ってやったことを備忘録として残します。

ちなみに、、PythonライブラリであるStreamlitをAWSでデプロイをしようとして、AWS AppRunnerというサービスを使ってみたのですが、、デプロイ完了、起動まではできるが、その後画面が、遷移せず(動かず)という感じで断念しました。
→調べてみると、、WebSocketが使えないから駄目だとか。コンテナ化をしてFargateを使ったらできるのかな?と思っています。


目次


Cloud Runについて

GCP Cloud Run(クラウド ラン)は、Google Cloud Platform(GCP)上で提供されているサーバーレスなコンテナ実行環境を構築できるサービスです。
"コンテナ"か、と思って最初は構えていたのですが、GCPのCloud Buildサービスと組み合し、Pythonコードをコンテナ化する作業もクラウド側で実行してもらえることには感動しました。(Dockerを使うのは過去苦労した経験があるので・・・WindowsのPCに入れたくない)
つまり、WEBアプリのPythonコードを書いて、(Docker fileは作るけど)、それをクラウドのサービスに渡すだけでデプロイできるのです。

実装

前準備

GCP CLIではデプロイができなかった件

詰まったところの紹介ですが、以下公式のチュートリアルに従って、進めたところ、デプロイ部分でエラーが出てしまいました。
https://cloud.google.com/run/docs/quickstarts/build-and-deploy/deploy-python-service?hl=ja

エラー画面

エラーの対処について、以下ブログ等の情報を探ると、リージョンをグローバル(非リージョン)にすれば解決するとのこと。
ただし、CLIではうまく設定が分からなかったので、今回はコンソールで実行しています。

↓参考になったブログ
zenn.dev

コード関係準備

コードや必要なファイルはすべてGithubにあげているので、詳細は割愛します。
構成は以下の通りで、ローカルで実行する時との差分はDockerfileが入る程度かなと思います。
github.com

│─ Dockerfile
│─ requirements.txt
└─ src/
   └─ app.py (WEBアプリのコード)


Dockerfileだけ、詳細を載せておきます。
pip が無いとエラーが出たことがあったので、"RUN python -m ensurepip"という行を入れています。

FROM python:3.11.1

WORKDIR /app

RUN python -m ensurepip
RUN python -m pip install --upgrade pip

COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
COPY . .

EXPOSE 8080

CMD streamlit run --server.port 8080 src/app.py


デプロイ

作成したソースやファイルたちは、Githubにあげた後、
Cloud Runのページで、ソースリポジトリからのデプロイを選択、Githubの対象リポジトリを選択します。



今回の作業は以下のページも参考にして対応しています。(感謝)
zenn.dev

これでデプロイは完了になります。

動作確認

デプロイ後に吐き出されるURLにアクセスをすると、Streamlitのアプリが無事動いていることを確認しました。


デプロイしたアプリのコンテナイメージは、Artifact Registryに保存されています。
デプロイ後、使い終えたら、アプリは削除しましょうね!(無料枠はあるけど、、ちょっとお金かかりそうで怖いので)

その他詰まったところ

IAMのエラー

エラーで吐き出されたURLにアクセスして、許可をすることで解決

generic::permission_denied: Identity and Access Management (IAM) API has not been used in project ○○before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/iam.googleapis.com/overview?project=○○ then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.


Flask HelloWorldもやってみた

上と準備することが殆ど同じなので、コードのみの紹介になりますが、Google公式のチュートリアルも無事こなすことができました。
github.com

まとめ

今回は、Google Cloud(GCP)のサービスを使ってWEBアプリをデプロイしてみました。
私は、Dockerを自身のPCに入れて作業するのに抵抗があったので、コンテナ化までを実行してくれるサービスはとても良いなと思いました。
また、Cloud Runは月々の無料枠も結構あるため、身内で使う程度のものなら、無料で運用できそうですし、他の方にもおすすめしようと思います。