Edited at

ElasticBeanstalk custom platformでcontainer_commandの実行ディレクトリを設定する

More than 1 year has passed since last update.


TL;DR

platform.yaml でapp_staging_dirを指定するだけでOK。

container:

app_staging_dir: "/var/app/staging"


詳細

Elastic Beanstalkで選択できるプラットフォームでは、アプリのデプロイ時に実行するcontainer_commandはサーバ上に展開したアプリのソースコードのルートで実行される。と、AWSのドキュメントにもそんな様なことが書かれている。

私の知る限り少なくともPHPのプラットフォームではそうなっており、container_commandにでlsすると、ログにソースコードのファイルがちゃんとでてくる。

しかし、Elastic BeanstalkのドキュメントにあるサンプルNodePlatform_Ubuntuでカスタムプラットフォームを作成したら、container_commandの実行ディレクトリがソースコードが展開される場所ではなく/tmpになってしまう。

デプロイ時にソースコードに含んだファイルでなにかしようと思ったらこれは不便極まりない。

いろいろ調べていたら、インスタンス上でget-config containerを実行することで確認できるapp_staging_dirがどうもこのワーキングディレクトリを決めているっぽい。でも、どうやってそれを設定するかは結局どこっにも見つけることは出来なかった。

ubuntu@ip-xxxxxx:~$ sudo /opt/elasticbeanstalk/bin/get-config container --output YAML

---
app_staging_dir: "/tmp"
instance_port: '80'
config_staging_dir: "/tmp"
common_log_list:
- "/var/log/eb-activity.log"
log_group_name_prefix: "/aws/elasticbeanstalk"
source_bundle: "/opt/elasticbeanstalk/deploy/appsource/source_bundle"

万策尽きて、get-configのサブコマンドがcontainerであることから、ダメ元で、カスタムプラットフォームを作成するファイルの platform.yaml にcontainerセクションを追記してみたら・・・、あっさりできてしまった。

version: "1.0"

provisioner:
type: packer
template: custom_platform.json
flavor: ubuntu1604

metadata:
maintainer: pikanji
description: Ubuntu nginx PHP7.0 php-fpm
operating_system_name: Ubuntu
operating_system_version: 16.04
programming_language_name: PHP
programming_language_version: 7.0
app_server_name: "none"
app_server_version: "none"

container:
app_staging_dir: "/var/app/staging"

いやー、これくらいドキュメントに書いておいてよAmazonさん・・・。