事象
一度もELBを作成したことないAWSアカウントで、terraformでELBを作成しようとすると以下のエラーが発生
Error: Error applying plan: 2 error(s) occurred: * aws_lb.ldap: 1 error(s) occurred: * aws_lb.ldap: Error creating network Load Balancer: AccessDenied: User: arn:aws:iam::<AWSアカウントID>:user/<terraform実行ユーザー名> is not authorized to perform: ec2:DescribeAccountAttributes status code: 403, request id: 8a26539e-3fec-11e9-a36b-f7e2da198215 * aws_lb_target_group.ldap: 1 error(s) occurred: * aws_lb_target_group.ldap: Error creating LB Target Group: AccessDenied: User: arn:aws:iam::<AWSアカウントID>:user/<terraform実行ユーザー名> is not authorized to perform: ec2:DescribeVpcs status code: 403, request id: 8a2653ec-3fec-11e9-b713-837b3c8bf324
原因
AWSコンソールから手動で作成した場合に自動で作成されるサービスロール(AWSServiceRoleForElasticLoadBalancing)がない
対応
サービスロールの作成を追加
resource "aws_iam_service_linked_role" "AWSServiceRoleForElasticLoadBalancing" { aws_service_name = "elasticloadbalancing.amazonaws.com" }
ただし、ELBのリソース作成前に作成されている必要があるらしく、追加後の初回は同じエラーでこける。
サービスロールが作成後は処理が進むので、前後条件を指定するのが綺麗です。
depends_on = ["aws_iam_service_linked_role.AWSServiceRoleForElasticLoadBalancing"]