AWS Elastic Beanstalk
開発者ガイド

AWS Elastic Beanstalk カスタムプラットフォーム

Elastic Beanstalk はカスタムプラットフォームをサポートします。カスタムプラットフォームは、複数の方法で行う「カスタムイメージ」より高度なカスタマイズです。カスタムプラットフォームでは、ゼロから新しいプラットフォーム全体を開発できます。オペレーティングシステムのカスタマイズ、ソフトウェアの追加、およびプラットフォームインスタンスで Elastic Beanstalk が実行するスクリプトの追加もできます。この柔軟性により、Elastic Beanstalk が使用開始時にはプラットフォームを提供していない、言語やその他のインフラストラクチャソフトウェアを使用するアプリケーション用のプラットフォームを構築できます。これに対して、カスタムイメージは AMI を変更して既存の Elastic Beanstalk プラットフォームで使用するものであり、依然として Elastic Beanstalk がプラットフォームスクリプトを提供してプラットフォームのソフトウェアスタックを制御します。さらに、カスタムプラットフォームを使用すると、自動化されたスクリプト化された方法でカスタマイズを作成し維持できます。一方カスタムイメージでは、実行中のインスタンス経由で手動で変更します。

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

Elastic Beanstalk は Packer を個別の組み込みプラットフォームとして管理するため、Packer の設定とバージョンについて心配する必要はありません。

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

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

注記

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

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

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

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

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

eb create -p MyCustomPlatformARN

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

eb create -p MyCustomPlatformARN --version 2.1

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

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

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

独自のカスタムプラットフォームを作成する代わりに、platform definition archive サンプルの 1 つを使用してカスタムプラットフォームをブートストラップすることもできます。使用する前にサンプルで設定する必要がある唯一の項目は、ソース AMI とリージョンです。

注記

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

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

[express] と [ejs] を使用して静的なウェブページを表示する 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 fileplatform.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_name で設定されている platform.yaml

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

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

この custom_platform.json ファイルには、値を指定する必要がある 2 つのプロパティ、source_amiregion があります。適切な AMI およびリージョンの値を選択する方法の詳細については、eb-custom-platforms-samples GitHub リポジトリの「Updating Packer template」を参照してください。

例 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`}}" }, "builders": [ { ... "region": "", "source_ami": "", ... } ], "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。ユーザーに自動パッケージの更新を中断させるようプロンプトするため、このコマンドについてコメントアウトしました。これは、Ubuntu の問題の可能性があります。ただし、実行されている 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 ~/custom-platform$ cd NodePlatform_Ubuntu
  4. custom_platform.json ファイルを編集し、source_ami プロパティと region プロパティの値を指定します。詳細については、「Updating Packer template」を参照してください。

  5. eb platform init を実行し、プロンプトに従ってプラットフォームリポジトリを初期化します。

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

    注記

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

    ~/custom-platform$ eb platform init

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

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

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

    ~/custom-platform$ eb platform 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 キーを押すと、イベントの表示を終了できます。

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

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

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

    ~/custom-platform$ eb platform 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 ...