この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
大阪オフィスのちゃだいんです。
手を動かして学ぶために、公式ドキュメントのチュートリアルをやってみました。
今回は、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 を触りたいんだけど」という方にはうってつけです。(そんな人いる?)
それでは今日はこのへんで。大阪オフィスのちゃだいんでした。