CodeDeployを使用したリリース方法でうまくできなかった件

AWS
この記事は約3分で読めます。

こんにちは、@Manabu です。

今回は、EC2に対してソースの変更をリリースするために、AWSのCode系を使用したCI/CD環境を準備しました。

その時に、別環境で使用した手順ではうまくいかず、作業が止まってしまったので、原因と解決策を残しておきたいと思います。

同じ事象が発生している方の役に立てればと思います。

今回の構成

今回想定している構成は、以下のようなイメージです。

使用したサービス

  • CodeCommit:ソースコードのバージョン管理
  • CodeDeploy:EC2にアプリケーションをデプロイ
  • CodePipeline:自動デプロイのパイプライン管理

これらのサービスを利用し、CodeCommitのマージをトリガーとして、EC2にソースの変更をリリースするようにしています。

発生したエラー

想定通りのサービスの設定が完了したあと、何度デプロイしようとしても以下のエラーが発生してしまいました。

CodeDeploy agent was not able to receive the lifecycle event. Check the CodeDeploy agent logs on your host and make sure the agent is running and can connect to the CodeDeploy server.

エラーメッセージの内容を確認すると、CodeDeployエージェントがライフサイクルイベントを受信できない状態になっていました。

原因

このエラーが発生している原因は、AWS認証情報の影響によるものでした。

私の場合、EC2から別のAWS環境のCodeCommitにアクセスする用事があり、そのためにEC2内のrootユーザーにAWSの認証情報を設定していたところが原因みたいです。

参照記事

AWS Code deploy cannot reach instance service
I'm going to use ec2, s3, codedeploy to configure cicd through github Action These are the settings. This is Code deploy...

解決策

今回のエラーの原因を解決するためには、原因であるEC2内のAWS認証情報を無効化する必要があるとのことです。

以下のファイルを確認すると、AWSの認証情報が記載されていたので、全てコメントアウトするようにしました。

# AWS認証情報の設定ファイル
sudo vi /root/.aws/credentials

#以下全てコメントアウト
#[default]
#aws_access_key_id = XXXXXXXXXXXXXXXXXXX
#aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXX

認証情報を無効化した後、CodeDeployエージェントを再起動します。

sudo systemctl restart codedeploy-agent

ここまで行った後、再デプロイするとうまく実行できました。

まとめ

今回の問題は、AWSの認証情報(/root/.aws/credentials)が原因で、IAMロールに夜適切な認証が行えなくなっていたことによるものでした。

このような認証の競合が発生すると、CodeDeployが意図しない認証情報を使用してしまい、正常に通信でいなくなることがあります。

問題が発生した場合、この記事も参考にしてみてください。