// Code generated by smithy-go-codegen DO NOT EDIT. package docdb import ( "context" "fmt" awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" "github.com/aws/aws-sdk-go-v2/aws/signer/v4" "github.com/aws/aws-sdk-go-v2/service/docdb/types" presignedurlcust "github.com/aws/aws-sdk-go-v2/service/internal/presigned-url" "github.com/aws/smithy-go/middleware" smithyhttp "github.com/aws/smithy-go/transport/http" ) // Copies a snapshot of a cluster. To copy a cluster snapshot from a shared manual // cluster snapshot, SourceDBClusterSnapshotIdentifier must be the Amazon Resource // Name (ARN) of the shared cluster snapshot. You can only copy a shared DB cluster // snapshot, whether encrypted or not, in the same AWS Region. To cancel the copy // operation after it is in progress, delete the target cluster snapshot identified // by TargetDBClusterSnapshotIdentifier while that cluster snapshot is in the // copying status. func (c *Client) CopyDBClusterSnapshot(ctx context.Context, params *CopyDBClusterSnapshotInput, optFns ...func(*Options)) (*CopyDBClusterSnapshotOutput, error) { if params == nil { params = &CopyDBClusterSnapshotInput{} } result, metadata, err := c.invokeOperation(ctx, "CopyDBClusterSnapshot", params, optFns, addOperationCopyDBClusterSnapshotMiddlewares) if err != nil { return nil, err } out := result.(*CopyDBClusterSnapshotOutput) out.ResultMetadata = metadata return out, nil } // Represents the input to CopyDBClusterSnapshot. type CopyDBClusterSnapshotInput struct { // The identifier of the cluster snapshot to copy. This parameter is not case // sensitive. Constraints: // // * Must specify a valid system snapshot in the available // state. // // * If the source snapshot is in the same AWS Region as the copy, specify // a valid snapshot identifier. // // * If the source snapshot is in a different AWS // Region than the copy, specify a valid cluster snapshot ARN. // // Example: // my-cluster-snapshot1 // // This member is required. SourceDBClusterSnapshotIdentifier *string // The identifier of the new cluster snapshot to create from the source cluster // snapshot. This parameter is not case sensitive. Constraints: // // * Must contain // from 1 to 63 letters, numbers, or hyphens. // // * The first character must be a // letter. // // * Cannot end with a hyphen or contain two consecutive // hyphens. // // Example: my-cluster-snapshot2 // // This member is required. TargetDBClusterSnapshotIdentifier *string // Set to true to copy all tags from the source cluster snapshot to the target // cluster snapshot, and otherwise false. The default is false. CopyTags *bool // The AWS KMS key ID for an encrypted cluster snapshot. The AWS KMS key ID is the // Amazon Resource Name (ARN), AWS KMS key identifier, or the AWS KMS key alias for // the AWS KMS encryption key. If you copy an encrypted cluster snapshot from your // AWS account, you can specify a value for KmsKeyId to encrypt the copy with a new // AWS KMS encryption key. If you don't specify a value for KmsKeyId, then the copy // of the cluster snapshot is encrypted with the same AWS KMS key as the source // cluster snapshot. If you copy an encrypted cluster snapshot that is shared from // another AWS account, then you must specify a value for KmsKeyId. To copy an // encrypted cluster snapshot to another AWS Region, set KmsKeyId to the AWS KMS // key ID that you want to use to encrypt the copy of the cluster snapshot in the // destination Region. AWS KMS encryption keys are specific to the AWS Region that // they are created in, and you can't use encryption keys from one AWS Region in // another AWS Region. If you copy an unencrypted cluster snapshot and specify a // value for the KmsKeyId parameter, an error is returned. KmsKeyId *string // The URL that contains a Signature Version 4 signed request for the // CopyDBClusterSnapshot API action in the AWS Region that contains the source // cluster snapshot to copy. You must use the PreSignedUrl parameter when copying a // cluster snapshot from another AWS Region. If you are using an AWS SDK tool or // the AWS CLI, you can specify SourceRegion (or --source-region for the AWS CLI) // instead of specifying PreSignedUrl manually. Specifying SourceRegion // autogenerates a pre-signed URL that is a valid request for the operation that // can be executed in the source AWS Region. The presigned URL must be a valid // request for the CopyDBClusterSnapshot API action that can be executed in the // source AWS Region that contains the cluster snapshot to be copied. The presigned // URL request must contain the following parameter values: // // * SourceRegion - The // ID of the region that contains the snapshot to be copied. // // * // SourceDBClusterSnapshotIdentifier - The identifier for the the encrypted cluster // snapshot to be copied. This identifier must be in the Amazon Resource Name (ARN) // format for the source AWS Region. For example, if you are copying an encrypted // cluster snapshot from the us-east-1 AWS Region, then your // SourceDBClusterSnapshotIdentifier looks something like the following: // arn:aws:rds:us-east-1:12345678012:sample-cluster:sample-cluster-snapshot. // // * // TargetDBClusterSnapshotIdentifier - The identifier for the new cluster snapshot // to be created. This parameter isn't case sensitive. PreSignedUrl *string // The AWS region the resource is in. The presigned URL will be created with this // region, if the PresignURL member is empty set. SourceRegion *string // The tags to be assigned to the cluster snapshot. Tags []types.Tag // Used by the SDK's PresignURL autofill customization to specify the region the of // the client's request. destinationRegion *string } type CopyDBClusterSnapshotOutput struct { // Detailed information about a cluster snapshot. DBClusterSnapshot *types.DBClusterSnapshot // Metadata pertaining to the operation's result. ResultMetadata middleware.Metadata } func addOperationCopyDBClusterSnapshotMiddlewares(stack *middleware.Stack, options Options) (err error) { err = stack.Serialize.Add(&awsAwsquery_serializeOpCopyDBClusterSnapshot{}, middleware.After) if err != nil { return err } err = stack.Deserialize.Add(&awsAwsquery_deserializeOpCopyDBClusterSnapshot{}, middleware.After) if err != nil { return err } if err = addSetLoggerMiddleware(stack, options); err != nil { return err } if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { return err } if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { return err } if err = addResolveEndpointMiddleware(stack, options); err != nil { return err } if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { return err } if err = addRetryMiddlewares(stack, options); err != nil { return err } if err = addHTTPSignerV4Middleware(stack, options); err != nil { return err } if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { return err } if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { return err } if err = addClientUserAgent(stack); err != nil { return err } if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { return err } if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { return err } if err = addCopyDBClusterSnapshotPresignURLMiddleware(stack, options); err != nil { return err } if err = addOpCopyDBClusterSnapshotValidationMiddleware(stack); err != nil { return err } if err = stack.Initialize.Add(newServiceMetadataMiddleware_opCopyDBClusterSnapshot(options.Region), middleware.Before); err != nil { return err } if err = addRequestIDRetrieverMiddleware(stack); err != nil { return err } if err = addResponseErrorMiddleware(stack); err != nil { return err } if err = addRequestResponseLogging(stack, options); err != nil { return err } return nil } func copyCopyDBClusterSnapshotInputForPresign(params interface{}) (interface{}, error) { input, ok := params.(*CopyDBClusterSnapshotInput) if !ok { return nil, fmt.Errorf("expect *CopyDBClusterSnapshotInput type, got %T", params) } cpy := *input return &cpy, nil } func getCopyDBClusterSnapshotPreSignedUrl(params interface{}) (string, bool, error) { input, ok := params.(*CopyDBClusterSnapshotInput) if !ok { return ``, false, fmt.Errorf("expect *CopyDBClusterSnapshotInput type, got %T", params) } if input.PreSignedUrl == nil || len(*input.PreSignedUrl) == 0 { return ``, false, nil } return *input.PreSignedUrl, true, nil } func getCopyDBClusterSnapshotSourceRegion(params interface{}) (string, bool, error) { input, ok := params.(*CopyDBClusterSnapshotInput) if !ok { return ``, false, fmt.Errorf("expect *CopyDBClusterSnapshotInput type, got %T", params) } if input.SourceRegion == nil || len(*input.SourceRegion) == 0 { return ``, false, nil } return *input.SourceRegion, true, nil } func setCopyDBClusterSnapshotPreSignedUrl(params interface{}, value string) error { input, ok := params.(*CopyDBClusterSnapshotInput) if !ok { return fmt.Errorf("expect *CopyDBClusterSnapshotInput type, got %T", params) } input.PreSignedUrl = &value return nil } func setCopyDBClusterSnapshotdestinationRegion(params interface{}, value string) error { input, ok := params.(*CopyDBClusterSnapshotInput) if !ok { return fmt.Errorf("expect *CopyDBClusterSnapshotInput type, got %T", params) } input.destinationRegion = &value return nil } func addCopyDBClusterSnapshotPresignURLMiddleware(stack *middleware.Stack, options Options) error { return presignedurlcust.AddMiddleware(stack, presignedurlcust.Options{ Accessor: presignedurlcust.ParameterAccessor{ GetPresignedURL: getCopyDBClusterSnapshotPreSignedUrl, GetSourceRegion: getCopyDBClusterSnapshotSourceRegion, CopyInput: copyCopyDBClusterSnapshotInputForPresign, SetDestinationRegion: setCopyDBClusterSnapshotdestinationRegion, SetPresignedURL: setCopyDBClusterSnapshotPreSignedUrl, }, Presigner: &presignAutoFillCopyDBClusterSnapshotClient{client: NewPresignClient(New(options))}, }) } type presignAutoFillCopyDBClusterSnapshotClient struct { client *PresignClient } // PresignURL is a middleware accessor that satisfies URLPresigner interface. func (c *presignAutoFillCopyDBClusterSnapshotClient) PresignURL(ctx context.Context, srcRegion string, params interface{}) (*v4.PresignedHTTPRequest, error) { input, ok := params.(*CopyDBClusterSnapshotInput) if !ok { return nil, fmt.Errorf("expect *CopyDBClusterSnapshotInput type, got %T", params) } optFn := func(o *Options) { o.Region = srcRegion o.APIOptions = append(o.APIOptions, presignedurlcust.RemoveMiddleware) } presignOptFn := WithPresignClientFromClientOptions(optFn) return c.client.PresignCopyDBClusterSnapshot(ctx, input, presignOptFn) } func newServiceMetadataMiddleware_opCopyDBClusterSnapshot(region string) *awsmiddleware.RegisterServiceMetadata { return &awsmiddleware.RegisterServiceMetadata{ Region: region, ServiceID: ServiceID, SigningName: "rds", OperationName: "CopyDBClusterSnapshot", } } // PresignCopyDBClusterSnapshot is used to generate a presigned HTTP Request which // contains presigned URL, signed headers and HTTP method used. func (c *PresignClient) PresignCopyDBClusterSnapshot(ctx context.Context, params *CopyDBClusterSnapshotInput, optFns ...func(*PresignOptions)) (*v4.PresignedHTTPRequest, error) { if params == nil { params = &CopyDBClusterSnapshotInput{} } options := c.options.copy() for _, fn := range optFns { fn(&options) } clientOptFns := append(options.ClientOptions, withNopHTTPClientAPIOption) result, _, err := c.client.invokeOperation(ctx, "CopyDBClusterSnapshot", params, clientOptFns, addOperationCopyDBClusterSnapshotMiddlewares, presignConverter(options).convertToPresignMiddleware, ) if err != nil { return nil, err } out := result.(*v4.PresignedHTTPRequest) return out, nil }