これは何
Laravelを使ったアプリケーションにおいて、AWS ElasticBeanstalk において、コードデプロイのタイミングで migration と cache clear をやってくれるようにする方法です。
やり方
.ebextensions/ 以下の ファイルに以下の記述を追加します。
container_commands:
01-migration:
command: "php artisan migrate --force"
leader_only: true
02-cache-clear:
command: "php artisan cache:clear"
leader_only: true
補足
container_commands
について
コンテナコマンドは、アプリケーションおよびウェブサーバーが設定され、アプリケーションバージョンアーカイブが抽出された後、アプリケーションバージョンがデプロイされる前に実行されます。
要するに、デプロイ直前に実行されます。
「アプリケーションバージョンがデプロイされる前」 においてアプリケーションはサーバ内の/var/app/ondeck/
に配置されます。
これは eb-activity.log において AppDeployStage0/AppDeployPreHook/01_unzip.sh
のステップを見ると知ることができます。
ただしこれを知らなくても、cwdオプションのデフォルトの設定は以下のようになっているので、これを気にする必要はありません。
cwd
(オプション)作業ディレクトリです。デフォルトでは、これは解凍されたアプリケーションのステージングディレクトリです。
leader_only オプションについて
(オプション) Elastic Beanstalk によって選択された単一のインスタンスでコマンドを実行するのみです。
eb で複数台構成で運用している場合にはこのオプションを指定しておくことで、そのデプロイにおいては1回だけコマンドを実行することができます。
migrate コマンドの --force オプションについて
ENV=production
の環境においては、migrateコマンドは本当に本番だけどデプロイしていいのか確認を取るようになっています。
--force
をつけておくとその確認を飛ばすことができるので、自動化するときには便利です。