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

Linux サーバーでのソフトウェアのカスタマイズ

アプリケーションが依存するソフトウェアをカスタマイズして設定できます。このようなファイルとしては、アプリケーションで必要な依存関係(yum リポジトリからの追加パッケージなど)や、Elastic Beanstalk でデフォルトの特定の設定を上書きするための httpd.conf の代わりの設定ファイルなどがあります。

注記

YAML は、一貫したインデントに依存します。設定ファイルの例でコンテンツを置き換える際はインデントレベルを一致させ、テキストエディタがインデントにタブ文字ではなくスペースを使用していることを確認します。

このセクションでは、Linux を実行する EC2 インスタンス上のソフトウェアをカスタマイズするための設定ファイルに含めることのできる情報の種類について説明します。Elastic Beanstalk 環境のカスタマイズと設定に関する一般的な情報については、AWS Elastic Beanstalk 環境設定を参照してください。Windows を実行する EC2 インスタンス上のソフトウェアをカスタマイズする方法については、Windows Server でのソフトウェアのカスタマイズを参照してください。

設定ファイルは、アプリケーションが実行している Linux サーバーに影響する次のキーをサポートしています。

キーは、上記のリストの順に処理されます。

パッケージ

packages キーを使用して、パッケージ済みのアプリケーションとコンポーネントをダウンロードしてインストールできます。

構文

packages: 
  name of package manager:
    package name: version

サポートされるパッケージ形式

現在 Elastic Beanstalk がサポートしているパッケージマネージャは、yum、rubygems、python、および rpm です。パッケージは rpm、yum、rubygems、python の順序で処理されます。rubygems と python の間に順序はなく、各パッケージマネージャ内のパッケージのインストール順序に保証はありません。オペレーティングシステムでサポートされているパッケージマネージャを使用します。

注記

Elastic Beanstalk は、Python の基盤となるパッケージマネージャとして pip と easy_install をサポートしています。ただし、設定ファイルの構文では、パッケージマネージャ名を python にする必要があります。設定ファイルを使用して Python のパッケージマネージャを指定すると、Elastic Beanstalk は Python 2.6 を使用します。アプリケーションが別のバージョンの Python に依存する場合は、インストールするパッケージを requirements.txt ファイルで指定できます。詳細については、「設定ファイル」を参照してください。

バージョンの指定

各パッケージマネージャ内では、各パッケージはパッケージ名およびバージョンのリストとして指定されます。バージョンは、文字列、バージョンのリスト、あるいは空の文字列またはリストのいずれでもかまいません。空の文字列またはリストは、最新バージョンを指定することを示します。rpm マネージャの場合、バージョンはディスク上のファイルへのパスまたは URL として指定します。相対パスはサポートされていません。

パッケージのバージョンを指定した場合は、それより新しいバージョンのパッケージがインスタンスに既にインストールされていたとしても、指定されたバージョンのインストールが試みられます。新しいバージョンが既にインストールされていた場合、デプロイは失敗します。パッケージマネージャには、複数のバージョンをサポートするものと、サポートしないものがあります。詳細については、パッケージマネージャのドキュメントを調べてください。バージョンを指定せず、あるバージョンのパッケージが既にインストールされている場合は、Elastic Beanstalk は新しいバージョンをインストールせず、ユーザーが既存のバージョンを維持して使用することを望んでいるものと想定します。

次の例では、rpm のバージョン URL を指定し、yum から最新のバージョンを要求し、rubygems から chef のバージョン 0.10.2 を要求しています。

packages: 
  yum:
    libmemcached: [] 
    ruby-devel: []
    gcc: []
  rpm:
    epel: http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
  rubygems: 
    chef: '0.10.2'

グループ

groups キーを使用すると、Linux/UNIX グループを作成して、グループ ID を割り当てることができます。グループを作成するには、新しいグループ名をオプションのグループ ID に関連付ける新しいキーと値のペアを追加します。groups キーでは、1 つまたは複数のグループ名を指定できます。次の表では使用できるキーの一覧を示します。

構文

groups:
  name of group: {}
  name of group:
    gid: "group id"

オプション

gid

グループ ID 番号です。

グループ ID を指定し、同じ名前のグループが既に存在する場合、グループの作成は失敗します。指定したグループ ID が別のグループに割り当てられている場合、オペレーティングシステムはグループの作成を拒否することがあります。

次の例では、groupOne という名前のグループをグループ ID なしで指定し、groupTwo という名前のグループをグループ ID 値 45 で指定しています。

groups:
  groupOne: {}
  groupTwo:
    gid: "45"

ユーザー

users キーを使用すると、Linux/UNIX ユーザーを EC2 インスタンス上に作成できます。

構文

users:
  name of user:
    groups:
      - name of group
    uid: "id of the user"
    homeDir: "user's home directory"

オプション

uid

ユーザー ID です。異なるユーザー ID で同じユーザー名が存在した場合、作成処理は失敗します。ユーザー ID が既存のユーザーに既に割り当てあれている場合、オペレーティングシステムは作成要求を拒否することがあります。

groups

グループ名のリストです。ユーザーはリスト内の各グループに追加されます。

homeDir

ユーザーのホームディレクトリです。

ユーザーは、/sbin/nologin のシェルで非対話形式のシステムユーザーとして作成されます。これは設計によるものであり、変更できません。

users:
  myuser:
    groups:
      - group1
      - group2
    uid: "50"
    homeDir: "/tmp"

sources

sources キーを使用すると、公開 URL からアーカイブファイルをダウンロードし、EC2 インスタンス上のターゲットディレクトリに解凍できます。

構文

sources:
  target directory: location of archive file

サポートされる形式

サポートされる形式は、tar、tar+gzip、tar+bz2、zip です。Amazon Simple Storage Service (Amazon S3) などの外部の場所(http://s3.amazonaws.com/mybucket/myobject など)は、その URL が公開されている場合にのみ参照できます。

以下の例では、Amazon S3 バケットから公開 .zip ファイルをダウンロードし、/etc/myapp に解凍しています。

sources:  
  /etc/myapp: http://s3.amazonaws.com/mybucket/myobject

ファイル

files キーを使用すると、EC2 インスタンス上にファイルを作成できます。内容は、設定ファイルにおいてインラインで指定することも、URL から取得することもできます。ファイルは辞書式順序でディスクに書き込まれます。

files キーを使用し、承認用のインスタンスプロファイルを指定することで、Amazon S3 からプライベートファイルをダウンロードできます。

構文

files:  
  "target file location on disk": 
     mode: "six-digit octal value"
     owner: name of owning user for file
     group: name of owning group for file
     source: URL
     authentication: authentication name:

  "target file location on disk": 
     mode: "six-digit octal value"
     owner: name of owning user for file
     group: name of owning group for file
     content: |
    this is my content
     encoding: encoding format
     authentication: authentication name:

オプション

content

ファイルに追加する文字列コンテンツ。content または source を指定します。両方を指定することはできません。

source

ダウンロードするファイルの URL。content または source を指定します。両方を指定することはできません。

encoding

content オプションで指定された文字列のエンコード形式。

有効な値: plain | base64

group

ファイルを所有している Linux グループ。

owner

ファイルを所有している Linux ユーザー。

mode

このファイルのモードを表す 6 桁の 8 進値です(例: 000444)。最初の 3 桁はシンボリックリンクに使用され、最後の 3 桁はファイルに対するアクセス許可の設定に使用されます。

authentication

使用する AWS CloudFormation 認証方法の名前。リソースキーで、オートスケーリンググループメタデータに認証方法を追加できます。例については、以下を参照してください。

files:
  "/home/ec2-user/myfile" :
    mode: "000755"
    owner: root
    group: root
    source: http://foo.bar/myfile
 
  "/home/ec2-user/myfile2" :
    mode: "000755"
    owner: root
    group: root
    content: |
      # this is my file
      # with content

シンボリックリンクを使用する例。この例では、外部のファイル /tmp/myfile1.txt を参照するリンク /tmp/myfile2.txt を作成します。

files:
  "/tmp/myfile2.txt" :
    mode: "120400"
    content: "/tmp/myfile1.txt"

次の例では、リソースキーを使用して S3Auth という認証方法を追加して、Amazon S3 バケットから秘密ファイルをダウンロードするのに使用します。

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName:
            "Fn::GetOptionSetting":
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"

files:
  "/tmp/data.json" :
    mode: "000755"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-west-2-123456789012/data.json

コマンド

commands キーを使用すると、EC2 インスタンスでコマンドを実行できます。コマンドは、名前のアルファベット順に処理され、アプリケーションとウェブサーバーが設定されてアプリケーションバージョンファイルが抽出される前に実行されます。

デフォルトでは、コマンドはルートディレクトリで実行します。別のディレクトリからコマンドを実行するには、cwd オプションを使用します。

構文

commands:
  command name: 
    command: command to run
    cwd: working directory
    env: 
      variable name: variable value
    test: conditions for command 
    ignoreErrors: true

オプション

command

実行するコマンドを指定する配列または文字列です。配列を使用する場合、スペース文字をエスケープしたり、コマンドパラメータを引用符で囲んだりする必要はありません。

env

(オプション)コマンドの環境変数を設定します。このプロパティは、既存の環境に追加するのではなく、既存の環境を上書きします。

cwd

(オプション)作業ディレクトリです。指定されていない場合、コマンドはルート ディレクトリ (/) から実行します。

test

(オプション) Elastic Beanstalk が command キーに含まれるコマンド (シェルスクリプトなど) を処理するために、値 true (終了コード 0) を返す必要があるコマンドです。

ignoreErrors

(オプション)command キーに含まれるコマンドが失敗した場合(非ゼロ値を返した場合)、他のコマンドを実行する必要があるかどうかを指定するブール値です。失敗したコマンドがあっても他のコマンドの実行を続ける場合は、この値を true に設定します。コマンドが失敗したら実行を停止する場合は、false に設定します。デフォルト値は false です。

次の例では python スクリプトを実行します。

commands:
  python_install: 
    command: myscript.py
    cwd: /home/ec2-user
    env: 
      myvarname: myvarvalue
    test: "[ ! -x /usr/bin/python ]"

サービス

services キーを使用すると、インスタンスが起動されるときに開始または停止する必要のあるサービスを定義できます。また、services キーではソース、パッケージ、ファイルへの依存関係も指定でき、インストールされているファイルのために再起動が必要になった場合に、Elastic Beanstalk がサービスの再起動を処理します。

構文

services: 
  sysvinit:
    name of service:
      enabled: "true"
      ensureRunning: "true"
      files: 
        - "file name"
      sources: 
        - "directory"	
      packages: 
        name of package manager:
          "package name[: version]"
      commands: 
        - "name of command"

オプション

ensureRunning

true に設定すると、Elastic Beanstalk が終了した後でサービスが実行されます。

false に設定すると、Elastic Beanstalk が終了した後でサービスは実行されません。

このキーを省略すると、サービスの状態は変更されません。

enabled

true に設定すると、起動時にサービスが自動的に開始されます。

false に設定すると、起動時にサービスが自動的に開始されません。

このキーを省略すると、このプロパティは変更されません。

files

ファイルのリストです。Elastic Beanstalk がファイルブロックによって直接変更した場合、サービスは再起動されます。

sources

ディレクトリのリストです。Elastic Beanstalk がこれらのディレクトリの 1 つにアーカイブを拡張した場合、サービスは再起動されます。

packages

パッケージ名のリストに対するパッケージマネージャのマップです。Elastic Beanstalk がこれらのパッケージの 1 つをインストールまたは更新した場合、サービスは再起動されます。

commands

コマンド名のリストです。Elastic Beanstalk が指定したコマンドを実行した場合、サービスは再起動されます。

次に例を示します。

services: 
  sysvinit:
    myservice:
      enabled: true
      ensureRunning: true

コンテナコマンド

container_commands キーを使用して、アプリケーションのソースコードに影響するコマンドを実行できます。コンテナコマンドは、アプリケーションおよびウェブサーバーが設定され、アプリケーションバージョンアーカイブが抽出された後、アプリケーションバージョンがデプロイされる前に実行されます。コンテナ以外のコマンドと他のカスタマイズオペレーションは、抽出されるアプリケーションソースコードの前に実行されます。

コンテナコマンドは、ソースコードがアプリケーションサーバーにデプロイされる前に抽出されたステージングディレクトリから実行されます。コンテナコマンドを使用してステージングディレクトリにあるソースコードに対して行うすべての変更は、ソースが最終的な場所にデプロイされる際に含まれます。

leader_only を使用して、1 つのインスタンスでコマンドを実行するか、テストコマンドが true と評価される場合のみコマンドを実行するよう test を設定できます。リーダー専用コンテナコマンドは、環境の作成およびデプロイ中のみ実行されます。他のコマンドやサーバーカスタマイズオペレーションは、インスタンスがプロビジョニングまたは更新されるたびに実行されます。リーダー専用コンテナコマンドは、AMI ID やインスタンスタイプの変更などの起動設定の変更によって実行されることはありません。

構文

container_commands:
  name of container_command:
    command: "command to run"
    leader_only: true
  name of container_command:
    command: "command to run"

オプション

command

実行する文字列または文字列の配列。

env

(オプション) コマンドを実行する前に環境変数を設定し、既存の値を上書きします。

cwd

(オプション)作業ディレクトリです。デフォルトでは、これは解凍されたアプリケーションのステージングディレクトリです。

leader_only

(オプション) Elastic Beanstalk によって選択された単一のインスタンスでコマンドを実行するのみです。リーダー専用コンテナコマンドは、他のコンテナコマンドより前に実行されます。コマンドはリーダー専用または test を持つことができますが、両方はできません (leader_only が優先されます)。

test

(オプション) このコンテナコマンドを実行するために、true を返す必要があるテストコマンドを実行します。コマンドはリーダー専用または test を持つことができますが、両方はできません (leader_only が優先されます)。

ignoreErrors

(オプション) このコンテナコマンドが 0 (成功) 以外の値を返す場合は、デプロイに失敗しません。有効にするには、true に設定します。

次に例を示します。

container_commands:
  collectstatic:
    command: "django-admin.py collectstatic --noinput"
  01syncdb:
    command: "django-admin.py syncdb --noinput"
    leader_only: true
  02migrate:
    command: "django-admin.py migrate"
    leader_only: true
  99customize:
    command: "scripts/customize.sh"