AWS Elastic BeanstalkがYAML設定ファイルによってカスタマイズ、設定できるようになった。設定ファイルを使って、パッケージをダウンロードしてインストールしたり、アーカイブをダウンロードしてインストールしたり、ファイルを作成したり、ユーザ/グループを作成したり、コマンドを実行したり、サービスを開始、停止したり、コンテナ設定を定義できるようになる。これまでは、Elastic Beanstalk環境を設定するためにカスタムのAmazon Machine Images (AMIs)を作るか、アプリケーションを変更して自分自身のデプロイメントを自動的に設定するか、が必要だった。カスタムのAMIは生成やメンテをする必要はあるが、もはやOSやソフトウェアスタック、AWS Elastic Beanstalkホストマネージャに対する自動更新を受け取る必要はない。設定ファイルがその代わりになる。
Elastic Beanstalkの設定ファイルはTomcat 6/7、Python 2.6、Ruby 1.8.7/1.9.3をサポートしている。PHPと.NETのサポートも計画されているが、Amazonはその時期を明らかにしていない。もしTomcatを使った既存のElastic Beanstalk環境があるなら、Elastic Beanstalk設定ファイルを利用するために移行する必要があるだろう。現在の環境がlegacyコンテナタイプかどうか、AWS Consoleにログインしてあなたの環境のContainer Typeを見れば確認できる。
Elastic Beanstalk設定ファイルは、.configという拡張子のついた任意のファイル名にすることができる。アプリケーションのトップディレクトリにある.ebextensionsディレクトリに、複数の.configファイルを置くこともできる。Java WARファイルの場合、.ebextensionsディレクトリはWEB-INFディレクトリと同じレベルにある。
Elastic Beanstalk設定ファイルはYAMLベースで、次のようなキーが使える。
packages - packagesキーを使うと、事前パッケージされたアプリケーションやコンポーネントをダウンロードしてインストールできる。サポートされているパッケージマネージャには、apt、yum、rubygems、python、rpmがある。以下はyumを使ってlogwatchを追加する例だ。
packages: yum: logwatch: [7.3.6]
sources - sourcesキーを使うと、アーカイブをダウンロードして展開できる。外部のロケーションや、ソースバンドルに格納された成果物を指定できる。サポートしているフォーマットは、tar、tar+gzip、tar+bz2、zipだ。以下はGitHubから最新のjQueryファイルをダウンロードして展開する例だ。
sources: /home/ec2-user/jquery: https://github.com/jquery/jquery/zipball/master
files - filesキーを使うと、インラインやURLから引っ張ってきた内容で、ファイルを作ることができる。ファイルは辞書順にディスクに書き出される。以下は外部URLからREADMEファイルを作成する例だ。
files: /home/ec2-user/README.md: https://raw.github.com/jquery/jquery/master/README.md
users, groups - usersキーを使うと、EC2インスタンス上にLinux/UNIXユーザを作成できる。groupsキーを使うと、Linux/UNIXグループを作って、グループIDを割り当てる。以下はAWSドキュメントにある例だ。
users: - myuser : groups: - group1 - group2 uid: 50 homedir: "/tmp" groups: - group1 : 45 - group2 : 99 - group3
commands - commandsキーを使うと、シェルコマンドを実行することができる。commandsは名前の辞書順で処理される。コマンドはアプリケーションやWebサーバがセットアップされる前、アプリケーションが展開される前に実行される。以下は、最初の例でダウンロードしたファイルの名前を変更する例だ。
commands: rename-README: command: mv README.md README cwd: /home/ec2-user
container_commands - container_commandsキーを使うと、コンテナのためのコマンドを実行できる。コマンドはアプリケーションとWebサーバがセットアップされてアプリケーションが展開された後、アプリケーションがデプロイされる前に実行される。container_commandsは名前の辞書順で処理される。ひとつのインスタンスがAuto Scalingグループのリーダーとして選ばれる。もしleader_only値がtrueであれば、コマンドはリーダーでしか実行されない。以下はリーダーでカスタムのTomcat server.xmlを動かす例だ。
container_commands: replace-server_xml: command: cp .ebextensions/server.xml /etc/tomcat7/server.xml leader_only: true
services - servicesキーを使うと、インスタンスがローンチされるときに、どのサービスをスタート、ストップすべきかを定義できる。また、ソース、パッケージ、ファイルの依存関係を指定することもできる。以下はAWSドキュメントにある例だ。
services: sysvinit: - myservice: enabled: true ensureRunning: true
option_settings - option_settingsキーを使うと、コンテナ設定を定義できる。これらはAmazon EC2インスンスに環境変数として渡される。Pythonコンテナはaws:elasticbeanstalk:application:environment、aws:elasticbeanstalk:container:python、aws:elasticbeanstalk:container:python:staticfiles名前空間をサポートしている。Javaコンテナはaws:elasticbeanstalk:application:environmentとaws:elasticbeanstalk:container:tomcat:jvmoptions名前空間をサポートしている。Rubyコンテナはaws:elasticbeanstalk:application:environment名前空間をサポートしている。以下はTomcatのJVMの最大ヒープサイズを512MBに設定する例だ。
option_settings: - namespace: aws:elasticbeanstalk:container:tomcat:jvmoptions option_name: Xmx value: 512m
詳しくは、Customizing and Configuring AWS Elastic Beanstalk Environmentsを参照。YAMLになじみのないユーザが設定ファイルを作るには、Online YAML Parserが役に立つだろう。