diff --git a/builder/amazon/common/step_run_source_instance.go b/builder/amazon/common/step_run_source_instance.go index f55c2d04d..0f1941b85 100644 --- a/builder/amazon/common/step_run_source_instance.go +++ b/builder/amazon/common/step_run_source_instance.go @@ -194,9 +194,20 @@ func (s *StepRunSourceInstance) Run(ctx context.Context, state multistep.StateBa runOpts.InstanceInitiatedShutdownBehavior = &s.InstanceInitiatedShutdownBehavior } - runReq, runResp := ec2conn.RunInstancesRequest(runOpts) - runReq.RetryCount = 11 - err = runReq.Send() + var runResp *ec2.Reservation + err = retry.Config{ + Tries: 11, + ShouldRetry: func(err error) bool { + if isAWSErr(err, "InvalidParameterValue", "iamInstanceProfile") { + return true + } + return false + }, + RetryDelay: (&retry.Backoff{InitialBackoff: 200 * time.Millisecond, MaxBackoff: 30 * time.Second, Multiplier: 2}).Linear, + }.Run(ctx, func(ctx context.Context) error { + runResp, err = ec2conn.RunInstances(runOpts) + return err + }) if isAWSErr(err, "VPCIdNotSpecified", "No default VPC for this user") && subnetId == "" { err := fmt.Errorf("Error launching source instance: a valid Subnet Id was not specified")