AWS CodeDeployのafter installイベントが終わらない

Posted date at 2023-12-12

AWS

引っかかった内容

バックエンドがLaravel、フロントエンドがVue.jsで、InertiajsのSSRの機能を利用して動作させるアプリケーションのafter installイベントがいつまでたっても終わらなかった。

原因

appspec.ymlファイル内でafter installイベントで実行させるシェルファイルで php artisan inertia:start-ssr

を実行していたこと。

このコマンドはInertiajsを利用したLaravel、Vue.jsアプリケーションをSSRにして実行してくれるものだが、継続的に実行を行うタイプのコマンド。

CodeDeployはコマンドの終了を永遠に待つため、バックグラウンドで実行させる必要がある。

誤った解決策

単純に&を使えばいいわけではない。

php artisan inertia:start-ssr &

上記の場合デフォルトの 1 時間のデプロイライフサイクルイベントのタイムアウト期間まで、デプロイが保留状態のままになり、タイムアウトが過ぎると、 CodeDeploy AfterInstall 以前と同様にアプリケーションのライフサイクルイベントでデプロイが停止して失敗します。

正しい解決策

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/troubleshooting-deployments.html#troubleshooting-long-running-processes

こちらを参考に以下のように記述することで動作する。

php artisan inertia:start-ssr > /dev/null 2> /dev/null < /dev/null &

php artisan inertia:start-ssrをバックグラウンドで実行し、stdout、stderr、および stdin を /dev/null にリダイレクトさせている。

←ホームに戻る