TL;DR
エラーの原因はAWS(ポリシーやロールの権限)、Github、CircleCI、etc... の設定ミスです。
やりたい事次第でエラーもそれぞれなので、ログ見てググりましょう!
# 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でエラーコードを見てググって解決する
# tailコマンドでログを200行表示
$ tail -f -n 200 /var/log/aws/codedeploy-agent/codedeploy-agent.log
② CodePipelineとGithubを連携する
Codedeployでデプロイが出来るようになったら、CodePipelineとGithubを連携。
そしてPUSHして見ると、またもやエラー・・・
ログを見て見ると、S3にアクセスできないと書いてある。
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
はじめはわからないことが多いですが、一度出来てしまえば凄く楽です。
この記事が解決の参考になれば幸いです。