amazonka-ec2-1.3.7: gen/Network/AWS/EC2/CreateCustomerGateway.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.CreateCustomerGateway
-- Copyright : (c) 2013-2015 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Provides information to AWS about your VPN customer gateway device. The
-- customer gateway is the appliance at your end of the VPN connection.
-- (The device on the AWS side of the VPN connection is the virtual private
-- gateway.) You must provide the Internet-routable IP address of the
-- customer gateway\'s external interface. The IP address must be static
-- and may be behind a device performing network address translation (NAT).
--
-- For devices that use Border Gateway Protocol (BGP), you can also provide
-- the device\'s BGP Autonomous System Number (ASN). You can use an
-- existing ASN assigned to your network. If you don\'t have an ASN
-- already, you can use a private ASN (in the 64512 - 65534 range).
--
-- Amazon EC2 supports all 2-byte ASN numbers in the range of 1 - 65534,
-- with the exception of 7224, which is reserved in the 'us-east-1' region,
-- and 9059, which is reserved in the 'eu-west-1' region.
--
-- For more information about VPN customer gateways, see
-- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC>
-- in the /Amazon Virtual Private Cloud User Guide/.
--
-- You cannot create more than one customer gateway with the same VPN type,
-- IP address, and BGP ASN parameter values. If you run an identical
-- request more than one time, the first request creates the customer
-- gateway, and subsequent requests return information about the existing
-- customer gateway. The subsequent requests do not create new customer
-- gateway resources.
--
-- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateCustomerGateway.html AWS API Reference> for CreateCustomerGateway.
module Network.AWS.EC2.CreateCustomerGateway
(
-- * Creating a Request
createCustomerGateway
, CreateCustomerGateway
-- * Request Lenses
, ccgDryRun
, ccgType
, ccgPublicIP
, ccgBGPASN
-- * Destructuring the Response
, createCustomerGatewayResponse
, CreateCustomerGatewayResponse
-- * Response Lenses
, ccgrsCustomerGateway
, ccgrsResponseStatus
) 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
-- | /See:/ 'createCustomerGateway' smart constructor.
data CreateCustomerGateway = CreateCustomerGateway'
{ _ccgDryRun :: !(Maybe Bool)
, _ccgType :: !GatewayType
, _ccgPublicIP :: !Text
, _ccgBGPASN :: !Int
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'CreateCustomerGateway' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'ccgDryRun'
--
-- * 'ccgType'
--
-- * 'ccgPublicIP'
--
-- * 'ccgBGPASN'
createCustomerGateway
:: GatewayType -- ^ 'ccgType'
-> Text -- ^ 'ccgPublicIP'
-> Int -- ^ 'ccgBGPASN'
-> CreateCustomerGateway
createCustomerGateway pType_ pPublicIP_ pBGPASN_ =
CreateCustomerGateway'
{ _ccgDryRun = Nothing
, _ccgType = pType_
, _ccgPublicIP = pPublicIP_
, _ccgBGPASN = pBGPASN_
}
-- | 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'.
ccgDryRun :: Lens' CreateCustomerGateway (Maybe Bool)
ccgDryRun = lens _ccgDryRun (\ s a -> s{_ccgDryRun = a});
-- | The type of VPN connection that this customer gateway supports
-- ('ipsec.1').
ccgType :: Lens' CreateCustomerGateway GatewayType
ccgType = lens _ccgType (\ s a -> s{_ccgType = a});
-- | The Internet-routable IP address for the customer gateway\'s outside
-- interface. The address must be static.
ccgPublicIP :: Lens' CreateCustomerGateway Text
ccgPublicIP = lens _ccgPublicIP (\ s a -> s{_ccgPublicIP = a});
-- | For devices that support BGP, the customer gateway\'s BGP ASN.
--
-- Default: 65000
ccgBGPASN :: Lens' CreateCustomerGateway Int
ccgBGPASN = lens _ccgBGPASN (\ s a -> s{_ccgBGPASN = a});
instance AWSRequest CreateCustomerGateway where
type Rs CreateCustomerGateway =
CreateCustomerGatewayResponse
request = postQuery eC2
response
= receiveXML
(\ s h x ->
CreateCustomerGatewayResponse' <$>
(x .@? "customerGateway") <*> (pure (fromEnum s)))
instance ToHeaders CreateCustomerGateway where
toHeaders = const mempty
instance ToPath CreateCustomerGateway where
toPath = const "/"
instance ToQuery CreateCustomerGateway where
toQuery CreateCustomerGateway'{..}
= mconcat
["Action" =: ("CreateCustomerGateway" :: ByteString),
"Version" =: ("2015-10-01" :: ByteString),
"DryRun" =: _ccgDryRun, "Type" =: _ccgType,
"IpAddress" =: _ccgPublicIP, "BgpAsn" =: _ccgBGPASN]
-- | /See:/ 'createCustomerGatewayResponse' smart constructor.
data CreateCustomerGatewayResponse = CreateCustomerGatewayResponse'
{ _ccgrsCustomerGateway :: !(Maybe CustomerGateway)
, _ccgrsResponseStatus :: !Int
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'CreateCustomerGatewayResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'ccgrsCustomerGateway'
--
-- * 'ccgrsResponseStatus'
createCustomerGatewayResponse
:: Int -- ^ 'ccgrsResponseStatus'
-> CreateCustomerGatewayResponse
createCustomerGatewayResponse pResponseStatus_ =
CreateCustomerGatewayResponse'
{ _ccgrsCustomerGateway = Nothing
, _ccgrsResponseStatus = pResponseStatus_
}
-- | Information about the customer gateway.
ccgrsCustomerGateway :: Lens' CreateCustomerGatewayResponse (Maybe CustomerGateway)
ccgrsCustomerGateway = lens _ccgrsCustomerGateway (\ s a -> s{_ccgrsCustomerGateway = a});
-- | The response status code.
ccgrsResponseStatus :: Lens' CreateCustomerGatewayResponse Int
ccgrsResponseStatus = lens _ccgrsResponseStatus (\ s a -> s{_ccgrsResponseStatus = a});