初心者向け『Elastic Beanstalk への Flask アプリケーションのデプロイ』をやってみた
大阪オフィスのちゃだいんです。
手を動かして学ぶために、公式ドキュメントのチュートリアルをやってみました。
今回は、Elastic Beanstalk を AWS EB CLI でデプロイできる教材をやってみました。
Elastic Beanstalk への Flask アプリケーションのデプロイ - AWS Elastic Beanstalk
Flask は、Python のオープンソースのウェブアプリケーションフレームワークです。このチュートリアルでは、Flask アプリケーションを生成して AWS Elastic Beanstalk 環境にデプロイする手順を示します。
前提条件
以下がローカル環境に必要となります。
- Python 2.7 または 3.4 以降
- pip
- virtualenv
- awsebcli
早速やってみた
1.仮想環境を設定する
ここでは、アプリケーション用のプロジェクトディレクトリと仮想環境を作成し、Flask をインストールしました。
まとめると以下のような感じです。
- プロジェクトディレクトリを作成する
virt
という名前の仮想環境を作成するvirt
という名前の仮想環境をアクティブ化するpip install
で Flask をインストールするpip freeze
でインストールされているライブラリを表示するpip freeze
からの出力を、requirements.txt という名前のファイルに保存する
特に詰まることなく実行できました。
2.Flask アプリケーションを作成する
アプリケーションコードを作成します。内容としては、いわゆる"Hello World"を表示する RESTful Webサービスです。
ドキュメントに記載のある以下のコードをapplication.py
というファイル名で保存します。
from flask import Flask # print a nice greeting. def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # some bits of text for the page. header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # EB looks for an 'application' callable by default. application = Flask(__name__) # add a rule for the index page. application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # add a rule when the page is accessed with a name appended to the site # URL. application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # run the app. if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production app. application.debug = True application.run()
pythonを使用してapplication.py
を実行します。
(virt) ~/eb-flask$ python application.py * Serving Flask app "application" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 758-843-500
これでローカル仮想環境上でアプリケーションが実行できました。
ウェブブラウザで http://127.0.0.1:5000/ を開くと、インデックスページが表示されました。
また、以下の通りサーバーログとして、リクエストの出力が確認できます。
127.0.0.1 - - [09/Nov/2019 21:28:10] "GET / HTTP/1.1" 200 -
3.EB CLI でサイトをデプロイする
とても簡単なチュートリアルなので、すでに Elastic Beanstalk でデプロイするために必要な条件は全て揃ったことになります。
ただ、プロジェクトディレクトリにあるvirt
フォルダは、アプリケーションの実行には必要ないので、これを無視する設定を追加します。
具体的には.ebignore
ファイルにvirt
と記述し、保存します。
次に、eb init
コマンドでEB CLI リポジトリを初期化します。
~/eb-flask$ eb init -p python-3.6 flask-tutorial --region us-east-2
そして、eb create
コマンドで環境を作成します。
~/eb-flask$ eb create flask-env Creating application version archive "app-191109_213408". Uploading flask-tutorial/app-191109_213408.zip to S3. This may take a while. Upload Complete. Environment details for: flask-env Application name: flask-tutorial Region: us-east-2 Deployed Version: app-191109_213408 Environment ID: e-m3peyvj3qc Platform: arn:aws:elasticbeanstalk:us-east-2::platform/Python 3.6 running on 64bit Amazon Linux/2.9.3 Tier: WebServer-Standard-1.0 CNAME: UNKNOWN Updated: 2019-11-09 12:34:12.635000+00:00 Printing Status: 2019-11-09 12:34:11 INFO createEnvironment is starting. 2019-11-09 12:34:12 INFO Using elasticbeanstalk-us-east-2-123456789012 as Amazon S3 storage bucket for environment data. 2019-11-09 12:34:37 INFO Created security group named: sg-0656ad0c10fe23b63 ...
上記のように作成状況を実況中継してくれます。
5分程度で環境が作成されました。
マネジメントコンソールをみると、ちゃんとできてますね。
最後に、eb open
コマンドでウェブサイトを稼働させます。
~/eb-flask$ eb open
特に出力はなく、しれっと稼働しました。
flask-env
のページにて、URLが生成されているので、それを開いてみます。
ちゃんとWebサービスが表示されました。
"Append a username to the URL(for example: /Thelonious) to say hello to some specific."と書かれているので、やってみました。
taro
に挨拶できました。
感想
とても簡単なチュートリアルではありますが、EB CLI で Elastic Beanstalk を使用することができました。
「1時間以内でちょっと EB CLI を触りたいんだけど」という方にはうってつけです。(そんな人いる?)
それでは今日はこのへんで。大阪オフィスのちゃだいんでした。