AWS Codedeploy で原因不明のエラー解決方法

AWS CodedeployでCI/CDを設計しようとした際に原因不明のエラーにつかまり、かなりの時間を浪費してしまったので
備忘録として情報を整理

状況としては

CodeDeploy が5分くらい試行して結局何を進まずにエラー終了。ただしエラーログは表示されない。

というもの。

設定しようとしたこと

AWS CodeDeploy を使ってGithubからLightsailへの自動デプロイを構築しようとしておりました。

CodeDeployの構成 GitHubからCodeDeploy

図にするとこれだけです。

参考にしたのはこちらの記事です。

https://aws.amazon.com/jp/blogs/compute/using-aws-codedeploy-and-aws-codepipeline-to-deploy-applications-to-amazon-lightsail/

CodeDeploy agentの起動やオンプレミスインスタンスの登録など問題なく完了し、いざデプロイを実行しようとするとエラーが発生しました。

エラー発生状況

5分くらい処理は試みるけどCodedeployは失敗し、CodeDeploy agentには何のエラーログも出力されていないという状況です。

CodeDeployのエラー時に表示されるメッセージはこちら。2パターンありました。

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.

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はデプロイすら始まらずに0秒で終了しています。

CodeDeployのエラー発生箇所 0秒終了

解決策

こちらのユーザガイドに従いIAMポリシーを設定し無事に解決しました。

オンプレミスインスタンスを設定するための前提条件

Lightsail側にアタッチしたIAMユーザに対してIAM関連の権限を付与する必要があるようです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow", 
      "Action": [
        "iam:CreateAccessKey",
        "iam:CreateUser",
        "iam:DeleteAccessKey",
        "iam:DeleteUser",
        "iam:DeleteUserPolicy",
        "iam:ListAccessKeys",
        "iam:ListUserPolicies",
        "iam:PutUserPolicy",
        "iam:GetUser"
      ],
      "Resource": "*"
    }
  ]
}

その他確認したこと

Codedeploy agentのログ

  • Codedeploy agent は起動しているか

こちらのコマンドで確認します。

service codedeploy-agent status

Active: active (running) と表示されていれば問題ないです。

CodeDeploy agentのログ

念のためログも確認します。

Codedeployのエンドポイント向けに定期的にポーリングしに行っているログが表示されているので、問題なく動いていそう。

[codedeploy-agent(54996)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.6.0-49_deb.
[codedeploy-agent(54996)]: [Aws::CodeDeployCommand::Client 200 45.256832 0 retries] poll_host_command(host_identifier:"arn:aws:ec2:ap-northeast-1:0123456789:instance/i-0c123456789")  

オンデマンドインスタンスの登録

  • オンデマンドインスタンスの登録ができているか
  • オンデマンドインスタンスとして登録したIAMユーザは、オンデマンドインスタンスに設定したCredentialと一致しているか
オンデマンドインスタンスの詳細

デプロイ先のサーバにディレクトリが存在していないこと

appsec.ymlでデプロイ先を指定しますが、指定した先にすでにディレクトリが存在していたりファイルが存在するとエラーになります。

CodeDeployとして初めてデプロイする際にはデプロイ先は空にしておきましょう。

まとめ

エラーログがどこにも出力されないので解決までに多大な労力を費やしてしまいました。

IAMの権限が必要なんで書いていなかったのに、、何かの条件によるのかもしれないです。とりあえずCI/CDの構築はできそう。

コメントを残す