🍎

Streamlitで作ったWebアプリをCloud Runで動かしてみる

2023/11/20に公開

はじめに

Streamlitで作ったWebアプリをコンテナ化して、Cloud Runで動かします。

当初はAWSで動かそうと思っていました。ですが、StreamlitがWebSocketを使っていることが原因でとても苦戦しました。

具体的には、、、

LambdaはともかくApp Runnerでは動いて欲しかったです。
Fargateを使えば動くと思うけど、軽く試すの領域を超えてくるので、、、

Google CloudのCloud Runでは簡単に動いたので、そちらを紹介する記事になります。

作ったソース

https://github.com/k-ibaraki/streamlit-cloudrun

Streamlitとは

簡単にウェブアプリケーションを作れるPythonのフレームワークです。
https://streamlit.io

ChatGPTに聞いてみました。

Streamlitについて教えてください

Streamlitは、データサイエンティストや開発者がPythonで素早く美しく対話型のウェブアプリケーションを作成できるオープンソースのフレームワークです。以下はStreamlitの主要な特徴です:

  1. Python中心のアプローチ: StreamlitアプリはPythonで書かれており、Pythonの知識があれば簡単に始められます。

  2. 迅速なプロトタイピング: コードの変更をすぐにアプリに反映できるため、プロトタイピングが迅速に行えます。

  3. データサイエンスに最適化: データ可視化ライブラリ(Matplotlib, Plotlyなど)との統合が簡単で、データサイエンスプロジェクトに適しています。

  4. ウィジェットとインタラクティビティ: スライダー、ボタン、テキスト入力などのウィジェットを使って、ユーザーのインタラクションを簡単に組み込むことができます。

  5. 拡張性: コンポーネントシステムにより、独自のウィジェットやビジュアライゼーションを追加することが可能です。

  6. 共有とデプロイ: Streamlitアプリは、Web上で容易に共有やデプロイができます。Streamlit Sharingなどのプラットフォームを使用して公開することができます。

Streamlitは、データサイエンスや機械学習のプロジェクトを対話型のウェブアプリに変換する際に、特に便利なツールです。

早速やってみる

streamlitのアプリを作る

プロジェクトを書く

rye init
rye add streamlit
rye sync

適当にソースを書く

https://github.com/k-ibaraki/streamlit-cloudrun/blob/main/src/streamlit.py

動かす

rye run streamlit run src/streamlit.py

たったこれだけでwebアプリが作れてグラフが書けます。とても便利です。

コンテナで動かす

dockerfileを書く

https://github.com/k-ibaraki/streamlit-cloudrun/blob/main/Dockerfile

compose.yamlを書く

https://github.com/k-ibaraki/streamlit-cloudrun/blob/main/compose.yaml

動かす

docker compose up

Cloud Runでアプリを動かす

GitHubとCloud Runを接続してdeploy

Google Cloudのコンソールから、GitHubのレポジトリからデプロイするように適当に設定します。

portの設定を忘れずに(開かないと出てこない)

動作確認

しばらく待つとdeployが完了しました。Cloud RunのURLにアクセスすると繋がりました。

最後に

本当はAWS Lambda Web Adapterでサクッと動かしてAWSすごい!!って内容の記事にする予定だったんですよ。WebSocketという罠があるとは思いませんでした。
WebSocketがあるという前提で考えるとLambda上で動かない当然なので仕方がないのですが、App Runnerにはもっと頑張って欲しかったです。

Cloud Runだと何も考えずにサクッと動きました。Google Cloudすごいです!!

NCDCエンジニアブログ

Discussion