github.com/aavshr/aws-sdk-go@v1.41.3/service/ec2/customizations.go (about) 1 package ec2 2 3 import ( 4 "time" 5 6 "github.com/aavshr/aws-sdk-go/aws" 7 "github.com/aavshr/aws-sdk-go/aws/awsutil" 8 "github.com/aavshr/aws-sdk-go/aws/client" 9 "github.com/aavshr/aws-sdk-go/aws/endpoints" 10 "github.com/aavshr/aws-sdk-go/aws/request" 11 ) 12 13 const ( 14 // customRetryerMinRetryDelay sets min retry delay 15 customRetryerMinRetryDelay = 1 * time.Second 16 17 // customRetryerMaxRetryDelay sets max retry delay 18 customRetryerMaxRetryDelay = 8 * time.Second 19 ) 20 21 func init() { 22 initRequest = func(r *request.Request) { 23 if r.Operation.Name == opCopySnapshot { // fill the PresignedURL parameter 24 r.Handlers.Build.PushFront(fillPresignedURL) 25 } 26 27 // only set the retryer on request if config doesn't have a retryer 28 if r.Config.Retryer == nil && (r.Operation.Name == opModifyNetworkInterfaceAttribute || r.Operation.Name == opAssignPrivateIpAddresses) { 29 maxRetries := client.DefaultRetryerMaxNumRetries 30 if m := r.Config.MaxRetries; m != nil && *m != aws.UseServiceDefaultRetries { 31 maxRetries = *m 32 } 33 r.Retryer = client.DefaultRetryer{ 34 NumMaxRetries: maxRetries, 35 MinRetryDelay: customRetryerMinRetryDelay, 36 MinThrottleDelay: customRetryerMinRetryDelay, 37 MaxRetryDelay: customRetryerMaxRetryDelay, 38 MaxThrottleDelay: customRetryerMaxRetryDelay, 39 } 40 } 41 } 42 } 43 44 func fillPresignedURL(r *request.Request) { 45 if !r.ParamsFilled() { 46 return 47 } 48 49 origParams := r.Params.(*CopySnapshotInput) 50 51 // Stop if PresignedURL/DestinationRegion is set 52 if origParams.PresignedUrl != nil || origParams.DestinationRegion != nil { 53 return 54 } 55 56 origParams.DestinationRegion = r.Config.Region 57 newParams := awsutil.CopyOf(r.Params).(*CopySnapshotInput) 58 59 // Create a new request based on the existing request. We will use this to 60 // presign the CopySnapshot request against the source region. 61 cfg := r.Config.Copy(aws.NewConfig(). 62 WithEndpoint(""). 63 WithRegion(aws.StringValue(origParams.SourceRegion))) 64 65 clientInfo := r.ClientInfo 66 resolved, err := r.Config.EndpointResolver.EndpointFor( 67 clientInfo.ServiceName, aws.StringValue(cfg.Region), 68 func(opt *endpoints.Options) { 69 opt.DisableSSL = aws.BoolValue(cfg.DisableSSL) 70 opt.UseDualStack = aws.BoolValue(cfg.UseDualStack) 71 }, 72 ) 73 if err != nil { 74 r.Error = err 75 return 76 } 77 78 clientInfo.Endpoint = resolved.URL 79 clientInfo.SigningRegion = resolved.SigningRegion 80 81 // Presign a CopySnapshot request with modified params 82 req := request.New(*cfg, clientInfo, r.Handlers, r.Retryer, r.Operation, newParams, r.Data) 83 url, err := req.Presign(5 * time.Minute) // 5 minutes should be enough. 84 if err != nil { // bubble error back up to original request 85 r.Error = err 86 return 87 } 88 89 // We have our URL, set it on params 90 origParams.PresignedUrl = &url 91 }