まとめ
ちゃんとドキュメントを読みましょう。
細かいところを読み飛ばしていてハマりました。
設定値の優先順位など
- 設定ファイル (.ebextensions)よりもコンソールの設定が優先
- 一部設定はコンソールで無設定にできない
- コンソールでphpのdocument rootを空に設定したら、ebextensionsで指定した値ではなくnullになってた
PHP
- Composerはデフォルトだと"--dev"状態で実行される
- 開発用パッケージもインストールしようとするので時間がかかる
- ebextensionsのcomposer_optionsで"--no-dev"を指定する
option_settings: - namespace: aws:elasticbeanstalk:container:php:phpini option_name: composer_options value: --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader あるいは option_settings: aws:elasticbeanstalk:container:php:phpini: composer_options: --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader
Laravel
- /var/app/current はデプロイ時にすべて入れ替えられる
- セッションをファイル管理しているとデプロイ時に消える(storage/framework/sessions にあるため)
- 同様にログも消える
- PHP環境でも /var/app/support/logs/ が生成されているのでここにログを出せば良さそう。ログローテートなども構成されている
- 自前でログの出力先を確保した場合
- ログ末尾、バンドルログ、ローテーションされたログ、logrotateの設定を作る必要がある。じゃないとbeanstalkのコンソールで取得できないしS3に保管されない
- ebextensionsのcontainer_commandsはrootで実行される
commands: sudotest: command: su -s /bin/bash -c "php artisan migrate --force" webapp services: sysvinit: # ←この行大事。services直下にサービス名ではなく、sysvinitの下にサービス名を指定しないと認識されない。見落としていてハマりました awslogs: # サービス名 〜
RDS
参考
- 設定オプション - AWS Elastic Beanstalk
- Elastic Beanstalk への Laravel アプリケーションのデプロイ - AWS Elastic Beanstalk
- Composer の更新 - AWS Elastic Beanstalk
- AWS Elastic Beanstalk PHP プラットフォームを使用する - AWS Elastic Beanstalk
- amazon web services - Composer install on AWS without development requirements - Stack Overflow
- Beanstalk運用の日常風景 - Qiita
- Elastic Beanstalk 環境の Amazon EC2 インスタンスからのログの表示 - AWS Elastic Beanstalk
- Linux サーバーでのソフトウェアのカスタマイズ - AWS Elastic Beanstalk
- AWS Developer Forums: ebextensions: run scripts as webapp ...