Help us understand the problem. What is going on with this article?

.ebextensions の container_commands の挙動メモ

More than 1 year has passed since last update.

インスタンスにアプリケーション展開後、デプロイの度に実行される 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 になってました。デプロイするとこのディレクトリ以下にアプリケーションが展開されます。

残された疑問点

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

http://akiomik.hatenablog.jp/entry/2014/02/27/030608

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

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

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

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

関連

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away