##【事象】
デプロイメントパイプラインをAWSのサービスで作っていた際に、AWS CodeDeployでのデプロイに失敗して辛かった話。
##【解決】
デプロイ対象のEC2に、IAMロールが足りていなかったので付け足したらうまくいった。
##【詳細】
デプロイに失敗し、下記のようなエラーがでた。
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. (Error code: HEALTH_CONSTRAINTS
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/error-codes.html?icmpid=docs_acd_console#ecode_health_constraints
AWSのエラーメッセージは、都度都度ドキュメントに飛ばしてくれるのでありがたいですね~。
エラーメッセージは、なんかFailしたことくらいしかわかりませんが、エラーコードもURLも確認できました。
これならすんなりいけるはず。さて、URL先を見てみます。
Error code: HEALTH_CONSTRAINTS
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/error-codes.html?icmpid=docs_acd_console#ecode_health_constraints
デプロイに失敗した個別のインスタンスが多すぎる、デプロイに使用できる正常なインスタンスが少なすぎる、またはデプロイグループの一部のインスタンスで問題が発生しているため、全体的なデプロイが失敗しました。
(´ω`) 和訳しただけかと、その問題を言ってくれと....。
ここから、AppSpec File、時間ずれ、エンコード、ファイルのパーミッション等々、調べていったものの
何れも自体には問題ない模様...。
→AWSのサービスそのものの問題から、お叱りを頂いているのかもしれません。
##あーっ!お客様!困ります!あーっ!!
エラーメッセージの Error code: HEALTH_CONSTRAINTS
からドキュメントを読んでみましょう。
AWS CodeDeploy デプロイのログデータの表示
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/deployments-view-logs.html
なにやらAWS CodeDeployは、エージェント型だけあって、ログを保持してくれている模様です。
ていうか、CloudWatchってここ読んでんだ。へぇ~。
実際に実機の codedeploy-agent
のログを確認してみると、きっちりエラーが出ていました。
※codedeploy-agent のログファイルは、 /var/log/aws/codedeploy-agent/codedeploy-agent.log がデフォです。
# tail -F /var/log/aws/codedeploy-agent/codedeploy-agent.log
ERROR [codedeploy-agent(8311)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile
僕は癖で使っているのですが、 `tail` の `-F` 便利ですよ~。
ファイル上書きにも対応できるので、再現性テストの際には `-F` をおすすめしたく...。
さてさて、内容としては、「IAMの設定とかをきっちり見なさい」と出ていました。
EC2のIAMの設定を見てみると、必要な権限をEC2にアタッチしていなかったことが判明しました。
→IAM ロールを対象のEC2にアタッチ → codedeploy-agentをrestart → 再デプロイ → 無事 SUCESS!!!!
###ありがたきドキュメント集
・IAM ロールのアタッチ
Amazon EC2 の IAM ロール
IAM ロールをインスタンスにアタッチする
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#attach-iam-role
・必要なポリシー等が書かれたドキュメント
AWS CodeDeploy でアイデンティティベースのポリシー (IAM ポリシー) を使用する
AWS CodeDeploy での AWS 管理 (事前定義) ポリシー
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html
#参考
『続・終物語』が2018年秋より、全国劇場にてイベント上映
https://www.monogatari-series.com/news/?article_id=45902
ついに公開ですね~。
常に半年先のアニメ事情を知っておく
というのもキャリア形成上大事ですね。
AppSpec File の構造
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-structure.html
AWS CodeDeploy での AWS 管理 (事前定義) ポリシー
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html