16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

.ebextensions の container_commands の挙動メモ

Last updated at Posted at 2017-09-04

インスタンスにアプリケーション展開後、デプロイの度に実行される 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 になっていました。

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

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

関連

16
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?