AWS CodeDeployとCodePipelineでハマった時の対処法


TL;DR

エラーの原因はAWS(ポリシーやロールの権限)、Github、CircleCI、etc... の設定ミスです。
やりたい事次第でエラーもそれぞれなので、ログ見てググりましょう!

EC2instance
# tailコマンドでログを200行表示
$ tail -f -n 200  /var/log/aws/codedeploy-agent/codedeploy-agent.log

はじめに

Github push → CodePipeline → CodeDeployでデプロイ自動化をやりたくて
AWSのドキュメントを見るも意味不明。。。

以下の方々の記事を参考にしました。
AWS CodeDeployの導入 & AWS CodePipeLineでgit pushの度にEC2に自動デプロイ & 結果をSlackに通知
AWS CodeDeployとGitHubを連携してEC2に簡単自動デプロイ
GitHubへのpush時にCodeDeployを使ってEC2にアプリケーションをデプロイする
[AWS] CodeDeploy+CodePipeline+GitHub push時にEC2にデプロイ

環境

CLB(Classic Load Balancer)
インプレースデプロイ
EC2インスタンス2台(AZ)

① まずはCodeDeployだけで動作するようにする

上記の記事を参考に設定し、CodeDeployのコンソールでデプロイボタンを押すと
案の定エラーになった。

(※画像はAWSフォーラムより引用)

↓ View Logsを踏むと

UnknownError (#^ω^)ピキピキ

私の場合
Error Code : UnknownError
Message : Access Denied

コンソール上ではそれ以上内容がわからないパターンがほとんどなので、EC2でエラーコードを見てググって解決する

EC2instance
# tailコマンドでログを200行表示
$ tail -f -n 200  /var/log/aws/codedeploy-agent/codedeploy-agent.log

② CodePipelineとGithubを連携する

Codedeployでデプロイが出来るようになったら、CodePipelineとGithubを連携。
そしてPUSHして見ると、またもやエラー・・・

(※画像はAWSフォーラムより引用)

ログを見て見ると、S3にアクセスできないと書いてある。

/var/log/aws/codedeploy-agent/codedeploy-agent.log
2018-02-06 10:34:21 ERROR [codedeploy-agent(11992)]: 
InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: 
Cannot reach InstanceService: Aws::S3::Errors::AccessDenied - Access Denied

どうやらCodePipelineはS3にログを取るらしいので
EC2インスタンスのロールにS3のアクセス権限を追加したら動きました

さいごに

AWSフォーラムもCodeDeployとCodePipelineの迷子だらけでしたw

はじめはわからないことが多いですが、一度出来てしまえば凄く楽です。
この記事が解決の参考になれば幸いです。