github.com/aavshr/aws-sdk-go@v1.41.3/example/service/s3/usingAccessPoints/usingAccessPoints.go (about)

     1  //go:build example
     2  // +build example
     3  
     4  package main
     5  
     6  import (
     7  	"fmt"
     8  	"io/ioutil"
     9  
    10  	"github.com/aavshr/aws-sdk-go/aws"
    11  	"github.com/aavshr/aws-sdk-go/aws/arn"
    12  	"github.com/aavshr/aws-sdk-go/aws/session"
    13  	"github.com/aavshr/aws-sdk-go/service/s3"
    14  	"github.com/aavshr/aws-sdk-go/service/s3control"
    15  )
    16  
    17  const (
    18  	bucketName  = "myBucketName"
    19  	keyName     = "myKeyName"
    20  	accountID   = "123456789012"
    21  	accessPoint = "accesspointname"
    22  )
    23  
    24  func 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  }