func listBuckets(svc *s3.S3) ([]*Bucket, error) { res, err := svc.ListBuckets(&s3.ListBucketsInput{}) if err != nil { return nil, err } buckets := make([]*Bucket, len(res.Buckets)) for i, b := range res.Buckets { buckets[i] = &Bucket{ Name: *b.Name, CreationDate: *b.CreationDate, } locRes, err := svc.GetBucketLocation(&s3.GetBucketLocationInput{ Bucket: b.Name, }) if err != nil { buckets[i].Error = err continue } if locRes.LocationConstraint == nil { buckets[i].Region = "us-east-1" } else { buckets[i].Region = *locRes.LocationConstraint } } return buckets, nil }
func websiteEndpoint(s3conn *s3.S3, d *schema.ResourceData) (*S3Website, error) { // If the bucket doesn't have a website configuration, return an empty // endpoint if _, ok := d.GetOk("website"); !ok { return nil, nil } bucket := d.Get("bucket").(string) // Lookup the region for this bucket location, err := s3conn.GetBucketLocation( &s3.GetBucketLocationInput{ Bucket: aws.String(bucket), }, ) if err != nil { return nil, err } var region string if location.LocationConstraint != nil { region = *location.LocationConstraint } return WebsiteEndpoint(bucket, region), nil }
func MapBucketByLocation(svc *s3.S3, buckets []*s3.Bucket) (map[string][]*string, error) { result := make(map[string][]*string) for _, b := range buckets { params := &s3.GetBucketLocationInput{ Bucket: b.Name, } resp, err := svc.GetBucketLocation(params) if err != nil { return nil, err } region := "us-east-1" //Use a map! if resp.LocationConstraint != nil { region = *resp.LocationConstraint if region == "EU" { region = "eu-west-1" } } result[region] = append(result[region], b.Name) } return result, nil }