github.com/stevenmatthewt/agent@v3.5.4+incompatible/agent/aws.go (about) 1 package agent 2 3 import ( 4 "os" 5 6 "github.com/aws/aws-sdk-go/aws" 7 "github.com/aws/aws-sdk-go/aws/ec2metadata" 8 "github.com/aws/aws-sdk-go/aws/session" 9 "github.com/buildkite/agent/logger" 10 ) 11 12 var awsSess *session.Session 13 14 // The aws sdk relies on being given a region, which is a breaking change for us 15 // This applies a heuristic that detects where the agent might be based on the env 16 // but also the local isntance metadata if available 17 func awsRegion() (string, error) { 18 if r := os.Getenv("AWS_REGION"); r != "" { 19 return r, nil 20 } 21 22 if r := os.Getenv("AWS_DEFAULT_REGION"); r != "" { 23 return r, nil 24 } 25 26 // The metadata service seems to want a session 27 sess, err := session.NewSession(&aws.Config{ 28 Region: aws.String("us-east-1"), 29 }) 30 if err != nil { 31 return "", err 32 } 33 34 meta := ec2metadata.New(sess) 35 if meta.Available() { 36 region, err := meta.Region() 37 if err == nil { 38 logger.Debug("Detected AWS region %s", region) 39 } 40 return region, err 41 } 42 43 return "", aws.ErrMissingRegion 44 } 45 46 func awsSession() (*session.Session, error) { 47 region, err := awsRegion() 48 if err != nil { 49 return nil, err 50 } 51 52 if awsSess == nil { 53 awsSess, err = session.NewSession(&aws.Config{ 54 Region: aws.String(region), 55 }) 56 if err != nil { 57 return nil, err 58 } 59 } 60 61 return awsSess, nil 62 }