From 451697855526c7bc890793b50d32d34f0c1412cf Mon Sep 17 00:00:00 2001 From: Moss Date: Fri, 29 Nov 2019 18:11:10 +0100 Subject: [PATCH 1/3] Fix request retry mechanism to run aws instance --- .../amazon/common/step_run_source_instance.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) 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") From 250643d54b373edb2df5a9649f314450079e6557 Mon Sep 17 00:00:00 2001 From: Moss Date: Mon, 2 Dec 2019 10:13:26 +0100 Subject: [PATCH 2/3] Remove 5 sec sleep after adding iam instance profile --- builder/amazon/common/step_iam_instance_profile.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/builder/amazon/common/step_iam_instance_profile.go b/builder/amazon/common/step_iam_instance_profile.go index 7221e08d4..634958870 100644 --- a/builder/amazon/common/step_iam_instance_profile.go +++ b/builder/amazon/common/step_iam_instance_profile.go @@ -3,11 +3,12 @@ package common import ( "context" "fmt" - "github.com/aws/aws-sdk-go/aws" "log" - "time" + + "github.com/aws/aws-sdk-go/aws" "encoding/json" + "github.com/aws/aws-sdk-go/service/iam" "github.com/hashicorp/packer/common/uuid" "github.com/hashicorp/packer/helper/multistep" @@ -138,8 +139,6 @@ func (s *StepIamInstanceProfile) Run(ctx context.Context, state multistep.StateB s.roleIsAttached = true state.Put("iamInstanceProfile", aws.StringValue(profileResp.InstanceProfile.InstanceProfileName)) - - time.Sleep(5 * time.Second) } return multistep.ActionContinue From 28c720bd3acb8fd5071c71d094aa15b5803c8ac2 Mon Sep 17 00:00:00 2001 From: Moss Date: Mon, 2 Dec 2019 10:17:36 +0100 Subject: [PATCH 3/3] Organize imports --- builder/amazon/common/step_iam_instance_profile.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/builder/amazon/common/step_iam_instance_profile.go b/builder/amazon/common/step_iam_instance_profile.go index 634958870..5e097b273 100644 --- a/builder/amazon/common/step_iam_instance_profile.go +++ b/builder/amazon/common/step_iam_instance_profile.go @@ -5,10 +5,9 @@ import ( "fmt" "log" - "github.com/aws/aws-sdk-go/aws" - "encoding/json" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/iam" "github.com/hashicorp/packer/common/uuid" "github.com/hashicorp/packer/helper/multistep"