8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GENDAAdvent Calendar 2023

Day 2

【デプロイ/Streamlit】EC2から抜けてもstreamlit runが走り続けるように実装する。

Last updated at Posted at 2023-12-01

【お知らせ】GENDAアドベントカレンダー

GENDAアドベントカレンダーのお知らせです。
GENDAアドベントカレンダーは、株式会社GENDAに所属するメンバーがお送りするアドベントカレンダーです。

12月1日からの25日間、GENDAのプロダクト開発や組織開発に関わるメンバーが、毎日多種多様なテーマの記事をお届けする予定となっております。

今回の課題

streamlitで作成したアプリをEC2にgit cloneして$ streamlit runコマンドを実行し、アプリをEC2上で動かすところまで実装できた。
しかし、EC2から抜けると$ streamlit runが停止してしまうことに気づいた。

なので、今回は$ streamlit runがEC2上で動き続けるように、streamlitアプリのデーモン化に挑戦した。

実装手順

streamlitアプリを動かし続けるために以下の手順で実装した。

  1. serviceファイルを作成する。
  2. 各種コマンドを実行する。

※streamlitのinstallやstreamlit_app.pyの用意は、既に終わっているものとします。

1. serviceファイルを作成する。

systemdのserviceファイルを作成する。
以下のような、/etc/systemd/system/streamlit_app.serviceを作成する。

streamlit_app.service
[Unit]
Description=デーモン化のテスト
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/ssm-user/streamlit
ExecStart=/home/ssm-user/.pyenv/shims/streamlit run /home/ssm-user/streamlit/streamlit_app.py
Restart = on-failure

[Install]
WantedBy=multi-user.target

上記のファイルの意味は以下の通り。

Unit セクション

Description

サービスの説明。

After

このサービスが依存するターゲットやユニットを指定し、そちらの処理が完了するまで待機する。
今回はnetwork.targetを設定しているので、ネットワークの設定が完了するまで、
上記のファイルに記述の処理の実行を待機するようになっている。

Service セクション

Type

ExecStartで指定したコマンドでサービスの処理を起動した時に、サービスの「起動完了」の判定タイミングを指定する。
simpleはデフォルトの設定値で、プロセスが起動した時点で起動完了となる。

WorkingDirectory

サービスが実行される作業ディレクトリを指定する。

ExecStart

サービスを開始する際に実行されるコマンドを指定する。
サービスが開始する際に、streamlit runコマンドが実行されるように指定しているイメージ。

※Streamlitを/home/ssm-user/.pyenv/shims/streamlitにインストールしてあり、/home/ssm-user/streamlit/streamlit_app.pyにstreamlitのコードがある。

Restart

サービスの再起動条件を指定する。
on-failureは、サービスが失敗した場合に再起動することを示している。

Installセクション

WantedBy

サービスをどのターゲットに関連付けるかを指定する。
multi-user.targetは通常、ユーザーがログインする際に起動するターゲット。
サービスはこのターゲットに関連付けられて実行される。

2. 各種コマンドを実行する。

1.streamlit_app.serviceの変更をsystemdに変更させる。

$ sudo systemctl daemon-reload

2.streamlit_app.serviceを起動時に自動的に有効化する。

$ sudo systemctl enable streamlit_app.service

3.streamlit_app.serviceを起動する。

$ sudo systemctl start streamlit_app.service

4.streamlit_app.serviceの現在の状態を表示する。
※サービスが正常に動作しているかなどを確認できるので、問題が発生していれば対応する。

$ sudo systemctl status streamlit_app.service

参考

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?