メニュー
AWS Elastic Beanstalk
開発者ガイド

外部 Amazon RDS データベースを備えた高可用性の WordPress ウェブサイトを Elastic Beanstalk にデプロイする

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

前提条件

このチュートリアルでは、Elastic Beanstalk の基本的なオペレーションと Elastic Beanstalk コンソール についてある程度の知識があることを前提としています。Elastic Beanstalk 環境をまだ起動していない場合は、「Elastic Beanstalk の使用開始」の指示に従ってまず起動してください。

このガイドの手順に従うには、コマンドを実行するためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 ($) と現在のディレクトリの名前が前に付けられて、リストに示されます。

~/eb-project$ this is a command this is output

Linux および macOS では、任意のシェルとパッケージマネージャーを使用します。Windows 10 では、Linux 用の Windows サブシステムをインストールして、Windows 統合バージョンの Ubuntu および Bash を入手できます。

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

このチュートリアルは、WordPress バージョン 4.9.5 と PHP 7.0 を使用して作成しました。

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. [DB インスタンスの起動] を選択します。

  4. データベースエンジンを選択します。[次へ] を選択します。

  5. プロンプトに応じて、ユースケースを選択します。

  6. [DB 詳細の指定] で、デフォルト設定を確認し、必要に応じて調整します。以下のオプションに注目します。

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

    • [マルチ AZ 配置] – 高可用性を実現するには、[別のゾーンにレプリカを作成します] を設定します。

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

  7. [次へ] を選択します。

  8. [データベースオプション] で、[データベース名] に「ebdb」と入力します。後で使用できるように、[データベースポート] の値を書き留めます。

  9. その他のオプションのデフォルト設定を確認し、[Launch DB Instance (DB インスタンスの起動)] を選択します。

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

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

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

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

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

  4. [詳細] セクションで、このページに表示される [サブネット]、[セキュリティグループ]、[エンドポイント] を書き留めます。これらの情報は後で必要になります。

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

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

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

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

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

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

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

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

WordPress のダウンロード

AWS Elastic Beanstalk を使用して WordPress のデプロイを準備するには、WordPress ファイルをコンピュータにコピーして、いくつかの設定情報を提供する必要があります。

WordPress プロジェクトを作成するには

  1. WordPress を wordpress.org からダウンロードします。

    ~$ curl https://wordpress.org/wordpress-4.9.5.tar.gz -o wordpress.tar.gz
  2. 設定ファイルをサンプルリポジトリからダウンロードします。

    ~$ wget https://github.com/aws-samples/eb-php-wordpress/releases/download/v1.1/eb-php-wordpress-v1.zip
  3. WordPress を抽出してフォルダ名を変更します。

    ~$ tar -xvf wordpress.tar.gz ~$ mv wordpress wordpress-beanstalk ~$ cd wordpress-beanstalk
  4. インストールした WordPress で設定ファイルを抽出します。

    ~/wordpress-beanstalk$ unzip ../eb-php-wordpress-v1.zip creating: .ebextensions/ inflating: .ebextensions/dev.config inflating: .ebextensions/efs-create.config inflating: .ebextensions/efs-mount.config inflating: .ebextensions/loadbalancer-sg.config inflating: .ebextensions/wordpress.config inflating: LICENSE inflating: README.md inflating: wp-config.php

Elastic Beanstalk 環境を起動する

AWS マネジメントコンソール を使用して、Elastic Beanstalk 環境を作成します。[PHP] プラットフォームを選択し、デフォルト設定およびサンプルコードを受け入れます。データベースに接続するように環境を設定したら、WordPress コードを環境にデプロイします。

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

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

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

  3. [Application code] に、[Sample application] を選択します。

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

  5. 使用できるオプションを確認します。その内容でよければ、[Create app] を選択します。

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

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

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

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

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

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

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

  4. [インスタンス] 設定カードで、[変更] を選択します。

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

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

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

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

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

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

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

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

  4. [ソフトウェア] 設定カードで、[変更] を選択します。

  5. [環境プロパティ] セクションで変数を定義し、これをアプリケーションで読み取って接続文字列を構成します。統合された 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 – お客様のデータベース用に設定したパスワード。

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

アプリケーションの設定とデプロイ

以下に示すように、wordpress-beanstalk フォルダの構造が正しいことを確認してください。

wordpress-beanstalk$ tree -aL 1 . ├── .ebextensions ├── index.php ├── LICENSE ├── license.txt ├── readme.html ├── README.md ├── wp-activate.php ├── wp-admin ├── wp-blog-header.php ├── wp-comments-post.php ├── wp-config.php ├── wp-config-sample.php ├── wp-content ├── wp-cron.php ├── wp-includes ├── wp-links-opml.php ├── wp-load.php ├── wp-login.php ├── wp-mail.php ├── wp-settings.php ├── wp-signup.php ├── wp-trackback.php └── xmlrpc.php

プロジェクトリポジトリのカスタマイズした wp-config.php ファイルでは、前のステップで定義した環境変数を使用してデータベース接続を設定します。.ebextensions フォルダ内の設定ファイルでは、Elastic Beanstalk 環境内に追加のリソースを作成します。

設定ファイルをアカウントで使用するには、変更が必要です。ファイル内のプレースホルダ値を適切な ID に置き換えて、ソースバンドルを作成します。

設定ファイルを更新してソースバンドルを作成するには

  1. 設定ファイルを次のように変更します。

    • .ebextensions/dev.config – 環境へのアクセスを IP アドレスに制限して、WordPress のインストールプロセス中に環境を保護します。ファイルの先頭にあるプレースホルダー IP アドレスをパブリック IP アドレスに置き換えます。

    • .ebextensions/efs-create.config – VPC 内の各アベイラビリティーゾーン/サブネットに EFS ファイルシステムとマウントポイントを作成します。Amazon VPC コンソールで、デフォルトの VPC とサブネット ID を特定します。

  2. プロジェクトフォルダのファイルを含むソースバンドルを作成します。次のコマンドでは、wordpress-beanstalk.zip というソースバンドルが作成されます。

    ~/eb-wordpress$ zip ../wordpress-beanstalk.zip -r * .[^.]*

ソースバンドルを Elastic Beanstalk にアップロードして WordPress を環境にデプロイします。

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

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

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

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

  4. [Choose File] を選択し、ダイアログボックスを使用してソースバンドルを選択します。

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

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

WordPress のインストール

WordPress のインストールを完了するには

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

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

  3. 環境 URL を選択して、ブラウザでサイトを開きます。サイトをまだ設定していないため、WordPress のインストールウィザードにリダイレクトされます。

  4. 標準インストールを実行します。wp-config.php ファイルはすでにソースコードに存在し、環境からデータベース接続情報を読み込むように設定されています。接続を設定するよう求められません。

インストールには約 1 分かかります。

キーとソルトの更新

WordPress 設定ファイル wp-config.php は、環境プロパティからキーとソルトの値も読み込みます。現在、これらのプロパティはすべて、.ebextensions フォルダの wordpress.config ファイルによって test に設定されています。

ハッシュソルトは環境プロパティの要件を満たす任意の値にすることができますが、ソースコントロールには保存しないでください。環境でこれらのプロパティを直接設定するには、Elastic Beanstalk コンソールを使用します。

環境プロパティを更新するには

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

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

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

  4. [ソフトウェア] で、[変更] を選択します。

  5. [Environment properties] で、以下のプロパティを変更します。

    • AUTH_KEY – AUTH_KEY に選択された値。

    • SECURE_AUTH_KEY – SECURE_AUTH_KEY に選択された値。

    • LOGGED_IN_KEY – LOGGED_IN_KEY に選択された値。

    • NONCE_KEY – NONCE_KEY に選択された値。

    • AUTH_SALT – AUTH_SALT に選択された値。

    • SECURE_AUTH_SALT – SECURE_AUTH_SALT に選択された値。

    • LOGGED_IN_SALT – LOGGED_IN_SALT に選択された値。

    • NONCE_SALT — NONCE_SALT に選択された値。

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

環境のプロパティを直接設定すると、wordpress.config の値が直接上書きされます。

アクセス制限の削除

サンプルプロジェクトに含まれている設定ファイル (loadbalancer-sg.config) では、セキュリティグループを作成して、これを環境のロードバランサーに割り当てます。そのために、dev.config で設定した IP アドレスを使用して、ポート 80 経由でネットワークからの接続への HTTP アクセスを制限します。そうしないと、WordPress をインストールして管理者アカウントを設定する前に、部外者がサイトに接続する可能性があります。

WordPress のインストールが完了しました。次は、設定ファイルを削除し、サイトを公開します。

制限を削除し、環境を更新するには

  1. プロジェクトディレクトリから .ebextensions/loadbalancer-sg.config ファイルを削除します。

    ~/wordpress-beanstalk$ rm .ebextensions/loadbalancer-sg.config
  2. ソースバンドルを作成します。

    ~/eb-wordpress$ zip ../wordpress-beanstalk-v2.zip -r * .[^.]*

ソースバンドルを Elastic Beanstalk にアップロードして WordPress を環境にデプロイします。

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

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

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

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

  4. [Choose File] を選択し、ダイアログボックスを使用してソースバンドルを選択します。

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

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

Auto Scaling グループの設定

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

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

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

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

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

  4. [キャパシティー] 設定カードで、[変更] を選択します。

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

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

複数のインスタンスにわたるコンテンツのアップロードをサポートするために、サンプルプロジェクトでは Amazon Elastic File System を使用して共有ファイルシステムを作成します。サイトで投稿を作成し、コンテンツをアップロードして共有ファイルシステムに保存します。投稿を表示して両方のインスタンスをヒットするまでページを複数回更新し、共有ファイルシステムが動作していることを検証します。

WordPress のアップグレード

新しいバージョンの WordPress にアップグレードするには、サイトをバックアップして新しい環境にデプロイします。WordPress 内の更新機能を使用したり、新しいバージョンを使用するようにソースファイルを更新しないでください。どちらのアクションでも、投稿 URL は (データベースとファイルシステムには残りますが) 404 エラーを返す場合があります。

WordPress をアップグレードするには

  1. WordPress 管理コンソールのエクスポートツールを使用して、投稿を XML ファイルにエクスポートします。

  2. 旧バージョンのインストールに使用したのと同じ手順を使用して、新しいバージョンの WordPress を Elastic Beanstalk にデプロイしてインストールします。ダウンタイムを避けるには、新しいバージョンで新しい環境を作成できます。

  3. 新しいバージョンで、WordPress インポートツールを管理コンソールにインストールし、これを使用して投稿が含まれている XML ファイルをインポートします。投稿が旧バージョンの管理者ユーザーによって作成されている場合は、管理者ユーザーをインポートしないで、投稿を新しいサイトの管理者ユーザーに割り当てます。

  4. 新しいバージョンを別の環境にデプロイした場合は、CNAME スワップを実行して旧サイトのユーザーを新サイトにリダイレクトします。

クリーンアップ

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

Elastic Beanstalk 環境を終了するには

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

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

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

  4. [Confirm Termination] ダイアログボックスに環境名を入力し、[Terminate] を選択します。

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

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

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 を有効にすることが必要になります。