Pythonデベロッパーに朗報です! AWS Elastic BeanstalkがPythonアプリケーションのサポートを開始いたしました!Elastic BeanstalkはAWS上でスケーラブルなPHP、Java、.NETそしてPythonアプリケーションをデプロイ、管理する最も簡単な方法です。アプリケーションをアップロードするだけで、Amazon EC2インスタンスのプロビジョニング、ロードバランシング、オートスケーリング、アプリケーションのヘルスチェックなどのデプロイに関連する細かいこと全てをElastic Beanstalkが自動的に行ってくれます。
Elastic Beanstalkは一般的によく使われている、Apache HTTPサーバーとWSGI上で実行するPythonアプリケーションをサポートします。つまり、Django アプリケーションやFlaskアプリケーションのようなあらゆるPythonアプリケーションを実行可能です。 Elastic Beanstalkは開発効率を高めてくれる様々なツールをサポートしています。例えば、ebとGitを使えばコマンドラインからすばやく開発、デプロイを行えます。またAWS Management Consoleを使って、アプリケーションとその設定を管理することも可能です。
今回のPythonリリースに伴い、アプリケーションをより迅速に、より安全に起動し、実行できるような多くのプラットフォームの改善も行いました。そのいくつかをハイライトにて紹介いたします。
Amazon RDSとの統合
Amazon RDSを使えば、クラウド上でのリレーショナルデータベースのセットアップ、運用、スケーリングが非常に簡単になりますので、Elastic Beanstalk上で実行しているスケーラブルなWebアプリケーションにぴったりです。
アプリケーションにリレーショナルデータベースが必要な場合、Elastic Beanstalkはアプリケーションに使用するAmazon RDSのデータベースインスタンスを作成することができます。RDSのデータベースインスタンスはアプリケーションを実行しているAmazon EC2インスタンスと連動するように自動的に設定されます。
AWS Elastic Beanstalkの新しい環境を起動する際のRDSの設定画面
RDSのデータベースインスタンスがセットアップされると、環境変数を使用してアプリケーションからデータベースについての情報を取得することができます。
import os
if 'RDS_HOSTNAME' in os.environ:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USER'],
'PASSWORD': os.environ['RDS_PASSWORD'],
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
}
}
Elastic BeanstalkでAmazon RDSを使う方法に関するより詳しい情報については、デベロッパーガイドの“Using Amazon RDS with Python”をご覧ください。
Python環境のカスタマイズ
アプリケーション内に宣言型のテキストファイルのセットを使ってElastic BeanstalkのためのPythonランタイムをカスタマイズすることができます。アプリケーションの最上位のディレクトリにrequirements.txtを置くと、Elastic Beanstalkはその内容に従って、自動的にpipを使って依存関係をインストールします。
Elastic Beanstalkも新しいコンフィギュレーションのメカニズムを導入しています。このメカニズムを使えば、yumからパッケージをインストールしたり、セットアップスクリプトを実行したり、環境変数をセットしたりすることができます。仕組みは非常にシンプルです。アプリケーション内に“.ebextensions”ディレクトリを作成し、その中に“python.config”を追加するだけです。Elatic Beanstalkはこの設定ファイルをロードし、yumパッケージをインストールしたり、あらゆるスクリプトを実行したり、環境変数をセットしたりします。Django アプリケーションのデータベースをsyncするための設定ファイルのサンプルは次のとおりです。
commands:
syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
option_settings:
"aws:elasticbeanstalk:application:python:environment":
DJANGO_SETTINGS_MODULE: "mysite.settings"
"aws:elasticbeanstalk:container:python":
WSGIPath: "mysite/wsgi.py"
ログのスナップショット
デバックを手助けするために、AWS Management consoleからログのスナップショットを簡単に取得することができます。Elastic Beanstalkはバグをつぶすのを手伝うために、Apacheのエラーログを含む多くの異なるログから上位100行を集めてきます。
スナップショットはS3に保存され、15分後に自動的に削除されます。Elastic Beanstalkは1時間単位でAmazon S3上にログファイルを自動的にローテートすることもできますので、トラフィックパターンを解析し問題を特定することも可能です。より詳細については、デベロッパーガイドの“Working with Logs”をご覧ください。
DjangoとFlaskのサポート
上記のカスタマイズのメカニズムを使えば、簡単にElastic Beanstalk上にDjangoやFlaskのアプリケーションをデプロイし、実行することができます。
- Djangoを使う場合はデベロッパーガイドの“Deploy a Django Application to AWS Elastic Beanstalk”をご覧ください。
- Flaskを使う場合はデベロッパーガイドの“Deploy a Flask Application to AWS Elastic Beanstalk”をご覧ください。
PythonとElastic Beanstalkについてのさらに詳しい情報については、Developer Guideをご覧いただければと思います。
是非この新機能をご利用ください! 皆様のフィードバックをお待ちしております!