タイトルの通り、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をアタッチしてもエラーを吐き続ける。
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