{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} -- Module : Network.AWS.EC2.CreateSecurityGroup -- Copyright : (c) 2013-2014 Brendan Hay -- License : This Source Code Form is subject to the terms of -- the Mozilla Public License, v. 2.0. -- A copy of the MPL can be found in the LICENSE file or -- you can obtain it at http://mozilla.org/MPL/2.0/. -- Maintainer : Brendan Hay -- Stability : experimental -- Portability : non-portable (GHC extensions) -- -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | Creates a security group. -- -- A security group is for use with instances either in the EC2-Classic -- platform or in a specific VPC. For more information, see in the /Amazon Elastic Compute Cloud User Guide/ and in the /Amazon Virtual Private Cloud User Guide/. -- -- EC2-Classic: You can have up to 500 security groups. -- -- EC2-VPC: You can create up to 100 security groups per VPC. -- -- When you create a security group, you specify a friendly name of your -- choice. You can have a security group for use in EC2-Classic with the same -- name as a security group for use in a VPC. However, you can't have two -- security groups for use in EC2-Classic with the same name or two security -- groups for use in a VPC with the same name. -- -- You have a default security group for use in EC2-Classic and a default -- security group for use in your VPC. If you don't specify a security group -- when you launch an instance, the instance is launched into the appropriate -- default security group. A default security group includes a default rule that -- grants instances unrestricted network access to each other. -- -- You can add or remove rules from your security groups using 'AuthorizeSecurityGroupIngress', 'AuthorizeSecurityGroupEgress', 'RevokeSecurityGroupIngress', and 'RevokeSecurityGroupEgress'. -- -- module Network.AWS.EC2.CreateSecurityGroup ( -- * Request CreateSecurityGroup -- ** Request constructor , createSecurityGroup -- ** Request lenses , csgDescription , csgDryRun , csgGroupName , csgVpcId -- * Response , CreateSecurityGroupResponse -- ** Response constructor , createSecurityGroupResponse -- ** Response lenses , csgrGroupId ) where import Network.AWS.Prelude import Network.AWS.Request.Query import Network.AWS.EC2.Types import qualified GHC.Exts data CreateSecurityGroup = CreateSecurityGroup { _csgDescription :: Text , _csgDryRun :: Maybe Bool , _csgGroupName :: Text , _csgVpcId :: Maybe Text } deriving (Eq, Ord, Show) -- | 'CreateSecurityGroup' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'csgDescription' @::@ 'Text' -- -- * 'csgDryRun' @::@ 'Maybe' 'Bool' -- -- * 'csgGroupName' @::@ 'Text' -- -- * 'csgVpcId' @::@ 'Maybe' 'Text' -- createSecurityGroup :: Text -- ^ 'csgGroupName' -> Text -- ^ 'csgDescription' -> CreateSecurityGroup createSecurityGroup p1 p2 = CreateSecurityGroup { _csgGroupName = p1 , _csgDescription = p2 , _csgDryRun = Nothing , _csgVpcId = Nothing } -- | A description for the security group. This is informational only. -- -- Constraints: Up to 255 characters in length -- -- Constraints for EC2-Classic: ASCII characters -- -- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* csgDescription :: Lens' CreateSecurityGroup Text csgDescription = lens _csgDescription (\s a -> s { _csgDescription = a }) csgDryRun :: Lens' CreateSecurityGroup (Maybe Bool) csgDryRun = lens _csgDryRun (\s a -> s { _csgDryRun = a }) -- | The name of the security group. -- -- Constraints: Up to 255 characters in length -- -- Constraints for EC2-Classic: ASCII characters -- -- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* csgGroupName :: Lens' CreateSecurityGroup Text csgGroupName = lens _csgGroupName (\s a -> s { _csgGroupName = a }) -- | [EC2-VPC] The ID of the VPC. Required for EC2-VPC. csgVpcId :: Lens' CreateSecurityGroup (Maybe Text) csgVpcId = lens _csgVpcId (\s a -> s { _csgVpcId = a }) newtype CreateSecurityGroupResponse = CreateSecurityGroupResponse { _csgrGroupId :: Text } deriving (Eq, Ord, Show, Monoid, IsString) -- | 'CreateSecurityGroupResponse' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'csgrGroupId' @::@ 'Text' -- createSecurityGroupResponse :: Text -- ^ 'csgrGroupId' -> CreateSecurityGroupResponse createSecurityGroupResponse p1 = CreateSecurityGroupResponse { _csgrGroupId = p1 } -- | The ID of the security group. csgrGroupId :: Lens' CreateSecurityGroupResponse Text csgrGroupId = lens _csgrGroupId (\s a -> s { _csgrGroupId = a }) instance ToPath CreateSecurityGroup where toPath = const "/" instance ToQuery CreateSecurityGroup where toQuery CreateSecurityGroup{..} = mconcat [ "GroupDescription" =? _csgDescription , "dryRun" =? _csgDryRun , "GroupName" =? _csgGroupName , "VpcId" =? _csgVpcId ] instance ToHeaders CreateSecurityGroup instance AWSRequest CreateSecurityGroup where type Sv CreateSecurityGroup = EC2 type Rs CreateSecurityGroup = CreateSecurityGroupResponse request = post "CreateSecurityGroup" response = xmlResponse instance FromXML CreateSecurityGroupResponse where parseXML x = CreateSecurityGroupResponse <$> x .@ "groupId"