Is your feature request related to a problem? Please describe.
https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/endpoints/ mentions additional parameters that can be configured:
UseDualStack
UseFips
UseAccelerate
These were added upstream in aws/aws-sdk-go-v2#836.
Describe the solution you'd like
The AWS SDK v2 URL probably should accept the following query parameters:
dualstack
fips
accelerate
As described in https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/endpoints/#migration, we probably should migrate to v2 of the endpoint resolution. Note that EndpointResolverWithOptionsFunc is deprecated and should likely be replaced with the v2 mechanism:
|
customResolver := awsv2.EndpointResolverWithOptionsFunc( |
Describe alternatives you've considered
While the endpoint can probably be used to support this functionality, users would have to know their region-specific endpoints. For example, if my AWS S3 bucket is my-bucket in us-east-1, and I want to enable transfer acceleration, dual-stack support, and FIPS, I would need to configure endpoint with one of the following:
my-bucket.s3-accelerate.amazonaws.com
my-bucket.s3-accelerate.dualstack.amazonaws.com
my-bucket.s3-fips.us-gov-east-1.amazonaws.com
my-bucket.s3-fips.dualstack.us-east-1.amazonaws.com
This forces the application to build the hostname, when this seems more appropriately handled by the SDK.
References:
- https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html
- https://aws.amazon.com/compliance/fips/
Additional context
I believe UseAccelerate can be added via something like:
diff --git a/blob/s3blob/s3blob.go b/blob/s3blob/s3blob.go
index d3e80cf0..7353c6db 100644
--- a/blob/s3blob/s3blob.go
+++ b/blob/s3blob/s3blob.go
@@ -145,8 +145,9 @@ type URLOpener struct {
}
const (
- sseTypeParamKey = "ssetype"
- kmsKeyIdParamKey = "kmskeyid"
+ sseTypeParamKey = "ssetype"
+ kmsKeyIdParamKey = "kmskeyid"
+ accelerateParamKey = "accelerate"
)
func toServerSideEncryptionType(value string) (typesv2.ServerSideEncryption, error) {
@@ -178,12 +179,24 @@ func (o *URLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket
o.Options.KMSEncryptionID = kmsKeyID
}
+ accelerate := false
+ if accelerateParam := q.Get(accelerateParamKey); accelerateParam != "" {
+ q.Del(accelerateParamKey)
+ var err error
+ accelerate, err = strconv.ParseBool(accelerateParam)
+ if err != nil {
+ return nil, fmt.Errorf("invalid value for %q: %v", accelerateParamKey, err)
+ }
+ }
+
if o.UseV2 {
cfg, err := gcaws.V2ConfigFromURLParams(ctx, q)
if err != nil {
return nil, fmt.Errorf("open bucket %v: %v", u, err)
}
- clientV2 := s3v2.NewFromConfig(cfg)
+ clientV2 := s3v2.NewFromConfig(cfg, func(o *s3v2.Options) {
+ o.UseAccelerate = accelerate
+ })
return OpenBucketV2(ctx, clientV2, u.Host, &o.Options)
}
Is your feature request related to a problem? Please describe.
https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/endpoints/ mentions additional parameters that can be configured:
UseDualStackUseFipsUseAccelerateThese were added upstream in aws/aws-sdk-go-v2#836.
Describe the solution you'd like
The AWS SDK v2 URL probably should accept the following query parameters:
dualstackfipsaccelerateAs described in https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/endpoints/#migration, we probably should migrate to v2 of the endpoint resolution. Note that
EndpointResolverWithOptionsFuncis deprecated and should likely be replaced with the v2 mechanism:go-cloud/aws/aws.go
Line 207 in d2adbc5
Describe alternatives you've considered
While the
endpointcan probably be used to support this functionality, users would have to know their region-specific endpoints. For example, if my AWS S3 bucket ismy-bucketinus-east-1, and I want to enable transfer acceleration, dual-stack support, and FIPS, I would need to configureendpointwith one of the following:my-bucket.s3-accelerate.amazonaws.commy-bucket.s3-accelerate.dualstack.amazonaws.commy-bucket.s3-fips.us-gov-east-1.amazonaws.commy-bucket.s3-fips.dualstack.us-east-1.amazonaws.comThis forces the application to build the hostname, when this seems more appropriately handled by the SDK.
References:
Additional context
I believe
UseAcceleratecan be added via something like: