Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@ymm1x

.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 になっていました。

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

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

関連

Why not register and get more from Qiita?
  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
11
Help us understand the problem. What are the problem?