はじめに
WEBアプリケーションを開発するにあたり、AWSに構築したDockerコンテナ上におけるStreamlitの使い方について調査したのでまとめる。無料枠で構築するのでセキュアなWEBアプリケーションではないことにご注意ください。
セキュアにしたい場合は下記の技術記事を参照ください。
次の手順で環境構築の方法を説明する。
- AWS VPCとEC2インスタンスの構築
- Dockerの構築
- StreamlitによるWEBアプリケーションの構築
最終的に構築したい環境は下図の通りである。
AWS VPCとEC2インスタンスの構築
参照資料をもとに下図のようにAWSのVPCとEC2インスタンスを構築する。
インバウンドルールは下記のように設定する。
参照資料
Dockerの構築
Dockerをインストールする。
$ sudo yum install -y docker
$ sudo systemctl start docker
$ sudo usermod -a -G docker ec2-user
自動起動を有効にする。
$ sudo systemctl enable docker
docker-composeをインストールする。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
参照資料
StreamlitによるWEBアプリケーションの構築
コンテナを作成する。ポートの指定は下記の技術記事を参照した。
参照記事
$ docker run -it -p 443:8501 --name stl_hello jupyter/datascience-notebook /bin/bash
app.pyファイルを作成する。
import streamlit as st
st.title("hello")
streamlitをインストールし、app.pyを実行する。
$ pip3 install streamlit
$ python3 -m streamlit run app.py
ターミナル上に下記が表示される。
ローカルPCのWEBブラウザで開く。
http://EC2インスタンスのIPアドレス:443
補足:Streamlitの常時実行
Streamlitを常時実行するには下記のように実行すればよい。
# EC2インスタンスでの実行
$ nohup docker run -it -p 443:8501 --name stl_hello jupyter/datascience-notebook /bin/bash &
# Docker containerでの実行
$ nohup python3 -m streamlit run app.py &
実行されているか確認するには下記を実行すればよい。
$ ps -aux | grep docker
参照
補足:簡易的なStreamlitのユーザー認証
import streamlit as st
def is_authenticated(password):
return password == "admin"
def generate_login_block():
block1 = st.empty()
block2 = st.empty()
return block1, block2
def clean_blocks(blocks):
for block in blocks:
block.empty()
def login(blocks):
blocks[0].markdown("""
<style>
input {
-webkit-text-security: disc;
}
</style>
""", unsafe_allow_html=True)
return blocks[1].text_input('Password')
def main():
st.header('Hello')
st.balloons()
login_blocks = generate_login_block()
password = login(login_blocks)
if is_authenticated(password):
clean_blocks(login_blocks)
main()
elif password:
st.info("Please enter a valid password")
参照