LoginSignup
49
17

More than 5 years have passed since last update.

AWSのCodeDeployでエラーになったらAgentを試そう!

Posted at

AWSのCodeDeploy使っている人ってどのくらいいるんでしょう?
先日こんなのも書きましたが
http://qiita.com/hardreggaecafe/items/7ff3ada575a1100fa4a2
あまりドキュメントがなくて正直苦労しております。
ここに書いたこともAmazonのサポートに聞いたことも一部書いてます。

自分の場合はCircleCIからS3まではコンテンツ持ってこれて、その後CodeDeployが
EC2にデプロイしようとしてエラーになるというのを何回か経験しています。
その時のエラーはこちら。

"The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems. (Error code: HEALTH_CONSTRAINTS) "
Deployment: d-XXXXXXX
Instance ID: i-XXXXXX

『全体のデプロイは個別のインスタンスのデプロイ失敗が多すぎるか、もしくはデプロイが出来る健全なインスタンスが少なすぎる、あるいはいくつかのデプロイグループのインスタンスが問題を抱えていることが原因で失敗しました。』とエラーの原因がよくわからない内容・・・。

サポートに問い合わせてわかったことはデプロイするEC2インスタンスにCodeDeployAgentが無いと詳細原因を特定できないということでした。それをいれることでデプロイを再実行してエラー原因を吐き出させればそれを検索すればわかりそう。

ということで早速当該インスタンスの中にSSHでログイン後、CodeDeployAgentが入っているかを確認。
rpm -qa |grep -i codedeploy-agent
CodeDeployAgentが入っていないとエラーになります。

Agentが入っていなければこちらを打ち込んでインストール。

yum -y install ruby; yum -y install wget; cd /home/ec2-user; wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install; chmod +x ./install; sudo ./install auto

以下のログを確認

/var/log/aws/codedeploy-agent/* 
/opt/codedeploy-agent/deployment-root/deployment-logs/* 

こちらのコマンドも有効
find /opt/codedeploy-agent/deployment-root/ -type d -iname "d-XXXXX"
d-XXXXはCodeDeployのデプロイ番号。

で早速ログを見ると

2016-09-13 17:20:44 ERROR [codedeploy-agent(20914)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error during perform: RuntimeError - File already exists at location /home/adbase/analytics/public/site_edit.html - /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:115:in `generate_normal_copy'

とファイルがすでにあると怒られている。まあ、たしかにデプロイ前にソースをコピーしているからこれが何かやっているのか?と思い調べたら
https://forums.aws.amazon.com/thread.jspa?threadID=212987
にこんなことが書いていました。

AWS CodeDeploy keeps track of files in an application revision that are deployed for a deployment group. It does not overwrite any existing files that were not deployed as part of a deployment group's application revision. This is done so that your deployment does not interfere with anything outside of its revision.

If you want to overwrite an existing file, you can do the clean up in 'BeforeInstall' lifecycle event.

『AWSのCodeDeployはデプロイグループのアプリケーションのリビジョンを追跡して記録しています。これは既に存在しているファイルが有ればそれがアプリケーションのリビジョンの一部でないことを検知して上書きしないようにしています。リビジョン外のものを妨げないようにそうしています。

もし上書きしたければ消去するようにBeforeInstall(CodeDeployのライフサイクル)に記述してください。』

ということでした。気がきいてるんでしょうか??ということでファイル消したらデプロイ出来るようになりました。

ってこのへんまで書いて昔おんなじような記事を書いたことに気づいた罠。
http://qiita.com/hardreggaecafe/items/6abf9d4c6a82fcf61589
よろしければご参照ください。

49
17
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
17