AWS CodeDeployのApplicationStopは旧リビジョンのスクリプトが使われる #AWS

概要

CodeDeployのApplicationStopは旧リビジョンのスクリプトが使われる。

どういう問題が起きるか?

一度デプロイに成功した後、二度目以降で発生するようなバグがApplicationStopのスクリプトで発生すると、再試行してもエラーになり続ける。

(新しい修正したスクリプトを使ってくれないので)

あんまり発生しなそうだけど、自分が踏んだのは下記のようなケース。

  • アプリケーションが停止できなかった場合はエラーにするような停止スクリプト
  • EC2インスタンスを別件(スケールアップ)のために再起動した
  • 再起動のタイミングでCodeDeployに関係なくアプリケーションは停止
  • CodeDeployを動かすと、アプリが停止できない(そもそも起動してない)のでスクリプトがエラー
  • 停止スクリプトを修正するも、反映されない(古いスクリプトが使われるから)

どう対応したか

もう全てを最初からやり直すことにした。

  1. /opt/codedeploy-agent/deployment-root/[デプロイグループID]/ 配下にartifactのキャッシュがデプロイID単位で配置されているので、丸っと消す。
  2. /opt/codedeploy-agent/deployment-root/deployment-instructions/ 配下に前回デプロイ情報が残されてるので、丸っと消す。
  3. 前回デプロイしたモジュールを削除する

これで再デプロイする。

前回デプロイしたモジュールを削除するのは、CodeDeployは自身がデプロイしたモジュールが既に配置されていた場合、エラーになるため。 (つまり、上書きデプロイに制限がある)

キャッシュ等を削除することにより、今あるモジュールがCodeDeployによって配備されたものだと認識できなくなってしまうので削除する必要がある。

参考

qiita.com qiita.com