先日、IAMロールをプログラム上で作成、その直後にECSタスクのタスクロールとして設定しようとしたらエラーになって時間を溶かしてしまいました。
その原因と解決策を記録しておこうと思います。
エラーになるサンプルコード
https://github.com/ippachi/aws-role-test/tree/error
EC2インスタンスに作成したInstance profileを紐づける例です。
このコードを走らせると
2021/01/30 16:00:49 InvalidParameterValue: Value (arn:aws:iam::xxx:instance-profile/aws-role-test) for parameter iamInstanceProfile.arn is invalid. Invalid IAM Instance Profile ARN
のようなエラーが出ます。
うまくいくコード
https://github.com/ippachi/aws-role-test/tree/no-error
2021/01/30 16:05:43 DryRunOperation: Request would have succeeded, but DryRun flag is set.
違いは1行のみで
https://github.com/ippachi/aws-role-test/blob/no-error/main.go#L37
この行で15秒間sleepをしただけです。
実際に問題になったコードでは単にsleepではなく、5秒ごとにリトライをするようにしました。
原因
あくまで推測ですが、IAM内で作成したリソースをIAM外が認識できるようになるまでにタイムラグがあるようです。
なのでIAMで作成したリソースを紐付けたい場合はちょっと待ってあげましょう。
まとめ
この問題で2時間溶かしました。