package customizations
import "github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations"
Package customizations provides customizations for the Amazon S3 API client.
This package provides support for following S3 customizations
ProcessARN Middleware: processes an ARN if provided as input and updates the endpoint as per the arn type UpdateEndpoint Middleware: resolves a custom endpoint as per s3 config options RemoveBucket Middleware: removes a serialized bucket name from request url path processResponseWith200Error Middleware: Deserializing response error with 200 status code
Virtual Host style url addressing
Since serializers serialize by default as path style url, we use customization to modify the endpoint url when `UsePathStyle` option on S3Client is unset or false. This flag will be ignored if `UseAccelerate` option is set to true.
If UseAccelerate is not enabled, and the bucket name is not a valid hostname label, they SDK will fallback to forcing the request to be made as if UsePathStyle was enabled. This behavior is also used if UseDualStack is enabled.
Transfer acceleration
By default S3 Transfer acceleration support is disabled. By enabling `UseAccelerate` option on S3Client, one can enable s3 transfer acceleration support. Transfer acceleration only works with Virtual Host style addressing, and thus `UsePathStyle` option if set is ignored. Transfer acceleration is not supported for S3 operations DeleteBucket, ListBuckets, and CreateBucket.
Dualstack support
By default dualstack support for s3 client is disabled. By enabling `UseDualstack` option on s3 client, you can enable dualstack endpoint support.
Endpoint customizations
Customizations to lookup ARN, process ARN needs to happen before request serialization. UpdateEndpoint middleware which mutates resources based on Options such as UseDualstack, UseAccelerate for modifying resolved endpoint are executed after request serialization. Remove bucket middleware is executed after an request is serialized, and removes the serialized bucket name from request path
Middleware layering: Initialize : HTTP Request -> ARN Lookup -> Input-Validation -> Serialize step Serialize : HTTP Request -> Process ARN -> operation serializer -> Update-Endpoint customization -> Remove-Bucket -> next middleware
Customization options:
UseARNRegion (Disabled by Default) UsePathStyle (Disabled by Default) UseAccelerate (Disabled by Default) UseDualstack (Disabled by Default)
Handle Error response with 200 status code
S3 operations: CopyObject, CompleteMultipartUpload, UploadPartCopy can have an error Response with status code 2xx. The processResponseWith200Error middleware customizations enables SDK to check for an error within response body prior to deserialization.
As the check for 2xx response containing an error needs to be performed earlier than response deserialization. Since the behavior of Deserialization is in reverse order to the other stack steps its easier to consider that "after" means "before".
Middleware layering: HTTP Response -> handle 200 error customization -> deserialize
Index ¶
- func HandleResponseErrorWith200Status(stack *middleware.Stack) error
- func UpdateEndpoint(stack *middleware.Stack, options UpdateEndpointOptions) (err error)
- type AddExpiresOnPresignedURL
- func (m *AddExpiresOnPresignedURL) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) ( out middleware.BuildOutput, metadata middleware.Metadata, err error, )
- func (*AddExpiresOnPresignedURL) ID() string
- type EndpointResolver
- type EndpointResolverOptions
- type UpdateEndpointOptions
- type UpdateEndpointParameterAccessor
Functions ¶
func HandleResponseErrorWith200Status ¶
func HandleResponseErrorWith200Status(stack *middleware.Stack) error
HandleResponseErrorWith200Status check for S3 200 error response. If an s3 200 error is found, status code for the response is modified temporarily to 5xx response status code.
func UpdateEndpoint ¶
func UpdateEndpoint(stack *middleware.Stack, options UpdateEndpointOptions) (err error)
UpdateEndpoint adds the middleware to the middleware stack based on the UpdateEndpointOptions.
Types ¶
type AddExpiresOnPresignedURL ¶
type AddExpiresOnPresignedURL struct { // Expires is time.Duration within which presigned url should be expired. // This should be the duration in seconds the presigned URL should be considered valid for. // By default the S3 presigned url expires in 15 minutes ie. 900 seconds. Expires time.Duration }
AddExpiresOnPresignedURL represents a build middleware used to assign expiration on a presigned URL.
func (*AddExpiresOnPresignedURL) HandleBuild ¶
func (m *AddExpiresOnPresignedURL) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) ( out middleware.BuildOutput, metadata middleware.Metadata, err error, )
HandleBuild handles the build step middleware behavior
func (*AddExpiresOnPresignedURL) ID ¶
func (*AddExpiresOnPresignedURL) ID() string
ID representing the middleware
type EndpointResolver ¶
type EndpointResolver interface { ResolveEndpoint(region string, options EndpointResolverOptions) (aws.Endpoint, error) }
EndpointResolver interface for resolving service endpoints.
type EndpointResolverOptions ¶
type EndpointResolverOptions = internalendpoints.Options
EndpointResolverOptions is the service endpoint resolver options
type UpdateEndpointOptions ¶
type UpdateEndpointOptions struct { // Accessor are parameter accessors used by the middleware Accessor UpdateEndpointParameterAccessor // use path style UsePathStyle bool // use transfer acceleration UseAccelerate bool // indicates if an operation supports s3 transfer acceleration. SupportsAccelerate bool // use dualstack UseDualstack bool // use ARN region UseARNRegion bool // Indicates that the operation should target the s3-object-lambda endpoint. // Used to direct operations that do not route based on an input ARN. TargetS3ObjectLambda bool // EndpointResolver used to resolve endpoints. This may be a custom endpoint resolver EndpointResolver EndpointResolver // EndpointResolverOptions used by endpoint resolver EndpointResolverOptions EndpointResolverOptions }
UpdateEndpointOptions provides the options for the UpdateEndpoint middleware setup.
type UpdateEndpointParameterAccessor ¶
type UpdateEndpointParameterAccessor struct { // functional pointer to fetch bucket name from provided input. // The function is intended to take an input value, and // return a string pointer to value of string, and bool if // input has no bucket member. GetBucketFromInput func(interface{}) (*string, bool) }
UpdateEndpointParameterAccessor represents accessor functions used by the middleware
Source Files ¶
doc.go handle_200_error.go host.go presigned_expires.go process_arn_resource.go remove_bucket_middleware.go s3_object_lambda.go update_endpoint.go
- Version
- v1.3.0
- Published
- Mar 18, 2021
- Platform
- windows/amd64
- Imports
- 22 packages
- Last checked
- 3 minutes ago –
Tools for package owners.