/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the ec2-2016-11-15.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.EC2.Model
{
    /// 
    /// Container for the parameters to the CopySnapshot operation.
    /// Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can
    /// copy a snapshot within the same Region, from one Region to another, or from a Region
    /// to an Outpost. You can't copy a snapshot from an Outpost to a Region, from one Outpost
    /// to another, or within the same Outpost.
    /// 
    ///  
    /// 
    /// You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs).
    /// 
    ///  
    /// 
    /// When copying snapshots to a Region, copies of encrypted EBS snapshots remain encrypted.
    /// Copies of unencrypted snapshots remain unencrypted, unless you enable encryption for
    /// the snapshot copy operation. By default, encrypted snapshot copies use the default
    /// Key Management Service (KMS) KMS key; however, you can specify a different KMS key.
    /// To copy an encrypted snapshot that has been shared from another account, you must
    /// have permissions for the KMS key used to encrypt the snapshot.
    /// 
    ///  
    /// 
    /// Snapshots copied to an Outpost are encrypted by default using the default encryption
    /// key for the Region, or a different key that you specify in the request using KmsKeyId.
    /// Outposts do not support unencrypted snapshots. For more information, 
    /// Amazon EBS local snapshots on Outposts in the Amazon Elastic Compute Cloud
    /// User Guide.
    /// 
    ///  
    /// 
    /// Snapshots created by copying another snapshot have an arbitrary volume ID that should
    /// not be used for any purpose.
    /// 
    ///  
    /// 
    /// For more information, see Copy
    /// an Amazon EBS snapshot in the Amazon Elastic Compute Cloud User Guide.
    /// 
    /// 
    public partial class CopySnapshotRequest : AmazonEC2Request
    {
        private string _description;
        private string _destinationOutpostArn;
        private string _destinationRegion;
        private bool? _encrypted;
        private string _kmsKeyId;
        private string _presignedUrl;
        private string _sourceRegion;
        private string _sourceSnapshotId;
        private List _tagSpecifications = new List();
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// A description for the EBS snapshot.
        /// 
        /// 
        public string Description
        {
            get { return this._description; }
            set { this._description = value; }
        }
        // Check to see if Description property is set
        internal bool IsSetDescription()
        {
            return this._description != null;
        }
        /// 
        /// Gets and sets the property DestinationOutpostArn. 
        /// 
        /// The Amazon Resource Name (ARN) of the Outpost to which to copy the snapshot. Only
        /// specify this parameter when copying a snapshot from an Amazon Web Services Region
        /// to an Outpost. The snapshot must be in the Region for the destination Outpost. You
        /// cannot copy a snapshot from an Outpost to a Region, from one Outpost to another, or
        /// within the same Outpost.
        /// 
        ///  
        /// 
        /// For more information, see 
        /// Copy snapshots from an Amazon Web Services Region to an Outpost in the Amazon
        /// Elastic Compute Cloud User Guide.
        /// 
        /// 
        public string DestinationOutpostArn
        {
            get { return this._destinationOutpostArn; }
            set { this._destinationOutpostArn = value; }
        }
        // Check to see if DestinationOutpostArn property is set
        internal bool IsSetDestinationOutpostArn()
        {
            return this._destinationOutpostArn != null;
        }
        /// 
        /// Gets and sets the property DestinationRegion. 
        /// 
        /// The destination Region to use in the PresignedUrl parameter of a snapshot
        /// copy operation. This parameter is only valid for specifying the destination Region
        /// in a PresignedUrl parameter, where it is required.
        /// 
        ///  
        /// 
        /// The snapshot copy is sent to the regional endpoint that you sent the HTTP request
        /// to (for example, ec2.us-east-1.amazonaws.com). With the CLI, this is
        /// specified using the --region parameter or the default Region in your
        /// Amazon Web Services configuration file.
        /// 
        /// 
        public string DestinationRegion
        {
            get { return this._destinationRegion; }
            set { this._destinationRegion = value; }
        }
        // Check to see if DestinationRegion property is set
        internal bool IsSetDestinationRegion()
        {
            return this._destinationRegion != null;
        }
        /// 
        /// Gets and sets the property Encrypted. 
        /// 
        /// To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled,
        /// enable encryption using this parameter. Otherwise, omit this parameter. Encrypted
        /// snapshots are encrypted, even if you omit this parameter and encryption by default
        /// is not enabled. You cannot set this parameter to false. For more information, see
        /// Amazon
        /// EBS encryption in the Amazon Elastic Compute Cloud User Guide.
        /// 
        /// 
        public bool Encrypted
        {
            get { return this._encrypted.GetValueOrDefault(); }
            set { this._encrypted = value; }
        }
        // Check to see if Encrypted property is set
        internal bool IsSetEncrypted()
        {
            return this._encrypted.HasValue; 
        }
        /// 
        /// Gets and sets the property KmsKeyId. 
        /// 
        /// The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption.
        /// If this parameter is not specified, your KMS key for Amazon EBS is used. If KmsKeyId
        /// is specified, the encrypted state must be true.
        /// 
        ///  
        /// 
        /// You can specify the KMS key using any of the following:
        /// 
        ///   -  
        /// 
        /// Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
        /// 
        ///  
  -  
        /// 
        /// Key alias. For example, alias/ExampleAlias.
        /// 
        ///  
  -  
        /// 
        /// Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.
        /// 
        ///  
  -  
        /// 
        /// Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.
        /// 
        ///  
  
 
        /// 
        /// Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify
        /// an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually
        /// fails.
        /// 
        /// 
        public string KmsKeyId
        {
            get { return this._kmsKeyId; }
            set { this._kmsKeyId = value; }
        }
        // Check to see if KmsKeyId property is set
        internal bool IsSetKmsKeyId()
        {
            return this._kmsKeyId != null;
        }
        /// 
        /// Gets and sets the property PresignedUrl. 
        /// 
        /// When you copy an encrypted source snapshot using the Amazon EC2 Query API, you must
        /// supply a pre-signed URL. This parameter is optional for unencrypted snapshots. For
        /// more information, see Query
        /// requests.
        /// 
        ///  
        /// 
        /// The PresignedUrl should use the snapshot source endpoint, the CopySnapshot
        /// action, and include the SourceRegion, SourceSnapshotId,
        /// and DestinationRegion parameters. The PresignedUrl must
        /// be signed using Amazon Web Services Signature Version 4. Because EBS snapshots are
        /// stored in Amazon S3, the signing algorithm for this parameter uses the same logic
        /// that is described in Authenticating
        /// Requests: Using Query Parameters (Amazon Web Services Signature Version 4) in
        /// the Amazon Simple Storage Service API Reference. An invalid or improperly signed
        /// PresignedUrl will cause the copy operation to fail asynchronously, and
        /// the snapshot will move to an error state.
        /// 
        /// 
        [AWSProperty(Sensitive=true)]
        internal string PresignedUrl
        {
            get { return this._presignedUrl; }
            set { this._presignedUrl = value; }
        }
        // Check to see if PresignedUrl property is set
        internal bool IsSetPresignedUrl()
        {
            return this._presignedUrl != null;
        }
        /// 
        /// Gets and sets the property SourceRegion. 
        /// 
        /// The ID of the Region that contains the snapshot to be copied.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string SourceRegion
        {
            get { return this._sourceRegion; }
            set { this._sourceRegion = value; }
        }
        // Check to see if SourceRegion property is set
        internal bool IsSetSourceRegion()
        {
            return this._sourceRegion != null;
        }
        /// 
        /// Gets and sets the property SourceSnapshotId. 
        /// 
        /// The ID of the EBS snapshot to copy.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string SourceSnapshotId
        {
            get { return this._sourceSnapshotId; }
            set { this._sourceSnapshotId = value; }
        }
        // Check to see if SourceSnapshotId property is set
        internal bool IsSetSourceSnapshotId()
        {
            return this._sourceSnapshotId != null;
        }
        /// 
        /// Gets and sets the property TagSpecifications. 
        /// 
        /// The tags to apply to the new snapshot.
        /// 
        /// 
        public List TagSpecifications
        {
            get { return this._tagSpecifications; }
            set { this._tagSpecifications = value; }
        }
        // Check to see if TagSpecifications property is set
        internal bool IsSetTagSpecifications()
        {
            return this._tagSpecifications != null && this._tagSpecifications.Count > 0; 
        }
    }
}