amazonka-ec2-1.5.0: gen/Network/AWS/EC2/CreateVPC.hs
{-# 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.CreateVPC
-- Copyright : (c) 2013-2017 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a VPC with the specified IPv4 CIDR block. The smallest VPC you can create uses a /28 netmask (16 IPv4 addresses), and the largest uses a /16 netmask (65,536 IPv4 addresses). To help you decide how big to make your VPC, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html Your VPC and Subnets> in the /Amazon Virtual Private Cloud User Guide/ .
--
--
-- You can optionally request an Amazon-provided IPv6 CIDR block for the VPC. The IPv6 CIDR block uses a /56 prefix length, and is allocated from Amazon's pool of IPv6 addresses. You cannot choose the IPv6 range for your VPC.
--
-- By default, each instance you launch in the VPC has the default DHCP options, which includes only a default DNS server that we provide (AmazonProvidedDNS). For more information about DHCP options, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets> in the /Amazon Virtual Private Cloud User Guide/ .
--
-- You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html Dedicated Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
--
module Network.AWS.EC2.CreateVPC
(
-- * Creating a Request
createVPC
, CreateVPC
-- * Request Lenses
, cvAmazonProvidedIPv6CidrBlock
, cvInstanceTenancy
, cvDryRun
, cvCidrBlock
-- * Destructuring the Response
, createVPCResponse
, CreateVPCResponse
-- * Response Lenses
, cvrsVPC
, cvrsResponseStatus
) where
import Network.AWS.EC2.Types
import Network.AWS.EC2.Types.Product
import Network.AWS.Lens
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
-- | Contains the parameters for CreateVpc.
--
--
--
-- /See:/ 'createVPC' smart constructor.
data CreateVPC = CreateVPC'
{ _cvAmazonProvidedIPv6CidrBlock :: !(Maybe Bool)
, _cvInstanceTenancy :: !(Maybe Tenancy)
, _cvDryRun :: !(Maybe Bool)
, _cvCidrBlock :: !Text
} deriving (Eq, Read, Show, Data, Typeable, Generic)
-- | Creates a value of 'CreateVPC' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'cvAmazonProvidedIPv6CidrBlock' - Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.
--
-- * 'cvInstanceTenancy' - The tenancy options for instances launched into the VPC. For @default@ , instances are launched with shared tenancy by default. You can launch instances with any tenancy into a shared tenancy VPC. For @dedicated@ , instances are launched as dedicated tenancy instances by default. You can only launch instances with a tenancy of @dedicated@ or @host@ into a dedicated tenancy VPC. __Important:__ The @host@ value cannot be used with this parameter. Use the @default@ or @dedicated@ values only. Default: @default@
--
-- * 'cvDryRun' - 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@ .
--
-- * 'cvCidrBlock' - The IPv4 network range for the VPC, in CIDR notation. For example, @10.0.0.0/16@ .
createVPC
:: Text -- ^ 'cvCidrBlock'
-> CreateVPC
createVPC pCidrBlock_ =
CreateVPC'
{ _cvAmazonProvidedIPv6CidrBlock = Nothing
, _cvInstanceTenancy = Nothing
, _cvDryRun = Nothing
, _cvCidrBlock = pCidrBlock_
}
-- | Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.
cvAmazonProvidedIPv6CidrBlock :: Lens' CreateVPC (Maybe Bool)
cvAmazonProvidedIPv6CidrBlock = lens _cvAmazonProvidedIPv6CidrBlock (\ s a -> s{_cvAmazonProvidedIPv6CidrBlock = a});
-- | The tenancy options for instances launched into the VPC. For @default@ , instances are launched with shared tenancy by default. You can launch instances with any tenancy into a shared tenancy VPC. For @dedicated@ , instances are launched as dedicated tenancy instances by default. You can only launch instances with a tenancy of @dedicated@ or @host@ into a dedicated tenancy VPC. __Important:__ The @host@ value cannot be used with this parameter. Use the @default@ or @dedicated@ values only. Default: @default@
cvInstanceTenancy :: Lens' CreateVPC (Maybe Tenancy)
cvInstanceTenancy = lens _cvInstanceTenancy (\ s a -> s{_cvInstanceTenancy = 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@ .
cvDryRun :: Lens' CreateVPC (Maybe Bool)
cvDryRun = lens _cvDryRun (\ s a -> s{_cvDryRun = a});
-- | The IPv4 network range for the VPC, in CIDR notation. For example, @10.0.0.0/16@ .
cvCidrBlock :: Lens' CreateVPC Text
cvCidrBlock = lens _cvCidrBlock (\ s a -> s{_cvCidrBlock = a});
instance AWSRequest CreateVPC where
type Rs CreateVPC = CreateVPCResponse
request = postQuery ec2
response
= receiveXML
(\ s h x ->
CreateVPCResponse' <$>
(x .@? "vpc") <*> (pure (fromEnum s)))
instance Hashable CreateVPC where
instance NFData CreateVPC where
instance ToHeaders CreateVPC where
toHeaders = const mempty
instance ToPath CreateVPC where
toPath = const "/"
instance ToQuery CreateVPC where
toQuery CreateVPC'{..}
= mconcat
["Action" =: ("CreateVpc" :: ByteString),
"Version" =: ("2016-11-15" :: ByteString),
"AmazonProvidedIpv6CidrBlock" =:
_cvAmazonProvidedIPv6CidrBlock,
"InstanceTenancy" =: _cvInstanceTenancy,
"DryRun" =: _cvDryRun, "CidrBlock" =: _cvCidrBlock]
-- | Contains the output of CreateVpc.
--
--
--
-- /See:/ 'createVPCResponse' smart constructor.
data CreateVPCResponse = CreateVPCResponse'
{ _cvrsVPC :: !(Maybe VPC)
, _cvrsResponseStatus :: !Int
} deriving (Eq, Read, Show, Data, Typeable, Generic)
-- | Creates a value of 'CreateVPCResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'cvrsVPC' - Information about the VPC.
--
-- * 'cvrsResponseStatus' - -- | The response status code.
createVPCResponse
:: Int -- ^ 'cvrsResponseStatus'
-> CreateVPCResponse
createVPCResponse pResponseStatus_ =
CreateVPCResponse'
{_cvrsVPC = Nothing, _cvrsResponseStatus = pResponseStatus_}
-- | Information about the VPC.
cvrsVPC :: Lens' CreateVPCResponse (Maybe VPC)
cvrsVPC = lens _cvrsVPC (\ s a -> s{_cvrsVPC = a});
-- | -- | The response status code.
cvrsResponseStatus :: Lens' CreateVPCResponse Int
cvrsResponseStatus = lens _cvrsResponseStatus (\ s a -> s{_cvrsResponseStatus = a});
instance NFData CreateVPCResponse where