FlaskをElastic Beanstalkでデプロイに関するヒント
紹介
少し自分用のためのノートですが、Github Actionsを使ってPython FlaskをAWSのElastic Beanstalkでデプロイする時、いろいろ設定と注意点を書きたいです。
やりたいこと
- CI/CD
- IPでアクセス制限
- Flask(Dash)とPlotlyを使いたい
- 低コスト
ソースコードテンプレート
手順
ネットワーク
- VPCを作成
- サブネットは一つでも良い
- セキュリティグループを作成
- VPC・サブネット・SGのIDを記録
CI/CD
- AWSでデプロイ用ユーザーを作成、権限はこちら(少し過剰だけど)
- AmazonEC2FullAccess
- AdministratorAccess-AWSElasticBeanstalk
- キーをGitHub Secretsに入れる(先のネットワークのIDも)
- ファイルをレポジトリにアップロード
- GitHub Actionsを追加
これで自動ビルドとデプロイができて、デプロイ後ELBのSGルール変更でIP制御ができます。
注意点
- Elastic Beanstalkでデプロイするためにポートを8080にするには必要だそうです。
if __name__ == '__main__':
application.run_server(port=8080, debug=False)
- Dashのインポートのフォーマットはこのようなりました。dash_core_componentsのような書き方はエラーまで行かないけど、警告が出します。
from dash import Dash, callback, dcc, html, dash_table
- Flask(Dash)とPlotlyのライブラリはややこしくて、これで多分問題ないです。(必要がないライブラリも入っていると思いますが、一応これで無難)
Click>=7.0
dash>=1.6.0
dash-core-components>=1.5.0
dash-html-components>=1.0.1
dash-renderer>=1.2.0
Flask>=1.1.1
Flask-Compress>=1.4.0
future>=0.18.2
itsdangerous>=1.1.0
Jinja2>=2.10.3
MarkupSafe>=1.1.1
numpy>=1.16.5
pandas>=0.24.2
pytz>=2019.3
retrying>=1.3.3
six>=1.15.0
Werkzeug>=0.16.0
gunicorn>=19.5.0
plotly>=5.6.0
-
Elastic Beanstalkは環境名とアプリ名がある
-
ELBの手動作成はいらない
-
Elastic Beanstalkのログはかなり助かる
-
アプリの名前もapplication.pyが必要だそう