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

CakePHP アプリケーションを Elastic Beanstalk にデプロイする

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

前提条件

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

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

注記

このチュートリアルのすべてのコマンドは Amazon Linux EC2 インスタンスで実行できます。開発環境が必要な場合は、単一インスタンスの Elastic Beanstalk 環境を起動し、SSH で接続できます。

CakePHP には、PHP 5.5.9 以降とその拡張機能 mbstring および intl が必要です。このチュートリアルでは、PHP 5.6 とそれに対応する Elastic Beanstalk プラットフォーム設定を使用します。

PHP 5.6 と必要な拡張機能をインストールします。お客様のプラットフォームと使用可能なパッケージマネージャーによって、手順は異なります。

Amazon Linux では、yum を使用します。

$ sudo yum install php56 --skip-broken
$ sudo yum install php56-mbstring
$ sudo yum install php56-intl

OS-X では、brew を使用します。

$ brew install php56
$ brew install php56-intl

Windows では、windows.php.net のダウンロードページにアクセスして PHP を取得し、拡張機能の詳細についてこのページをお読みください。

PHP のインストール後、ターミナルを再び開いて php --version を実行して、新しいバージョンがインストールされてデフォルトになっていることを確認します。

Composer をインストールする

Composer は PHP 用の依存関係管理ツールです。このツールを使用して、CakePHP とその依存関係をインストールし、CakePHP プロジェクトを生成することをお勧めします。

インストーラーをダウンロードして PHP で実行することで、Composer をインストールします。インストーラーによって現在のディレクトリに PHAR ファイルが生成されます。このファイルを PHP で呼び出して、CakePHP プロジェクトを生成できます。

~$ curl -s https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /home/ec2-user/composer.phar
Use it: php composer.phar

Composer のインストール中に問題が発生した場合は、公式ドキュメント(https://getcomposer.org/)を参照してください。

CakePHP をインストールしてウェブサイトを生成する

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

~$ php composer.phar create-project --prefer-dist cakephp/app eb-cake

Installing cakephp/app (3.2.0)
  - Installing cakephp/app (3.2.0)
    Downloading: 100%

Created project in eb-cake
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing aura/installer-default (1.0.0)
    Downloading: 100%

  - Installing cakephp/plugin-installer (0.0.12)
    Downloading: 100%

  - Installing psr/log (1.0.0)
    Downloading: 100%
...

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

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

Elastic Beanstalk 環境を作成してアプリケーションをデプロイする

Composer で作成されたファイルを含むソースバンドルを作成します。任意のプログラムを使用して ZIP ファイルを作成できます。ただし、内部のファイルが隠しファイルになることが前提です。コマンドラインで、以下の zip コマンドを使用します。

~$ cd eb-cake
~/eb-cake$ zip ../cake-default.zip -r * .[^.]*

アクセスできる場所に ZIP アーカイブを保存します。これは、環境を作成するときに Elastic Beanstalk にアップロードするソースバンドルになります。

注記

Elastic Beanstalk 環境でリモートで作業している場合は、AWS CLI の aws cp コマンドを使用して、Amazon S3 の Elastic Beanstalk ストレージバケットにアーカイブをアップロードできます。

~$ aws s3 cp cake-default.zip s3://elasticbeanstalk-us-west-2-123456789012

Elastic Beanstalk によってこのバケットが作成されるのは、環境を初めて作成するときです。Amazon S3 にファイルをアップロードするには、お客様の環境のインスタンスプロファイルにバケットへの書き込みアクセス権限が必要です。

AWS マネジメントコンソール を使用して、アプリケーションを実行する Elastic Beanstalk 環境を作成します。[PHP 5.6] プラットフォーム設定を選択し、プロンプトが表示されたら、ソースバンドルをアップロードします。

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

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

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

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

  4. [Local file] で [Browse] を選択し、ソースバンドルを開きます。

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

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

  7. 使用できる設定を確認し、[Create app] を選択します。

環境の作成には約 5 分かかります。作成が完了したら、ブラウザーで CakePHP アプリケーションを開くための URL をクリックします。

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

お客様の環境にデータベースを追加する

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

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

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

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

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

  4. [Data Tier] セクションで、[create a new RDS database] を選択します。

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

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

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

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

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

例 ~/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 内をさらに下がったセクションで設定されています。以下のセクションを見つけ、データベースエンジン(MysqlSqlserver、または Postgres)と一致するドライバの名前で、デフォルトのデータソース設定を変更し、Elastic Beanstalk から対応する値を読み取るように hostusernamepassworddatabase 変数を設定します。

例 ~/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,
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,
...

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

Elastic Beanstalk環境を更新するには

  1. 新しいソースバンドルを作成します。

    ~/eb-cake$ zip ../cake-v2-rds.zip -r * .[^.]*
  2. Elastic Beanstalk コンソールを開きます。

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

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

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

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

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

クリーンアップ

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

Elastic Beanstalk 環境を終了するには

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

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

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

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

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

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

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

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

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

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

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

DynamoDB テーブルを削除するには

  1. DynamoDB コンソールで [Tables page] を開きます。

  2. テーブルを選択します。

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

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

次のステップ

CakePHP の詳細については、ドキュメント(book.cakephp.org)をお読みください。

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

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

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