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

カスタムプラットフォーム

Elastic Beanstalk は、サポートされているオペレーティングシステム、Ubuntu、RHEL、または Amazon Linux (正確なバージョン番号については platform.yaml ファイルの形式。flavor エントリを参照) のいずれかから作成する Amazon Machine Image (AMI) に基づいて詳細なカスタマイズが可能なカスタムプラットフォームをサポートしています。Packer を使用して独自の Elastic Beanstalk プラットフォームを作成します。これは、Amazon EC2 で使用する AMI を含む多くのプラットフォームのマシンイメージを作成するためのオープンソースツールです。Elastic Beanstalk プラットフォームは、アプリケーションをサポートする一連のソフトウェアを実行するよう設定された AMI と、カスタム設定オプションやデフォルトの設定オプションの設定を含むことができるメタデータで構成されます。

Packer テンプレートと、AMI を構築するにテンプレートが呼び出すスクリプトおよびファイルを Elastic Beanstalk に提供して、プラットフォームを作成します。これらのコンポーネントは、テンプレートとメタデータを指定する platform definition file により、platform definition archive と呼ばれる ZIP アーカイブにパッケージ化されます。

カスタムプラットフォームを作成すると、Packer を実行する EIP なしで単一のインスタンス環境を起動し、Packer は別のインスタンスを起動してイメージを構築します。この環境を再利用して、複数のプラットフォーム、および各プラットフォームの複数のバージョンを作成できます。

注記

カスタムプラットフォームはリージョン固有です。複数のリージョンで Elastic Beanstalk を使用する場合は、各リージョンでプラットフォームを個別に作成する必要があります。

特定の状況下では、Packer によって起動されたインスタンスはクリーンアップされず、手動で削除する必要があります。手動でこれらのインスタンスをクリーンアップする方法については、「Packer Instance のクリーンアップ」を参照してください。

アカウントのユーザーは、環境の作成中にプラットフォーム ARN を指定してカスタムプラットフォームを使用できます。ARN は、カスタムプラットフォームの作成に使用した eb platform create コマンドによって返されます。

カスタムプラットフォームを構築するたびに、Elastic Beanstalk は新しいプラットフォームのバージョンを作成します。ユーザーは、プラットフォームを名前で指定してプラットフォームの最新バージョンを取得するか、バージョン番号を含めて特定のバージョンを取得することができます。

たとえば、最新バージョンのカスタムプラットフォームであるバージョン 3.0 を、ARN MyCustomPlatformARN を使用してデプロイするには、EB CLI のコマンドラインは次のようになります。

eb deploy -p MyCustomPlatformARN

バージョン 2.1 をデプロイするには、EB CLI のコマンドラインは次のようになります。

eb deploy -p MyCustomPlatformARN --version 2.1

カスタムプラットフォームの作成

カスタムプラットフォームを作成するには、アプリケーションの root に platform.yaml ファイルを含める必要があります。このファイルは、カスタムプラットフォームの作成に使用されるビルダーのタイプを定義します。このファイルの形式は、platform.yaml ファイルの形式。 のトピックで説明しています。カスタムプラットフォームを最初から作成する代替方法として、サンプルカスタムプラットフォームのいずれかを使用できます。

サンプル カスタム プラットフォームの使用

独自のカスタムプラットフォームを使用する代わりに、platform definition archive サンプルの 1 つを使用してカスタムプラットフォームをブートストラップすることもできます。

注記

本番稼働でサンプル カスタム プラットフォームを使用しないでください。サンプルの目的は、プラットフォームに使用できる機能の一部を説明することですが本番稼働環境では強化されていません。

NodePlatform_Ubuntu.zip

このカスタムプラットフォームは、Ubuntu 16.04 に基づいており、Node.js 4.4.4 をサポートしています。このセクションの例では、このカスタムプラットフォームを使用します。

NodePlatform_RHEL.zip

このカスタムプラットフォームは、RHEL 7.2 に基づいており、Node.js 4.4.4 をサポートしています。

NodePlatform_AmazonLinux.zip

このカスタムプラットフォームは、Amazon Linux 2016.09.1 に基づいており、Node.js 4.4.4 をサポートしています。

TomcatPlatform_Ubuntu.zip

このカスタムプラットフォームは、Ubuntu 16.04 に基づいており、Tomcat 7/Java 8 をサポートしています。

CustomPlatform_NodeSampleApp.zip

expressejs を使用して静的なウェブページを表示する Node.js サンプル

CustomPlatform_TomcatSampleApp.zip

デプロイ時静的ウェブページを表示する Tomcat のサンプル

以下のサンプル platform definition archive をダウンロードします。NodePlatform_Ubuntu.zipこのファイルには、platform definition file、Packer テンプレート、イメージの作成中に Packer が実行するスクリプト、およびプラットフォームの作成中に Packer がビルダーインスタンスにコピーするスクリプトと設定ファイルが含まれています。

例 NodePlatform_Ubuntu.zip

|-- builder                 Contains files used by Packer to create the custom platform
|-- custom_platform.json    Packer template
|-- platform.yaml           Platform definition file
|-- ReadMe.txt              Briefly describes the sample

platform definition file platform.yaml は、Elastic Beanstalk に Packer テンプレートの名前 (custom_platform.json) を指定します。

version: "1.0"

provisioner:
  type: packer
  template: custom_platform.json
  flavor: ubuntu1604

Packer テンプレートは、HVM インスタンスタイプのプラットフォームイメージのベースとして Ubuntu AMI を使用して、プラットフォーム用の AMI を構築する方法を Packer に伝えます。provisioners セクションでは、アーカイブ内の builder フォルダーのすべてのファイルをインスタンスにコピーし、インスタンスで builder.sh スクリプトを実行するよう Packer に伝えます。スクリプトが完了すると、Packer は変更したインスタンスからイメージを作成します。

Elastic Beanstalk は、Packer の AMI にタグを付けるために使用できる 3 つの環境変数を作成します。

AWS_EB_PLATFORM_ARN

カスタム プラットフォームの ARN。

AWS_EB_PLATFORM_NAME

カスタム プラットフォームの名前。

AWS_EB_PLATFORM_VERSION

カスタム プラットフォームのバージョン。

サンプル custom_platform.json ファイルは、これらの値を使用して、スクリプトで使用する次の値を定義します。

  • platform.yaml で設定されている platform_name

  • platform.yaml で設定されている platform_version

  • platform_arn は、メインビルドスクリプトによって設定され、builder.sh は、サンプル custom_platform.json のファイルの最後に表示される。

例 custom_platform.json

{
  "variables": {
    "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}",
    "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}",
    "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}"
  },
  ...,
  "provisioners": [
    {...},
    {
      "type": "shell",
      "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}",
      "scripts": [
        "builder/builder.sh"
      ]
    }
  ]
}

platform definition archive に含めるスクリプトとその他のファイルは、インスタンスに対して行う変更によって大きく異なります。サンプルプラットフォームには以下のスクリプトが含まれます。

  • 00-sync-apt.sh – コメントアウト: apt -y update

  • 01-install-nginx.sh – nginx をインストールします。

  • 02-setup-platform.shwgettreegit をインストールします。フックとログ作成設定をインスタンスにコピーし、次のディレクトリを作成します。

    • /etc/SampleNodePlatform – ここに、デプロイ中にコンテナ設定ファイルがアップロードされます。

    • /opt/elasticbeanstalk/deploy/appsource/00-unzip.shスクリプトは、デプロイ中にアプリケーションのソースコードをアップロードします (このスクリプトについては プラットフォームスクリプト セクションを参照)。

    • /var/app/staging/ – ここで、アプリケーションのソースコードがデプロイ中に処理されます。

    • /var/app/current/ – ここで、アプリケーションのソースコードが処理後に実行されます。

    • /var/log/nginx/healthd/ – ここに、拡張ヘルスエージェントがログを書き込みます。

    • /var/nodejs – ここに、デプロイ中に Node.js ファイルがアップロードされます。

EB CLI を使用して、サンプル platform definition archive で最初のカスタムプラットフォームを作成します。

カスタムプラットフォームを作成するには

  1. EB CLI のインストール.

  2. サンプルカスタムプラットフォームを展開するディレクトリを作成します。

    ~$ mkdir ~/custom-platform
  3. NodePlatform_Ubuntu.zip をディレクトリに解凍します。

    ~$ cd ~/custom-platform
    ~/custom-platform$ unzip ~/NodePlatform_Ubuntu.zip
  4. eb platform init を実行し、プロンプトに従ってプラットフォームリポジトリを初期化します。

    注記

    eb platformebp に短縮することができます。

    Windows PowerShell では、コマンドエイリアスとして ebp を使用します。Windows PowerShell で EB CLI を実行している場合は、このコマンドの長い形式 — eb platform を使用してください。

    ~/custom-platform$ ebp init

    このコマンドは、ディレクトリ .elasticbeanstalk を現在のディレクトリに作成し、設定ファイル config.yml をディレクトリに追加します。Elastic Beanstalk がカスタムプラットフォームを作成するときにこのファイルを使用するため、このファイルを変更または削除しないでください。

    デフォルトでは、ebp init は、現在のフォルダの名前をカスタムプラットフォームの名前として使用します。この例では、custom-platform です。

  5. eb platform create を実行して Packer 環境を起動し、カスタムプラットフォームの ARN を取得します。この値は、後でカスタムプラットフォームから環境を作成する際に必要になります。

    ~/custom-platform$ ebp create
    ...

    デフォルトでは、Elastic Beanstalk はカスタムプラットフォームのインスタンスプロファイル aws-elasticbeanstalk-custom-platform-ec2-role を作成します。代わりに既存のインスタンスプロファイルを使用する場合は、eb platform create コマンドに -ip INSTANCE_PROFILE オプションを追加します。

    注記

    Elastic Beanstalk のデフォルトインスタンスプロファイル aws-elasticbeanstalk-ec2-role を使用すると、Packer によるカスタムプラットフォームの作成は失敗します。

    EB CLI には、ビルドを完了するまでは Packer 環境のイベント出力が表示されます。Ctrl-C キーを押すと、イベントの表示を終了できます。

  6. eb platform logs コマンドを使用してエラーがないか、ログを確認できます。

    ~/custom-platform$ ebp logs
    ...
  7. 後で、eb platform events によりプロセスを確認できます。

    ~/custom-platform$ ebp events
    ...
  8. eb platform status を使用してプラットフォームのステータスを確認します。

    ~/custom-platform$ ebp status
    ...

オペレーションが完了すると、Elastic Beanstalk 環境の起動に使用できるプラットフォームが用意されます。

コンソールから新しい環境を作成する場合は、カスタムプラットフォームを使用できます。詳細については、Create New Environment ウィザード を参照してください。

カスタムプラットフォームで環境を起動するには

  1. アプリケーション用の新しいディレクトリを作成します。

    ~$ mkdir custom-platform-app
    ~$ cd ~/custom-platform-app
  2. アプリケーションリポジトリを初期化します。

    ~/custom-platform-app$ eb init
    ...
  3. サンプルアプリケーション NodeSampleApp.zip をダウンロードしてください。

  4. サンプルアプリケーションを解凍します。

    ~/custom-platform-app$ unzip ~/NodeSampleApp.zip
  5. eb create -p CUSTOM-PLATFORM-ARN (CUSTOM-PLATFORM-ARNeb platform create コマンドで返された ARN) を実行して、カスタムプラットフォームを実行する環境を起動します。

    ~/custom-platform-app$ eb create -p CUSTOM-PLATFORM-ARN
    ...