amazonka-gamelift-1.4.0: gen/Network/AWS/GameLift/CreateFleet.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.GameLift.CreateFleet
-- Copyright : (c) 2013-2016 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)
--
-- Creates a new fleet to host game servers. A fleet consists of a set of
-- Amazon Elastic Compute Cloud (Amazon EC2) instances of a certain type,
-- which defines the CPU, memory, storage, and networking capacity of each
-- host in the fleet. See
-- <https://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types>
-- for more information. Each instance in the fleet hosts a game server
-- created from the specified game build. Once a fleet is in an ACTIVE
-- state, it can begin hosting game sessions.
--
-- To create a new fleet, provide a name and the EC2 instance type for the
-- new fleet, and specify the build and server launch path. Builds must be
-- in a READY state before they can be used to build fleets. When
-- configuring the new fleet, you can optionally (1) provide a set of
-- launch parameters to be passed to a game server when activated; (2)
-- limit incoming traffic to a specified range of IP addresses and port
-- numbers; (3) set game session protection for all instances in the fleet,
-- and (4) configure Amazon GameLift to store game session logs by
-- specifying the path to the logs stored in your game server files. If the
-- call is successful, Amazon GameLift performs the following tasks:
--
-- - Creates a fleet record and sets the state to NEW.
-- - Sets the fleet\'s capacity to 1 \"desired\" and 1 \"active\" EC2
-- instance count.
-- - Creates an EC2 instance and begins the process of initializing the
-- fleet and activating a game server on the instance.
-- - Begins writing events to the fleet event log, which can be accessed
-- in the GameLift console.
--
-- Once a fleet is created, use the following actions to change certain
-- fleet properties (server launch parameters and log paths cannot be
-- changed):
--
-- - < UpdateFleetAttributes> -- Update fleet metadata, including name
-- and description.
-- - < UpdateFleetCapacity> -- Increase or decrease the number of
-- instances you want the fleet to maintain.
-- - < UpdateFleetPortSettings> -- Change the IP addresses and ports that
-- allow access to incoming traffic.
module Network.AWS.GameLift.CreateFleet
(
-- * Creating a Request
createFleet
, CreateFleet
-- * Request Lenses
, cfServerLaunchParameters
, cfLogPaths
, cfEC2InboundPermissions
, cfNewGameSessionProtectionPolicy
, cfDescription
, cfName
, cfBuildId
, cfServerLaunchPath
, cfEC2InstanceType
-- * Destructuring the Response
, createFleetResponse
, CreateFleetResponse
-- * Response Lenses
, cfrsFleetAttributes
, cfrsResponseStatus
) where
import Network.AWS.GameLift.Types
import Network.AWS.GameLift.Types.Product
import Network.AWS.Lens
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
-- | Represents the input for a request action.
--
-- /See:/ 'createFleet' smart constructor.
data CreateFleet = CreateFleet'
{ _cfServerLaunchParameters :: !(Maybe Text)
, _cfLogPaths :: !(Maybe [Text])
, _cfEC2InboundPermissions :: !(Maybe [IPPermission])
, _cfNewGameSessionProtectionPolicy :: !(Maybe ProtectionPolicy)
, _cfDescription :: !(Maybe Text)
, _cfName :: !Text
, _cfBuildId :: !Text
, _cfServerLaunchPath :: !Text
, _cfEC2InstanceType :: !EC2InstanceType
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'CreateFleet' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'cfServerLaunchParameters'
--
-- * 'cfLogPaths'
--
-- * 'cfEC2InboundPermissions'
--
-- * 'cfNewGameSessionProtectionPolicy'
--
-- * 'cfDescription'
--
-- * 'cfName'
--
-- * 'cfBuildId'
--
-- * 'cfServerLaunchPath'
--
-- * 'cfEC2InstanceType'
createFleet
:: Text -- ^ 'cfName'
-> Text -- ^ 'cfBuildId'
-> Text -- ^ 'cfServerLaunchPath'
-> EC2InstanceType -- ^ 'cfEC2InstanceType'
-> CreateFleet
createFleet pName_ pBuildId_ pServerLaunchPath_ pEC2InstanceType_ =
CreateFleet'
{ _cfServerLaunchParameters = Nothing
, _cfLogPaths = Nothing
, _cfEC2InboundPermissions = Nothing
, _cfNewGameSessionProtectionPolicy = Nothing
, _cfDescription = Nothing
, _cfName = pName_
, _cfBuildId = pBuildId_
, _cfServerLaunchPath = pServerLaunchPath_
, _cfEC2InstanceType = pEC2InstanceType_
}
-- | Parameters required to launch your game server. These parameters should
-- be expressed as a string of command-line parameters. Example: \"+sv_port
-- 33435 +start_lobby\".
cfServerLaunchParameters :: Lens' CreateFleet (Maybe Text)
cfServerLaunchParameters = lens _cfServerLaunchParameters (\ s a -> s{_cfServerLaunchParameters = a});
-- | Path to game-session log files generated by your game server. Once a
-- game session has been terminated, Amazon GameLift captures and stores
-- the logs on Amazon S3. Use the GameLift console to access the stored
-- logs.
cfLogPaths :: Lens' CreateFleet [Text]
cfLogPaths = lens _cfLogPaths (\ s a -> s{_cfLogPaths = a}) . _Default . _Coerce;
-- | Access limits for incoming traffic. Setting these values limits game
-- server access to incoming traffic using specified IP ranges and port
-- numbers. Some ports in a range may be restricted. You can provide one or
-- more sets of permissions for the fleet.
cfEC2InboundPermissions :: Lens' CreateFleet [IPPermission]
cfEC2InboundPermissions = lens _cfEC2InboundPermissions (\ s a -> s{_cfEC2InboundPermissions = a}) . _Default . _Coerce;
-- | Game session protection policy to apply to all instances created in this
-- fleet. If this parameter is not set, new instances in this fleet will
-- default to no protection. Protection can be set for individual instances
-- using < UpdateGameSession>.
--
-- - NoProtection: The game session can be terminated during a scale-down
-- event.
-- - FullProtection: If the game session is in an ACTIVE status, it
-- cannot be terminated during a scale-down event.
cfNewGameSessionProtectionPolicy :: Lens' CreateFleet (Maybe ProtectionPolicy)
cfNewGameSessionProtectionPolicy = lens _cfNewGameSessionProtectionPolicy (\ s a -> s{_cfNewGameSessionProtectionPolicy = a});
-- | Human-readable description of the fleet.
cfDescription :: Lens' CreateFleet (Maybe Text)
cfDescription = lens _cfDescription (\ s a -> s{_cfDescription = a});
-- | Descriptive label associated with this fleet. Fleet names do not need to
-- be unique.
cfName :: Lens' CreateFleet Text
cfName = lens _cfName (\ s a -> s{_cfName = a});
-- | Unique identifier for the build you want the new fleet to use.
cfBuildId :: Lens' CreateFleet Text
cfBuildId = lens _cfBuildId (\ s a -> s{_cfBuildId = a});
-- | Path to the launch executable for the game server. A game server is
-- built into a 'C:\\game' drive. This value must be expressed as
-- 'C:\\game\\[launchpath]'. Example: If, when built, your game server
-- files are in a folder called \"MyGame\", your log path should be
-- 'C:\\game\\MyGame\\server.exe'.
cfServerLaunchPath :: Lens' CreateFleet Text
cfServerLaunchPath = lens _cfServerLaunchPath (\ s a -> s{_cfServerLaunchPath = a});
-- | Type of EC2 instances used in the fleet. EC2 instance types define the
-- CPU, memory, storage, and networking capacity of the fleetaposs hosts.
-- Amazon GameLift supports the EC2 instance types listed below. See
-- <https://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types>
-- for detailed descriptions of each.
cfEC2InstanceType :: Lens' CreateFleet EC2InstanceType
cfEC2InstanceType = lens _cfEC2InstanceType (\ s a -> s{_cfEC2InstanceType = a});
instance AWSRequest CreateFleet where
type Rs CreateFleet = CreateFleetResponse
request = postJSON gameLift
response
= receiveJSON
(\ s h x ->
CreateFleetResponse' <$>
(x .?> "FleetAttributes") <*> (pure (fromEnum s)))
instance Hashable CreateFleet
instance ToHeaders CreateFleet where
toHeaders
= const
(mconcat
["X-Amz-Target" =#
("GameLift.CreateFleet" :: ByteString),
"Content-Type" =#
("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON CreateFleet where
toJSON CreateFleet'{..}
= object
(catMaybes
[("ServerLaunchParameters" .=) <$>
_cfServerLaunchParameters,
("LogPaths" .=) <$> _cfLogPaths,
("EC2InboundPermissions" .=) <$>
_cfEC2InboundPermissions,
("NewGameSessionProtectionPolicy" .=) <$>
_cfNewGameSessionProtectionPolicy,
("Description" .=) <$> _cfDescription,
Just ("Name" .= _cfName),
Just ("BuildId" .= _cfBuildId),
Just ("ServerLaunchPath" .= _cfServerLaunchPath),
Just ("EC2InstanceType" .= _cfEC2InstanceType)])
instance ToPath CreateFleet where
toPath = const "/"
instance ToQuery CreateFleet where
toQuery = const mempty
-- | Represents the returned data in response to a request action.
--
-- /See:/ 'createFleetResponse' smart constructor.
data CreateFleetResponse = CreateFleetResponse'
{ _cfrsFleetAttributes :: !(Maybe FleetAttributes)
, _cfrsResponseStatus :: !Int
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'CreateFleetResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'cfrsFleetAttributes'
--
-- * 'cfrsResponseStatus'
createFleetResponse
:: Int -- ^ 'cfrsResponseStatus'
-> CreateFleetResponse
createFleetResponse pResponseStatus_ =
CreateFleetResponse'
{ _cfrsFleetAttributes = Nothing
, _cfrsResponseStatus = pResponseStatus_
}
-- | Properties for the newly created fleet.
cfrsFleetAttributes :: Lens' CreateFleetResponse (Maybe FleetAttributes)
cfrsFleetAttributes = lens _cfrsFleetAttributes (\ s a -> s{_cfrsFleetAttributes = a});
-- | The response status code.
cfrsResponseStatus :: Lens' CreateFleetResponse Int
cfrsResponseStatus = lens _cfrsResponseStatus (\ s a -> s{_cfrsResponseStatus = a});