nmtysh.log

Tech系のネタや日々の独り言などを書いています。

Elastic Beanstalkの設定メモ

まとめ

ちゃんとドキュメントを読みましょう。
細かいところを読み飛ばしていてハマりました。

設定値の優先順位など

  • 設定ファイル (.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で実行される
    • suでwebappユーザー(apacheユーザー。ユーザー名を取得するヘルパースクリプトもある)として実行しないとログやキャッシュがrootで作成されて書き込めなくなる
commands:
  sudotest:
    command: su -s /bin/bash -c "php artisan migrate --force" webapp

services:
  sysvinit: # ←この行大事。services直下にサービス名ではなく、sysvinitの下にサービス名を指定しないと認識されない。見落としていてハマりました
    awslogs: # サービス名

RDS

参考