in cloudwatch/cloudwatch.go [238:313]
func newCloudWatchLogsClient(config OutputPluginConfig) (*cloudwatchlogs.CloudWatchLogs, error) {
customResolverFn := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {
if service == endpoints.LogsServiceID && config.CWEndpoint != "" {
return endpoints.ResolvedEndpoint{
URL: config.CWEndpoint,
}, nil
} else if service == endpoints.StsServiceID && config.STSEndpoint != "" {
return endpoints.ResolvedEndpoint{
URL: config.STSEndpoint,
}, nil
}
return endpoints.DefaultResolver().EndpointFor(service, region, optFns...)
}
// Fetch base credentials
baseConfig := &aws.Config{
Region: aws.String(config.Region),
EndpointResolver: endpoints.ResolverFunc(customResolverFn),
CredentialsChainVerboseErrors: aws.Bool(true),
}
if config.CredsEndpoint != "" {
creds := endpointcreds.NewCredentialsClient(*baseConfig, request.Handlers{}, config.CredsEndpoint,
func(provider *endpointcreds.Provider) {
provider.ExpiryWindow = 5 * time.Minute
})
baseConfig.Credentials = creds
}
sess, err := session.NewSession(baseConfig)
if err != nil {
return nil, err
}
var svcSess = sess
var svcConfig = baseConfig
eksRole := os.Getenv("EKS_POD_EXECUTION_ROLE")
if eksRole != "" {
logrus.Debugf("[cloudwatch %d] Fetching EKS pod credentials.\n", config.PluginInstanceID)
eksConfig := &aws.Config{}
creds := stscreds.NewCredentials(svcSess, eksRole)
eksConfig.Credentials = creds
eksConfig.Region = aws.String(config.Region)
svcConfig = eksConfig
svcSess, err = session.NewSession(svcConfig)
if err != nil {
return nil, err
}
}
if config.RoleARN != "" {
logrus.Debugf("[cloudwatch %d] Fetching credentials for %s\n", config.PluginInstanceID, config.RoleARN)
stsConfig := &aws.Config{}
creds := stscreds.NewCredentials(svcSess, config.RoleARN, func(p *stscreds.AssumeRoleProvider) {
if config.ExternalID != "" {
p.ExternalID = aws.String(config.ExternalID)
}
})
stsConfig.Credentials = creds
stsConfig.Region = aws.String(config.Region)
svcConfig = stsConfig
svcSess, err = session.NewSession(svcConfig)
if err != nil {
return nil, err
}
}
client := cloudwatchlogs.New(svcSess, svcConfig)
client.Handlers.Build.PushBackNamed(customUserAgentHandler(config))
if config.LogFormat != "" {
client.Handlers.Build.PushBackNamed(LogFormatHandler(config.LogFormat))
}
return client, nil
}