(再掲)CodeDeployでEC2へデプロイした結果、処理が1つも進まずに失敗してしまうときの対処方法
私はインフラエンジニアとして開発案件に関わることがありますが、開発チームが開発速度を落とさずに最短で価値提供ができるようにインフラから支えることを気をつけています。
インフラはプラットフォームの1つであり、価値提供を行うものはアプリケーションです。アプリケーションが安定してサービスの価値を提供できること、新しい価値を提供できるまでの速度を落とさないことがインフラエンジニアに求められる要素だと考えています。
前置き(エラー解決を急いでいる人は読み飛ばして下さい)
プロジェクトでは開発エンジニアからは実装したものを動かしてみたいという要望があがることが多々あります。
「了解、今からデプロイするから10分待って」
というやりとりが必要な場合、インフラエンジニアがデプロイするまでに10分間の待ちが発生してしまうことになります。実際には、連絡してから返答をするまでの間もありますので、10分以上の待ちが発生します。この時間、無駄じゃないですか?
そこで必要になるのが、デプロイ自動化ですが、弊社ではCodeDeployを使うケースが少なくありません。
せっかく実環境で試したことをアウトプットしないのはもったいないのでトラブルシュートから小ネタまで少しずつ書いて行こうと思います。
CodeDeployでEC2へデプロイした結果、処理が1つも進まずに失敗してしまうとき
このような状況の時、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.
※実際の画面
CodeDeploy Agentのログを確認する
CodeDeploy Agentのログは /var/log/aws/codedeploy-agent/codedeploy-agent.log
に出力されています。
$ tail -10 /var/log/aws/codedeploy-agent/codedeploy-agent.log 2020-07-16 03:06:01 INFO [codedeploy-agent(3374)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.1.0-4_rpm. 2020-07-16 03:06:01 ERROR [codedeploy-agent(3374)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile 2020-07-16 03:07:31 INFO [codedeploy-agent(3374)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.1.0-4_rpm. 2020-07-16 03:07:31 ERROR [codedeploy-agent(3374)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile 2020-07-16 03:09:01 INFO [codedeploy-agent(3374)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.1.0-4_rpm. 2020-07-16 03:09:01 ERROR [codedeploy-agent(3374)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile 2020-07-16 03:10:31 INFO [codedeploy-agent(3374)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.1.0-4_rpm. 2020-07-16 03:10:31 ERROR [codedeploy-agent(3374)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile 2020-07-16 03:12:01 INFO [codedeploy-agent(3374)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.1.0-4_rpm. 2020-07-16 03:12:01 ERROR [codedeploy-agent(3374)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile
ログに出力されている InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile
これがエラーの原因です。設定を見直してみましょう。
デプロイ対象のEC2にIAMロールをアタッチする
CodeDeployからEC2インスタンスへデプロイする場合は、CodeDeploy Agentのインストールだけではなく、IAMロールのアタッチが必要です。下記のドキュメントを参考にIAMロールをアタッチして下さい。
docs.aws.amazon.com
CodeDeploy Agentを再起動する
EC2インスタンスへIAMロールをアタッチしているけど、IAM instance profile
のログが出力されている場合は、CodeDeploy Agentの再起動がされていないことが原因です。
CodeDeploy Agentは起動時にインスタンスプロファイルをチェックしていると思われます。そのため、IAMロールをアタッチしたあとは、CodeDeploy Agentを再起動する必要があります。
再起動は下記のコマンドを参考にして下さい。
・CodeDeploy Agent再起動
$ sudo systemctl restart codedeploy-agent.service
・CodeDeploy Agentのステータス確認(activeになっていることを確認)
$ systemctl status codedeploy-agent.service
これでIAM instance profile
のログ出力が止まったことを確認した後、再度、CodeDeployからデプロイ実行してみましょう。
CodeDeployは便利なサービスなので積極的に使っていきたいですね!