はじめに
AWSのCodeDeployを使うと、EC2インスタンスへのソースのデプロイが楽に実行できます。
参考:http://qiita.com/yukofeb/items/e077fc8755416c904032
そんなCodeDeployを悠々使っていたある日、突然デプロイがタイムアウトするようになった!なんてことありますよね(私は1ヶ月間に2回ありました)。
そんな場合は、ここに記載してある点を確認することで、またデプロイできるようになるかもしれません。
結論を先に言ってしまうと、デプロイ先のEC2インスタンスでCodeDeploy用のエージェントが停止してしまった場合にこのようなことが起こります。
環境
クライアント:何でも可
デプロイ先EC2インスタンス:Amazon Linux
具体的にはどのような症状が起こる?
AWS CLIでデプロイ用のコマンドを叩いている場合は、「コマンドが正常終了したのにインスタンス上のソースが更新されない」という動きが起こります。
デプロイ失敗時(タイムアウト時)のイベントの確認
一般的なデプロイ失敗(appspec.ymlの記載がおかしい等)の場合は、AWS管理コンソールのCodeDeploy管理画面でイベントを確認することで、何が起きているかが分かります。
ですが、上記の症状の場合、イベントの内容を見ようとしても見ることができません。
デプロイ失敗のイベント情報が見られるかどうかは、以下の手順で確認することができます。
一般的なデプロイ失敗の場合、イベントの内容に応じて適宜対処しましょう。
- AWS管理コンソールのCodeDeploy管理画面を開く。
- 画面上部のプルダウンメニューから、「デプロイ」をクリックする。
- タイムアウトしたデプロイの「デプロイID」部分をクリックする。
- 画面下部に表示される表の、「イベント」列を確認する。→何も表示されていない!
一般的なデプロイ失敗の場合は、下の図のように、「イベント」列に「イベントの表示」リンクが表示されます。
デプロイ先インスタンスのCodeDeploy用エージェントの起動状況確認
以下の手順で確認できます。
- デプロイ先のインスタンスにSSHでログインする。
- CodeDeploy用エージェントの起動状況を確認する(コマンド:「ps aux | grep codedeploy-agent」)。
上記のコマンドを実行しても何も画面に出力されない場合、CodeDeploy用のサービスが停止しています。
以降の手順に沿ってサービスを再起動することで、再びデプロイすることができるようになります。
CodeDeploy用エージェントの再起動
インスタンス上に残っているPIDファイルをリネームする(削除する場合は自己責任でお願いします)。
対象ファイル:
/opt/codedeploy-agent/state/.pid/codedeploy-agent.pid
/opt/codedeploy-agent/state/.pid/codedeploy-agent.pid.lockCodeDeploy用エージェントを再起動する(コマンド:「sudo /etc/init.d/codedeploy-agent start」)。
以上の手順を実行後に再度デプロイし、ソースが無事配置されることを確認しましょう。