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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

アプリケーションが依存するソフトウェアをカスタマイズして設定できます。インスタンスのプロビジョニング中に実行するコマンドを追加できます。たとえば、Linux ユーザーとグループの定義、環境インスタンスでのファイルのダウンロード、またはファイルの直接作成ができます。このようなファイルには、アプリケーションで必要な依存関係 (yum リポジトリからの追加パッケージなど) や、Elastic Beanstalk によるデフォルトの特定の設定を上書きするプロキシ構成ファイルの代わりとなる設定ファイルなどがあります。

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

メモ
  • Amazon Linux 2 プラットフォームでは、.ebextensions 設定ファイルでファイルとコマンドを提供する代わりに、可能な限り BuildfileProcfile、およびプラットフォームフックを使用して、インスタンスのプロビジョニング中に環境インスタンスでカスタムコードを設定および実行することを強くお勧めします。これらのメカニズムの詳細については、「Elastic Beanstalk Linux プラットフォームの拡張」を参照してください。

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

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

キーは、上に表示した順に処理されます。

設定ファイルの作成およびテスト中は、環境のイベントを監視します。Elastic Beanstalk は、無効なキーなどの検証エラーが含まれている設定ファイルを無視し、同じファイルに含まれている他のキーを一切処理しません。これが発生すると、Elastic Beanstalk は警告イベントをイベントログに追加します。

パッケージ

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

構文

packages: name of package manager: package name: version ... 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.7 を使用します。アプリケーションが別のバージョンの 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

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) などの外部の場所 (https://mybucket.s3.amazonaws.com/myobject など) は、その URL がパブリックアクセス可能であれば参照できます。

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

sources: /etc/myapp: https://mybucket.s3.amazonaws.com/myobject
注記

複数の抽出で同じターゲットパスを再利用しないでください。別のソースを同じターゲットパスに抽出すると、コンテンツに追加する代わりに置き換えます。

ファイル

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

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

指定したファイルパスが既にインスタンスに存在する場合、既存のファイルは名前に拡張子 .bak が付加されたまま保持されます。

構文

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 # file 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 進値です。Windows システムではサポートされていません。最初の 3 桁はシンボリックリンクに使用し、最後の 3 桁は権限の設定に使用します。シンボリックリンクを作成するには、120xxx を指定します (xxx はターゲットファイルのアクセス許可を定義します)。ファイルのアクセス許可を指定するには、「000644」のように後半 3 桁の数字を使用します。

authentication

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

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 content

シンボリックリンクを使用する例。これは、既存のファイル /tmp/myfile2.txt を指すリンク /tmp/myfile1.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://elasticbeanstalk-us-west-2-123456789012.s3-us-west-2.amazonaws.com/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

実行するコマンドを指定する配列 (YAML シンタックスのブロックシーケンスコレクション) または文字列。重要な注意点:

  • 文字列を使用する場合は、文字列全体を引用符で囲む必要はありません。引用符で囲む場合は、同じタイプの引用符がリテラルとして出現した場合にエスケープします。

  • 配列を使用する場合、スペース文字をエスケープしたり、コマンドパラメータを引用符で囲んだりする必要はありません。配列の各要素が 1 つのコマンド引数です。配列を使用して複数のコマンドを指定しないでください。

以下の例はすべて同等です。

commands: command1: command: git commit -m "This is a comment." command2: command: "git commit -m \"This is a comment.\"" command3: command: 'git commit -m "This is a comment."' command4: command: - git - commit - -m - This is a comment.

複数のコマンドを指定するには、次の例に示すように、リテラルブロックスカラーを使用します。

commands: command block: command: | git commit -m "This is a comment." git push
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 キーを使用して、アプリケーションのソースコードに影響するコマンドを実行できます。コンテナコマンドは、アプリケーションおよびウェブサーバーが設定され、アプリケーションバージョンアーカイブが抽出された後、アプリケーションバージョンがデプロイされる前に実行されます。コンテナ以外のコマンドと他のカスタマイズオペレーションは、アプリケーションソースコードが抽出される前に実行されます。

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

注記

コンテナコマンドの出力は、cfn-init-cmd.log インスタンスログに記録されます。インスタンスログの取得と表示の詳細については、「Amazon EC2 インスタンスからのログの表示」を参照してください。

leader_only を使用して、1 つのインスタンスでコマンドを実行するか、テストコマンドが test と評価される場合のみコマンドを実行するよう true を設定できます。リーダー専用コンテナコマンドは、環境の作成およびデプロイ中のみ実行されます。他のコマンドやサーバーカスタマイズオペレーションは、インスタンスがプロビジョニングまたは更新されるたびに実行されます。リーダー専用コンテナコマンドは、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"