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したらデプロイが進みました。
EC2の初期設定で詰まったことメモ
はじめに
Railsの設定の記事を参考にしましたが、色々詰まったので次に同じことをするときの為にメモ
取り急ぎ問題と解決策のみ羅列したので、あとで読みやすくします。現時点で読みにくいのはご了承ください
前提
AMI : Amazon Linux 2 AMI 2.0.20191116.0 x86_64 HVM gp2
問題と解決策
1. インスタンスにssh接続できない
問題
https://qiita.com/naoki_mochizuki/items/22cfbf4bf7ec95f6ac1c
を参考にしつつ、VPC等をデフォルトで進めていると、sshで接続できない問題発生(timeout)
解決策
セキュリティグループのインバウンドのルールでSSHを許可しているかを確認
許可していなかったら許可する
2. EC2にmysqlがインストールできない
問題
https://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e
の途中で、mysqlがインストールできない問題発生
解決策
これ見て解決
3. EC2にepel関連のパッケージがインストールできない
問題
epel関連のパッケージがインストールできない問題も発生
解決策
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-enable-epel/
これ見て解決。この後 yum install nodejs --enablerepo=epel を忘れずに(忘れたらCould not find a JavaScript runtime.が出る)
これとmysqlの問題解決は諸々インストールの前にやっておいた方がいいかもしれないです。
4. mysqlに空パスワードを設定できない
問題
staging環境なので、mysqlのrootパスワードを空にしたいがmysql_secure_installationでは空パスワードは設定できない
解決策
https://qiita.com/ksugawara61/items/d8d69b7d57a3afcef980
これ見て解決
5. 環境構築後、ブラウザからEC2のipを叩いてもtime outする
問題
IPを叩いてもtime outする問題発生
解決策
セキュリティグループのインバウンドのルールでHTTPを許可しているかを確認