in pkg/aws/cloud.go [31:84]
func NewCloud(cfg CloudConfig, metricsRegisterer prometheus.Registerer) (Cloud, error) {
sess := session.Must(session.NewSession(aws.NewConfig()))
// creating separate config for AppMesh because it has both DualStack and FIPS endpoint, But for other AWS APIs services EKS and CloudMap DualStack endpoints(DNS ending in api.aws) are unavailable.
sessAppMesh := session.Must(session.NewSession(aws.NewConfig()))
injectUserAgent(&sess.Handlers)
if cfg.ThrottleConfig != nil {
throttler := throttle.NewThrottler(cfg.ThrottleConfig)
throttler.InjectHandlers(&sess.Handlers)
}
if metricsRegisterer != nil {
metricsCollector, err := metrics.NewCollector(metricsRegisterer)
if err != nil {
return nil, errors.Wrapf(err, "failed to initialize sdk metrics collector")
}
metricsCollector.InjectHandlers(&sess.Handlers)
}
if len(cfg.Region) == 0 {
metadata := services.NewEC2Metadata(sess)
region, err := metadata.Region()
if err != nil {
return nil, errors.Wrap(err, "failed to introspect region from EC2Metadata, specify --aws-region instead if EC2Metadata is unavailable")
}
cfg.Region = region
}
awsCfgAppMesh := &aws.Config{
Region: aws.String(cfg.Region),
UseDualStackEndpoint: endpoints.DualStackEndpointState(cfg.GetAwsDualStackEndpoint()),
UseFIPSEndpoint: endpoints.FIPSEndpointState(cfg.GetAwsFIPSEndpoint()),
STSRegionalEndpoint: 1,
}
awsCfg := &aws.Config{
Region: aws.String(cfg.Region),
UseFIPSEndpoint: endpoints.FIPSEndpointState(cfg.GetAwsFIPSEndpoint()),
STSRegionalEndpoint: 1,
}
sess = sess.Copy(awsCfg)
sessAppMesh = sessAppMesh.Copy(awsCfgAppMesh)
if len(cfg.AccountID) == 0 {
sts := services.NewSTS(sess)
accountID, err := sts.AccountID(context.Background())
if err != nil {
return nil, errors.Wrap(err, "failed to introspect accountID from STS, specify --aws-account-id instead if STS is unavailable")
}
cfg.AccountID = accountID
}
return &defaultCloud{
cfg: cfg,
appMesh: services.NewAppMesh(sessAppMesh),
cloudMap: services.NewCloudMap(sess),
eks: services.NewEKS(sess),
}, nil
}