Skip to content

Commit e85dd5f

Browse files
authored
Merge pull request open-telemetry#52 from sethAmazon/retry-imds
Retry IMDS Calls
2 parents 2237878 + b43cbfa commit e85dd5f

File tree

6 files changed

+27
-11
lines changed

6 files changed

+27
-11
lines changed

exporter/datadogexporter/internal/hostmetadata/internal/ec2/ec2.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323

2424
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source"
2525
"github.com/aws/aws-sdk-go/aws"
26+
"github.com/aws/aws-sdk-go/aws/client"
2627
"github.com/aws/aws-sdk-go/aws/ec2metadata"
2728
"github.com/aws/aws-sdk-go/aws/session"
2829
"github.com/aws/aws-sdk-go/service/ec2"
@@ -63,12 +64,9 @@ func GetHostInfo(logger *zap.Logger) (hostInfo *HostInfo) {
6364
return
6465
}
6566

66-
meta := ec2metadata.New(sess)
67-
68-
if !meta.Available() {
69-
logger.Debug("EC2 Metadata not available")
70-
return
71-
}
67+
meta := ec2metadata.New(sess, &aws.Config{
68+
Retryer: client.DefaultRetryer{NumMaxRetries: 5},
69+
})
7270

7371
if idDoc, err := meta.GetInstanceIdentityDocument(); err == nil {
7472
hostInfo.InstanceID = idDoc.InstanceID

internal/aws/awsutil/conn.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525

2626
"github.com/aws/aws-sdk-go/aws"
2727
"github.com/aws/aws-sdk-go/aws/awserr"
28+
"github.com/aws/aws-sdk-go/aws/client"
2829
"github.com/aws/aws-sdk-go/aws/credentials"
2930
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
3031
"github.com/aws/aws-sdk-go/aws/ec2metadata"
@@ -44,7 +45,9 @@ type ConnAttr interface {
4445
type Conn struct{}
4546

4647
func (c *Conn) getEC2Region(s *session.Session) (string, error) {
47-
return ec2metadata.New(s).Region()
48+
return ec2metadata.New(s, &aws.Config{
49+
Retryer: client.DefaultRetryer{NumMaxRetries: 5},
50+
}).Region()
4851
}
4952

5053
// AWS STS endpoint constants

internal/aws/proxy/conn.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/aws/aws-sdk-go/aws"
2929
"github.com/aws/aws-sdk-go/aws/arn"
3030
"github.com/aws/aws-sdk-go/aws/awserr"
31+
"github.com/aws/aws-sdk-go/aws/client"
3132
"github.com/aws/aws-sdk-go/aws/credentials"
3233
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
3334
"github.com/aws/aws-sdk-go/aws/ec2metadata"
@@ -79,7 +80,9 @@ var newAWSSession = func(roleArn string, region string, log *zap.Logger) (*sessi
7980
}
8081

8182
var getEC2Region = func(s *session.Session) (string, error) {
82-
return ec2metadata.New(s).Region()
83+
return ec2metadata.New(s, &aws.Config{
84+
Retryer: client.DefaultRetryer{NumMaxRetries: 5},
85+
}).Region()
8386
}
8487

8588
func getAWSConfigSession(c *Config, logger *zap.Logger) (*aws.Config, *session.Session, error) {

internal/aws/xray/telemetry/sender.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919
"sync"
2020
"time"
2121

22+
"github.com/aws/aws-sdk-go/aws"
23+
"github.com/aws/aws-sdk-go/aws/client"
2224
"github.com/aws/aws-sdk-go/aws/ec2metadata"
2325
"github.com/aws/aws-sdk-go/aws/session"
2426
"github.com/aws/aws-sdk-go/service/xray"
@@ -187,7 +189,9 @@ func ToOptions(cfg Config, sess *session.Session, settings *awsutil.AWSSessionSe
187189
envMetadataProvider{envKey: envAWSInstanceID},
188190
}
189191
if !settings.LocalMode {
190-
metadataClient := ec2metadata.New(sess)
192+
metadataClient := ec2metadata.New(sess, &aws.Config{
193+
Retryer: client.DefaultRetryer{NumMaxRetries: 5},
194+
})
191195
hostnameProviders = append(hostnameProviders, ec2MetadataProvider{
192196
client: metadataClient,
193197
metadataKey: metadataHostname,

internal/metadataproviders/aws/ec2/metadata.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ package ec2 // import "github.com/open-telemetry/opentelemetry-collector-contrib
1717
import (
1818
"context"
1919

20+
"github.com/aws/aws-sdk-go/aws"
21+
"github.com/aws/aws-sdk-go/aws/client"
2022
"github.com/aws/aws-sdk-go/aws/ec2metadata"
2123
"github.com/aws/aws-sdk-go/aws/session"
2224
)
@@ -35,7 +37,9 @@ var _ Provider = (*metadataClient)(nil)
3537

3638
func NewProvider(sess *session.Session) Provider {
3739
return &metadataClient{
38-
metadata: ec2metadata.New(sess),
40+
metadata: ec2metadata.New(sess, &aws.Config{
41+
Retryer: client.DefaultRetryer{NumMaxRetries: 5},
42+
}),
3943
}
4044
}
4145

receiver/awscontainerinsightreceiver/internal/host/ec2metadata.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"context"
1919
"time"
2020

21+
"github.com/aws/aws-sdk-go/aws"
22+
"github.com/aws/aws-sdk-go/aws/client"
2123
awsec2metadata "github.com/aws/aws-sdk-go/aws/ec2metadata"
2224
"github.com/aws/aws-sdk-go/aws/session"
2325
"go.uber.org/zap"
@@ -52,7 +54,9 @@ type ec2MetadataOption func(*ec2Metadata)
5254
func newEC2Metadata(ctx context.Context, session *session.Session, refreshInterval time.Duration,
5355
instanceIDReadyC chan bool, instanceIPReadyC chan bool, localMode bool, logger *zap.Logger, options ...ec2MetadataOption) ec2MetadataProvider {
5456
emd := &ec2Metadata{
55-
client: awsec2metadata.New(session),
57+
client: awsec2metadata.New(session, &aws.Config{
58+
Retryer: client.DefaultRetryer{NumMaxRetries: 5},
59+
}),
5660
refreshInterval: refreshInterval,
5761
instanceIDReadyC: instanceIDReadyC,
5862
instanceIPReadyC: instanceIPReadyC,

0 commit comments

Comments
 (0)