メニュー
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 を使用する場合は、各リージョンでプラットフォームを個別に作成する必要があります。

アカウントのユーザーは、環境の作成中にプラットフォーム 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

このカスタムプラットフォームは、Ubunti 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 は、Packer テンプレート custom_platform.json の場所を Elastic Beanstalk に伝えます。

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_nameplatform.yaml で設定される

  • platform_versionplatform.yaml で設定される

  • 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 に短縮することができます。

    ~/custom-platform$ ebp init

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

    インスタンスプロファイルのプロンプトが表示されたら、aws-elasticbeanstalk-ec2-role を選択します。さもないと、Packer はカスタムプラットフォームの作成に失敗します。デフォルトでは、ebp init は、現在のフォルダの名前をカスタムプラットフォームの名前として使用します。この例では、custom-platform です。

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

    ~/custom-platform$ ebp create
    ...

    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 CUSTOM-PLATFORM-ARN (CUSTOM-PLATFORM-ARNeb platform create コマンドで返された ARN) を実行して、カスタムプラットフォームを実行する環境を起動します。

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

プラットフォーム定義アーカイブのコンテンツ

platform definition archive は、アプリケーションソースバンドルのプラットフォームに相当します。platform definition archive は、platform definition file、Packer テンプレート、およびプラットフォームを作成するために Packer テンプレートによって使用されるスクリプトとファイルを含む ZIP ファイルです。

注記

EB CLI を使用してカスタムプラットフォームを作成する場合、EB CLI はプラットフォームレポジトリのファイルとフォルダーから platform definition archive を作成するため、アーカイブを手動で作成する必要はありません。

platform definition file は、YAML 形式のファイルで、platform.yaml という名前で platform definition archive の root になければなりません。platform definition file でサポートされる必須およびオプションのキーのリストについては、「カスタムプラットフォームの作成」を参照してください。

特定の方法で Packer テンプレートに名前を付けるせんが、ファイル名は platform definition file で指定された provisioner テンプレートに一致する必要があります。Packer テンプレートを作成する手順については、公式の Packer ドキュメントを参照してください。

platform definition archive のその他のファイルには、AMI を作成する前にインスタンスをカスタマイズするためにテンプレートによって使用されるスクリプトとファイルがあります。

プラットフォームフック

Elastic Beanstalk は標準化されたディレクトリ構造をフックに使用します。これはライフサイクルイベント中、および管理オペレーション (環境のインスタンスが起動された、ユーザーがデプロイを開始した、またはユーザーがアプリケーションサーバーの再起動機能を使用した) に応じて実行されるスクリプトです。

フックは次のフォルダーに整理されます。

  • appdeploy — アプリケーションのデプロイ中に実行されるスクリプト。Elastic Beanstalk は、新しいインスタンスが起動されたときと、クライアントが新しいバージョンのデプロイを開始したときに、アプリケーションのデプロイを実行します。

  • configdeploy — クライアントがオンインスタンスのソフトウェア設定に影響する設定の更新 (たとえば、環境プロパティの設定や、Amazon S3 へのログローテーションの有効化など) を行ったときに実行されるスクリプト。

  • restartappserver — クライアントがアプリサーバーの再起動オペレーションを行ったときに実行されるスクリプト。

  • preinit — インスタンスのブートストラップ中に実行されるスクリプト。

  • postinit — インスタンスのブートストラップの後で実行されるスクリプト。

appdeployconfigdeploy、および restartappserver フォルダには、preenact、および post サブフォルダが含まれます。オペレーションの各段階で、pre フォルダーのすべてのスクリプトがアルファベット順に実行され、次に enact フォルダー、post フォルダーの順に実行されます。

インスタンスを起動すると、Elastic Beanstalk は preinitpostinit、および appdeploy を実行します。実行中のインスタンスへのそれ以降のデプロイで、Elastic Beanstalk は appdeploy フックを実行します。ユーザーがインスタンスソフトウェアの設定を更新すると、configdeploy フックが実行されます。restartappserver フックは、ユーザーがアプリケーションサーバーの再起動を開始するときのみ実行されます。

スクリプトでエラーが発生した場合、ゼロ以外のステータスで終了し、stderr に書き込んでオペレーションを失敗させることができます。stderr に書き込むメッセージは、オペレーションが失敗した場合に出力されるイベントに表示されます。Elastic Beanstalk は、この情報をログファイル /var/log/eb-activity.log に取り込み、操作を失敗させたくない場合は 0 を返します。stderr または stdout に書き込むメッセージはデプロイログに表示されますが、オペレーションが失敗しない限り、イベントストリームには表示されません。

プラットフォームスクリプト

Elastic Beanstalk は、カスタムプラットフォームで起動された環境においてオンインスタンスで実行するフックで環境変数とその他の情報を入手するために使用できる、シェルスクリプト get-config をインストールします。

このツールは /opt/elasticbeanstalk/bin/get-config で入手でき、次の方法で使用することができます。

  • get-config optionsettings – 名前空間別に整理された、環境で設定されている設定オプションをリストする JSON オブジェクトを返します。

    $ /opt/elasticbeanstalk/bin/get-config optionsettings
    {"aws:elasticbeanstalk:container:php:phpini":{"memory_limit":"256M","max_execution_time":"60","display_errors":"Off","composer_options":"","allow_url_fopen":"On","zlib_output_compression":"Off","document_root":""},"aws:elasticbeanstalk:hostmanager":{"LogPublicationControl":"false"},"aws:elasticbeanstalk:application:environment":{"TESTPROPERTY":"testvalue"}}[
  • get-config environment – ユーザー設定のプロパティと Elastic Beanstalk で提供されるものの両方を含めて、環境プロパティのリストを含む JSON オブジェクトを返します。

    $ /opt/elasticbeanstalk/bin/get-config environment
    {"TESTPROPERTY":"testvalue","RDS_PORT":"3306","RDS_HOSTNAME":"anj9aw1b0tbj6b.cijbpanmxz5u.us-west-2.rds.amazonaws.com","RDS_USERNAME":"testusername","RDS_DB_NAME":"ebdb","RDS_PASSWORD":"testpassword1923851"}

    たとえば、Elastic Beanstalk は統合された RDS DB インスタンス (RDS_HOSTNAME など) に接続する環境プロパティを提供します。これらのプロパティは get-config environment の出力に表示されますが、ユーザーによって設定されたものではないため、get-config optionsettings の出力には表示されません。

Linux ベースのプラットフォームを実行する Elastic Beanstalk 環境で SSH を使用してインスタンスに接続して、前のコマンドをテストできます。

get-config の使用例については、サンプル platform definition archive の次のファイルを参照してください。

  • builder/platform-uploads/opt/elasticbeanstalk/hooks/configdeploy/enact/02-gen-envvars.sh – 環境プロパティを取得します。

  • builder/platform-uploads/opt/SampleNodePlatform/bin/createPM2ProcessFile.js – 出力を解析します。

Elastic Beanstalk は、カスタムプラットフォームのデプロイ時にアプリケーションのソースコードをダウンロードするために使用できるシェルスクリプト download-source-bundle をインストールします。このツールは、/opt/elasticbeanstalk/bin/download-source-bundle にあります。download-source-bundle を使用してデプロイ時にアプリケーションのソースコードを /opt/elasticbeanstalk/deploy/appsource フォルダにダウンロードする方法の例については、appdeploy/pre フォルダにあるサンプルスクリプト 00-unzip.sh を参照してください。