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

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

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

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

前提条件

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

Amazon Relational Database Service (Amazon RDS) タスクのためのこのチュートリアルの手順は、リソースをデフォルト Amazon Virtual Private Cloud (Amazon 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. ナビゲーションペインで、[Databases] (データベース) を選択します。

  3. [データベースの作成] を選択します。

  4. [Standard Create (標準作成)] を選択します。

    重要

    [Easy Create (簡易作成)] を選択しないでください。この RDS DB の起動に必要な設定をお客様が定義することはできません。

  5. [Additional configuration (追加の設定)] の [Initial database name (初期データベース名)] に 「ebdb」と入力します。

  6. デフォルト設定をよく確認し、必要に応じて調整します。以下のオプションに注目します。

    • DB インスタンスクラス – ワークロードに適したメモリ量と CPU 能力があるインスタンスサイズを選択します。

    • [マルチ AZ 配置] – 高可用性を得るには、これを [Create an Aurora Replica/Reader node in a different AZ (異なる AZ に Aurora レプリカ/リーダーノードを作成)] に設定します。

    • マスターユーザー名マスターパスワード – データベースのユーザー名とパスワード。後で使用するため、これらの設定を書き留めておきます。

  7. 残りのオプションのデフォルト設定を確認し、[データベースの作成] を選択します。

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

RDS インスタンスのセキュリティグループのインバウンドルールを変更するには

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

  2. [データベース] を選択します。

  3. 詳細を表示する DB インスタンスの名前を選択します。

  4. [接続] セクションで、後に情報を使用するために、このページに表示されるサブネットセキュリティグループエンドポイントをメモします。

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

    
        Amazon RDS コンソールの [DB インスタンス] ページの [接続] セクション
  6. セキュリティグループの詳細で、インバウンド を選択します。

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

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

  9. タイプ として、アプリケーションが使用する DB エンジンを選択します。

  10. ソース として、sg- と入力して、使用可能なセキュリティグループのリストを表示します。現在のセキュリティグループを選択し、このセキュリティグループのリソースが、同じグループ内の他のリソースからのトラフィックをデータベースポートで受信することを許可します。

    
        Amazon EC2 コンソールのセキュリティグループのインバウンドルールの編集
  11. [Save] を選択します。

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

Elastic Beanstalk 環境の作成

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

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

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

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

  3. アプリケーションコード として、サンプルアプリケーション を選択します。

  4. 確認と起動 を選択します。

  5. 使用できるオプションを確認します。使用する有効なオプションを選択し、準備ができたら [アプリの作成] を選択します。

環境の作成の所要時間は約 5 分です。以下のリソースが作成されます。

  • 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 つの CloudWatch アラーム。アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。

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

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

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

注記

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

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

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

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

  • 次のいずれかを行ってください。

    • Elastic Beanstalk コンソールを使用してセキュリティグループを追加するには

      1. Elastic Beanstalk コンソールを開き、[リージョン] のリストで AWS リージョンを選択します。

      2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

        注記

        環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

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

      4. [インスタンス] 設定カテゴリで、[編集] を選択します。

      5. EC2 セキュリティグループ で、Elastic Beanstalk が作成するインスタンスセキュリティグループに加えて、インスタンスにアタッチするセキュリティグループを選択します。

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

      7. 警告を読んでから、確認 を選択します。

    • 設定ファイルを使用してセキュリティグループを追加するには 、securitygroup-addexisting.config サンプルファイルを使用します。

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

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

  1. Elastic Beanstalk コンソールを開き、[リージョン] のリストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

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

  4. [ソフトウェア] 設定カテゴリで、[編集] を選択します。

  5. [環境プロパティ] セクションで、アプリケーションが読み取る変数を定義して、接続文字列を構成します。統合された RDS DB インスタンスがある環境との互換性を考慮して、以下の名前と値を使用します。パスワードを除くすべての値は、RDS コンソールで見つかります。

    プロパティ名 説明 プロパティ値

    RDS_HOSTNAME

    DB インスタンスのホスト名。

    Amazon RDS コンソールの [Connectivity & security (接続とセキュリティ)] タブ: [Endpoint (エンドポイント)]。

    RDS_PORT

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

    Amazon RDS コンソールの [Connectivity & security (接続とセキュリティ)] タブ: [Port (ポート)]。

    RDS_DB_NAME

    データベース名 ebdb

    Amazon RDS コンソールの [設定] タブ: [DB 名]。

    RDS_USERNAME

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

    Amazon RDS コンソールの [設定] タブ: [マスターユーザー名]。

    RDS_PASSWORD

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

    Amazon RDS コンソールでは参照できません。

    
        RDS プロパティが追加された環境プロパティ設定セクション
  6. [Apply] を選択します。

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

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

  1. Elastic Beanstalk コンソールを開き、[リージョン] のリストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

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

  4. [キャパシティー] 設定カテゴリで、[編集] を選択します。

  5. Auto Scaling グループ セクションで、最小インスタンス数2 に設定します。

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

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

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

注記

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

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

  1. Elastic Beanstalk コンソールを開き、[リージョン] のリストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. 環境の概要ページで、[Upload and deploy (アップロードとデプロイ)] を選択します。

  4. 画面上のダイアログボックスを使用して、ソースバンドルをアップロードします。

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

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

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

クリーンアップ

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

Elastic Beanstalk 環境を終了するには

  1. Elastic Beanstalk コンソールを開き、[リージョン] のリストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. 環境アクション を選択してから、[Terminate environment (環境の終了)] を選択します。

  4. 画面上のダイアログボックスを使用して、環境の終了を確認します。

Elastic Beanstalk を使用すると、いつでもアプリケーション用の新しい環境を簡単に作成できます。

さらに、Elastic Beanstalk 環境の外に作成したデータベースリソースを終了できます。Amazon RDS DB インスタンスを終了する場合、スナップショットを作成し、後で別のインスタンスにデータを復元できます。

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

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

  2. [データベース] を選択します。

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

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

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

次のステップ

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

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

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

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

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