diff --git a/cli/storage_s3.go b/cli/storage_s3.go index a5690d365..f6150bfcf 100644 --- a/cli/storage_s3.go +++ b/cli/storage_s3.go @@ -18,6 +18,7 @@ func init() { func(cmd *kingpin.CmdClause) { cmd.Flag("bucket", "Name of the S3 bucket").Required().StringVar(&s3options.BucketName) cmd.Flag("endpoint", "Endpoint to use").Default("s3.amazonaws.com").StringVar(&s3options.Endpoint) + cmd.Flag("region", "S3 Region").Default("").StringVar(&s3options.Region) cmd.Flag("access-key", "Access key ID (overrides AWS_ACCESS_KEY_ID environment variable)").Required().Envar("AWS_ACCESS_KEY_ID").StringVar(&s3options.AccessKeyID) cmd.Flag("secret-access-key", "Secret access key (overrides AWS_SECRET_ACCESS_KEY environment variable)").Required().Envar("AWS_SECRET_ACCESS_KEY").StringVar(&s3options.SecretAccessKey) cmd.Flag("prefix", "Prefix to use for objects in the bucket").StringVar(&s3options.Prefix) diff --git a/repo/blob/s3/s3_options.go b/repo/blob/s3/s3_options.go index 0f38c6289..ca74c5c1d 100644 --- a/repo/blob/s3/s3_options.go +++ b/repo/blob/s3/s3_options.go @@ -14,6 +14,9 @@ type Options struct { AccessKeyID string `json:"accessKeyID"` SecretAccessKey string `json:"secretAccessKey" kopia:"sensitive"` + // Region is an optional region to pass in authorization header. + Region string `json:"region,omitempty"` + MaxUploadSpeedBytesPerSecond int `json:"maxUploadSpeedBytesPerSecond,omitempty"` MaxDownloadSpeedBytesPerSecond int `json:"maxDownloadSpeedBytesPerSecond,omitempty"` diff --git a/repo/blob/s3/s3_storage.go b/repo/blob/s3/s3_storage.go index bb68fefaf..8dd8d0e93 100644 --- a/repo/blob/s3/s3_storage.go +++ b/repo/blob/s3/s3_storage.go @@ -224,7 +224,7 @@ func New(ctx context.Context, opt *Options) (blob.Storage, error) { return nil, errors.New("bucket name must be specified") } - cli, err := minio.New(opt.Endpoint, opt.AccessKeyID, opt.SecretAccessKey, !opt.DoNotUseTLS) + cli, err := minio.NewWithRegion(opt.Endpoint, opt.AccessKeyID, opt.SecretAccessKey, !opt.DoNotUseTLS, opt.Region) if err != nil { return nil, errors.Wrap(err, "unable to create client") }