メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

外部 Amazon RDS データベースを備えた高可用性の PHP アプリケーションを Elastic Beanstalk にデプロイする

このチュートリアルは AWS Elastic Beanstalk の外部の RDS DB インスタンスを起動する プロセスおよび PHP アプリケーションを実行して、そこに接続する、高可用性環境を設定する手順を説明します。 Elastic Beanstalk の外部 DB インスタンスを実行すると、環境のライフサイクルからデータベースを分離し、複数の環境から同じデータベースに接続でき、あるデータベースから別のデータベースへ交換したり、データベースに影響を与えないで Blue-Green Deployment を実行できます。

チュートリアルでは、ユーザー提供のテキストデータを格納するために MySQL データベースを利用するサンプル PHP アプリケーションを使用します。 サンプルアプリケーションは、設定ファイルを使用して、PHP 設定を設定し、アプリケーションが使用するデータベース内にテーブルを作成します。 Composer ファイルを使用して、デプロイの間にパッケージをインストールする方法も示します。

前提条件

開始する前に、サンプルアプリケーションソースバンドルを GitHub からダウンロードします。eb-demo-php-simple-app-1.1.zip

Amazon Relational Database Service (Amazon RDS) タスクのためのこのチュートリアルの手順は、リソースをデフォルト VPC 内で起動していることを前提としています。 すべての新しいアカウントでは、各リージョンにデフォルト VPC が含まれます。 デフォルト VPC がない場合、手順は異なります。 EC2-Classic およびカスタム VPC プラットフォームの手順については、Amazon RDS で Elastic Beanstalk を使用する を参照してください。

Amazon RDS に DB インスタンスを起動する

Elastic Beanstalk で実行するアプリケーションで外部データベースを使用するには、まず Amazon RDS で DB インスタンスを起動します。 Amazon RDS でインスタンスを起動する場合、Elastic Beanstalk および Elastic Beanstalk 環境から完全に独立しており、Elastic Beanstalk によって終了されたり、モニタリングされたりしません。

Amazon RDS コンソールを使用して、マルチ AZ MySQL DB インスタンスを起動します。 マルチ AZ 配置を選択すると、データベースがフェイルオーバーされ、マスター DB インスタンスがサービスを停止しても引き続き利用できます。

RDS DB インスタンスをデフォルト VPC 内で起動するには

  1. RDS マネジメントコンソールを開きます。

  2. ナビゲーションペインで、[Instances] を選択します。

  3. [Launch DB Instance] を選択します。

  4. [DB エンジン] を選択し、設定をプリセットします。

  5. [Specify DB Details] で [DB Instance Class] を選択します。高可用性を実現するために、[Multi-AZ Deployment] を [Yes] に設定します。

  6. [Settings] で、[DB Instance Identifier]、[Master Username] および [Master Password] (と [Confirm Password]) を入力し、入力した値を後で使用できるように書き留めます。

  7. [Next] を選択します。

  8. [Network and Security] 設定では、以下を選択します。

    • VPCDefault VPC

    • Subnet Groupdefault

    • Publicly AccessibleNo

    • Availability Zone No Preference

    • VPC Security GroupsDefault VPC Security Group

  9. [Database Name] に、ebdb を入力し、残りのオプションのデフォルトの設定を確認します。 次のオプションの値に注意してください。

    • Database Name

    • Database Port

  10. [Launch DB Instance] を選択します。

次に、DB インスタンスにアタッチするセキュリティグループを変更して、適切なポートへのインバウンドトラフィックを許可します。これは、後で Elastic Beanstalk 環境にアタッチするのと同じセキュリティグループで、追加するルールは、同じセキュリティグループ内の他のリソースにアクセス許可を付与するものです。

RDS インスタンスのセキュリティグループの進入ルールを変更する

  1. Amazon RDS コンソールを開きます。

  2. [Instances] を選択します。

  3. DB インスタンスのエントリの横にある矢印を選択して、ビューを展開します。

  4. [Details] タブを選択します。

  5. [Security and Network] セクションでは、DB インスタンスに関連付けられるセキュリティグループが表示されます。リンクを開いて、Amazon EC2 コンソールにセキュリティグループを表示します。

    注記

    このページで示されている [Endpoint] を後で使用できるように確認します。

  6. セキュリティグループの詳細で、[Inbound] タブを選択します。

  7. [Edit] を選択します。

  8. [Add Rule] を選択します。

  9. [Type] で、アプリケーションが使用する DB エンジンを選択します。

  10. [Source] で、[Custom ] を選択し、続いてセキュリティグループのグループ ID を入力します。これにより、セキュリティグループのリソースが、同じグループ内の他のリソースからのトラフィックをデータベースポートで受信することを可能にします。

  11. [Save] を選択します。

DB インスタンスの作成には約 10 分かかります。 その間に、Elastic Beanstalk 環境を起動します。

Elastic Beanstalk 環境を起動する

AWS マネジメントコンソール を使用して、Elastic Beanstalk 環境を起動します。 PHP 5.6 プラットフォーム設定を選択し、デフォルト設定およびサンプルコードを受け入れます。 データベースに接続するために環境を設定したら、GitHub からダウンロードしたサンプルアプリケーションをデプロイします。

環境を起動するには(コンソール)

  1. 次の事前に設定されたリンクで、Elastic Beanstalk コンソールを開きます: console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

  2. [Platform] に、アプリケーションで使用される言語に一致するプラットフォームを選択します。

  3. [App code] で、[Sample application] を選択します。

  4. [Review and launch] を選択します。

  5. すべてのオプションを確認し、これらのオプションが適正であれば、[アプリの作成] を選択します。

環境の作成には約 5 分かかります。

セキュリティグループ、環境プロパティ、およびスケーリングの設定

次に、実行中の環境に DB インスタンスのセキュリティグループを追加します。この手順によって、アタッチされる追加のセキュリティグループを使用して、Elastic Beanstalk が環境内のすべてのインスタンスの再プロビジョニングを行います。

環境にセキュリティグループを追加するには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [Instances] 設定アイコン (  を編集します。 ) を選択します。

  5. [EC2 security groups] で、自動生成されるセキュリティグループ名の後にコンマを入力し、続いて RDS DB インスタンスのセキュリティグループの名前を入力します。デフォルトでは、RDS コンソールが rds-launch-wizard というセキュリティグループを作成します。

  6. [Apply] を選択します。.

  7. 警告を読み取って、[Save] を選択します。

次に、環境プロパティを使用して環境に接続情報を渡します。サンプルアプリケーションは、環境内でデータベースをプロビジョニングする場合、Elastic Beanstalk 設定と一致するプロパティのデフォルトセットを使用します。

Amazon RDS DB インスタンスの環境プロパティを設定するには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [Software Configuration] セクションで、  を編集します。 を選択します。

  5. [Environment Properties] セクションで、アプリケーションが読み取る変数を定義して、接続文字列を構成します。統合された RDS DB インスタンスがある環境との互換性を考慮して、次を使用します。

    • RDS_HOSTNAME – DB インスタンスのホスト名。

      Amazon RDS コンソールラベル – [エンドポイント] は、ホスト名とポートを組み合わせたものです。

    • RDS_PORT – DB インスタンスが接続を許可するポート。デフォルト値は DB エンジンによって異なります。

      Amazon RDS コンソールラベル – [ポート]

    • RDS_DB_NAME – データベース名、ebdb

      Amazon RDS コンソールラベル – [DB 名前]

    • RDS_USERNAME – お客様のデータベース用に設定したユーザー名。

      Amazon RDS コンソールラベル – [ユーザー名]

    • RDS_PASSWORD – お客様のデータベース用に設定したパスワード。

    プラス記号 (+) を選択して、プロパティを追加します。

  6. [Apply] を選択します。

最後に、より高いインスタンス数で、Auto Scaling 環境グループを設定します。 環境のウェブサーバーが、単一障害点となることを防ぎ、サイトをサービス停止状態にせずに変更をデプロイすることができるように、常に少なくとも 2 つのインスタンスを実行します。

高可用性のために環境の Auto Scaling グループを設定するには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [Scaling] を選択します。

  5. Auto Scaling では、[Minimum instance count]2 に、[Maximum instance count]2 よりも高い値に設定します。

  6. [Apply] を選択します。

サンプルアプリケーションをデプロイする

これで環境がサンプルアプリケーションを実行し、Amazon RDS に接続する準備ができました。 環境にサンプルアプリケーションをデプロイします。

注記

まだ行っていない場合は、GitHub からソースバンドルをダウンロードします。eb-demo-php-simple-app-1.1.zip

ソースバンドルをデプロイするには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Upload and Deploy] を選択します。

  4. [Browse] を選択してソースバンドルをアップロードします。

  5. [Deploy] を選択します。

  6. デプロイが完了したら、新しいタブのウェブサイトを開く、サイトの URL を選択します。

サイトはユーザーコメントを収集し、MySQL データベースを使用してデータを格納します。 コメントを追加するには、[Share Your Thought] を選択し、コメントを入力してから [Submit Your Thought] を選択します。 ウェブアプリはデータベースにコメントを書き込みます。それにより、環境のすべてのインスタンスで読み取りができ、インスタンスがサービス停止状態になっても、失われないようにします。

環境を起動すると、以下のリソースが作成されます。

  • EC2 インスタンス – 選択したプラットフォームでウェブアプリケーションを実行するように設定された Amazon Elastic Compute Cloud (Amazon EC2) 仮想マシン。

    各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、さまざまなソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、Apache または nginx のいずれかをウェブアプリケーションの前にリバースプロキシとして配置します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供し、アクセスログとエラーログを生成します。

  • インスタンスセキュリティグループ – ポート 80 上の進入を許可するように設定された Amazon EC2 セキュリティグループ。 このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブアプリケーションを実行している EC2 インスタンスに達することができます。 デフォルトでは、トラフィックは他のポート上で許可されません。

  • ロードバランサー – アプリケーションを実行するインスタンスにリクエストを分散するように設定された Elastic Load Balancing ロードバランサー。 ロードバランサーにより、インスタンスを直接インターネットに公開する必要もなくなります。

  • ロードバランサー セキュリティグループ – ポート 80 上の進入を許可するように設定された Amazon EC2 セキュリティグループ。 このリソースでは、インターネットからの HTTP トラフィックが、ロードバランサーに達することができます。 デフォルトでは、トラフィックは他のポート上で許可されません。

  • Auto Scaling グループ – インスタンスが終了されたか利用不可になった場合にそのインスタンスを置き換えるように設定された Auto Scaling グループ。

  • Amazon S3 バケット – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。

  • Amazon CloudWatch アラーム – お客様の環境内のインスタンスの負荷をモニタリングする 2 つの Amazon CloudWatch アラーム。負荷が高すぎたり低すぎたりする場合にトリガーされます。 アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。

  • AWS CloudFormation スタック – 環境内でリソースを起動して、設定の変更を伝達するために、Elastic Beanstalk は AWS CloudFormation を使用します。 リソースは、AWS CloudFormation マネジメントコンソールに表示できるテンプレートで定義されます。

  • ドメイン名 – ウェブアプリケーションまでのルートとなるドメイン名であり、subdomain.region.elasticbeanstalk.com という形式になります。

これらのリソースはすべて、Elastic Beanstalk により管理されます。 環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。 起動した RDS DB インスタンスは、環境外にありますので、お客様の責任において、ライフサイクルを管理してください。

注記

Elastic Beanstalk が作成する S3 バケットは、環境間で共有され、環境の終了時に削除されません。 詳細については、「Amazon S3 で Elastic Beanstalk を使用する」を参照してください。

クリーンアップ

Elastic Beanstalk での作業が完了したら、PHP 環境を終了できます。

Elastic Beanstalk 環境を終了するには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Actions] を選択してから、[Terminate Environment] を選択します。

Elastic Beanstalk は、EC2 インスタンス、ロードバランサー、セキュリティグループ、Amazon CloudWatch アラームなど、お客様の環境に関連付けられているすべての AWS リソースを終了します。

後で別のインスタンスにデータを復旧できるようにスナップショットを取得し、DB インスタンスを終了できます。

RDS DB インスタンスを削除するには

  1. Amazon RDS コンソールを開きます。

  2. [Instances] を選択します。

  3. DB インスタンスを選択します。

  4. [Instance Actions] を選択し、[Delete] を選択します。

  5. スナップショットを作成するかどうかを選択してから、[Delete] を選択します。

次のステップ

アプリケーションの開発が進むにつれ、.zip ファイルを手動で作成して Elastic Beanstalk コンソールにアップロードすることなく、環境を管理してアプリケーションをデプロイすることが必要になります。 Elastic Beanstalk コマンドラインインターフェイス(EB CLI)には、コマンドラインからアプリケーションを作成、設定して、Elastic Beanstalk 環境にデプロイするための使いやすいコマンドが用意されています。

サンプルアプリケーションは、設定ファイルを使用して、PHP 設定を設定し、存在しない場合はテーブルをデータベースに作成します。 設定ファイルを使用して、環境の作成時に時間がかかる設定更新を避けるために、インスタンスのセキュリティグループ設定を設定できます。 詳細については、「設定ファイル(.ebextensions)による高度な環境のカスタマイズ」を参照してください。

開発とテストのために、管理された DB インスタンスを環境に直接追加するために Elastic Beanstalk の機能を使用することが必要になる場合があります。 環境内でのデータベースのセットアップについては、「Elastic Beanstalk でデータベースを設定する」を参照してください。

高性能データベースが必要な場合は、Amazon Aurora の使用を検討します。 Amazon Aurora は MySQL 対応のデータベースエンジンで、商用データベース機能を低コストで提供します。 別のデータベースにアプリケーションを接続するには、セキュリティグループ設定手順を繰り返し、RDS 関連の環境プロパティを更新します

最後に、本稼働環境でアプリケーションを使用する予定の場合は、お客様の環境にカスタムドメイン名を設定し、セキュアな接続のために HTTPS を有効にすることが必要になります。