

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

# Elastic Beanstalk での PHP の高度な例
<a name="php-samples"></a>

で PHP アプリケーションの使用を開始するには AWS Elastic Beanstalk、 環境にデプロイする最初のアプリケーションバージョンとしてアップロードするアプリケーション[ソースバンドル](applications-sourcebundle.md)が必要です。

EB CLI を使用してデプロイされたシンプルな PHP アプリケーションの使用を開始するには、[PHP の QuickStart](php-quickstart.md) をお勧めします。

**Topics**
+ [データベースを追加します](create_deploy_PHP.rds.md)
+ [チュートリアル - Laravel](php-laravel-tutorial.md)
+ [チュートリアル - CakePHP](php-cakephp-tutorial.md)
+ [チュートリアル - Symfony](php-symfony-tutorial.md)
+ [チュートリアル - HA プロダクション](php-ha-tutorial.md)
+ [チュートリアル - HA WordPress](php-hawordpress-tutorial.md)
+ [チュートリアル - HA Drupal](php-hadrupal-tutorial.md)

# PHP Elastic Beanstalk 環境に Amazon RDS DB インスタンスを追加する
<a name="create_deploy_PHP.rds"></a>

このトピックでは、Elastic Beanstalk コンソールを使用して Amazon RDS を作成する手順について説明します。Amazon Relational Database Service (Amazon RDS) DB インスタンスを使用して、アプリケーションによって収集および変更されたデータを保存することができます。データベースを環境に結合して Elastic Beanstalk で管理することも、分離したものとして作成して別のサービスで外部的に管理することもできます。これらの手順では、データベースは環境に結合され、Elastic Beanstalk によって管理されます。Amazon RDS と Elastic Beanstalk の統合の詳細については、「[Elastic Beanstalk 環境にデータベースを追加する](using-features.managing.db.md)」を参照してください。

**Topics**
+ [環境に DB インスタンスを追加](#php-rds-create)
+ [ドライバのダウンロード](#php-rds-drivers)
+ [PDO または MySQLi を使用してデータベースに接続](#php-rds-connect)
+ [Symfony を使用してデータベースに接続する](#php-rds-symfony)

## 環境に DB インスタンスを追加
<a name="php-rds-create"></a>

**お客様の環境に DB インスタンスを追加するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. [**データベース**] 設定カテゴリで、[**編集**] を選択します。

1. DB エンジンを選択して、ユーザー名とパスワードを入力します。

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

DB インスタンスの追加には約 10 分かかります。環境の更新が完了すると、DB インスタンスのホスト名とその他の接続情報は以下の環境プロパティを通じてアプリケーションに使用できるようになります。


| プロパティ名 | 説明 | プロパティ値 | 
| --- | --- | --- | 
|  `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 コンソールではリファレンスできません。  | 

Elastic Beanstalk 環境と結合したデータベースインスタンスの設定の詳細については、「[Elastic Beanstalk 環境にデータベースを追加する](using-features.managing.db.md)」を参照してください。

## ドライバのダウンロード
<a name="php-rds-drivers"></a>

PHP データオブジェクト (PDO) を使用してデータベースに connect するには、選択したデータベースエンジンに一致するドライバーをインストールします。
+ **MySQL** – [http://php.net/manual/en/ref.pdo-mysql.php](http://php.net/manual/en/ref.pdo-mysql.php)
+ **PostgreSQL** – [http://php.net/manual/en/ref.pdo-pgsql.php](http://php.net/manual/en/ref.pdo-pgsql.php)
+ **Oracle** – [http://php.net/manual/en/ref.pdo-oci.php](http://php.net/manual/en/ref.pdo-oci.php)
+ **SQL Server** – [http://php.net/manual/en/ref.pdo-sqlsrv.php](http://php.net/manual/en/ref.pdo-sqlsrv.php)

詳細については、「[http://php.net/manual/en/pdo.installation.php](http://php.net/manual/en/pdo.installation.php)」を参照してください。

## PDO または MySQLi を使用してデータベースに接続
<a name="php-rds-connect"></a>

`$_SERVER[`VARIABLE`]` を使用して、環境から接続情報の読み取りができます。

PDO では、ホスト、ポート、名前からデータソース名 (DSN) を作成します。データベースのユーザー名とパスワードを使用して、[PDO のコンストラクタ](https://php.net/manual/en/pdo.construct.php)に DSN を渡します。

**Example PDO - MySQL を使用して RDS データベースに connect する**  

```
<?php
$dbhost = $_SERVER['RDS_HOSTNAME'];
$dbport = $_SERVER['RDS_PORT'];
$dbname = $_SERVER['RDS_DB_NAME'];
$charset = 'utf8' ;

$dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname};charset={$charset}";
$username = $_SERVER['RDS_USERNAME'];
$password = $_SERVER['RDS_PASSWORD'];

$pdo = new PDO($dsn, $username, $password);
?>
```

他のドライバーについては、`mysql` をドライバー (`pgsql`、`oci`、または `sqlsrv`) の名前に置き換えます。

MySQLi については、ホスト名、ユーザー名、パスワード、データベース名、およびポートを `mysqli` コンストラクタに渡します。

**Example mysqli\$1connect() を使用して RDS データベースに接続する**  

```
$link = new mysqli($_SERVER['RDS_HOSTNAME'], $_SERVER['RDS_USERNAME'], $_SERVER['RDS_PASSWORD'], $_SERVER['RDS_DB_NAME'], $_SERVER['RDS_PORT']);
```

## Symfony を使用してデータベースに接続する
<a name="php-rds-symfony"></a>

Symfony バージョン 3.2 以降については、`%env(PROPERTY_NAME)%` を使用し、Elastic Beanstalk で設定された環境プロパティに基づいて設定ファイルのデータベースパラメータを設定します。

**Example app/config/parameters.yml**  

```
parameters:
    database_driver:   pdo_mysql
    database_host:     '%env(RDS_HOSTNAME)%'
    database_port:     '%env(RDS_PORT)%'
    database_name:     '%env(RDS_DB_NAME)%'
    database_user:     '%env(RDS_USERNAME)%'
    database_password: '%env(RDS_PASSWORD)%'
```

詳細については、[外部パラメータ (Symfony 3.4)](http://symfony.com/doc/3.4/configuration/external_parameters.html) に関する記事を参照してください。

旧バージョンの Symfony については、`SYMFONY__` で始まる環境変数にのみアクセスできます。Elastic Beanstalk 定義の環境プロパティにはアクセスできません。また、Symfony に接続情報を渡すには、独自の環境プロパティを定義する必要があります。

Symfony 2 でデータベースに connect するには、パラメータごとに[環境プロパティを作成](create_deploy_PHP.container.md#php-console-properties)します。次に、`%property.name%` を使用して、設定ファイルの Symfony で変換された可変数にアクセスします。たとえば、`SYMFONY__DATABASE__USER` という名前の環境プロパティには `database.user` としてアクセスできます。

```
    database_user:     "%database.user%"
```

詳細については、[外部パラメータ (Symfony 2.8)](http://symfony.com/doc/2.8/configuration/external_parameters.html) に関する記事を参照してください。

# Elastic Beanstalk への Laravel アプリケーションのデプロイ
<a name="php-laravel-tutorial"></a>

Laravel は PHP 用のオープンソースのモデルビュー・コントローラー（MVC）フレームワークです。このチュートリアルでは、Laravel アプリケーションを生成して AWS Elastic Beanstalk 環境にデプロイし、Amazon Relational Database Service (Amazon RDS) データベースインスタンスに接続するように設定するプロセスについて説明します。

**Topics**
+ [前提条件](#php-laravel-tutorial-prereqs)
+ [Elastic Beanstalk 環境の起動](#php-laravel-tutorial-launch)
+ [Laravel をインストールしてウェブサイトを生成する](#php-laravel-tutorial-generate)
+ [アプリケーションをデプロイします](#php-laravel-tutorial-deploy)
+ [Composer 設定の設定](#php-laravel-tutorial-configure)
+ [お客様の環境にデータベースを追加する](#php-laravel-tutorial-database)
+ [クリーンアップ](#php-laravel-tutorial-cleanup)
+ [次の手順](#php-laravel-tutorial-nextsteps)

## 前提条件
<a name="php-laravel-tutorial-prereqs"></a>

このチュートリアルでは、基本的な Elastic Beanstalk オペレーションと Elastic Beanstalk コンソールに関する知識があることを前提としています。まだ起動していない場合は、[Elastic Beanstalk の使用を開始する方法について説明します](GettingStarted.md) の指示に従って、最初の Elastic Beanstalk 環境を起動します。

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

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

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

Laravel 6 では PHP 7.2 以降が必要です。また、Laravel 公式ドキュメントの[サーバー要件](https://laravel.com/docs/6.x/installation#server-requirements)のトピックに記載されている PHP 拡張も必要です。手順に従って、PHP と Composer をインストールします。

Laravel のサポートおよびメンテナンス情報については、Laravel 公式ドキュメントの[ support ポリシー](https://laravel.com/docs/master/releases#support-policy)のトピックをご参照ください。

## Elastic Beanstalk 環境の起動
<a name="php-laravel-tutorial-launch"></a>

Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境を作成します。[**PHP**] プラットフォームを選択し、デフォルト設定およびサンプルコードを受け入れます。

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

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

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

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

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

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

環境の作成の所要時間は約 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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

これらのリソースはすべて Elastic Beanstalk によって管理されます。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

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

## Laravel をインストールしてウェブサイトを生成する
<a name="php-laravel-tutorial-generate"></a>

以下の 1 つのコマンドで、Composer は Laravel をインストールして作業プロジェクトを作成できます。

```
~$ composer create-project --prefer-dist laravel/laravel eb-laravel
```

Composer は Laravel とその依存関係をインストールし、デフォルトのプロジェクトを生成します。

Laravel のインストール中に問題が発生した場合は、公式ドキュメント ([https://laravel.com/docs/6.x](https://laravel.com/docs/6.x)) のインストールに関するトピックをご参照ください。

## アプリケーションをデプロイします
<a name="php-laravel-tutorial-deploy"></a>

Composer で作成されたファイルを含む[出典バンドル](applications-sourcebundle.md)を作成します。次のコマンドでは、`laravel-default.zip` という出典バンドルが作成されます。`vendor` フォルダ内のファイルは除外されます。これらのファイルは、多くのスペースを使用するだけでなく、アプリケーションを Elastic Beanstalk にデプロイするのに不要です。

```
~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"
```

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

**注記**  
さらにソースバンドルを最適化するには、Git リポジトリを初期化し、[`git archive` コマンド](applications-sourcebundle.md#using-features.deployment.source.git)を使用して出典バンドルを作成します。デフォルトの Laravel プロジェクトには、`.gitignore` ファイルが含まれています。このファイルは、デプロイに不要な `vendor` フォルダと他のファイルを除外するよう Git に指示します。

## Composer 設定の設定
<a name="php-laravel-tutorial-configure"></a>

デプロイが完了したら、URL をクリックして Laravel アプリケーションをブラウザで開きます。

![\[Error message indicating no permission to access or on this server.\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-laravel-403.png)


説明 デフォルトでは、Elastic Beanstalk によってウェブサイトのルートパスにプロジェクトのルートが提供されています。この場合、デフォルトのページ（`index.php`）は `public` フォルダーの 1 レベル下にあります。URL に `/public` を追加することでこれを確認できます。例えば、`http://laravel.us-east-2.elasticbeanstalk.com/public`。

ルートパスで Laravel アプリケーションをサポートするには、Elastic Beanstalk コンソールを使用してウェブサイトの*ドキュメントルート*を設定します。

**ウェブサイトのドキュメントルートを設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

1. [**ドキュメントのルート**] に「**/public**」と入力します。

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

1. 更新が完了したら、ブラウザーでサイトを再び開くための URL をクリックします。

![\[Laravel logo with navigation menu items: Documentation, Laracasts, News, Forge, GitHub.\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-laravel-defaultnodb.png)


ここまで完了したら、次は、お客様の環境にデータベースを追加し、そのデータベースに接続するように Laravel を設定します。

## お客様の環境にデータベースを追加する
<a name="php-laravel-tutorial-database"></a>

Elastic Beanstalk 環境で RDS DB インスタンスを起動します。Elastic Beanstalk 上の Laravel では、MySQL、SQLServer、または PostgreSQL データベースを使用できます。この例では、MySQL を使用します。

**RDS DB インスタンスを Elastic Beanstalk 環境に追加するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. [**データベース**] 設定カテゴリで、[**編集**] を選択します。

1. [**エンジン**] で、[**mysql**] を選択します。

1. マスターの [**username**] と [**password**] に入力します。Elastic Beanstalk は環境プロパティを使用して、アプリケーションにこれらの値を渡します。

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

データベースインスタンスの作成には約 10 分かかります。Elastic Beanstalk 環境に結合されたデータベースの詳細については、「[Elastic Beanstalk 環境にデータベースを追加する](using-features.managing.db.md)」を参照してください。

その間に、環境から接続情報を読み取るようにソースコードを更新できます。Elastic Beanstalk は、`RDS_HOSTNAME` などの環境変数を使用して、接続の詳細をアプリケーションに渡します。

Laravel のデータベース設定は、プロジェクトコードで `database.php` フォルダ内の `config` という名前のファイルに保存されています。`mysql` エントリを見つけ、`host`、`database`、`username`、 `and password` の各変数を変更して Elastic Beanstalk から対応する値を読み取ります。

**Example \$1/Eb-laravel/config/database.php**  

```
...
    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('RDS_HOSTNAME', '127.0.0.1'),
            'port' => env('RDS_PORT', '3306'),
            'database' => env('RDS_DB_NAME', 'forge'),
            'username' => env('RDS_USERNAME', 'forge'),
            'password' => env('RDS_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
...
```

データベース接続が正しく設定されていることを確認するには、データベースに connect してデフォルトのレスポンスを返すコードを `index.php` に追加します。

**Example \$1/Eb-laravel/公開/index.php**  

```
...
if(DB::connection()->getDatabaseName())
{
   echo "Connected to database ".DB::connection()->getDatabaseName();
}
$response->send();
...
```

DB インスタンスの起動が完了したら、更新したアプリケーションのバンドルを作成し、お客様の環境にデプロイします。

**Elastic Beanstalk 環境を更新するには**

1. 新しい出典バンドルを作成します。

   ```
   ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
   ```

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

1. [**アップロードとデプロイ**] を選択します。

1. [**Browse**] を選択して `laravel-v2-rds.zip` をアップロードします。

1. [**Deploy**‬] (デプロイ) を選択します。

アプリケーションの新しいバージョンのデプロイには 1 分以上かかりません。デプロイが完了したら、ウェブ・ページを更新して、データベースに接続されたことを確認します。

![\[Laravel website header with navigation menu items for Documentation, Laracasts, News, Forge, and GitHub.\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-laravel-defaultwdb.png)


## クリーンアップ
<a name="php-laravel-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

**RDS DB インスタンスを終了するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds)を開きます。

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

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

1. **[アクション]**、**[削除]** の順に選択します。

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

## 次の手順
<a name="php-laravel-tutorial-nextsteps"></a>

Laravel の詳細については、Laravel 公式ウェブサイト ([laravel.com](https://laravel.com/)) をご覧ください。

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

このチュートリアルでは、Elastic Beanstalk コンソールを使用して Composer のオプションを設定しました。この設定をアプリケーション出典のパートにするには、次のような設定ファイルを使用できます。

**Example .ebextensions/composer.config**  

```
option_settings:
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
```

詳細については、「[設定ファイル (`.ebextensions`) による高度な環境のカスタマイズ](ebextensions.md)」を参照してください。

Elastic Beanstalk 環境で Amazon RDS DB インスタンスを実行するのは、開発とテストには最適ですが、データベースのライフサイクルがお客様の環境に結び付けられます。自身の環境の外で実行されているデータベースに接続する手順については、「[PHP Elastic Beanstalk 環境に Amazon RDS DB インスタンスを追加する](create_deploy_PHP.rds.md)」を参照してください。

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

# Elastic Beanstalk への CakePHP アプリケーションのデプロイ
<a name="php-cakephp-tutorial"></a>

CakePHP は PHP 用のオープンソースの MVC フレームワークです。このチュートリアルでは、CakePHP のプロジェクトを生成し、Elastic Beanstalk 環境にデプロイし、Amazon RDS データベースインスタンスに接続するように設定するプロセスについて説明します。

**Topics**
+ [前提条件](#php-cakephp-tutorial-prereqs)
+ [Elastic Beanstalk 環境の起動](#php-cakephp-tutorial-launch)
+ [CakePHP をインストールしてウェブサイトを生成する](#php-cakephp-tutorial-generate)
+ [アプリケーションをデプロイします](#php-cakephp-tutorial-deploy)
+ [お客様の環境にデータベースを追加する](#php-cakephp-tutorial-database)
+ [クリーンアップ](#php-cakephp-tutorial-cleanup)
+ [次の手順](#php-cakephp-tutorial-nextsteps)

## 前提条件
<a name="php-cakephp-tutorial-prereqs"></a>

このチュートリアルでは、基本的な Elastic Beanstalk オペレーションと Elastic Beanstalk コンソールに関する知識があることを前提としています。まだ起動していない場合は、[Elastic Beanstalk の使用を開始する方法について説明します](GettingStarted.md) の指示に従って、最初の Elastic Beanstalk 環境を起動します。

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

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

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

CakePHP 4 には PHP 7.4 以降が必要です。また、[CakePHP インストール](https://book.cakephp.org/4/en/installation.html)に関する公式ドキュメントに記載されている PHP 拡張も必要です。PHP と Composer の両方をインストールする必要があります。

## Elastic Beanstalk 環境の起動
<a name="php-cakephp-tutorial-launch"></a>

Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境を作成します。[**PHP**] プラットフォームを選択し、デフォルト設定およびサンプルコードを受け入れます。

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

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

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

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

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

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

環境の作成の所要時間は約 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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

これらのリソースはすべて Elastic Beanstalk によって管理されます。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

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

## CakePHP をインストールしてウェブサイトを生成する
<a name="php-cakephp-tutorial-generate"></a>

以下の 1 つのコマンドで、Composer は CakePHP をインストールして作業プロジェクトを作成できます。

```
~$ composer create-project --prefer-dist cakephp/app eb-cake
```

Composer は、CakePHP と約 20 個の依存関係をインストールし、デフォルトのプロジェクトを生成します。

CakePHP のインストール中に問題が発生した場合は、公式ドキュメントのインストールに関するトピック ([http://book.cakephp.org/4.0/en/installation.html](http://book.cakephp.org/4.0/en/installation.html)) をご参照ください。

## アプリケーションをデプロイします
<a name="php-cakephp-tutorial-deploy"></a>

Composer で作成されたファイルを含む[出典バンドル](applications-sourcebundle.md)を作成します。次のコマンドでは、`cake-default.zip` という出典バンドルが作成されます。`vendor` フォルダ内のファイルは除外されます。これらのファイルは、多くのスペースを使用するだけでなく、アプリケーションを Elastic Beanstalk にデプロイするのに不要です。

```
eb-cake zip ../cake-default.zip -r * .[^.]* -x "vendor/*"
```

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

**注記**  
さらに出典バンドルを最適化するには、Git リポジトリを初期化し、[`git archive` コマンド](applications-sourcebundle.md#using-features.deployment.source.git)を使用して出典バンドルを作成します。デフォルトの Symfony プロジェクトには、`.gitignore` ファイルが含まれています。このファイルは、デプロイに不要な `vendor` フォルダと他のファイルを除外するよう Git に指示します。

プロセスが完了したら、ブラウザで CakePHP アプリケーションを開くための URL をクリックします。

ここまで完了したら、次は、お客様の環境にデータベースを追加し、そのデータベースに接続するように CakePHP を設定します。

## お客様の環境にデータベースを追加する
<a name="php-cakephp-tutorial-database"></a>

Elastic Beanstalk 環境で Amazon RDS データベースインスタンスを起動します。Elastic Beanstalk 上の CakePHP では、MySQL、SQLServer、または PostgreSQL データベースを使用できます。この例では、PostgreSQL を使用します。

**Amazon RDS DB インスタンスを Elastic Beanstalk 環境に追加するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. [**Database (データベース)**] で、[**Edit (編集)**] を選択します。

1. [**DB engine**] で、[**postgres**] を選択します。

1. マスターの [**username**] と [**password**] に入力します。Elastic Beanstalk は環境プロパティを使用して、アプリケーションにこれらの値を渡します。

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

データベースインスタンスの作成には約 10 分かかります。その間に、環境から接続情報を読み取るようにソースコードを更新できます。Elastic Beanstalk は、`RDS_HOSTNAME` などの環境変数を使用して、接続の詳細をアプリケーションに渡します。

CakePHP のデータベース設定は、プロジェクトコードで `app.php` フォルダ内の `config` という名前のファイルにあります。このファイルを開き、`$_SERVER` から環境変数を読み取ってローカル変数に割り当てるコードをいくつか追加します。最初の行（`<?php`）の後に、以下の例で強調表示された行を挿入します。

**Example \$1/Eb-cake/config/app.php**  

```
<?php
if (!defined('RDS_HOSTNAME')) {
  define('RDS_HOSTNAME', $_SERVER['RDS_HOSTNAME']);
  define('RDS_USERNAME', $_SERVER['RDS_USERNAME']);
  define('RDS_PASSWORD', $_SERVER['RDS_PASSWORD']);
  define('RDS_DB_NAME', $_SERVER['RDS_DB_NAME']);
}
return [
...
```

データベース接続は `app.php` 内をさらに下がったセクションで設定されています。以下のセクションを見つけ、データベースエンジン (`Mysql`、`Sqlserver`、または `Postgres`) と一致するドライバの名前で、デフォルトのデータソース設定を変更し、Elastic Beanstalk から対応する値を読み取るように `host`、`username`、`password`、`database` 変数を設定します。

**Example \$1/Eb-cake/config/app.php**  

```
...
     /**
     * Connection information used by the ORM to connect
     * to your application's datastores.
     * Drivers include Mysql Postgres Sqlite Sqlserver
     * See vendor\cakephp\cakephp\src\Database\Driver for complete list
     */
    'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Postgres',
            'persistent' => false,
            'host' => RDS_HOSTNAME,
            /*
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',
            'username' => RDS_USERNAME,
            'password' => RDS_PASSWORD,
            'database' => RDS_DB_NAME,
            /*
             * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6).
             */
            //'encoding' => 'utf8mb4',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,
...
```

DB インスタンスの起動が完了したら、更新したアプリケーションのバンドルを作成し、お客様の環境にデプロイします。

**Elastic Beanstalk 環境を更新するには**

1. 新しい出典バンドルを作成します。

   ```
   ~/eb-cake$ zip ../cake-v2-rds.zip -r * .[^.]* -x "vendor/*"
   ```

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

1. [**アップロードとデプロイ**] を選択します。

1. [**Browse**] を選択して `cake-v2-rds.zip` をアップロードします。

1. [**Deploy**‬] (デプロイ) を選択します。

アプリケーションの新しいバージョンのデプロイには 1 分以上かかりません。デプロイが完了したら、ウェブ・ページを更新して、データベースに接続されたことを確認します。

![\[Green checkmark icon indicating successful database connection for CakePHP.\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-cakephp-defaultwdb.png)


## クリーンアップ
<a name="php-cakephp-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

**RDS DB インスタンスを終了するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds)を開きます。

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

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

1. **[アクション]**、**[削除]** の順に選択します。

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

## 次の手順
<a name="php-cakephp-tutorial-nextsteps"></a>

CakePHP の詳細については、ドキュメント ([book.cakephp.org](http://book.cakephp.org/4.0/en/index.html)) をお読みください。

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

Elastic Beanstalk 環境で Amazon RDS DB インスタンスを実行するのは、開発とテストには最適ですが、データベースのライフサイクルがお客様の環境に結び付けられます。自身の環境の外で実行されているデータベースに接続する手順については、「[PHP Elastic Beanstalk 環境に Amazon RDS DB インスタンスを追加する](create_deploy_PHP.rds.md)」を参照してください。

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

# Elastic Beanstalk への Symfony アプリケーションのデプロイ
<a name="php-symfony-tutorial"></a>

[Symfony](http://symfony.com/) は、動的な PHP ウェブアプリケーションを作成するためのオープンソースフレームワークです。このチュートリアルでは、Symfony アプリケーションを生成し、 AWS Elastic Beanstalk 環境にデプロイするプロセスについて説明します。

**Topics**
+ [前提条件](#php-symfony-tutorial-prereqs)
+ [Elastic Beanstalk 環境の起動](#php-symfony-tutorial-launch)
+ [Symfony をインストールしてウェブサイトを生成する](#php-symfony-tutorial-generate)
+ [アプリケーションをデプロイします](#php-symfony-tutorial-deploy)
+ [Composer 設定の設定](#php-symfony-tutorial-configure)
+ [クリーンアップ](#php-symfony-tutorial-cleanup)
+ [次の手順](#php-symfony-tutorial-nextsteps)

## 前提条件
<a name="php-symfony-tutorial-prereqs"></a>

このチュートリアルでは、基本的な Elastic Beanstalk オペレーションと Elastic Beanstalk コンソールに関する知識があることを前提としています。まだ起動していない場合は、[Elastic Beanstalk の使用を開始する方法について説明します](GettingStarted.md) の指示に従って、最初の Elastic Beanstalk 環境を起動します。

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

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

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

Symfony 4.4.9 では PHP 7.1.3 以降が必要です。また、Symfony のインストールに関する公式ドキュメントの[技術的要件](https://symfony.com/doc/4.4/setup.html )のトピックに記載されている PHP 拡張も必要です。このチュートリアルでは、PHP 7.2 と対応する Elastic Beanstalk [プラットフォームバージョン](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)を使用します。続行する前に、PHP と Composer の両方をインストールする必要があります。

Symfony のサポートおよびメンテナンス情報については、Symfony ウェブサイトの [Symfony のリリース](https://symfony.com/releases)のトピックをご参照ください。Symfony 4.4.9 の PHP バージョンサポートに関連する更新の詳細については、Symfony ウェブサイトの [Symfony 4.4.9 リリースノート](https://symfony.com/blog/symfony-4-4-9-released)のトピックをご参照ください。

## Elastic Beanstalk 環境の起動
<a name="php-symfony-tutorial-launch"></a>

Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境を作成します。[**PHP**] プラットフォームを選択し、デフォルト設定およびサンプルコードを受け入れます。

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

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

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

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

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

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

環境の作成の所要時間は約 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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

これらのリソースはすべて Elastic Beanstalk によって管理されます。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

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

## Symfony をインストールしてウェブサイトを生成する
<a name="php-symfony-tutorial-generate"></a>

Composer は、次のコマンド 1 つで Symfony をインストールし、作業プロジェクトを作成できます。

```
~$ composer create-project symfony/website-skeleton eb-symfony
```

Composer は Symfony とその依存関係をインストールし、デフォルトのプロジェクトを生成します。

Symfony のインストール中に問題が発生した場合は、Symfony の公式ドキュメントの[インストール](https://symfony.com/doc/4.4/setup.html)に関するトピックをご参照ください。

## アプリケーションをデプロイします
<a name="php-symfony-tutorial-deploy"></a>

プロジェクトディレクトリに移動します。

```
~$ cd eb-symfony
```

Composer で作成されたファイルを含む[出典バンドル](applications-sourcebundle.md)を作成します。次のコマンドでは、`symfony-default.zip` という出典バンドルが作成されます。`vendor` フォルダ内のファイルは除外されます。これらのファイルは、多くのスペースを使用するだけでなく、アプリケーションを Elastic Beanstalk にデプロイするのに不要です。

```
eb-symfony$ zip ../symfony-default.zip -r * .[^.]* -x "vendor/*"
```

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

**注記**  
さらに出典バンドルを最適化するには、Git リポジトリを初期化し、[`git archive` コマンド](applications-sourcebundle.md#using-features.deployment.source.git)を使用して出典バンドルを作成します。デフォルトの Symfony プロジェクトには、`.gitignore` ファイルが含まれています。このファイルは、デプロイに不要な `vendor` フォルダと他のファイルを除外するよう Git に指示します。

## Composer 設定の設定
<a name="php-symfony-tutorial-configure"></a>

デプロイが完了したら、URL をクリックして Symfony アプリケーションをブラウザで開きます。

説明 デフォルトでは、Elastic Beanstalk によってウェブサイトのルートパスにプロジェクトのルートが提供されています。この場合、デフォルトのページ（`app.php`）は `web` フォルダーの 1 レベル下にあります。URL に `/public` を追加することでこれを確認できます。例えば、`http://symfony.us-east-2.elasticbeanstalk.com/public`。

ルートパスで Symfony アプリケーションをサポートするには、Elastic Beanstalk コンソールを使用してウェブサイトの*ドキュメントルート*を設定します。

**ウェブサイトのドキュメントルートを設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

1. [**ドキュメントのルート**] に「**/public**」と入力します。

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

1. 更新が完了したら、ブラウザーでサイトを再び開くための URL をクリックします。

## クリーンアップ
<a name="php-symfony-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

## 次の手順
<a name="php-symfony-tutorial-nextsteps"></a>

Symfony の詳細については、[Symfony とは何か](https://symfony.com/what-is-symfony)に関する記事 (symfony.com) を参照してください。

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

このチュートリアルでは、Elastic Beanstalk コンソールを使用して Composer のオプションを設定しました。この設定をアプリケーション出典のパートにするには、次のような設定ファイルを使用できます。

**Example .ebextensions/composer.config**  

```
option_settings:
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
```

詳細については、「[設定ファイル (`.ebextensions`) による高度な環境のカスタマイズ](ebextensions.md)」を参照してください。

Symfony は、独自の設定ファイルを使用してデータベース接続を設定します。データベースと Symfony の接続手順については、「[Symfony を使用してデータベースに接続する](create_deploy_PHP.rds.md#php-rds-symfony)」を参照してください。

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

# 外部 Amazon RDS データベースを使用して高可用性の PHP アプリケーションを Elastic Beanstalk にデプロイする
<a name="php-ha-tutorial"></a>

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

チュートリアルでは、ユーザー提供のテキストデータを保存するために MySQL データベースを使用する[サンプル PHP アプリケーション](https://github.com/awslabs/eb-demo-php-simple-app)を使用します。サンプルアプリケーションは、[設定ファイル](ebextensions.md)を使用して、[PHP 設定](create_deploy_PHP.container.md#php-namespaces)を設定し、アプリケーションが使用するデータベース内にテーブルを作成します。[Composer ファイル](create_deploy_PHP.container.md#php-configuration-composer)を使用して、デプロイの間にパッケージをインストールする方法も示します。

**Topics**
+ [前提条件](#php-hawrds-tutorial-prereqs)
+ [Amazon RDS に DB インスタンスを起動する](#php-hawrds-tutorial-database)
+ [Elastic Beanstalk 環境の作成](#php-hawrds-tutorial-create)
+ [セキュリティグループ、環境プロパティ、およびスケーリングの設定](#php-hawrds-tutorial-configure)
+ [サンプルアプリケーションをデプロイする](#php-hawrds-tutorial-deploy)
+ [クリーンアップ](#php-hawrds-tutorial-cleanup)
+ [次の手順](#php-hawrds-tutorial-nextsteps)

## 前提条件
<a name="php-hawrds-tutorial-prereqs"></a>

スタートする前に、サンプルアプリケーション出典バンドルを GitHub からダウンロードします。[eb-demo-php-simple-app-1.3.zip](https://github.com/aws-samples/eb-demo-php-simple-app/releases/download/v1.3/eb-demo-php-simple-app-v1.3.zip)

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

## Amazon RDS に DB インスタンスを起動する
<a name="php-hawrds-tutorial-database"></a>

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 コンソール](https://console.aws.amazon.com/rds/home)を開きます。

1. ナビゲーションペインで、[**データベース**] を選択します。

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

1. [**Standard Create (スタンダード作成)**] を選択します。
**重要**  
[**Easy Create (簡易作成)**] を選択しないでください。これを選択した場合、この RDS DB の起動に必要な設定ができません。

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

1. デフォルト設定を確認し、特定の要件に従ってこれらの設定を調整します。以下のオプションに注目します。
   + **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 (マスターパスワード)**] – データベースのユーザー名とパスワード。後で使用するため、これらの設定を書き留めておきます。

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

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

**RDS インスタンスにアタッチされているセキュリティグループのインバウンドルールを変更するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds/home)を開きます。

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

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

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

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

1. セキュリティグループの詳細で、**インバウンド** を選択します。

1. **[編集]** を選択します。

1. **[ルールの追加]** を選択します。

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

1. **出典** として、**sg-** と入力して、使用可能なセキュリティグループのリストを表示します。Elastic Beanstalk 環境で使用される Auto Scaling グループに関連付けられているセキュリティグループを選択します。これは、環境内の Amazon EC2 インスタンスがデータベースにアクセスできるようにするためです。  
![\[Amazon EC2 コンソールのセキュリティグループのインバウンドルールを編集する画面の画像。\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. **[保存]** を選択します。

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

## Elastic Beanstalk 環境の作成
<a name="php-hawrds-tutorial-create"></a>

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

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

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

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

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

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

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

環境の作成の所要時間は約 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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

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

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

## セキュリティグループ、環境プロパティ、およびスケーリングの設定
<a name="php-hawrds-tutorial-configure"></a>

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

**環境にセキュリティグループを追加するには**
+ 次のいずれかを行います。
  + Elastic Beanstalk コンソールを使用してセキュリティグループを追加するには

    1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

    1. 警告を読み取り、**確認** を選択します。
  + [設定ファイル](ebextensions.md)を使用してセキュリティグループを追加するには、[https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) サンプルファイルを使用します。

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

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

1. [**環境プロパティ**] セクションで、アプリケーションが読み取りする変数を定義して、接続文字列を構成します。統合された RDS DB インスタンスがある環境との互換性を考慮して、以下の名前と値を使用します。パスワードを除くすべての値は、[RDS コンソール](https://console.aws.amazon.com/rds/home)で見つかります。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/php-ha-tutorial.html)  
![\[RDS プロパティが追加された環境プロパティ設定セクション\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

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

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

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

## サンプルアプリケーションをデプロイする
<a name="php-hawrds-tutorial-deploy"></a>

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

**注記**  
GitHub から出典バンドルをダウンロードしていない場合は、ダウンロードします。[eb-demo-php-simple-アプリケーション-1.3.zip](https://github.com/aws-samples/eb-demo-php-simple-app/releases/download/v1.3/eb-demo-php-simple-app-v1.3.zip)

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

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

![\[User interface for sharing thoughts, with a posted comment about Elastic Beanstalk on AWS.\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-ha-tutorial-app.png)


## クリーンアップ
<a name="php-hawrds-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

**RDS DB インスタンスを終了するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds)を開きます。

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

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

1. **[アクション]**、**[削除]** の順に選択します。

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

## 次の手順
<a name="php-hawrds-tutorial-nextsteps"></a>

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

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

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

高パフォーマンスデータベースが必要な場合は、[Amazon Aurora](https://aws.amazon.com/rds/aurora/) の使用を検討します。Amazon Aurora は MySQL 対応のデータベースエンジンで、商用データベースの特徴を低コストで提供します。別のデータベースにアプリケーションに connect するには、[セキュリティグループ設定](#php-hawrds-tutorial-database)ステップを繰り返し、[RDS 関連の環境プロパティを更新](#php-hawrds-tutorial-configure)します。

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

# 外部 Amazon RDS データベースを使用して高可用性の WordPress ウェブサイトを Elastic Beanstalk にデプロイする
<a name="php-hawordpress-tutorial"></a>

このチュートリアルでは、外部にある [Amazon RDS DB インスタンスを起動](AWSHowTo.RDS.md)する方法と AWS Elastic Beanstalk、WordPress ウェブサイトを実行する高可用性環境を設定して接続する方法について説明します。ウェブサイトでは、アップロードされたファイルの共有ストレージとして Amazon Elastic File System (Amazon EFS) を使用しています。

Elastic Beanstalk の外部で DB インスタンスを実行すると、データベースが環境のライフサイクルから切り離されます。これにより、複数の環境から同じデータベースに connect したり、あるデータベースから別のデータベースに切り替えたり、データベースに影響を与えずに [Blue/Green デプロイ](using-features.CNAMESwap.md)を実行したりできます。

**注記**  
WordPress のバージョンとの PHP リリースの互換性に関する最新情報については、WordPress のウェブサイトの [PHP の互換性と WordPress のバージョン](https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/)をご参照ください。WordPress 実装用の新しいリリースの PHP にアップグレードする前に、この情報をリファレンスしてください。

**Topics**
+ [前提条件](#php-wordpress-tutorial-prereqs)
+ [Amazon RDS に DB インスタンスを起動する](#php-hawordpress-tutorial-database)
+ [WordPress のダウンロード](#php-hawordpress-tutorial-download)
+ [Elastic Beanstalk 環境の起動](#php-hawordpress-tutorial-launch)
+ [セキュリティグループおよび環境プロパティの設定](#php-wordpress-tutorial-configure)
+ [アプリケーションの設定とデプロイ](#php-wordpress-tutorial-deploy)
+ [WordPress のインストール](#php-hawordpress-tutorial-install)
+ [キーとソルトの更新](#php-hawordpress-tutorial-updatesalts)
+ [アクセス制限の削除](#php-hawordpress-tutorial-updateenv)
+ [Auto Scaling グループの設定](#php-hawordpress-tutorial-autoscaling)
+ [WordPress のアップグレード](#php-hawordpress-tutorial-upgrade)
+ [クリーンアップ](#php-hawordpress-tutorial-cleanup)
+ [次の手順](#php-hawordpress-tutorial-nextsteps)

## 前提条件
<a name="php-wordpress-tutorial-prereqs"></a>

このチュートリアルでは、基本的な Elastic Beanstalk オペレーションと Elastic Beanstalk コンソールに関する知識があることを前提としています。まだ起動していない場合は、[Elastic Beanstalk の使用を開始する方法について説明します](GettingStarted.md) の指示に従って、最初の Elastic Beanstalk 環境を起動します。

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

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

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

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

**AWS リージョン**  
サンプルアプリケーションは、Amazon EFS をサポートする AWS リージョンでのみ機能する Amazon EFS を使用します。サポートされている AWS リージョンの詳細については、の[Amazon Elastic File System のエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html)」を参照してください*AWS 全般のリファレンス*。

## Amazon RDS に DB インスタンスを起動する
<a name="php-hawordpress-tutorial-database"></a>

Amazon RDS でインスタンスを起動すると、そのインスタンスは Elastic Beanstalk および Elastic Beanstalk 環境から完全に独立しているため、Elastic Beanstalk によって終了またはモニタリングされません。

以下のステップでは、Amazon RDS コンソールを使用して以下の操作を行います。
+ **MySQL** エンジンを使用してデータベースを起動する。
+ **マルチ AZ 配置**を有効にする。これにより、異なるアベイラビリティーゾーン (AZ) にスタンバイが作成されて、データの冗長性が得られ、I/O フリーズがなくなり、システムバックアップ中のレイテンシー・スパイクが最小限に抑えられます。

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

1. [RDS コンソール](https://console.aws.amazon.com/rds/home)を開きます。

1. ナビゲーションペインで、[**データベース**] を選択します。

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

1. [**Standard Create (スタンダード作成)**] を選択します。
**重要**  
[**Easy Create (簡易作成)**] を選択しないでください。これを選択した場合、この RDS DB の起動に必要な設定ができません。

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

1. デフォルト設定を確認し、特定の要件に従ってこれらの設定を調整します。以下のオプションに注目します。
   + **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 (マスターパスワード)**] – データベースのユーザー名とパスワード。後で使用するため、これらの設定を書き留めておきます。

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

DB インスタンスを作成したら、適切なポートでインバウンドトラフィックを許可するように、DB インスタンスに添付されたセキュリティグループを変更します。

**注記**  
これは、後で Elastic Beanstalk 環境にアタッチするのと同じセキュリティグループであるため、ここで追加するルールにより、同じセキュリティグループ内の他のリソースに対するイングレスアクセス許可が付与されます。

**RDS インスタンスにアタッチされているセキュリティグループのインバウンドルールを変更するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds/home)を開きます。

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

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

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

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

1. セキュリティグループの詳細で、**インバウンド** を選択します。

1. **[編集]** を選択します。

1. **[ルールの追加]** を選択します。

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

1. **出典** として、**sg-** と入力して、使用可能なセキュリティグループのリストを表示します。Elastic Beanstalk 環境で使用される Auto Scaling グループに関連付けられているセキュリティグループを選択します。これは、環境内の Amazon EC2 インスタンスがデータベースにアクセスできるようにするためです。  
![\[Amazon EC2 コンソールのセキュリティグループのインバウンドルールを編集する画面の画像。\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. **[保存]** を選択します。

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

## WordPress のダウンロード
<a name="php-hawordpress-tutorial-download"></a>

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

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

1. WordPress を [wordpress.org](https://wordpress.org/download/) からダウンロードします。

   ```
   ~$curl https://wordpress.org/wordpress-6.2.tar.gz -o wordpress.tar.gz
   ```

1. 設定ファイルを同じサンプルリポジトリからダウンロードします。

   ```
   ~$ wget https://github.com/aws-samples/eb-php-wordpress/releases/download/v1.1/eb-php-wordpress-v1.zip
   ```

1. WordPress を抽出してフォルダ名を変更します。

   ```
    ~$ tar -xvf wordpress.tar.gz
    ~$ mv wordpress wordpress-beanstalk
    ~$ cd wordpress-beanstalk
   ```

1. インストールした 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 環境の起動
<a name="php-hawordpress-tutorial-launch"></a>

Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境を作成します。環境を起動した後、データベースに接続するように環境を設定して、WordPress コードを環境にデプロイできます。

以下のステップでは、Elastic Beanstalk コンソールを使用して以下の操作を行います。
+ マネージド **PHP** プラットフォームを使用して、Elastic Beanstalk アプリケーションを作成します。
+ デフォルト設定とサンプルコードをそのまま使用します。

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

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

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

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

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

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

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

### Elastic Beanstalk が作成したリソース
<a name="php-hawordpress-tutorial-launch.EB-resources"></a>
+ **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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

これらのリソースはすべて Elastic Beanstalk によって管理されます。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

起動した Amazon RDS インスタンスは環境外にあるため、そのライフサイクルの管理はお客様の責任で行ってください。

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

## セキュリティグループおよび環境プロパティの設定
<a name="php-wordpress-tutorial-configure"></a>

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

**環境にセキュリティグループを追加するには**
+ 次のいずれかを行います。
  + Elastic Beanstalk コンソールを使用してセキュリティグループを追加するには

    1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

    1. 警告を読み取り、**確認** を選択します。
  + [設定ファイル](ebextensions.md)を使用してセキュリティグループを追加するには、[https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) サンプルファイルを使用します。

次に、環境プロパティを使用して環境に接続情報を渡します。

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

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

1. [**環境プロパティ**] セクションで、アプリケーションが読み取りする変数を定義して、接続文字列を構成します。統合された RDS DB インスタンスがある環境との互換性を考慮して、以下の名前と値を使用します。パスワードを除くすべての値は、[RDS コンソール](https://console.aws.amazon.com/rds/home)で見つかります。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html)  
![\[RDS プロパティが追加された環境プロパティ設定セクション\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

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

## アプリケーションの設定とデプロイ
<a name="php-wordpress-tutorial-deploy"></a>

以下に示すように、`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` – 環境へのアクセスを制限して、WordPress のインストールプロセス中に環境を保護します。ファイルの先頭にあるプレースホルダー IP アドレスを、お客様の環境の WordPress インストールウェブサイトへのアクセスに使用するコンピュータのパブリック IP アドレスに置き換えます。
**注記**  
お客様のネットワークに応じて、IP アドレスブロックの使用が必要になる場合があります。
   + `.ebextensions/efs-create.config` – VPC 内の各アベイラビリティーゾーン/サブネットに EFS ファイルシステムとマウントポイントを作成します。[Amazon VPC コンソール](https://console.aws.amazon.com/vpc/home#subnets:filter=default)で、デフォルトの VPC とサブネット ID を特定します。

1. プロジェクトフォルダのファイルを含む[出典バンドル](applications-sourcebundle.md)を作成します。次のコマンドでは、`wordpress-beanstalk.zip` という出典バンドルが作成されます。

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

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

## WordPress のインストール
<a name="php-hawordpress-tutorial-install"></a>

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

## キーとソルトの更新
<a name="php-hawordpress-tutorial-updatesalts"></a>

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

ハッシュソルトは[環境プロパティの要件](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)を満たす任意の値にすることができますが、出典コントロールには保存しないでください。環境でこれらのプロパティを直接設定するには、Elastic Beanstalk コンソールを使用します。

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. [**ソフトウェア**] で、[**編集**] を選択します。

1. [`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` に選択された値。

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

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

## アクセス制限の削除
<a name="php-hawordpress-tutorial-updateenv"></a>

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

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

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

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

   ```
   ~/wordpress-beanstalk$ rm .ebextensions/loadbalancer-sg.config
   ```

1. 出典バンドルを作成します。

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

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

## Auto Scaling グループの設定
<a name="php-hawordpress-tutorial-autoscaling"></a>

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

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

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

## WordPress のアップグレード
<a name="php-hawordpress-tutorial-upgrade"></a>

新しいバージョンの WordPress にアップグレードするには、サイトをバックアップして新しい環境にデプロイします。

**重要**  
WordPress 内の更新機能を使用したり、新しいバージョンを使用するように出典ファイルを更新しないでください。どちらのアクションでも、投稿 URL は (データベースとファイルシステムには残りますが) 404 エラーを返す場合があります。

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

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

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

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

1. 新しいバージョンを別の環境にデプロイした場合は、[CNAME スワップ](using-features.CNAMESwap.md)を実行して旧サイトのユーザーを新サイトにリダイレクトします。

## クリーンアップ
<a name="php-hawordpress-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

**RDS DB インスタンスを終了するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds)を開きます。

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

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

1. **[アクション]**、**[削除]** の順に選択します。

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

## 次の手順
<a name="php-hawordpress-tutorial-nextsteps"></a>

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

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

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

高パフォーマンスデータベースが必要な場合は、[Amazon Aurora](https://aws.amazon.com/rds/aurora/) の使用を検討します。Amazon Aurora は MySQL 対応のデータベースエンジンで、商用データベースの特徴を低コストで提供します。別のデータベースにアプリケーションに connect するには、[セキュリティグループ設定](php-ha-tutorial.md#php-hawrds-tutorial-database)ステップを繰り返し、[RDS 関連の環境プロパティを更新](php-ha-tutorial.md#php-hawrds-tutorial-configure)します。

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

# 外部 Amazon RDS データベースを使用して高可用性の Drupal ウェブサイトを Elastic Beanstalk にデプロイする
<a name="php-hadrupal-tutorial"></a>

このチュートリアルでは、外部の [RDS DB インスタンスを起動する](AWSHowTo.RDS.md)プロセスについて説明します AWS Elastic Beanstalk。そして、Drupal ウェブサイトを実行中の高可用性環境を設定して connect する方法を説明します。ウェブサイトでは、アップロードされたファイルの共有ストレージとして Amazon Elastic File System (Amazon EFS) を使用しています。Elastic Beanstalk の外部 DB インスタンスを実行すると、環境のライフサイクルからデータベースを分離し、複数の環境から同じデータベースに接続でき、あるデータベースから別のデータベースへ交換したり、データベースに影響を与えないで Blue-Green Deployment を実行できます。

**Topics**
+ [前提条件](#php-hadrupal-tutorial-prereqs)
+ [Amazon RDS に DB インスタンスを起動する](#php-hadrupal-tutorial-database)
+ [Elastic Beanstalk 環境の起動](#php-hadrupal-tutorial-launch)
+ [セキュリティ設定および環境プロパティの設定](#php-hadrupal-tutorial-configure)
+ [アプリケーションの設定とデプロイ](#php-hadrupal-tutorial-deploy)
+ [Drupal のインストール](#php-hadrupal-tutorial-install)
+ [Drupal 設定を更新してアクセス制限を削除する](#php-hadrupal-tutorial-updateenv)
+ [Auto Scaling グループの設定](#php-hadrupal-tutorial-autoscaling)
+ [クリーンアップ](#php-hadrupal-tutorial-cleanup)
+ [次の手順](#php-hadrupal-tutorial-nextsteps)

## 前提条件
<a name="php-hadrupal-tutorial-prereqs"></a>

このチュートリアルでは、基本的な Elastic Beanstalk オペレーションと Elastic Beanstalk コンソールに関する知識があることを前提としています。まだ起動していない場合は、[Elastic Beanstalk の使用を開始する方法について説明します](GettingStarted.md) の指示に従って、最初の Elastic Beanstalk 環境を起動します。

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

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

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

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

サンプルアプリケーションは Amazon EFS を使用します。Amazon EFS をサポートする AWS リージョンでのみ機能します。 AWS リージョンのサポートについては、の[Amazon Elastic File Systemのエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html)」を参照してください*AWS 全般のリファレンス*。

Elastic Beanstalk 環境のプラットフォームで PHP 7.4 以前を使用している場合は、このチュートリアルでは Drupal バージョン 8.9.13 を使用することをお勧めします。PHP 8.0 以降を使用してインストールされたプラットフォームの場合は、Drupal 9.1.5 を使用することをお勧めします。

Drupal リリースとそれらが support する PHP バージョンの詳細については、Drupal のウェブサイトの [PHP 要件](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)をご参照ください。Drupal が推奨するコアバージョンは、ウェブサイト ([https://www.drupal.org/project/drupal](https://www.drupal.org/project/drupal)) に掲載されています。

## Amazon RDS に DB インスタンスを起動する
<a name="php-hadrupal-tutorial-database"></a>

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 コンソール](https://console.aws.amazon.com/rds/home)を開きます。

1. ナビゲーションペインで、[**データベース**] を選択します。

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

1. [**Standard Create (スタンダード作成)**] を選択します。
**重要**  
[**Easy Create (簡易作成)**] を選択しないでください。これを選択した場合、この RDS DB の起動に必要な設定ができません。

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

1. デフォルト設定を確認し、特定の要件に従ってこれらの設定を調整します。以下のオプションに注目します。
   + **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 (マスターパスワード)**] – データベースのユーザー名とパスワード。後で使用するため、これらの設定を書き留めておきます。

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

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

**RDS インスタンスにアタッチされているセキュリティグループのインバウンドルールを変更するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds/home)を開きます。

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

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

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

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

1. セキュリティグループの詳細で、**インバウンド** を選択します。

1. **[編集]** を選択します。

1. **[ルールの追加]** を選択します。

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

1. **出典** として、**sg-** と入力して、使用可能なセキュリティグループのリストを表示します。Elastic Beanstalk 環境で使用される Auto Scaling グループに関連付けられているセキュリティグループを選択します。これは、環境内の Amazon EC2 インスタンスがデータベースにアクセスできるようにするためです。  
![\[Amazon EC2 コンソールのセキュリティグループのインバウンドルールを編集する画面の画像。\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. **[保存]** を選択します。

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

## Elastic Beanstalk 環境の起動
<a name="php-hadrupal-tutorial-launch"></a>

Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境を作成します。[**PHP**] プラットフォームを選択し、デフォルト設定およびサンプルコードを受け入れます。環境を起動した後、データベースに connect するように環境を設定して、Drupal コードを環境にデプロイできます。

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

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

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

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

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

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

環境の作成の所要時間は約 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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、**subdomain*.*region*.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

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

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

## セキュリティ設定および環境プロパティの設定
<a name="php-hadrupal-tutorial-configure"></a>

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

**環境にセキュリティグループを追加するには**
+ 次のいずれかを行います。
  + Elastic Beanstalk コンソールを使用してセキュリティグループを追加するには

    1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

    1. 警告を読み取り、**確認** を選択します。
  + [設定ファイル](ebextensions.md)を使用してセキュリティグループを追加するには、[https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) サンプルファイルを使用します。

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

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

1. [**環境プロパティ**] セクションで、アプリケーションが読み取りする変数を定義して、接続文字列を構成します。統合された RDS DB インスタンスがある環境との互換性を考慮して、以下の名前と値を使用します。パスワードを除くすべての値は、[RDS コンソール](https://console.aws.amazon.com/rds/home)で見つかります。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/php-hadrupal-tutorial.html)  
![\[RDS プロパティが追加された環境プロパティ設定セクション\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

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

Drupal のインストール後に、SSH を使用してインスタンスに connect し、設定の詳細を取得する必要があります。SSH キーを環境のインスタンスに割り当てます。

**SSH を設定するには**

1. 作成済みのキーペアがない場合は、Amazon EC2 コンソールの[キーペアのページ](https://console.aws.amazon.com/ec2/v2/home#KeyPairs)を開き、手順に従って作成します。

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. [**セキュリティ**] で、[**編集**] を選択します。

1. **EC2 キーペア** について、キーペアを選択します。

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

## アプリケーションの設定とデプロイ
<a name="php-hadrupal-tutorial-deploy"></a>

Elastic Beanstalk の Drupal プロジェクトを作成するには、Drupal ソースコードをダウンロードして、このコードを GitHub の [aws-samples/eb-php-drupal](https://github.com/aws-samples/eb-php-drupal) リポジトリにあるファイルに結合します。

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

1. 次のコマンドを実行して、*www.drupal.org/download* から Drupal をダウンロードします。ダウンロードの詳細については、[Drupal のウェブサイト](https://www.drupal.org/download)をご参照ください。

   Elastic Beanstalk 環境のプラットフォームで PHP 7.4 以前を使用している場合は、このチュートリアルでは Drupal バージョン 8.9.13 をダウンロードすることをお勧めします。次のコマンドを実行してダウンロードできます。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-8.9.13.tar.gz -o drupal.tar.gz
   ```

   プラットフォームが PHP 8.0 以降を使用している場合は、Drupal 9.1.5 をダウンロードすることをお勧めします。このコマンドを使用してダウンロードできます。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-9.1.5.tar.gz -o drupal.tar.gz
   ```

   Drupal リリースとそれらが support する PHP バージョンの詳細については、Drupal の公式ドキュメントの [PHP 要件](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)をご参照ください。Drupal が推奨するコアバージョンは、[Drupal のウェブサイト](https://www.drupal.org/project/drupal)に掲載されています。

1. 次のコマンドを使用して、サンプルリポジトリから設定ファイルをダウンロードします。

   ```
   ~$ wget https://github.com/aws-samples/eb-php-drupal/releases/download/v1.1/eb-php-drupal-v1.zip
   ```

1. Drupal を抽出してフォルダ名を変更します。

   Drupal 8.9.13 をダウンロードした場合:

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-8.9.13 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

   Drupal 9.1.5 をダウンロードした場合:

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-9.1.5 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

1. インストールした Drupal で設定ファイルを抽出します。

   ```
    ~/drupal-beanstalk$ unzip ../eb-php-drupal-v1.zip
     creating: .ebextensions/
     inflating: .ebextensions/dev.config
     inflating: .ebextensions/drupal.config
     inflating: .ebextensions/efs-create.config
     inflating: .ebextensions/efs-filesystem.template
     inflating: .ebextensions/efs-mount.config
     inflating: .ebextensions/loadbalancer-sg.config
     inflating: LICENSE
     inflating: README.md
     inflating: beanstalk-settings.php
   ```

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

```
drupal-beanstalk$ tree -aL 1
.
├── autoload.php
├── beanstalk-settings.php
├── composer.json
├── composer.lock
├── core
├── .csslintrc
├── .ebextensions
├── .ebextensions
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── example.gitignore
├── .gitattributes
├── .htaccess
├── .ht.router.php
├── index.php
├── LICENSE
├── LICENSE.txt
├── modules
├── profiles
├── README.md
├── README.txt
├── robots.txt
├── sites
├── themes
├── update.php
├── vendor
└── web.config
```

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

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

**設定ファイルを更新して出典バンドルを作成するには**

1. 設定ファイルを次のように変更します。
   + `.ebextensions/dev.config` – 環境へのアクセスを IP アドレスに制限して、Drupal のインストールプロセス中に環境を保護します。ファイルの先頭にあるプレースホルダー IP アドレスをパブリック IP アドレスに置き換えます。
   + `.ebextensions/efs-create.config` – VPC 内の各アベイラビリティーゾーン/サブネットに EFS ファイルシステムとマウントポイントを作成します。[Amazon VPC コンソール](https://console.aws.amazon.com/vpc/home#subnets:filter=default)で、デフォルトの VPC とサブネット ID を特定します。

1. プロジェクトフォルダのファイルを含む[出典バンドル](applications-sourcebundle.md)を作成します。次のコマンドでは、`drupal-beanstalk.zip` という出典バンドルが作成されます。`vendor` フォルダ内のファイルは除外されます。これらのファイルは、多くのスペースを使用するだけでなく、アプリケーションを Elastic Beanstalk にデプロイするのに不要です。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk.zip -r * .[^.]* -x "vendor/*"
   ```

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

## Drupal のインストール
<a name="php-hadrupal-tutorial-install"></a>

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. データベースの次の設定でスタンダードインストールを実行します。
   + **データベース名** – Amazon RDS コンソールに表示される [**DB Name (DB 名)**]。
   + **データベースのユーザーネームとパスワード** – データベースの作成時に入力した [**Master Username (マスターユーザー名)**] と [**Master Password (マスターパスワード)**] の値。
   + **アドバンストオプション > ホスト** – Amazon RDS コンソールに表示される DB インスタンスの [**Endpoint (エンドポイント)**]。

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

## Drupal 設定を更新してアクセス制限を削除する
<a name="php-hadrupal-tutorial-updateenv"></a>

Drupal のインストールプロセスで、インスタンスの `sites/default` フォルダに `settings.php` というファイルを作成しました。このファイルを出典コードで使用して、以降のデプロイでサイトがリセットされるのに防ぐ必要がありますが、ファイルには現在ソースにコミットしたくないシークレットが含まれています。アプリケーションインスタンスに connect して設定ファイルから情報を取得します。

**SSH を使用してアプリケーションインスタンスに connect するには**

1. Amazon EC2 コンソールの[インスタンスページ](https://console.aws.amazon.com/ec2/v2/home#Instances:sort=tag:Name)を開きます。

1. アプリケーションインスタンスを選択します。これは、Elastic Beanstalk 環境と同じ名前を付けたインスタンスです。

1. [**Connect**] を選択します。

1. 手順に従ってインスタンスを SSH に connect します。コマンドは次のようになります。

   ```
   $ ssh -i ~/.ssh/mykey ec2-user@ec2-00-55-33-222.us-west-2.compute.amazonaws.com
   ```

設定ファイルの最後の行から同期ディレクトリ ID を取得します。

```
[ec2-user ~]$ tail -n 1 /var/app/current/sites/default/settings.php
$config_directories['sync'] = 'sites/default/files/config_4ccfX2sPQm79p1mk5IbUq9S_FokcENO4mxyC-L18-4g_xKj_7j9ydn31kDOYOgnzMu071Tvc4Q/sync';
```

ファイルにはサイトの現在のハッシュキーも含まれていますが、現在の値は無視して独自の値を使用できます。

同期ディレクトリパスとハッシュキーを環境プロパティに割り当てます。プロジェクトリポジトリのカスタマイズされた設定ファイルは、前に設定したデータベース接続プロパティに加えて、これらのプロパティを読み取ることで、デプロイ中にサイトを設定します。

**Drupal 設定プロパティ**
+ `SYNC_DIR` – 同期ディレクトリへのパス。
+ `HASH_SALT` – [環境プロパティの要件](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)を満たす任意の文字列値。

**Elastic Beanstalk コンソールで環境変数を設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

1. **[ランタイム環境変数]** まで下にスクロールします。

1. **[環境変数を追加]** を選択します。

1. **[ソース]** では、**[プレーンテキスト]** を選択します。
**注記**  
ドロップダウンの **[Secrets Manager]** と **[SSM Parameter Store]** の値は、認証情報や API キーなどの機密データを保存するシークレットとして環境変数を設定するためのものです。詳細については、「[AWS Secrets Manager および Parameter Store での Elastic Beanstalk AWS Systems Manager の使用](AWSHowTo.secrets.md)」を参照してください。

1. **[環境変数名]** と **[環境変数値]** のペアを入力します。

1. さらに変数を追加する必要がある場合は、**ステップ 6** から **ステップ 8** までを繰り返します。

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

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

**Drupal の設定を更新してアクセス制限を削除するには**

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

   ```
   ~/drupal-beanstalk$ rm .ebextensions/loadbalancer-sg.config
   ```

1. カスタマイズした `settings.php` ファイルをサイトのフォルダ内にコピーします。

   ```
   ~/drupal-beanstalk$ cp beanstalk-settings.php sites/default/settings.php
   ```

1. 出典バンドルを作成します。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk-v2.zip -r * .[^.]* -x "vendor/*"
   ```

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

## Auto Scaling グループの設定
<a name="php-hadrupal-tutorial-autoscaling"></a>

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

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

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

## クリーンアップ
<a name="php-hadrupal-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

**RDS DB インスタンスを終了するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds)を開きます。

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

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

1. **[アクション]**、**[削除]** の順に選択します。

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

## 次の手順
<a name="php-hadrupal-tutorial-nextsteps"></a>

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

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

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

高パフォーマンスデータベースが必要な場合は、[Amazon Aurora](https://aws.amazon.com/rds/aurora/) の使用を検討します。Amazon Aurora は MySQL 対応のデータベースエンジンで、商用データベースの特徴を低コストで提供します。別のデータベースにアプリケーションに connect するには、[セキュリティグループ設定](php-ha-tutorial.md#php-hawrds-tutorial-database)ステップを繰り返し、[RDS 関連の環境プロパティを更新](php-ha-tutorial.md#php-hawrds-tutorial-configure)します。

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