Streamlitで作ったWebアプリをCloud Runで動かしてみる
はじめに
Streamlitで作ったWebアプリをコンテナ化して、Cloud Runで動かします。
当初はAWSで動かそうと思っていました。ですが、StreamlitがWebSocketを使っていることが原因でとても苦戦しました。
具体的には、、、
- AWS Lambda Web Adapterを使ってLambda上で動かそうとする。
- WebSocketが使えない
- App Runner上で動かそうとする。
- WebSocketが使えない
- https://github.com/aws/apprunner-roadmap/issues/13
LambdaはともかくApp Runnerでは動いて欲しかったです。
Fargateを使えば動くと思うけど、軽く試すの領域を超えてくるので、、、
Google CloudのCloud Runでは簡単に動いたので、そちらを紹介する記事になります。
作ったソース
Streamlitとは
簡単にウェブアプリケーションを作れるPythonのフレームワークです。
ChatGPTに聞いてみました。
Streamlitについて教えてください
Streamlitは、データサイエンティストや開発者がPythonで素早く美しく対話型のウェブアプリケーションを作成できるオープンソースのフレームワークです。以下はStreamlitの主要な特徴です:
-
Python中心のアプローチ: StreamlitアプリはPythonで書かれており、Pythonの知識があれば簡単に始められます。
-
迅速なプロトタイピング: コードの変更をすぐにアプリに反映できるため、プロトタイピングが迅速に行えます。
-
データサイエンスに最適化: データ可視化ライブラリ(Matplotlib, Plotlyなど)との統合が簡単で、データサイエンスプロジェクトに適しています。
-
ウィジェットとインタラクティビティ: スライダー、ボタン、テキスト入力などのウィジェットを使って、ユーザーのインタラクションを簡単に組み込むことができます。
-
拡張性: コンポーネントシステムにより、独自のウィジェットやビジュアライゼーションを追加することが可能です。
-
共有とデプロイ: Streamlitアプリは、Web上で容易に共有やデプロイができます。Streamlit Sharingなどのプラットフォームを使用して公開することができます。
Streamlitは、データサイエンスや機械学習のプロジェクトを対話型のウェブアプリに変換する際に、特に便利なツールです。
早速やってみる
streamlitのアプリを作る
プロジェクトを書く
rye init
rye add streamlit
rye sync
適当にソースを書く
動かす
rye run streamlit run src/streamlit.py
たったこれだけでwebアプリが作れてグラフが書けます。とても便利です。
コンテナで動かす
dockerfileを書く
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株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion