11
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

.ebextensions の container_commands の挙動メモ

インスタンスにアプリケーション展開後、デプロイの度に実行される container_commands ですが、どのような環境下で実行されているのか気になったので実際にコマンドを叩いて確かめてみました。

チェックに使った設定ファイル

00_dump.config
container_commands:
  deploy_debug_dump:
    command: |
      id
      env
      pwd

尚、チェックに使った環境は以下です。

  • デプロイ方式: All at once
  • プラットフォーム: 64bit Amazon Linux 2017.03 v2.7.2 running Docker 17.03.1-ce

id の結果:

uid=0(root) gid=0(root) groups=0(root)

ec2-user などではなく root として実行されるようですね。

env の結果:

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
PWD=/var/app/current
SHLVL=1
HOME=/root
EB_IS_COMMAND_LEADER=true
_=/bin/env

EB_IS_COMMAND_LEADER が設定されてるのを確認できました。

container_command の属性値を leader_only: true とした場合、複数インスタンスにデプロイする場合であっても Beanstalk によって選択された単一のインスタンス (=リーダー) でしかコマンドが実行されませんが、その際のリーダーかどうかの判定に使用されている変数のようです。

自身がリーダーかどうかは /opt/elasticbeanstalk/bin/leader-test.sh のスクリプトでも判定可能です。

pwd の結果:

/var/app/current になってました。デプロイするとこのディレクトリ以下にアプリケーションが展開されます。

残された疑問点

次の記事を読むと以下のように書かれています。

container_command実行時には /var/app/ondeck がワーキングディレクトリとなっています。
ここはプロジェクトのzipが展開される準備用のディレクトリで、ここから /var/app/current にコピーされてデプロイが完了します。

この説明を読むと先の pwd の結果は /var/app/ondeck になるように読めるのですが、実際は /var/app/current になっていました。

ここらへんはデプロイ方式によって違ったりするのでしょうかね。

どちらにしてもデフォルトのワーキングディレクトリにアプリケーションが展開されていることは間違いなさそうなので、無理にワーキングディレクトリを変更せず相対パスで処理をしておくのが無難そうです。

関連

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
11
Help us understand the problem. What are the problem?