翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Elastic Beanstalk への Django アプリケーションのデプロイ
このチュートリアルでは、自動生成されたデフォルトの Django
このチュートリアルでは、以下の作業を行います。
前提条件
このチュートリアルを実行するには、以下のパッケージを含む、インストールされている Python の一般的な前提条件をすべて満たす必要があります。
-
Python 3.7 以降
-
pip -
virtualenv -
awsebcli
チュートリアルのパートとして Django
注記
EB CLI を使用して環境を作成するには、サービスロールが必要です。Elastic Beanstalk コンソールで環境を作成することで、サービスロールを作成できます。サービスロールがない場合は、eb create を実行すると EB CLI で作成されます。
Python 仮想環境のセットアップと Django のインストール
virtualenv で仮想環境を作成し、それを使用して Django とその依存関係をインストールします。仮想環境を使用することで、アプリケーションで必要なパッケージを正確に識別し、アプリケーションを実行する Amazon EC2 インスタンスにそれらの必要なパッケージをインストールすることができます。
以下のステップは、Unix ベースのシステムと Windows で入力する必要があるコマンドを、それぞれ別のタブに示しています。
開発環境を設定するには
-
eb-virtという名前の仮想環境を作成します。 -
仮想環境をアクティブ化します。
コマンドプロンプトの先頭に
(eb-virt)と表示され、仮想環境を使用していることが示されます。注記
残りの手順では、ホームディレクトリ
~$での Linux のコマンドプロンプトを示しています。Windows では、C:\Users\であり、USERNAME>ユーザーネームは Windows ログイン名です。 -
pipを使用して Django をインストールします。(eb-virt)~$pip install django==2.2注記
インストールする Django のバージョンは、アプリケーションのデプロイに選択した Elastic Beanstalk の Python 設定の Python バージョンと互換性がある必要があります。デプロイの詳細については、このトピックの「EB CLI でサイトをデプロイします」を参照してください。
現在の Python プラットフォームバージョンの詳細については、AWS Elastic Beanstalk プラットフォームドキュメントの「Python」を参照してください。
Django のバージョンと Python との互換性については、「What Python version can I use with Django? (Django で使用可能な Python のバージョンを教えてください)
」を参照してください。 -
Django がインストールされたことを確認するには、次のように入力します。
(eb-virt)~$pip freezeDjango==2.2 ...このコマンドは、仮想環境にインストールされるすべてのパッケージを一覧します。後でこのコマンドの出力を使用して、プロジェクトを Elastic Beanstalk で使用するために設定します。
Django プロジェクトを作成する
仮想環境を使用して、Django プロジェクトを作成してマシンで実行する準備ができました。
注記
このチュートリアルでは、Python に含まれているデータベースエンジン、SQLite を使用します。データベースはプロジェクトファイルでデプロイされます。本番稼働用環境では、Amazon Relational Database Service (Amazon RDS) を使用して、環境を分離することをお勧めします。詳細については、「Amazon RDS DB インスタンスを Python Elastic Beanstalk 環境に追加する」を参照してください。
Django アプリケーションを作成するには
-
仮想環境をアクティブ化します。
コマンドプロンプトの先頭に
(eb-virt)プレフィックスが表示され、仮想環境を使用していることが示されます。注記
残りの手順では、ホームディレクトリと Linux のホームディレクトリ
~/に Linux のコマンドプロンプト~$を示しています。Windows では、C:\Users\であり、USERNAME>ユーザーネームは Windows ログイン名です。 -
django-admin startprojectコマンドを使用して、ebdjangoという名前の Django のプロジェクトを作成します。(eb-virt)~$django-admin startproject ebdjangoこのコマンドは、次のディレクトリ構造を持つ ebdjango というスタンダードの Django サイトを作成します。
~/ebdjango |-- ebdjango | |-- __init__.py | |-- settings.py | |-- urls.py | `-- wsgi.py `-- manage.py -
manage.py runserverで Django サイトをローカルで実行します。(eb-virt) ~$cd ebdjango(eb-virt) ~/ebdjango$python manage.py runserver -
ウェブ・ブラウザで
http://127.0.0.1:8000/を開いて、サイトを表示します。 -
サーバーログをチェックして、リクエストからの出力を確認します。ウェブサーバーを停止して仮想環境に戻るには、 Ctrl+C を押します。
Django version 2.2, using settings 'ebdjango.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [07/Sep/2018 20:14:09] "GET / HTTP/1.1" 200 16348Ctrl+C
Elastic Beanstalk 用に Django アプリケーションを設定する
Django を使用してローカルシステムに作成したサイトを、Elastic Beanstalk でのデプロイ用に設定します。
デフォルトでは、Elastic Beanstalk は、アプリケーションを開始するために application.py というファイルを探します。これは作成した Django プロジェクトには存在しないため、アプリケーションの環境を調整する必要があります。また、アプリケーションのモジュールをロードできるように、環境可変数を設定する必要もあります。
Elastic Beanstalk 用にサイトを設定するには
-
仮想環境をアクティブ化します。
-
pip freezeを実行して、出力をrequirements.txtという名前のファイルに保存します。(eb-virt) ~/ebdjango$pip freeze > requirements.txtElastic Beanstalk は
requirements.txtを使用して、アプリケーションを実行する EC2 インスタンスにどのパッケージをインストールするかを判断します。 -
.ebextensionsという名前のディレクトリを作成します。(eb-virt) ~/ebdjango$mkdir .ebextensions -
.ebextensionsディレクトリ内に、次のテキストを持つdjango.configという名前の 設定ファイル を追加します。例 ~/ebdjango/.ebextensions/django.config
option_settings: aws:elasticbeanstalk:container:python: WSGIPath: ebdjango.wsgi:applicationこの設定
WSGIPathは、アプリケーションを起動するのに Elastic Beanstalk が使用する WSGI スクリプトの場所を指定します。注記
Amazon Linux AMI Python プラットフォームバージョン (Amazon Linux 2 より前の) を使用している場合は、
WSGIPathの値をebdjango/wsgi.pyに置き換えます。この例の値は、Amazon Linux AMI プラットフォームバージョンでは support されていない Gunicorn WSGI サーバーで動作します。 -
deactivateコマンドを使用して、仮想環境を非アクティブ化します。(eb-virt) ~/ebdjango$deactivateパッケージをアプリケーションに追加するか、またはアプリケーションをローカルで実行する必要があるときは、いつでも仮想環境を再アクティブ化します。
EB CLI でサイトをデプロイします
Elastic Beanstalk でアプリケーションをデプロイするために必要な条件をすべて追加しました。プロジェクトディレクトリは次のようになります。
~/ebdjango/
|-- .ebextensions
| `-- django.config
|-- ebdjango
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt
次に、アプリケーション環境を作成し、設定済みのアプリケーションを Elastic Beanstalk を使用してデプロイします。
デプロイの直後に、Django の設定を編集して Elastic Beanstalk からアプリケーションに割り当てられたドメイン名を Django の ALLOWED_HOSTS に追加します。次に、アプリケーションを再デプロイします。これは、HTTP Host ヘッダー攻撃を防ぐように設計された Django のセキュリティ要件です。詳細については、「Host header validation (ホスト・ヘッダーの検証)
環境を作成し、Django アプリケーションをデプロイするには
注記
このチュートリアルでは、EB CLI をデプロイメントメカニズムとして使用しますが、Elastic Beanstalk コンソールを使用してプロジェクトの内容を含む .zip ファイルを展開することもできます。
-
eb init コマンドを使用して EB CLI リポジトリを初期化します。
~/ebdjango$eb init -p python-3.7 django-tutorialApplication django-tutorial has been created.このコマンドでは、
django-tutorialという名前のアプリケーションを作成します。また、ローカルリポジトリを設定し、最新の Python 3.7 プラットフォームバージョンで環境を作成します。 -
(オプション) eb init を再度実行してデフォルトのキーペアを設定し、アプリケーションを実行している EC2 インスタンスに SSH を使用して connect できるようにします。
~/ebdjango$eb initDo you want to set up SSH for your instances? (y/n):ySelect a keypair. 1) my-keypair 2) [ Create new KeyPair ]1 つのキーペアがすでにある場合はそれを選択するか、またはプロンプトに従ってキーペアを作成します。プロンプトが表示されないか設定を後で変更する必要がない場合は、eb init -i を実行します。
-
環境を作成し、eb create を使用してそこにアプリケーションをデプロイします。
~/ebdjango$eb create django-env注記
「service role required」エラーメッセージが表示された場合は、
eb createをインタラクティブに (環境名を指定せずに) 実行してください。EB CLI によってロールが作成されます。このコマンドは、
django-envという名前のロードバランシング Elastic Beanstalk 環境を作成します。環境の作成には約 5 分かかります。Elastic Beanstalk はアプリケーションを実行するのに必要なリソースを作成し、EB CLI がターミナルに中継する情報メッセージを出力します。 -
環境の作成プロセスが完了したら、eb status を実行して新しい環境のドメイン名を見つけます。
~/ebdjango$eb statusEnvironment details for: django-env Application name: django-tutorial ... CNAME:eb-django-app-dev.elasticbeanstalk.com...環境のドメイン名は、
CNAMEプロパティの値です。 -
ebdjangoディレクトリのsettings.pyファイルを開きます。ALLOWED_HOSTS設定を見つけ、前のステップで見つけたアプリケーションのドメイン名を設定の値に追加します。この設定がファイルで見つからない場合は、それを新しい行に追加します。... ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com'] -
ファイルを保存し、eb deploy を実行してアプリケーションをデプロイします。eb deploy を実行すると、EB CLI はプロジェクトディレクトリのコンテンツをバンドルアップして、ユーザーの環境にデプロイします。
~/ebdjango$eb deploy注記
プロジェクトで Git を使用している場合は、「Git での EB CLI の使用」を参照してください。
-
環境の更新プロセスが完了したら、eb open でウェブサイトを開きます。
~/ebdjango$eb openこれにより、アプリケーション用に作成されたドメイン名を使用してブラウザ・ウィンドウが開きます。ローカルで作成してテストしたのと同じ Django ウェブサイトが表示されます。
アプリケーションが実行されていることを確認できない場合や、エラーメッセージが表示される場合は、エラーの原因を判断する方法のヒントを得るためにデプロイのトラブルシューティングを参照してください。
アプリケーションが実行されていることを実際に確認できた場合は、Elastic Beanstalk での最初の Django アプリケーションのデプロイが正常に完了しています。
アプリケーションの更新
Elastic Beanstalk で実行中のアプリケーションまたはその設定を更新して再デプロイすることができます。この場合、インスタンスを更新して新しいアプリケーションバージョンを開始する作業は、Elastic Beanstalk が実行します。
この例では、Django の管理者コンソールを有効にして、他のいくつかの項目を設定します。
サイト設定を変更する
デフォルトでは、Django ウェブサイトは UTC タイムゾーンを使用して時間を表示します。settings.py でタイムゾーンを指定して、これを変更することができます。
サイトのタイムゾーンを変更するには
-
settings.pyのTIME_ZONE設定を変更します例 ~/ebdjango/ebdjango/settings.py
... # Internationalization LANGUAGE_CODE = 'en-us' TIME_ZONE ='US/Pacific'USE_I18N = True USE_L10N = True USE_TZ = Trueタイムゾーンのリストについては、このページ
を参照してください。 -
アプリケーションを Elastic Beanstalk 環境にデプロイします。
~/ebdjango/$eb deploy
サイト管理者を作成する
Django アプリケーション用のサイト管理者を作成すると、ウェブサイトから管理者コンソールに直接アクセスできます。管理者のログインの詳細は、Django が生成したデフォルトプロジェクトに含まれるローカルデータベース・イメージに安全に保存されます。
サイト管理者を作成するには
-
Django アプリケーションのローカルデータベースを初期化します。
(eb-virt) ~/ebdjango$python manage.py migrateOperations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK -
manage.py createsuperuserを実行して、管理者を作成します。(eb-virt) ~/ebdjango$python manage.py createsuperuserUsername:adminEmail address:me@mydomain.comPassword:********Password (again):********Superuser created successfully. -
静的ファイルの保存する場所を Django に渡すには、
STATIC_ROOTでsettings.pyを定義します。例 ~/ebdjango/ebdjango/settings.py
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/'STATIC_ROOT = 'static' -
manage.py collectstaticを実行して、staticディレクトリに管理者サイトの静的アセット (JavaScript、CSS、イメージ) を追加します。(eb-virt) ~/ebdjango$python manage.py collectstatic119 static files copied to ~/ebdjango/static -
アプリケーションをデプロイします。
~/ebdjango$eb deploy -
ブラウザでサイトを開き、次のようにサイトの URL に
/admin/を付加することで、管理者コンソールが表示されます。http://djang-env.p33kq46sfh.us-west-2.elasticbeanstalk.com/admin/
-
ステップ 2 で設定したユーザーネームとパスワードでログ・インします。
ローカルでの更新/テストと同様の手順を使用し、続けて eb deploy を実行することができます。実稼働サーバーの更新は Elastic Beanstalk が処理するため、ユーザーはサーバー管理ではなくアプリケーション開発に集中できます。
データベース移行設定ファイルを追加する
サイトが更新されたときに実行される .ebextensions スクリプトに、コマンドを追加することができます。これにより、データベース・マイグレーションを自動的に生成できます。
アプリケーションがデプロイされたときに移行ステップを追加するには
-
以下の内容を使用して、
db-migrate.configと言う名前の設定ファイルを追加します。例 ~/ebdjango/.ebextensions/db-migrate.config
container_commands: 01_migrate: command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate" leader_only: true option_settings: aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULE: ebdjango.settingsこの設定ファイルは、サーバーの仮想環境をアクティブ化し、アプリケーションがスタートする前に、デプロイプロセスの間に
manage.py migrateコマンドを実行します。アプリケーションがスタートする前に実行されるため、DJANGO_SETTINGS_MODULE環境可変数を明確に設定する必要もあります (通常は、スタートアップ中にwsgi.pyがこれを行います)。コマンドでleader_only: trueを指定することで、複数のインスタンスにデプロイする場合に 1 回だけ実行するようにできます。 -
アプリケーションをデプロイします。
~/ebdjango$eb deploy
クリーンアップ
開発セッション間でインスタンス時間やその他の AWS リソースを節約するには、 を使用して Elastic Beanstalk 環境を終了しますeb terminate。
~/ebdjango$ eb terminate django-env
このコマンドは、環境とその環境内で実行されるすべての AWS リソースを終了します。これによってアプリケーションが削除されることはありません。したがって eb create を再び実行することで、いつでも同じ設定でさらに環境を作成することができます。
サンプルアプリケーションが必要なくなった場合は、プロジェクトフォルダーと仮想環境を削除することもできます。
~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango
次のステップ
詳細なチュートリアルを含む Django の情報については、公式ドキュメント
別の Python ウェブフレームワークを試す場合は、「Elastic Beanstalk への Flask アプリケーションのデプロイ」をチェックしてください。