{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.EC2.CreateVolume -- Copyright : (c) 2013-2015 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Creates an EBS volume that can be attached to an instance in the same -- Availability Zone. The volume is created in the regional endpoint that -- you send the HTTP request to. For more information see -- . -- -- You can create a new empty volume or restore a volume from an EBS -- snapshot. Any AWS Marketplace product codes from the snapshot are -- propagated to the volume. -- -- You can create encrypted volumes with the 'Encrypted' parameter. -- Encrypted volumes may only be attached to instances that support Amazon -- EBS encryption. Volumes that are created from encrypted snapshots are -- also automatically encrypted. For more information, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. -- -- For more information, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. -- -- /See:/ for CreateVolume. module Network.AWS.EC2.CreateVolume ( -- * Creating a Request createVolume , CreateVolume -- * Request Lenses , creSize , creIOPS , creEncrypted , creKMSKeyId , creVolumeType , creDryRun , creSnapshotId , creAvailabilityZone -- * Destructuring the Response , volume , Volume -- * Response Lenses , vAttachments , vIOPS , vKMSKeyId , vTags , vAvailabilityZone , vCreateTime , vEncrypted , vSize , vSnapshotId , vState , vVolumeId , vVolumeType ) where import Network.AWS.EC2.Types import Network.AWS.EC2.Types.Product import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response -- | /See:/ 'createVolume' smart constructor. data CreateVolume = CreateVolume' { _creSize :: !(Maybe Int) , _creIOPS :: !(Maybe Int) , _creEncrypted :: !(Maybe Bool) , _creKMSKeyId :: !(Maybe Text) , _creVolumeType :: !(Maybe VolumeType) , _creDryRun :: !(Maybe Bool) , _creSnapshotId :: !(Maybe Text) , _creAvailabilityZone :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateVolume' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'creSize' -- -- * 'creIOPS' -- -- * 'creEncrypted' -- -- * 'creKMSKeyId' -- -- * 'creVolumeType' -- -- * 'creDryRun' -- -- * 'creSnapshotId' -- -- * 'creAvailabilityZone' createVolume :: Text -- ^ 'creAvailabilityZone' -> CreateVolume createVolume pAvailabilityZone_ = CreateVolume' { _creSize = Nothing , _creIOPS = Nothing , _creEncrypted = Nothing , _creKMSKeyId = Nothing , _creVolumeType = Nothing , _creDryRun = Nothing , _creSnapshotId = Nothing , _creAvailabilityZone = pAvailabilityZone_ } -- | The size of the volume, in GiBs. -- -- Constraints: '1-1024' for 'standard' volumes, '1-16384' for 'gp2' -- volumes, and '4-16384' for 'io1' volumes. If you specify a snapshot, the -- volume size must be equal to or larger than the snapshot size. -- -- Default: If you\'re creating the volume from a snapshot and don\'t -- specify a volume size, the default is the snapshot size. creSize :: Lens' CreateVolume (Maybe Int) creSize = lens _creSize (\ s a -> s{_creSize = a}); -- | Only valid for Provisioned IOPS (SSD) volumes. The number of I\/O -- operations per second (IOPS) to provision for the volume, with a maximum -- ratio of 30 IOPS\/GiB. -- -- Constraint: Range is 100 to 20000 for Provisioned IOPS (SSD) volumes creIOPS :: Lens' CreateVolume (Maybe Int) creIOPS = lens _creIOPS (\ s a -> s{_creIOPS = a}); -- | Specifies whether the volume should be encrypted. Encrypted Amazon EBS -- volumes may only be attached to instances that support Amazon EBS -- encryption. Volumes that are created from encrypted snapshots are -- automatically encrypted. There is no way to create an encrypted volume -- from an unencrypted snapshot or vice versa. If your AMI uses encrypted -- volumes, you can only launch it on supported instance types. For more -- information, see -- -- in the /Amazon Elastic Compute Cloud User Guide/. creEncrypted :: Lens' CreateVolume (Maybe Bool) creEncrypted = lens _creEncrypted (\ s a -> s{_creEncrypted = a}); -- | The full ARN of the AWS Key Management Service (AWS KMS) customer master -- key (CMK) to use when creating the encrypted volume. This parameter is -- only required if you want to use a non-default CMK; if this parameter is -- not specified, the default CMK for EBS is used. The ARN contains the -- 'arn:aws:kms' namespace, followed by the region of the CMK, the AWS -- account ID of the CMK owner, the 'key' namespace, and then the CMK ID. -- For example, -- arn:aws:kms:/us-east-1/:/012345678910/:key\//abcd1234-a123-456a-a12b-a123b4cd56ef/. -- If a 'KmsKeyId' is specified, the 'Encrypted' flag must also be set. creKMSKeyId :: Lens' CreateVolume (Maybe Text) creKMSKeyId = lens _creKMSKeyId (\ s a -> s{_creKMSKeyId = a}); -- | The volume type. This can be 'gp2' for General Purpose (SSD) volumes, -- 'io1' for Provisioned IOPS (SSD) volumes, or 'standard' for Magnetic -- volumes. -- -- Default: 'standard' creVolumeType :: Lens' CreateVolume (Maybe VolumeType) creVolumeType = lens _creVolumeType (\ s a -> s{_creVolumeType = a}); -- | Checks whether you have the required permissions for the action, without -- actually making the request, and provides an error response. If you have -- the required permissions, the error response is 'DryRunOperation'. -- Otherwise, it is 'UnauthorizedOperation'. creDryRun :: Lens' CreateVolume (Maybe Bool) creDryRun = lens _creDryRun (\ s a -> s{_creDryRun = a}); -- | The snapshot from which to create the volume. creSnapshotId :: Lens' CreateVolume (Maybe Text) creSnapshotId = lens _creSnapshotId (\ s a -> s{_creSnapshotId = a}); -- | The Availability Zone in which to create the volume. Use -- DescribeAvailabilityZones to list the Availability Zones that are -- currently available to you. creAvailabilityZone :: Lens' CreateVolume Text creAvailabilityZone = lens _creAvailabilityZone (\ s a -> s{_creAvailabilityZone = a}); instance AWSRequest CreateVolume where type Sv CreateVolume = EC2 type Rs CreateVolume = Volume request = post response = receiveXML (\ s h x -> parseXML x) instance ToHeaders CreateVolume where toHeaders = const mempty instance ToPath CreateVolume where toPath = const "/" instance ToQuery CreateVolume where toQuery CreateVolume'{..} = mconcat ["Action" =: ("CreateVolume" :: ByteString), "Version" =: ("2015-04-15" :: ByteString), "Size" =: _creSize, "Iops" =: _creIOPS, "Encrypted" =: _creEncrypted, "KmsKeyId" =: _creKMSKeyId, "VolumeType" =: _creVolumeType, "DryRun" =: _creDryRun, "SnapshotId" =: _creSnapshotId, "AvailabilityZone" =: _creAvailabilityZone]