1//go:build example 2// +build example 3 4package main 5 6import ( 7 "fmt" 8 "io/ioutil" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/arn" 12 "github.com/aws/aws-sdk-go/aws/session" 13 "github.com/aws/aws-sdk-go/service/s3" 14 "github.com/aws/aws-sdk-go/service/s3control" 15) 16 17const ( 18 bucketName = "myBucketName" 19 keyName = "myKeyName" 20 accountID = "123456789012" 21 accessPoint = "accesspointname" 22) 23 24func main() { 25 sess := session.Must(session.NewSession()) 26 27 s3Svc := s3.New(sess) 28 s3ControlSvc := s3control.New(sess) 29 30 // Create an S3 Bucket 31 fmt.Println("create s3 bucket") 32 _, err := s3Svc.CreateBucket(&s3.CreateBucketInput{ 33 Bucket: aws.String(bucketName), 34 }) 35 if err != nil { 36 panic(fmt.Errorf("failed to create bucket: %v", err)) 37 } 38 39 // Wait for S3 Bucket to Exist 40 fmt.Println("wait for s3 bucket to exist") 41 err = s3Svc.WaitUntilBucketExists(&s3.HeadBucketInput{ 42 Bucket: aws.String(bucketName), 43 }) 44 if err != nil { 45 panic(fmt.Sprintf("bucket failed to materialize: %v", err)) 46 } 47 48 // Create an Access Point referring to the bucket 49 fmt.Println("create an access point") 50 _, err = s3ControlSvc.CreateAccessPoint(&s3control.CreateAccessPointInput{ 51 AccountId: aws.String(accountID), 52 Bucket: aws.String(bucketName), 53 Name: aws.String(accessPoint), 54 }) 55 if err != nil { 56 panic(fmt.Sprintf("failed to create access point: %v", err)) 57 } 58 59 // Use the SDK's ARN builder to create an ARN for the Access Point. 60 apARN := arn.ARN{ 61 Partition: "aws", 62 Service: "s3", 63 Region: aws.StringValue(sess.Config.Region), 64 AccountID: accountID, 65 Resource: "accesspoint/" + accessPoint, 66 } 67 68 // And Use Access Point ARN where bucket parameters are accepted 69 fmt.Println("get object using access point") 70 getObjectOutput, err := s3Svc.GetObject(&s3.GetObjectInput{ 71 Bucket: aws.String(apARN.String()), 72 Key: aws.String("somekey"), 73 }) 74 if err != nil { 75 panic(fmt.Sprintf("failed get object request: %v", err)) 76 } 77 78 _, err = ioutil.ReadAll(getObjectOutput.Body) 79 if err != nil { 80 panic(fmt.Sprintf("failed to read object body: %v", err)) 81 } 82} 83