From 16aa21dffed22be52267c3e11eaa0f47618b7ed3 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Fri, 26 Oct 2018 12:19:29 +0200 Subject: [PATCH 1/3] aws: better error handling of region guessing from metadata * this will fix #6919 --- builder/amazon/common/access_config.go | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/builder/amazon/common/access_config.go b/builder/amazon/common/access_config.go index 66b595300..7eb027132 100644 --- a/builder/amazon/common/access_config.go +++ b/builder/amazon/common/access_config.go @@ -50,11 +50,12 @@ func (c *AccessConfig) Session() (*session.Session, error) { // default is 3, and when it was causing failures for users being throttled config = config.WithMaxRetries(20) - if c.RawRegion != "" { - config = config.WithRegion(c.RawRegion) - } else if region := c.metadataRegion(); region != "" { - config = config.WithRegion(region) + region, err := c.region() + if err != nil { + return nil, fmt.Errorf("Could not get region, "+ + "probably because it's not set or we're not running on AWS. %s", err) } + config = config.WithRegion(region) if c.CustomEndpointEc2 != "" { config = config.WithEndpoint(c.CustomEndpointEc2) @@ -119,7 +120,7 @@ func (c *AccessConfig) IsChinaCloud() bool { } // metadataRegion returns the region from the metadata service -func (c *AccessConfig) metadataRegion() string { +func (c *AccessConfig) metadataRegion() (string, error) { client := cleanhttp.DefaultClient() @@ -128,13 +129,14 @@ func (c *AccessConfig) metadataRegion() string { ec2meta := ec2metadata.New(session.New(), &aws.Config{ HTTPClient: client, }) - region, err := ec2meta.Region() - if err != nil { - log.Println("Error getting region from metadata service, "+ - "probably because we're not running on AWS.", err) - return "" + return ec2meta.Region() +} + +func (c *AccessConfig) region() (string, error) { + if c.RawRegion != "" { + return c.RawRegion, nil } - return region + return c.metadataRegion() } func (c *AccessConfig) Prepare(ctx *interpolate.Context) []error { From f4fbf453491ba4412d28d22dd5d79514e626d578 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Fri, 26 Oct 2018 17:44:56 +0200 Subject: [PATCH 2/3] remove duplicate region check error --- builder/amazon/common/access_config.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/builder/amazon/common/access_config.go b/builder/amazon/common/access_config.go index 7eb027132..0a57e160f 100644 --- a/builder/amazon/common/access_config.go +++ b/builder/amazon/common/access_config.go @@ -78,8 +78,6 @@ func (c *AccessConfig) Session() (*session.Session, error) { if sess, err := session.NewSessionWithOptions(opts); err != nil { return nil, err - } else if *sess.Config.Region == "" { - return nil, fmt.Errorf("Could not find AWS region, make sure it's set.") } else { log.Printf("Found region %s", *sess.Config.Region) c.session = sess From 3f288fc6ca6b8f7195c70f8cd495b5ff806e5b11 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Thu, 1 Nov 2018 15:09:07 +0100 Subject: [PATCH 3/3] aws client: config.WithMaxRetries(8) --- builder/amazon/common/access_config.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builder/amazon/common/access_config.go b/builder/amazon/common/access_config.go index 0a57e160f..4b6214bc3 100644 --- a/builder/amazon/common/access_config.go +++ b/builder/amazon/common/access_config.go @@ -48,7 +48,8 @@ func (c *AccessConfig) Session() (*session.Session, error) { } // default is 3, and when it was causing failures for users being throttled - config = config.WithMaxRetries(20) + // retries are exponentially backed off. + config = config.WithMaxRetries(8) region, err := c.region() if err != nil {