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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

このチュートリアルでは、 の外部で RDS DB インスタンスを起動し AWS Elastic Beanstalk、PHP アプリケーションを実行する高可用性環境を設定して接続するプロセスについて説明します。Elastic Beanstalk の外部で DB インスタンスを実行すると、データベースが環境のライフサイクルから切り離されます。これにより、複数の環境から同じデータベースに connect したり、あるデータベースから別のデータベースに切り替えたり、データベースに影響を与えずに 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. ナビゲーションペインで [データベース] を選択します。

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

  4. [Standard Create (スタンダード作成)] を選択します。

    重要

    [Easy Create (簡易作成)] を選択しないでください。これを選択した場合、この RDS DB の起動に必要な設定ができません。

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

  6. デフォルト設定を確認し、特定の要件に従ってこれらの設定を調整します。以下のオプションに注目します。

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

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

    • [Master username (マスター・ユーザーネーム)] と [Master password (マスターパスワード)] – データベースのユーザー名とパスワード。後で使用するため、これらの設定を書き留めておきます。

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

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

RDS インスタンスにアタッチされているセキュリティグループのインバウンドルールを変更するには
  1. Amazon RDS コンソールを開きます。

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

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

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

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

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

  7. Edit (編集) を選択します。

  8. ルールの追加] を選択します。

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

  10. 出典 として、sg- と入力して、使用可能なセキュリティグループのリストを表示します。Elastic Beanstalk 環境で使用される Auto Scaling グループに関連付けられているセキュリティグループを選択します。これは、環境内の Amazon EC2 インスタンスがデータベースにアクセスできるようにするためです。

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

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

Elastic Beanstalk 環境の作成

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

環境を起動するには (コンソール)
  1. 次の事前設定済みリンク console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced を使用して Elastic Beanstalk コンソールを開きます。

  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 グループはレスポンスとしてスケールアップまたはダウンを行います。

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

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

    注記

    Elastic Beanstalk アプリケーションのセキュリティを強化するため、elasticbeanstalk.com ドメインはパブリックサフィックスリスト (PSL) に登録されています。セキュリティ強化のため、Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密な Cookie を設定する必要が生じた場合は、__Host- プレフィックスの付いた Cookie の使用をおすすめします。この方法は、ドメインをクロスサイトリクエストフォージェリ (CSRF) の攻撃から守るのに役立ちます。詳細については、Mozilla 開発者ネットワークの「Set-Cookie」ページを参照してください。

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

注記

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

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

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

環境にセキュリティグループを追加するには
  • 次のいずれかを行います。

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

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

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

        注記

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

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

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

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

      6. ページの最下部で [適用] を選択し変更を保存します。

      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 (Connectivityとセキュリティ)] タブ: [Endpoint (エンドポイント)]。

    RDS_PORT

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

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

    RDS_DB_NAME

    データベース名 ebdb

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

    RDS_USERNAME

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

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

    RDS_PASSWORD

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

    Amazon RDS コンソールではリファレンスできません。

    
        RDS プロパティが追加された環境プロパティ設定セクション
  6. ページの最下部で [適用] を選択し変更を保存します。

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

高可用性のために環境の Auto Scaling グループを設定するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

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

    注記

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

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

  4. [容量] 設定カテゴリで、[編集] を選択します。

  5. [Auto Scaling group (Auto Scaling グループ)] セクションで、[Min instances (最小インスタンス数)] を 2 に設定します。

  6. ページの最下部で [適用] を選択し変更を保存します。

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

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

注記

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

出典バンドルをデプロイするには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

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

    注記

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

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

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

  5. [デプロイ] を選択します。

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

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

クリーンアップ

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

Elastic Beanstalk 環境を終了するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

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

    注記

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

  3. [Actions] (アクション)、[Terminate environment] (環境の終了) の順に選択します。

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

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

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

RDS DB インスタンスを終了するには
  1. Amazon RDS コンソールを開きます。

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

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

  4. [アクション] を選択し、[削除] を選択します。

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

次のステップ

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

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

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

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

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