91s

プログラミング関係、日記などを書きます

CodeDeployのエラー ~ The overall deployment failed ... 略 ~

codedeployが失敗していて、デプロイ詳細画面の上部に

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.

 
これが出ていて、翻訳しても、

展開に失敗した個々のインスタンスが多すぎるか、展開に使用できる正常なインスタンスが少なすぎるか、展開グループ内の一部のインスタンスで問題が発生しているため、展開全体が失敗しました。

という控えめに言って意味不明な状態でした。

ステータスを見ようとしても全部スキップになっていて見れない為、ec2にssh接続して、

less /var/log/aws/codedeploy-agent/codedeploy-agent.log

で codedeployのログを確認すると以下のような記述を発見
 

booting child: error during start or run: NoMethodError - undefined method `underscore' for Seahorse::Util:Module - /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_executor.rb:51:in `command'

 

そのまま読むとunderscoreメソッドがないってことなのですが、色々調べた結果、codedeployではaws-sdk-coreのバージョン3系に対応してないそうです。
(該当のunderscoreメソッドは3系で削除されたっぽい??)


aws-sdk-s3がaws-sdk-coreのV3を必要としていたので、アプリ側の問題かと思ってGemfileからaws-sdk-s3を削除したところ、デプロイが通らないがエラーが以下のように変わりました。

 

booting child: error during start or run: Gem::ConflictError - Unable to activate codedeploy-commands-1.0.0, because aws-sdk-core-3.85.1 conflicts with aws-sdk-core (~> 2.9) - /usr/local/rbenv/versions/2.5.3/lib/ruby/site_ruby/2.5.0/rubygems/specification.rb:2302:in `raise_if_conflicts'

 

codedeploy実行時に使用しているruby環境(アプリケーションで使用しているruby環境とは異なる??)でaws-sdk-coreが2系と3系の2つインストールされていてconflictしていることが判明。

なぜここにaws-sdk-core-3.85.1が入ってしまっているかは不明だが、今回は使わないので削除.. しようとしたらpermission deniedでuninstallできませんでした。

仕方がないので、

sudo su - 
gem uninstall aws-sdk-core -v "3.85.1"

でrootユーザーになってuninstallしたらデプロイが進みました。