Skip to content

Commit fad019e

Browse files
committed
ecs_service: Retry if IAM policy isn't ready yet
- fixes #2869
1 parent 25724da commit fad019e

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

builtin/providers/aws/resource_aws_ecs_service.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"time"
1010

1111
"github.com/aws/aws-sdk-go/aws"
12+
"github.com/aws/aws-sdk-go/aws/awserr"
1213
"github.com/aws/aws-sdk-go/service/ecs"
1314
"github.com/aws/aws-sdk-go/service/iam"
1415
"github.com/hashicorp/terraform/helper/hashcode"
@@ -105,7 +106,30 @@ func resourceAwsEcsServiceCreate(d *schema.ResourceData, meta interface{}) error
105106
}
106107

107108
log.Printf("[DEBUG] Creating ECS service: %s", input)
108-
out, err := conn.CreateService(&input)
109+
110+
// Retry due to AWS IAM policy eventual consistency
111+
// See https://github.com/hashicorp/terraform/issues/2869
112+
var out *ecs.CreateServiceOutput
113+
var err error
114+
err = resource.Retry(2*time.Minute, func() error {
115+
out, err = conn.CreateService(&input)
116+
117+
if err != nil {
118+
ec2err, ok := err.(awserr.Error)
119+
if !ok {
120+
return &resource.RetryError{Err: err}
121+
}
122+
if ec2err.Code() == "InvalidParameterException" {
123+
log.Printf("[DEBUG] Trying to create ECS service again: %q",
124+
ec2err.Message())
125+
return err
126+
}
127+
128+
return &resource.RetryError{Err: err}
129+
}
130+
131+
return nil
132+
})
109133
if err != nil {
110134
return err
111135
}

0 commit comments

Comments
 (0)