Streamlitで作成した株価アプリをWEB公開した
株価アプリは前回作成したものを使う → Streamlitを使って株価データをグラフ表示した
デプロイ先はCloudRunを使う
キャッシュ化
このままWEB公開するとBigQueryアクセスが多くなるのでキャッシュ化を行う
@st.cache
デコレーターを付けることで返り値をキャッシュする
@st.cache
は引数種類別にキャッシュする
2回目以降はキャッシュを使いBigQueryにアクセスしない
allow_output_mutation
をTrueにすると返り値が変わってもエラーにならない
@st.cache(allow_output_mutation=True, suppress_st_warning=True)
def _get_stock(stock_no: str, start_date: str, end_date: str):
....
Docker環境準備
Dockerfile作成
Cloud Runで動かすのでポート8080に設定する
FROM python:3.7.4
WORKDIR /app
ADD . /app
RUN apt-get update && apt-get clean;
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV TZ Asia/Tokyo
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV GOOGLE_APPLICATION_CREDENTIALS /app/config/xxx.json
EXPOSE 8080
CMD streamlit run --server.port 8080 app.py
ビルド
$ docker build -t kabu-analysis .
起動
$ docker run --name kabu-analysis \
-p 8080:8080 -v ~/Sites/kabu-analysis/:/app -it --rm kabu-analysis
Cloud Run へのデプロイ
ビルド
DockerイメージをCloud Buildにビルドする
kabu-analysis
はイメージ名
$ gcloud builds submit --tag gcr.io/weekend-hackathon/kabu-analysis
デプロイ
Cloud Run を使いビルドしたイメージをデプロイ
$ gcloud run deploy kabu-analysis --project=weekend-hackathon --image=gcr.io/weekend-hackathon/kabu-analysis --region=us-central1 --platform=managed --no-allow-unauthenticated
Deploying container to Cloud Run service [kabu-analysis] in project [weekend-hackathon] region [us-central1]
✓ Deploying... Done.
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [kabu-analysis] revision [kabu-analysis-00003-wuq] has been deployed and is serving 100 percent of traffic.
Service URL: https://kabu-analysis-leopsotyca-uc.a.run.app
権限追加
$ gcloud run services add-iam-policy-binding kabu-analysis \
> --region=us-central1 --member="allUsers" --role="roles/run.invoker" --platform=managed
Updated IAM policy for service [kabu-analysis].
bindings:
- members:
- allUsers
role: roles/run.invoker
etag: BwW6MhTA8fg=
version: 1
URLにアクセスしサイトが表示されれば完了
https://kabu-analysis-leopsotyca-uc.a.run.app/
次回は詳しく可視化した株価グラフを作成していきます
いいね!と思ったら LGTM お願いします