AWS
EC2
IAM
CodeDeploy

IAM Roleを後からアタッチしたEC2でAWS CodeDeployに失敗する

More than 1 year has passed since last update.

タイトルの通り、AWS CodeDeployを使うために後からIAM Roleをアタッチしてもデプロイが失敗してハマったので、その解決策。


結論

codedeploy-agent を再起動する


背景

2017年02月に発表された新機能で、既に作成しているEC2インスタンスにIAM Roleがアタッチできるようになった。

本当はもっと前からできるようになっていて欲しい機能。これのせいでどれだけ苦しめられたか。。

「既存のAmazon EC2インスタンスにIAM Roleがアタッチできるようになりました」

https://aws.amazon.com/jp/blogs/news/new-attach-an-aws-iam-role-to-an-existing-amazon-ec2-instance-by-using-the-aws-cli/


$ aws ec2 associate-iam-instance-profile --instance-id YourInstanceId --iam-instance-profile Name=YourNewRole-Instance-Profile


ちなみに、2017年05月時点ではCLIからしか操作できない。

この新機能に、クライアントであるEC2インスタンスにインストールすべき codedeploy-agent が対応してないのが問題だと推測される。

IAM Roleをアタッチしてもエラーを吐き続ける。


/var/log/aws/codedeploy-agent/codedeploy-agent.log

2017-05-10 21:08:21 ERROR [codedeploy-agent(13743)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile

2017-05-10 21:09:32 INFO [codedeploy-agent(13743)]: Version file found in /opt/codedeploy-agent/.version.

IAM Roleの設定に問題があるのかと思ってかなり色々試したが解決せず。

結局、最後の頼みで再起動したら正常にデプロイできた。

$ sudo service codedeploy-agent restart