@@ -22,6 +22,7 @@ import (
2222 "strings"
2323
2424 "github.com/aws/aws-sdk-go/aws"
25+ "github.com/aws/aws-sdk-go/aws/awserr"
2526 "github.com/aws/aws-sdk-go/aws/endpoints"
2627 "github.com/aws/aws-sdk-go/aws/session"
2728 "github.com/aws/aws-sdk-go/service/s3"
@@ -429,6 +430,43 @@ func (c *Client) DeletePrefix(bucket string, prefix string, continueIfFailure bo
429430 return nil
430431}
431432
433+ func (c * Client ) CreateBucket (bucket string ) error {
434+ var bucketConfiguration * s3.CreateBucketConfiguration
435+ if c .Region != "us-east-1" {
436+ bucketConfiguration = & s3.CreateBucketConfiguration {
437+ LocationConstraint : aws .String (c .Region ),
438+ }
439+ }
440+ _ , err := c .S3 ().CreateBucket (& s3.CreateBucketInput {
441+ Bucket : aws .String (bucket ),
442+ CreateBucketConfiguration : bucketConfiguration ,
443+ })
444+ if err != nil {
445+ return errors .Wrap (err , "creating bucket " + bucket )
446+ }
447+ return nil
448+ }
449+
450+ // Checks bucket existence and accessibility with credentials
451+ func (c * Client ) DoesBucketExist (bucket string ) (bool , error ) {
452+ _ , err := c .S3 ().HeadBucket (& s3.HeadBucketInput {
453+ Bucket : aws .String (bucket ),
454+ })
455+ if err != nil {
456+ if aerr , ok := err .(awserr.Error ); ok {
457+ switch aerr .Code () {
458+ case "NotFound" :
459+ return false , nil
460+ case "Forbidden" :
461+ return false , ErrorBucketInaccessible (bucket )
462+ }
463+ }
464+ return false , errors .Wrap (err , "bucket " + bucket )
465+ }
466+
467+ return true , nil
468+ }
469+
432470func GetBucketRegion (bucket string ) (string , error ) {
433471 sess := session .Must (session .NewSession ()) // credentials are not necessary for this request, and will not be used
434472 region , err := s3manager .GetBucketRegion (aws .BackgroundContext (), sess , bucket , endpoints .UsWest2RegionID )
0 commit comments