-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Amazon Elastic MapReduce SDK.
--   
--   The types from this library are intended to be used with
--   <a>amazonka</a>, which provides mechanisms for specifying AuthN/AuthZ
--   information, sending requests, and receiving responses.
--   
--   Lenses are used for constructing and manipulating types, due to the
--   depth of nesting of AWS types and transparency regarding
--   de/serialisation into more palatable Haskell values. The provided
--   lenses should be compatible with any of the major lens libraries such
--   as <a>lens</a> or <a>lens-family-core</a>.
--   
--   See <a>Network.AWS.EMR</a> or <a>the AWS documentation</a> to get
--   started.
@package amazonka-emr
@version 1.6.0


module Network.AWS.EMR.Types

-- | API version <tt>2009-03-31</tt> of the Amazon Elastic MapReduce SDK
--   configuration.
emr :: Service

-- | This exception occurs when there is something wrong with user input.
_InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError

-- | Indicates that an error occurred while processing the request and that
--   the request was not completed.
_InternalServerError :: AsError a => Getting (First ServiceError) a ServiceError

-- | This exception occurs when there is an internal failure in the EMR
--   service.
_InternalServerException :: AsError a => Getting (First ServiceError) a ServiceError
data ActionOnFailure
CancelAndWait :: ActionOnFailure
Continue :: ActionOnFailure
TerminateCluster :: ActionOnFailure
TerminateJobFlow :: ActionOnFailure
data AdjustmentType
ChangeInCapacity :: AdjustmentType
ExactCapacity :: AdjustmentType
PercentChangeInCapacity :: AdjustmentType
data AutoScalingPolicyState
Attached :: AutoScalingPolicyState
Attaching :: AutoScalingPolicyState
Detached :: AutoScalingPolicyState
Detaching :: AutoScalingPolicyState
Failed :: AutoScalingPolicyState
Pending :: AutoScalingPolicyState
data AutoScalingPolicyStateChangeReasonCode
CleanupFailure :: AutoScalingPolicyStateChangeReasonCode
ProvisionFailure :: AutoScalingPolicyStateChangeReasonCode
UserRequest :: AutoScalingPolicyStateChangeReasonCode
data CancelStepsRequestStatus
CSRSFailed :: CancelStepsRequestStatus
CSRSSubmitted :: CancelStepsRequestStatus
data ClusterState
CSBootstrapping :: ClusterState
CSRunning :: ClusterState
CSStarting :: ClusterState
CSTerminated :: ClusterState
CSTerminatedWithErrors :: ClusterState
CSTerminating :: ClusterState
CSWaiting :: ClusterState
data ClusterStateChangeReasonCode
CSCRCAllStepsCompleted :: ClusterStateChangeReasonCode
CSCRCBootstrapFailure :: ClusterStateChangeReasonCode
CSCRCInstanceFailure :: ClusterStateChangeReasonCode
CSCRCInstanceFleetTimeout :: ClusterStateChangeReasonCode
CSCRCInternalError :: ClusterStateChangeReasonCode
CSCRCStepFailure :: ClusterStateChangeReasonCode
CSCRCUserRequest :: ClusterStateChangeReasonCode
CSCRCValidationError :: ClusterStateChangeReasonCode
data ComparisonOperator
GreaterThan :: ComparisonOperator
GreaterThanOrEqual :: ComparisonOperator
LessThan :: ComparisonOperator
LessThanOrEqual :: ComparisonOperator
data InstanceCollectionType
InstanceFleet :: InstanceCollectionType
InstanceGroup :: InstanceCollectionType
data InstanceFleetState
IFSBootstrapping :: InstanceFleetState
IFSProvisioning :: InstanceFleetState
IFSResizing :: InstanceFleetState
IFSRunning :: InstanceFleetState
IFSSuspended :: InstanceFleetState
IFSTerminated :: InstanceFleetState
IFSTerminating :: InstanceFleetState
data InstanceFleetStateChangeReasonCode
IFSCRCClusterTerminated :: InstanceFleetStateChangeReasonCode
IFSCRCInstanceFailure :: InstanceFleetStateChangeReasonCode
IFSCRCInternalError :: InstanceFleetStateChangeReasonCode
IFSCRCValidationError :: InstanceFleetStateChangeReasonCode
data InstanceFleetType
IFTCore :: InstanceFleetType
IFTMaster :: InstanceFleetType
IFTTask :: InstanceFleetType
data InstanceGroupState
Arrested :: InstanceGroupState
Bootstrapping :: InstanceGroupState
Ended :: InstanceGroupState
Provisioning :: InstanceGroupState
Resizing :: InstanceGroupState
Running :: InstanceGroupState
ShuttingDown :: InstanceGroupState
Suspended :: InstanceGroupState
Terminated :: InstanceGroupState
Terminating :: InstanceGroupState
data InstanceGroupStateChangeReasonCode
ClusterTerminated :: InstanceGroupStateChangeReasonCode
InstanceFailure :: InstanceGroupStateChangeReasonCode
InternalError :: InstanceGroupStateChangeReasonCode
ValidationError :: InstanceGroupStateChangeReasonCode
data InstanceGroupType
Core :: InstanceGroupType
Master :: InstanceGroupType
Task :: InstanceGroupType
data InstanceRoleType
IRTCore :: InstanceRoleType
IRTMaster :: InstanceRoleType
IRTTask :: InstanceRoleType
data InstanceState
ISAwaitingFulfillment :: InstanceState
ISBootstrapping :: InstanceState
ISProvisioning :: InstanceState
ISRunning :: InstanceState
ISTerminated :: InstanceState
data InstanceStateChangeReasonCode
ISCRCBootstrapFailure :: InstanceStateChangeReasonCode
ISCRCClusterTerminated :: InstanceStateChangeReasonCode
ISCRCInstanceFailure :: InstanceStateChangeReasonCode
ISCRCInternalError :: InstanceStateChangeReasonCode
ISCRCValidationError :: InstanceStateChangeReasonCode
data MarketType
OnDemand :: MarketType
Spot :: MarketType
data RepoUpgradeOnBoot
RUOBNone :: RepoUpgradeOnBoot
RUOBSecurity :: RepoUpgradeOnBoot
data ScaleDownBehavior
TerminateAtInstanceHour :: ScaleDownBehavior
TerminateAtTaskCompletion :: ScaleDownBehavior
data SpotProvisioningTimeoutAction
SPTASwitchToOnDemand :: SpotProvisioningTimeoutAction
SPTATerminateCluster :: SpotProvisioningTimeoutAction
data Statistic
Average :: Statistic
Maximum :: Statistic
Minimum :: Statistic
SampleCount :: Statistic
Sum :: Statistic
data StepState
SSCancelPending :: StepState
SSCancelled :: StepState
SSCompleted :: StepState
SSFailed :: StepState
SSInterrupted :: StepState
SSPending :: StepState
SSRunning :: StepState
data StepStateChangeReasonCode
SSCRCNone :: StepStateChangeReasonCode
data Unit
Bits :: Unit
BitsPerSecond :: Unit
Bytes :: Unit
BytesPerSecond :: Unit
Count :: Unit
CountPerSecond :: Unit
GigaBits :: Unit
GigaBitsPerSecond :: Unit
GigaBytes :: Unit
GigaBytesPerSecond :: Unit
KiloBits :: Unit
KiloBitsPerSecond :: Unit
KiloBytes :: Unit
KiloBytesPerSecond :: Unit
MegaBits :: Unit
MegaBitsPerSecond :: Unit
MegaBytes :: Unit
MegaBytesPerSecond :: Unit
MicroSeconds :: Unit
MilliSeconds :: Unit
None :: Unit
Percent :: Unit
Seconds :: Unit
TeraBits :: Unit
TeraBitsPerSecond :: Unit
TeraBytes :: Unit
TeraBytesPerSecond :: Unit

-- | An application is any Amazon or third-party software that you can add
--   to the cluster. This structure contains a list of strings that
--   indicates the software to use with the cluster and accepts a user
--   argument list. Amazon EMR accepts and forwards the argument list to
--   the corresponding installation script as bootstrap action argument.
--   For more information, see <a>Using the MapR Distribution for
--   Hadoop</a> . Currently supported values are:
--   
--   <ul>
--   <li>"mapr-m3" - launch the cluster using MapR M3 Edition.</li>
--   <li>"mapr-m5" - launch the cluster using MapR M5 Edition.</li>
--   <li>"mapr" with the user arguments specifying "--edition,m3" or
--   "--edition,m5" - launch the cluster using MapR M3 or M5 Edition,
--   respectively.</li>
--   </ul>
--   
--   <i>See:</i> <a>application</a> smart constructor.
data Application

-- | Creates a value of <a>Application</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aArgs</a> - Arguments for Amazon EMR to pass to the
--   application.</li>
--   <li><a>aAdditionalInfo</a> - This option is for advanced users only.
--   This is meta information about third-party applications that
--   third-party vendors use for testing purposes.</li>
--   <li><a>aName</a> - The name of the application.</li>
--   <li><a>aVersion</a> - The version of the application.</li>
--   </ul>
application :: Application

-- | Arguments for Amazon EMR to pass to the application.
aArgs :: Lens' Application [Text]

-- | This option is for advanced users only. This is meta information about
--   third-party applications that third-party vendors use for testing
--   purposes.
aAdditionalInfo :: Lens' Application (HashMap Text Text)

-- | The name of the application.
aName :: Lens' Application (Maybe Text)

-- | The version of the application.
aVersion :: Lens' Application (Maybe Text)

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. An automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   <tt>PutAutoScalingPolicy</tt> .
--   
--   <i>See:</i> <a>autoScalingPolicy</a> smart constructor.
data AutoScalingPolicy

-- | Creates a value of <a>AutoScalingPolicy</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspConstraints</a> - The upper and lower EC2 instance limits
--   for an automatic scaling policy. Automatic scaling activity will not
--   cause an instance group to grow above or below these limits.</li>
--   <li><a>aspRules</a> - The scale-in and scale-out rules that comprise
--   the automatic scaling policy.</li>
--   </ul>
autoScalingPolicy :: ScalingConstraints -> AutoScalingPolicy

-- | The upper and lower EC2 instance limits for an automatic scaling
--   policy. Automatic scaling activity will not cause an instance group to
--   grow above or below these limits.
aspConstraints :: Lens' AutoScalingPolicy ScalingConstraints

-- | The scale-in and scale-out rules that comprise the automatic scaling
--   policy.
aspRules :: Lens' AutoScalingPolicy [ScalingRule]

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. The automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   <tt>PutAutoScalingPolicy</tt> .
--   
--   <i>See:</i> <a>autoScalingPolicyDescription</a> smart constructor.
data AutoScalingPolicyDescription

-- | Creates a value of <a>AutoScalingPolicyDescription</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspdStatus</a> - The status of an automatic scaling
--   policy.</li>
--   <li><a>aspdRules</a> - The scale-in and scale-out rules that comprise
--   the automatic scaling policy.</li>
--   <li><a>aspdConstraints</a> - The upper and lower EC2 instance limits
--   for an automatic scaling policy. Automatic scaling activity will not
--   cause an instance group to grow above or below these limits.</li>
--   </ul>
autoScalingPolicyDescription :: AutoScalingPolicyDescription

-- | The status of an automatic scaling policy.
aspdStatus :: Lens' AutoScalingPolicyDescription (Maybe AutoScalingPolicyStatus)

-- | The scale-in and scale-out rules that comprise the automatic scaling
--   policy.
aspdRules :: Lens' AutoScalingPolicyDescription [ScalingRule]

-- | The upper and lower EC2 instance limits for an automatic scaling
--   policy. Automatic scaling activity will not cause an instance group to
--   grow above or below these limits.
aspdConstraints :: Lens' AutoScalingPolicyDescription (Maybe ScalingConstraints)

-- | The reason for an <a>AutoScalingPolicyStatus</a> change.
--   
--   <i>See:</i> <a>autoScalingPolicyStateChangeReason</a> smart
--   constructor.
data AutoScalingPolicyStateChangeReason

-- | Creates a value of <a>AutoScalingPolicyStateChangeReason</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspscrCode</a> - The code indicating the reason for the change
--   in status.<tt>USER_REQUEST</tt> indicates that the scaling policy
--   status was changed by a user. <tt>PROVISION_FAILURE</tt> indicates
--   that the status change was because the policy failed to provision.
--   <tt>CLEANUP_FAILURE</tt> indicates an error.</li>
--   <li><a>aspscrMessage</a> - A friendly, more verbose message that
--   accompanies an automatic scaling policy state change.</li>
--   </ul>
autoScalingPolicyStateChangeReason :: AutoScalingPolicyStateChangeReason

-- | The code indicating the reason for the change in
--   status.<tt>USER_REQUEST</tt> indicates that the scaling policy status
--   was changed by a user. <tt>PROVISION_FAILURE</tt> indicates that the
--   status change was because the policy failed to provision.
--   <tt>CLEANUP_FAILURE</tt> indicates an error.
aspscrCode :: Lens' AutoScalingPolicyStateChangeReason (Maybe AutoScalingPolicyStateChangeReasonCode)

-- | A friendly, more verbose message that accompanies an automatic scaling
--   policy state change.
aspscrMessage :: Lens' AutoScalingPolicyStateChangeReason (Maybe Text)

-- | The status of an automatic scaling policy.
--   
--   <i>See:</i> <a>autoScalingPolicyStatus</a> smart constructor.
data AutoScalingPolicyStatus

-- | Creates a value of <a>AutoScalingPolicyStatus</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspsState</a> - Indicates the status of the automatic scaling
--   policy.</li>
--   <li><a>aspsStateChangeReason</a> - The reason for a change in
--   status.</li>
--   </ul>
autoScalingPolicyStatus :: AutoScalingPolicyStatus

-- | Indicates the status of the automatic scaling policy.
aspsState :: Lens' AutoScalingPolicyStatus (Maybe AutoScalingPolicyState)

-- | The reason for a change in status.
aspsStateChangeReason :: Lens' AutoScalingPolicyStatus (Maybe AutoScalingPolicyStateChangeReason)

-- | Configuration of a bootstrap action.
--   
--   <i>See:</i> <a>bootstrapActionConfig</a> smart constructor.
data BootstrapActionConfig

-- | Creates a value of <a>BootstrapActionConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>bacName</a> - The name of the bootstrap action.</li>
--   <li><a>bacScriptBootstrapAction</a> - The script run by the bootstrap
--   action.</li>
--   </ul>
bootstrapActionConfig :: Text -> ScriptBootstrapActionConfig -> BootstrapActionConfig

-- | The name of the bootstrap action.
bacName :: Lens' BootstrapActionConfig Text

-- | The script run by the bootstrap action.
bacScriptBootstrapAction :: Lens' BootstrapActionConfig ScriptBootstrapActionConfig

-- | Specification of the status of a CancelSteps request. Available only
--   in Amazon EMR version 4.8.0 and later, excluding version 5.0.0.
--   
--   <i>See:</i> <a>cancelStepsInfo</a> smart constructor.
data CancelStepsInfo

-- | Creates a value of <a>CancelStepsInfo</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csiStatus</a> - The status of a CancelSteps Request. The value
--   may be SUBMITTED or FAILED.</li>
--   <li><a>csiStepId</a> - The encrypted StepId of a step.</li>
--   <li><a>csiReason</a> - The reason for the failure if the CancelSteps
--   request fails.</li>
--   </ul>
cancelStepsInfo :: CancelStepsInfo

-- | The status of a CancelSteps Request. The value may be SUBMITTED or
--   FAILED.
csiStatus :: Lens' CancelStepsInfo (Maybe CancelStepsRequestStatus)

-- | The encrypted StepId of a step.
csiStepId :: Lens' CancelStepsInfo (Maybe Text)

-- | The reason for the failure if the CancelSteps request fails.
csiReason :: Lens' CancelStepsInfo (Maybe Text)

-- | The definition of a CloudWatch metric alarm, which determines when an
--   automatic scaling activity is triggered. When the defined alarm
--   conditions are satisfied, scaling activity begins.
--   
--   <i>See:</i> <a>cloudWatchAlarmDefinition</a> smart constructor.
data CloudWatchAlarmDefinition

-- | Creates a value of <a>CloudWatchAlarmDefinition</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cwadEvaluationPeriods</a> - The number of periods, expressed in
--   seconds using <tt>Period</tt> , during which the alarm condition must
--   exist before the alarm triggers automatic scaling activity. The
--   default value is <tt>1</tt> .</li>
--   <li><a>cwadNamespace</a> - The namespace for the CloudWatch metric.
--   The default is <tt>AWS/ElasticMapReduce</tt> .</li>
--   <li><a>cwadDimensions</a> - A CloudWatch metric dimension.</li>
--   <li><a>cwadUnit</a> - The unit of measure associated with the
--   CloudWatch metric being watched. The value specified for <tt>Unit</tt>
--   must correspond to the units specified in the CloudWatch metric.</li>
--   <li><a>cwadStatistic</a> - The statistic to apply to the metric
--   associated with the alarm. The default is <tt>AVERAGE</tt> .</li>
--   <li><a>cwadComparisonOperator</a> - Determines how the metric
--   specified by <tt>MetricName</tt> is compared to the value specified by
--   <tt>Threshold</tt> .</li>
--   <li><a>cwadMetricName</a> - The name of the CloudWatch metric that is
--   watched to determine an alarm condition.</li>
--   <li><a>cwadPeriod</a> - The period, in seconds, over which the
--   statistic is applied. EMR CloudWatch metrics are emitted every five
--   minutes (300 seconds), so if an EMR CloudWatch metric is specified,
--   specify <tt>300</tt> .</li>
--   <li><a>cwadThreshold</a> - The value against which the specified
--   statistic is compared.</li>
--   </ul>
cloudWatchAlarmDefinition :: ComparisonOperator -> Text -> Int -> Double -> CloudWatchAlarmDefinition

-- | The number of periods, expressed in seconds using <tt>Period</tt> ,
--   during which the alarm condition must exist before the alarm triggers
--   automatic scaling activity. The default value is <tt>1</tt> .
cwadEvaluationPeriods :: Lens' CloudWatchAlarmDefinition (Maybe Int)

-- | The namespace for the CloudWatch metric. The default is
--   <tt>AWS/ElasticMapReduce</tt> .
cwadNamespace :: Lens' CloudWatchAlarmDefinition (Maybe Text)

-- | A CloudWatch metric dimension.
cwadDimensions :: Lens' CloudWatchAlarmDefinition [MetricDimension]

-- | The unit of measure associated with the CloudWatch metric being
--   watched. The value specified for <tt>Unit</tt> must correspond to the
--   units specified in the CloudWatch metric.
cwadUnit :: Lens' CloudWatchAlarmDefinition (Maybe Unit)

-- | The statistic to apply to the metric associated with the alarm. The
--   default is <tt>AVERAGE</tt> .
cwadStatistic :: Lens' CloudWatchAlarmDefinition (Maybe Statistic)

-- | Determines how the metric specified by <tt>MetricName</tt> is compared
--   to the value specified by <tt>Threshold</tt> .
cwadComparisonOperator :: Lens' CloudWatchAlarmDefinition ComparisonOperator

-- | The name of the CloudWatch metric that is watched to determine an
--   alarm condition.
cwadMetricName :: Lens' CloudWatchAlarmDefinition Text

-- | The period, in seconds, over which the statistic is applied. EMR
--   CloudWatch metrics are emitted every five minutes (300 seconds), so if
--   an EMR CloudWatch metric is specified, specify <tt>300</tt> .
cwadPeriod :: Lens' CloudWatchAlarmDefinition Int

-- | The value against which the specified statistic is compared.
cwadThreshold :: Lens' CloudWatchAlarmDefinition Double

-- | The detailed description of the cluster.
--   
--   <i>See:</i> <a>cluster</a> smart constructor.
data Cluster

-- | Creates a value of <a>Cluster</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cluRequestedAMIVersion</a> - The AMI version requested for this
--   cluster.</li>
--   <li><a>cluEBSRootVolumeSize</a> - The size, in GiB, of the EBS root
--   device volume of the Linux AMI that is used for each EC2 instance.
--   Available in Amazon EMR version 4.x and later.</li>
--   <li><a>cluEC2InstanceAttributes</a> - Provides information about the
--   EC2 instances in a cluster grouped by category. For example, key name,
--   subnet ID, IAM instance profile, and so on.</li>
--   <li><a>cluNormalizedInstanceHours</a> - An approximation of the cost
--   of the cluster, represented in m1.small/hours. This value is
--   incremented one time for every hour an m1.small instance runs. Larger
--   instances are weighted more, so an EC2 instance that is roughly four
--   times more expensive would result in the normalized instance hours
--   being incremented by four. This result is only an approximation and
--   does not reflect the actual billing rate.</li>
--   <li><a>cluConfigurations</a> - Applies only to Amazon EMR releases 4.x
--   and later. The list of Configurations supplied to the EMR
--   cluster.</li>
--   <li><a>cluCustomAMIId</a> - Available only in Amazon EMR version 5.7.0
--   and later. The ID of a custom Amazon EBS-backed Linux AMI if the
--   cluster uses a custom AMI.</li>
--   <li><a>cluAutoScalingRole</a> - An IAM role for automatic scaling
--   policies. The default role is <tt>EMR_AutoScaling_DefaultRole</tt> .
--   The IAM role provides permissions that the automatic scaling feature
--   requires to launch and terminate EC2 instances in an instance
--   group.</li>
--   <li><a>cluSecurityConfiguration</a> - The name of the security
--   configuration applied to the cluster.</li>
--   <li><a>cluScaleDownBehavior</a> - The way that individual Amazon EC2
--   instances terminate when an automatic scale-in activity occurs or an
--   instance group is resized. <tt>TERMINATE_AT_INSTANCE_HOUR</tt>
--   indicates that Amazon EMR terminates nodes at the instance-hour
--   boundary, regardless of when the request to terminate the instance was
--   submitted. This option is only available with Amazon EMR 5.1.0 and
--   later and is the default for clusters created using that version.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> indicates that Amazon EMR
--   blacklists and drains tasks from nodes before terminating the Amazon
--   EC2 instances, regardless of the instance-hour boundary. With either
--   behavior, Amazon EMR removes the least active nodes first and blocks
--   instance termination if it could lead to HDFS corruption.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> is available only in Amazon EMR
--   version 4.1.0 and later, and is the default for versions of Amazon EMR
--   earlier than 5.1.0.</li>
--   <li><a>cluInstanceCollectionType</a> - The instance group
--   configuration of the cluster. A value of <tt>INSTANCE_GROUP</tt>
--   indicates a uniform instance group configuration. A value of
--   <tt>INSTANCE_FLEET</tt> indicates an instance fleets
--   configuration.</li>
--   <li><a>cluReleaseLabel</a> - The release label for the Amazon EMR
--   release.</li>
--   <li><a>cluRepoUpgradeOnBoot</a> - Applies only when
--   <tt>CustomAmiID</tt> is used. Specifies the type of updates that are
--   applied from the Amazon Linux AMI package repositories when an
--   instance boots using the AMI.</li>
--   <li><a>cluLogURI</a> - The path to the Amazon S3 location where logs
--   for this cluster are stored.</li>
--   <li><a>cluKerberosAttributes</a> - Attributes for Kerberos
--   configuration when Kerberos authentication is enabled using a security
--   configuration. For more information see <a>Use Kerberos
--   Authentication</a> in the <i>EMR Management Guide</i> .</li>
--   <li><a>cluRunningAMIVersion</a> - The AMI version running on this
--   cluster.</li>
--   <li><a>cluMasterPublicDNSName</a> - The DNS name of the master node.
--   If the cluster is on a private subnet, this is the private DNS name.
--   On a public subnet, this is the public DNS name.</li>
--   <li><a>cluTerminationProtected</a> - Indicates whether Amazon EMR will
--   lock the cluster to prevent the EC2 instances from being terminated by
--   an API call or user intervention, or in the event of a cluster
--   error.</li>
--   <li><a>cluVisibleToAllUsers</a> - Indicates whether the cluster is
--   visible to all IAM users of the AWS account associated with the
--   cluster. If this value is set to <tt>true</tt> , all IAM users of that
--   AWS account can view and manage the cluster if they have the proper
--   policy permissions set. If this value is <tt>false</tt> , only the IAM
--   user that created the cluster can view and manage it. This value can
--   be changed using the <tt>SetVisibleToAllUsers</tt> action.</li>
--   <li><a>cluAutoTerminate</a> - Specifies whether the cluster should
--   terminate after completing all steps.</li>
--   <li><a>cluApplications</a> - The applications installed on this
--   cluster.</li>
--   <li><a>cluTags</a> - A list of tags associated with a cluster.</li>
--   <li><a>cluServiceRole</a> - The IAM role that will be assumed by the
--   Amazon EMR service to access AWS resources on your behalf.</li>
--   <li><a>cluId</a> - The unique identifier for the cluster.</li>
--   <li><a>cluName</a> - The name of the cluster.</li>
--   <li><a>cluStatus</a> - The current status details about the
--   cluster.</li>
--   </ul>
cluster :: Text -> Text -> ClusterStatus -> Cluster

-- | The AMI version requested for this cluster.
cluRequestedAMIVersion :: Lens' Cluster (Maybe Text)

-- | The size, in GiB, of the EBS root device volume of the Linux AMI that
--   is used for each EC2 instance. Available in Amazon EMR version 4.x and
--   later.
cluEBSRootVolumeSize :: Lens' Cluster (Maybe Int)

-- | Provides information about the EC2 instances in a cluster grouped by
--   category. For example, key name, subnet ID, IAM instance profile, and
--   so on.
cluEC2InstanceAttributes :: Lens' Cluster (Maybe EC2InstanceAttributes)

-- | An approximation of the cost of the cluster, represented in
--   m1.small/hours. This value is incremented one time for every hour an
--   m1.small instance runs. Larger instances are weighted more, so an EC2
--   instance that is roughly four times more expensive would result in the
--   normalized instance hours being incremented by four. This result is
--   only an approximation and does not reflect the actual billing rate.
cluNormalizedInstanceHours :: Lens' Cluster (Maybe Int)

-- | Applies only to Amazon EMR releases 4.x and later. The list of
--   Configurations supplied to the EMR cluster.
cluConfigurations :: Lens' Cluster [Configuration]

-- | Available only in Amazon EMR version 5.7.0 and later. The ID of a
--   custom Amazon EBS-backed Linux AMI if the cluster uses a custom AMI.
cluCustomAMIId :: Lens' Cluster (Maybe Text)

-- | An IAM role for automatic scaling policies. The default role is
--   <tt>EMR_AutoScaling_DefaultRole</tt> . The IAM role provides
--   permissions that the automatic scaling feature requires to launch and
--   terminate EC2 instances in an instance group.
cluAutoScalingRole :: Lens' Cluster (Maybe Text)

-- | The name of the security configuration applied to the cluster.
cluSecurityConfiguration :: Lens' Cluster (Maybe Text)

-- | The way that individual Amazon EC2 instances terminate when an
--   automatic scale-in activity occurs or an instance group is resized.
--   <tt>TERMINATE_AT_INSTANCE_HOUR</tt> indicates that Amazon EMR
--   terminates nodes at the instance-hour boundary, regardless of when the
--   request to terminate the instance was submitted. This option is only
--   available with Amazon EMR 5.1.0 and later and is the default for
--   clusters created using that version.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> indicates that Amazon EMR
--   blacklists and drains tasks from nodes before terminating the Amazon
--   EC2 instances, regardless of the instance-hour boundary. With either
--   behavior, Amazon EMR removes the least active nodes first and blocks
--   instance termination if it could lead to HDFS corruption.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> is available only in Amazon EMR
--   version 4.1.0 and later, and is the default for versions of Amazon EMR
--   earlier than 5.1.0.
cluScaleDownBehavior :: Lens' Cluster (Maybe ScaleDownBehavior)

-- | The instance group configuration of the cluster. A value of
--   <tt>INSTANCE_GROUP</tt> indicates a uniform instance group
--   configuration. A value of <tt>INSTANCE_FLEET</tt> indicates an
--   instance fleets configuration.
cluInstanceCollectionType :: Lens' Cluster (Maybe InstanceCollectionType)

-- | The release label for the Amazon EMR release.
cluReleaseLabel :: Lens' Cluster (Maybe Text)

-- | Applies only when <tt>CustomAmiID</tt> is used. Specifies the type of
--   updates that are applied from the Amazon Linux AMI package
--   repositories when an instance boots using the AMI.
cluRepoUpgradeOnBoot :: Lens' Cluster (Maybe RepoUpgradeOnBoot)

-- | The path to the Amazon S3 location where logs for this cluster are
--   stored.
cluLogURI :: Lens' Cluster (Maybe Text)

-- | Attributes for Kerberos configuration when Kerberos authentication is
--   enabled using a security configuration. For more information see
--   <a>Use Kerberos Authentication</a> in the <i>EMR Management Guide</i>
--   .
cluKerberosAttributes :: Lens' Cluster (Maybe KerberosAttributes)

-- | The AMI version running on this cluster.
cluRunningAMIVersion :: Lens' Cluster (Maybe Text)

-- | The DNS name of the master node. If the cluster is on a private
--   subnet, this is the private DNS name. On a public subnet, this is the
--   public DNS name.
cluMasterPublicDNSName :: Lens' Cluster (Maybe Text)

-- | Indicates whether Amazon EMR will lock the cluster to prevent the EC2
--   instances from being terminated by an API call or user intervention,
--   or in the event of a cluster error.
cluTerminationProtected :: Lens' Cluster (Maybe Bool)

-- | Indicates whether the cluster is visible to all IAM users of the AWS
--   account associated with the cluster. If this value is set to
--   <tt>true</tt> , all IAM users of that AWS account can view and manage
--   the cluster if they have the proper policy permissions set. If this
--   value is <tt>false</tt> , only the IAM user that created the cluster
--   can view and manage it. This value can be changed using the
--   <tt>SetVisibleToAllUsers</tt> action.
cluVisibleToAllUsers :: Lens' Cluster (Maybe Bool)

-- | Specifies whether the cluster should terminate after completing all
--   steps.
cluAutoTerminate :: Lens' Cluster (Maybe Bool)

-- | The applications installed on this cluster.
cluApplications :: Lens' Cluster [Application]

-- | A list of tags associated with a cluster.
cluTags :: Lens' Cluster [Tag]

-- | The IAM role that will be assumed by the Amazon EMR service to access
--   AWS resources on your behalf.
cluServiceRole :: Lens' Cluster (Maybe Text)

-- | The unique identifier for the cluster.
cluId :: Lens' Cluster Text

-- | The name of the cluster.
cluName :: Lens' Cluster Text

-- | The current status details about the cluster.
cluStatus :: Lens' Cluster ClusterStatus

-- | The reason that the cluster changed to its current state.
--   
--   <i>See:</i> <a>clusterStateChangeReason</a> smart constructor.
data ClusterStateChangeReason

-- | Creates a value of <a>ClusterStateChangeReason</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cscrCode</a> - The programmatic code for the state change
--   reason.</li>
--   <li><a>cscrMessage</a> - The descriptive message for the state change
--   reason.</li>
--   </ul>
clusterStateChangeReason :: ClusterStateChangeReason

-- | The programmatic code for the state change reason.
cscrCode :: Lens' ClusterStateChangeReason (Maybe ClusterStateChangeReasonCode)

-- | The descriptive message for the state change reason.
cscrMessage :: Lens' ClusterStateChangeReason (Maybe Text)

-- | The detailed status of the cluster.
--   
--   <i>See:</i> <a>clusterStatus</a> smart constructor.
data ClusterStatus

-- | Creates a value of <a>ClusterStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csState</a> - The current state of the cluster.</li>
--   <li><a>csStateChangeReason</a> - The reason for the cluster status
--   change.</li>
--   <li><a>csTimeline</a> - A timeline that represents the status of a
--   cluster over the lifetime of the cluster.</li>
--   </ul>
clusterStatus :: ClusterStatus

-- | The current state of the cluster.
csState :: Lens' ClusterStatus (Maybe ClusterState)

-- | The reason for the cluster status change.
csStateChangeReason :: Lens' ClusterStatus (Maybe ClusterStateChangeReason)

-- | A timeline that represents the status of a cluster over the lifetime
--   of the cluster.
csTimeline :: Lens' ClusterStatus (Maybe ClusterTimeline)

-- | The summary description of the cluster.
--   
--   <i>See:</i> <a>clusterSummary</a> smart constructor.
data ClusterSummary

-- | Creates a value of <a>ClusterSummary</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csStatus</a> - The details about the current status of the
--   cluster.</li>
--   <li><a>csNormalizedInstanceHours</a> - An approximation of the cost of
--   the cluster, represented in m1.small/hours. This value is incremented
--   one time for every hour an m1.small instance runs. Larger instances
--   are weighted more, so an EC2 instance that is roughly four times more
--   expensive would result in the normalized instance hours being
--   incremented by four. This result is only an approximation and does not
--   reflect the actual billing rate.</li>
--   <li><a>csName</a> - The name of the cluster.</li>
--   <li><a>csId</a> - The unique identifier for the cluster.</li>
--   </ul>
clusterSummary :: ClusterSummary

-- | The details about the current status of the cluster.
csStatus :: Lens' ClusterSummary (Maybe ClusterStatus)

-- | An approximation of the cost of the cluster, represented in
--   m1.small/hours. This value is incremented one time for every hour an
--   m1.small instance runs. Larger instances are weighted more, so an EC2
--   instance that is roughly four times more expensive would result in the
--   normalized instance hours being incremented by four. This result is
--   only an approximation and does not reflect the actual billing rate.
csNormalizedInstanceHours :: Lens' ClusterSummary (Maybe Int)

-- | The name of the cluster.
csName :: Lens' ClusterSummary (Maybe Text)

-- | The unique identifier for the cluster.
csId :: Lens' ClusterSummary (Maybe Text)

-- | Represents the timeline of the cluster's lifecycle.
--   
--   <i>See:</i> <a>clusterTimeline</a> smart constructor.
data ClusterTimeline

-- | Creates a value of <a>ClusterTimeline</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ctReadyDateTime</a> - The date and time when the cluster was
--   ready to execute steps.</li>
--   <li><a>ctCreationDateTime</a> - The creation date and time of the
--   cluster.</li>
--   <li><a>ctEndDateTime</a> - The date and time when the cluster was
--   terminated.</li>
--   </ul>
clusterTimeline :: ClusterTimeline

-- | The date and time when the cluster was ready to execute steps.
ctReadyDateTime :: Lens' ClusterTimeline (Maybe UTCTime)

-- | The creation date and time of the cluster.
ctCreationDateTime :: Lens' ClusterTimeline (Maybe UTCTime)

-- | The date and time when the cluster was terminated.
ctEndDateTime :: Lens' ClusterTimeline (Maybe UTCTime)

-- | An entity describing an executable that runs on a cluster.
--   
--   <i>See:</i> <a>command</a> smart constructor.
data Command

-- | Creates a value of <a>Command</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cArgs</a> - Arguments for Amazon EMR to pass to the command for
--   execution.</li>
--   <li><a>cScriptPath</a> - The Amazon S3 location of the command
--   script.</li>
--   <li><a>cName</a> - The name of the command.</li>
--   </ul>
command :: Command

-- | Arguments for Amazon EMR to pass to the command for execution.
cArgs :: Lens' Command [Text]

-- | The Amazon S3 location of the command script.
cScriptPath :: Lens' Command (Maybe Text)

-- | The name of the command.
cName :: Lens' Command (Maybe Text)

-- | An optional configuration specification to be used when provisioning
--   cluster instances, which can include configurations for applications
--   and software bundled with Amazon EMR. A configuration consists of a
--   classification, properties, and optional nested configurations. A
--   classification refers to an application-specific configuration file.
--   Properties are the settings you want to change in that file. For more
--   information, see <a>Configuring Applications</a> .
--   
--   <i>See:</i> <a>configuration</a> smart constructor.
data Configuration

-- | Creates a value of <a>Configuration</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cConfigurations</a> - A list of additional configurations to
--   apply within a configuration object.</li>
--   <li><a>cClassification</a> - The classification within a
--   configuration.</li>
--   <li><a>cProperties</a> - A set of properties specified within a
--   configuration classification.</li>
--   </ul>
configuration :: Configuration

-- | A list of additional configurations to apply within a configuration
--   object.
cConfigurations :: Lens' Configuration [Configuration]

-- | The classification within a configuration.
cClassification :: Lens' Configuration (Maybe Text)

-- | A set of properties specified within a configuration classification.
cProperties :: Lens' Configuration (HashMap Text Text)

-- | Configuration of requested EBS block device associated with the
--   instance group.
--   
--   <i>See:</i> <a>ebsBlockDevice</a> smart constructor.
data EBSBlockDevice

-- | Creates a value of <a>EBSBlockDevice</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ebdDevice</a> - The device name that is exposed to the
--   instance, such as <i>dev</i>sdh.</li>
--   <li><a>ebdVolumeSpecification</a> - EBS volume specifications such as
--   volume type, IOPS, and size (GiB) that will be requested for the EBS
--   volume attached to an EC2 instance in the cluster.</li>
--   </ul>
ebsBlockDevice :: EBSBlockDevice

-- | The device name that is exposed to the instance, such as
--   <i>dev</i>sdh.
ebdDevice :: Lens' EBSBlockDevice (Maybe Text)

-- | EBS volume specifications such as volume type, IOPS, and size (GiB)
--   that will be requested for the EBS volume attached to an EC2 instance
--   in the cluster.
ebdVolumeSpecification :: Lens' EBSBlockDevice (Maybe VolumeSpecification)

-- | Configuration of requested EBS block device associated with the
--   instance group with count of volumes that will be associated to every
--   instance.
--   
--   <i>See:</i> <a>ebsBlockDeviceConfig</a> smart constructor.
data EBSBlockDeviceConfig

-- | Creates a value of <a>EBSBlockDeviceConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ebdcVolumesPerInstance</a> - Number of EBS volumes with a
--   specific volume configuration that will be associated with every
--   instance in the instance group</li>
--   <li><a>ebdcVolumeSpecification</a> - EBS volume specifications such as
--   volume type, IOPS, and size (GiB) that will be requested for the EBS
--   volume attached to an EC2 instance in the cluster.</li>
--   </ul>
ebsBlockDeviceConfig :: VolumeSpecification -> EBSBlockDeviceConfig

-- | Number of EBS volumes with a specific volume configuration that will
--   be associated with every instance in the instance group
ebdcVolumesPerInstance :: Lens' EBSBlockDeviceConfig (Maybe Int)

-- | EBS volume specifications such as volume type, IOPS, and size (GiB)
--   that will be requested for the EBS volume attached to an EC2 instance
--   in the cluster.
ebdcVolumeSpecification :: Lens' EBSBlockDeviceConfig VolumeSpecification

-- | The Amazon EBS configuration of a cluster instance.
--   
--   <i>See:</i> <a>ebsConfiguration</a> smart constructor.
data EBSConfiguration

-- | Creates a value of <a>EBSConfiguration</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ecEBSOptimized</a> - Indicates whether an Amazon EBS volume is
--   EBS-optimized.</li>
--   <li><a>ecEBSBlockDeviceConfigs</a> - An array of Amazon EBS volume
--   specifications attached to a cluster instance.</li>
--   </ul>
ebsConfiguration :: EBSConfiguration

-- | Indicates whether an Amazon EBS volume is EBS-optimized.
ecEBSOptimized :: Lens' EBSConfiguration (Maybe Bool)

-- | An array of Amazon EBS volume specifications attached to a cluster
--   instance.
ecEBSBlockDeviceConfigs :: Lens' EBSConfiguration [EBSBlockDeviceConfig]

-- | EBS block device that's attached to an EC2 instance.
--   
--   <i>See:</i> <a>ebsVolume</a> smart constructor.
data EBSVolume

-- | Creates a value of <a>EBSVolume</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>evDevice</a> - The device name that is exposed to the instance,
--   such as <i>dev</i>sdh.</li>
--   <li><a>evVolumeId</a> - The volume identifier of the EBS volume.</li>
--   </ul>
ebsVolume :: EBSVolume

-- | The device name that is exposed to the instance, such as
--   <i>dev</i>sdh.
evDevice :: Lens' EBSVolume (Maybe Text)

-- | The volume identifier of the EBS volume.
evVolumeId :: Lens' EBSVolume (Maybe Text)

-- | Provides information about the EC2 instances in a cluster grouped by
--   category. For example, key name, subnet ID, IAM instance profile, and
--   so on.
--   
--   <i>See:</i> <a>ec2InstanceAttributes</a> smart constructor.
data EC2InstanceAttributes

-- | Creates a value of <a>EC2InstanceAttributes</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>eiaEC2KeyName</a> - The name of the Amazon EC2 key pair to use
--   when connecting with SSH into the master node as a user named
--   "hadoop".</li>
--   <li><a>eiaEmrManagedSlaveSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the slave nodes.</li>
--   <li><a>eiaAdditionalSlaveSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the slave nodes.</li>
--   <li><a>eiaRequestedEC2SubnetIds</a> - Applies to clusters configured
--   with the instance fleets option. Specifies the unique identifier of
--   one or more Amazon EC2 subnets in which to launch EC2 cluster
--   instances. Subnets must exist within the same VPC. Amazon EMR chooses
--   the EC2 subnet with the best fit from among the list of
--   <tt>RequestedEc2SubnetIds</tt> , and then launches all cluster
--   instances within that Subnet. If this value is not specified, and the
--   account and region support EC2-Classic networks, the cluster launches
--   instances in the EC2-Classic network and uses
--   <tt>RequestedEc2AvailabilityZones</tt> instead of this setting. If
--   EC2-Classic is not supported, and no Subnet is specified, Amazon EMR
--   chooses the subnet for you. <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified
--   together.</li>
--   <li><a>eiaAdditionalMasterSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the master node.</li>
--   <li><a>eiaIAMInstanceProfile</a> - The IAM role that was specified
--   when the cluster was launched. The EC2 instances of the cluster assume
--   this role.</li>
--   <li><a>eiaEmrManagedMasterSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the master node.</li>
--   <li><a>eiaEC2SubnetId</a> - To launch the cluster in Amazon VPC, set
--   this parameter to the identifier of the Amazon VPC subnet where you
--   want the cluster to launch. If you do not specify this value, the
--   cluster is launched in the normal AWS cloud, outside of a VPC. Amazon
--   VPC currently does not support cluster compute quadruple extra large
--   (cc1.4xlarge) instances. Thus, you cannot specify the cc1.4xlarge
--   instance type for nodes of a cluster launched in a VPC.</li>
--   <li><a>eiaRequestedEC2AvailabilityZones</a> - Applies to clusters
--   configured with the instance fleets option. Specifies one or more
--   Availability Zones in which to launch EC2 cluster instances when the
--   EC2-Classic network configuration is supported. Amazon EMR chooses the
--   Availability Zone with the best fit from among the list of
--   <tt>RequestedEc2AvailabilityZones</tt> , and then launches all cluster
--   instances within that Availability Zone. If you do not specify this
--   value, Amazon EMR chooses the Availability Zone for you.
--   <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified
--   together.</li>
--   <li><a>eiaServiceAccessSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the Amazon EMR service to access
--   clusters in VPC private subnets.</li>
--   <li><a>eiaEC2AvailabilityZone</a> - The Availability Zone in which the
--   cluster will run.</li>
--   </ul>
ec2InstanceAttributes :: EC2InstanceAttributes

-- | The name of the Amazon EC2 key pair to use when connecting with SSH
--   into the master node as a user named "hadoop".
eiaEC2KeyName :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The identifier of the Amazon EC2 security group for the slave nodes.
eiaEmrManagedSlaveSecurityGroup :: Lens' EC2InstanceAttributes (Maybe Text)

-- | A list of additional Amazon EC2 security group IDs for the slave
--   nodes.
eiaAdditionalSlaveSecurityGroups :: Lens' EC2InstanceAttributes [Text]

-- | Applies to clusters configured with the instance fleets option.
--   Specifies the unique identifier of one or more Amazon EC2 subnets in
--   which to launch EC2 cluster instances. Subnets must exist within the
--   same VPC. Amazon EMR chooses the EC2 subnet with the best fit from
--   among the list of <tt>RequestedEc2SubnetIds</tt> , and then launches
--   all cluster instances within that Subnet. If this value is not
--   specified, and the account and region support EC2-Classic networks,
--   the cluster launches instances in the EC2-Classic network and uses
--   <tt>RequestedEc2AvailabilityZones</tt> instead of this setting. If
--   EC2-Classic is not supported, and no Subnet is specified, Amazon EMR
--   chooses the subnet for you. <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified together.
eiaRequestedEC2SubnetIds :: Lens' EC2InstanceAttributes [Text]

-- | A list of additional Amazon EC2 security group IDs for the master
--   node.
eiaAdditionalMasterSecurityGroups :: Lens' EC2InstanceAttributes [Text]

-- | The IAM role that was specified when the cluster was launched. The EC2
--   instances of the cluster assume this role.
eiaIAMInstanceProfile :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The identifier of the Amazon EC2 security group for the master node.
eiaEmrManagedMasterSecurityGroup :: Lens' EC2InstanceAttributes (Maybe Text)

-- | To launch the cluster in Amazon VPC, set this parameter to the
--   identifier of the Amazon VPC subnet where you want the cluster to
--   launch. If you do not specify this value, the cluster is launched in
--   the normal AWS cloud, outside of a VPC. Amazon VPC currently does not
--   support cluster compute quadruple extra large (cc1.4xlarge) instances.
--   Thus, you cannot specify the cc1.4xlarge instance type for nodes of a
--   cluster launched in a VPC.
eiaEC2SubnetId :: Lens' EC2InstanceAttributes (Maybe Text)

-- | Applies to clusters configured with the instance fleets option.
--   Specifies one or more Availability Zones in which to launch EC2
--   cluster instances when the EC2-Classic network configuration is
--   supported. Amazon EMR chooses the Availability Zone with the best fit
--   from among the list of <tt>RequestedEc2AvailabilityZones</tt> , and
--   then launches all cluster instances within that Availability Zone. If
--   you do not specify this value, Amazon EMR chooses the Availability
--   Zone for you. <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified together.
eiaRequestedEC2AvailabilityZones :: Lens' EC2InstanceAttributes [Text]

-- | The identifier of the Amazon EC2 security group for the Amazon EMR
--   service to access clusters in VPC private subnets.
eiaServiceAccessSecurityGroup :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The Availability Zone in which the cluster will run.
eiaEC2AvailabilityZone :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The details of the step failure. The service attempts to detect the
--   root cause for many common failures.
--   
--   <i>See:</i> <a>failureDetails</a> smart constructor.
data FailureDetails

-- | Creates a value of <a>FailureDetails</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>fdLogFile</a> - The path to the log file where the step failure
--   root cause was originally recorded.</li>
--   <li><a>fdReason</a> - The reason for the step failure. In the case
--   where the service cannot successfully determine the root cause of the
--   failure, it returns "Unknown Error" as a reason.</li>
--   <li><a>fdMessage</a> - The descriptive message including the error the
--   EMR service has identified as the cause of step failure. This is text
--   from an error log that describes the root cause of the failure.</li>
--   </ul>
failureDetails :: FailureDetails

-- | The path to the log file where the step failure root cause was
--   originally recorded.
fdLogFile :: Lens' FailureDetails (Maybe Text)

-- | The reason for the step failure. In the case where the service cannot
--   successfully determine the root cause of the failure, it returns
--   "Unknown Error" as a reason.
fdReason :: Lens' FailureDetails (Maybe Text)

-- | The descriptive message including the error the EMR service has
--   identified as the cause of step failure. This is text from an error
--   log that describes the root cause of the failure.
fdMessage :: Lens' FailureDetails (Maybe Text)

-- | A job flow step consisting of a JAR file whose main function will be
--   executed. The main function submits a job for Hadoop to execute and
--   waits for the job to finish or fail.
--   
--   <i>See:</i> <a>hadoopJARStepConfig</a> smart constructor.
data HadoopJARStepConfig

-- | Creates a value of <a>HadoopJARStepConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>hjscArgs</a> - A list of command line arguments passed to the
--   JAR file's main function when executed.</li>
--   <li><a>hjscMainClass</a> - The name of the main class in the specified
--   Java file. If not specified, the JAR file should specify a Main-Class
--   in its manifest file.</li>
--   <li><a>hjscProperties</a> - A list of Java properties that are set
--   when the step runs. You can use these properties to pass key value
--   pairs to your main function.</li>
--   <li><a>hjscJAR</a> - A path to a JAR file run during the step.</li>
--   </ul>
hadoopJARStepConfig :: Text -> HadoopJARStepConfig

-- | A list of command line arguments passed to the JAR file's main
--   function when executed.
hjscArgs :: Lens' HadoopJARStepConfig [Text]

-- | The name of the main class in the specified Java file. If not
--   specified, the JAR file should specify a Main-Class in its manifest
--   file.
hjscMainClass :: Lens' HadoopJARStepConfig (Maybe Text)

-- | A list of Java properties that are set when the step runs. You can use
--   these properties to pass key value pairs to your main function.
hjscProperties :: Lens' HadoopJARStepConfig [KeyValue]

-- | A path to a JAR file run during the step.
hjscJAR :: Lens' HadoopJARStepConfig Text

-- | A cluster step consisting of a JAR file whose main function will be
--   executed. The main function submits a job for Hadoop to execute and
--   waits for the job to finish or fail.
--   
--   <i>See:</i> <a>hadoopStepConfig</a> smart constructor.
data HadoopStepConfig

-- | Creates a value of <a>HadoopStepConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>hscArgs</a> - The list of command line arguments to pass to the
--   JAR file's main function for execution.</li>
--   <li><a>hscJAR</a> - The path to the JAR file that runs during the
--   step.</li>
--   <li><a>hscMainClass</a> - The name of the main class in the specified
--   Java file. If not specified, the JAR file should specify a main class
--   in its manifest file.</li>
--   <li><a>hscProperties</a> - The list of Java properties that are set
--   when the step runs. You can use these properties to pass key value
--   pairs to your main function.</li>
--   </ul>
hadoopStepConfig :: HadoopStepConfig

-- | The list of command line arguments to pass to the JAR file's main
--   function for execution.
hscArgs :: Lens' HadoopStepConfig [Text]

-- | The path to the JAR file that runs during the step.
hscJAR :: Lens' HadoopStepConfig (Maybe Text)

-- | The name of the main class in the specified Java file. If not
--   specified, the JAR file should specify a main class in its manifest
--   file.
hscMainClass :: Lens' HadoopStepConfig (Maybe Text)

-- | The list of Java properties that are set when the step runs. You can
--   use these properties to pass key value pairs to your main function.
hscProperties :: Lens' HadoopStepConfig (HashMap Text Text)

-- | Represents an EC2 instance provisioned as part of cluster.
--   
--   <i>See:</i> <a>instance'</a> smart constructor.
data Instance

-- | Creates a value of <a>Instance</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>iStatus</a> - The current status of the instance.</li>
--   <li><a>iPublicDNSName</a> - The public DNS name of the instance.</li>
--   <li><a>iEBSVolumes</a> - The list of EBS volumes that are attached to
--   this instance.</li>
--   <li><a>iEC2InstanceId</a> - The unique identifier of the instance in
--   Amazon EC2.</li>
--   <li><a>iInstanceType</a> - The EC2 instance type, for example
--   <tt>m3.xlarge</tt> .</li>
--   <li><a>iMarket</a> - The instance purchasing option. Valid values are
--   <tt>ON_DEMAND</tt> or <tt>SPOT</tt> .</li>
--   <li><a>iPrivateIPAddress</a> - The private IP address of the
--   instance.</li>
--   <li><a>iInstanceFleetId</a> - The unique identifier of the instance
--   fleet to which an EC2 instance belongs.</li>
--   <li><a>iId</a> - The unique identifier for the instance in Amazon
--   EMR.</li>
--   <li><a>iInstanceGroupId</a> - The identifier of the instance group to
--   which this instance belongs.</li>
--   <li><a>iPrivateDNSName</a> - The private DNS name of the
--   instance.</li>
--   <li><a>iPublicIPAddress</a> - The public IP address of the
--   instance.</li>
--   </ul>
instance' :: Instance

-- | The current status of the instance.
iStatus :: Lens' Instance (Maybe InstanceStatus)

-- | The public DNS name of the instance.
iPublicDNSName :: Lens' Instance (Maybe Text)

-- | The list of EBS volumes that are attached to this instance.
iEBSVolumes :: Lens' Instance [EBSVolume]

-- | The unique identifier of the instance in Amazon EC2.
iEC2InstanceId :: Lens' Instance (Maybe Text)

-- | The EC2 instance type, for example <tt>m3.xlarge</tt> .
iInstanceType :: Lens' Instance (Maybe Text)

-- | The instance purchasing option. Valid values are <tt>ON_DEMAND</tt> or
--   <tt>SPOT</tt> .
iMarket :: Lens' Instance (Maybe MarketType)

-- | The private IP address of the instance.
iPrivateIPAddress :: Lens' Instance (Maybe Text)

-- | The unique identifier of the instance fleet to which an EC2 instance
--   belongs.
iInstanceFleetId :: Lens' Instance (Maybe Text)

-- | The unique identifier for the instance in Amazon EMR.
iId :: Lens' Instance (Maybe Text)

-- | The identifier of the instance group to which this instance belongs.
iInstanceGroupId :: Lens' Instance (Maybe Text)

-- | The private DNS name of the instance.
iPrivateDNSName :: Lens' Instance (Maybe Text)

-- | The public IP address of the instance.
iPublicIPAddress :: Lens' Instance (Maybe Text)

-- | Describes an instance fleet, which is a group of EC2 instances that
--   host a particular node type (master, core, or task) in an Amazon EMR
--   cluster. Instance fleets can consist of a mix of instance types and
--   On-Demand and Spot instances, which are provisioned to meet a defined
--   target capacity.
--   
--   <i>See:</i> <a>instanceFleet</a> smart constructor.
data InstanceFleet

-- | Creates a value of <a>InstanceFleet</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifProvisionedSpotCapacity</a> - The number of Spot units that
--   have been provisioned for this instance fleet to fulfill
--   <tt>TargetSpotCapacity</tt> . This provisioned capacity might be less
--   than or greater than <tt>TargetSpotCapacity</tt> .</li>
--   <li><a>ifStatus</a> - The current status of the instance fleet.</li>
--   <li><a>ifTargetOnDemandCapacity</a> - The target capacity of On-Demand
--   units for the instance fleet, which determines how many On-Demand
--   instances to provision. When the instance fleet launches, Amazon EMR
--   tries to provision On-Demand instances as specified by
--   <a>InstanceTypeConfig</a> . Each instance configuration has a
--   specified <tt>WeightedCapacity</tt> . When an On-Demand instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedOnDemandCapacity' to determine the Spot
--   capacity units that have been provisioned for the instance fleet.</li>
--   <li><a>ifInstanceFleetType</a> - The node type that the instance fleet
--   hosts. Valid values are MASTER, CORE, or TASK.</li>
--   <li><a>ifInstanceTypeSpecifications</a> - The specification for the
--   instance types that comprise an instance fleet. Up to five unique
--   instance specifications may be defined for each instance fleet.</li>
--   <li><a>ifName</a> - A friendly name for the instance fleet.</li>
--   <li><a>ifProvisionedOnDemandCapacity</a> - The number of On-Demand
--   units that have been provisioned for the instance fleet to fulfill
--   <tt>TargetOnDemandCapacity</tt> . This provisioned capacity might be
--   less than or greater than <tt>TargetOnDemandCapacity</tt> .</li>
--   <li><a>ifTargetSpotCapacity</a> - The target capacity of Spot units
--   for the instance fleet, which determines how many Spot instances to
--   provision. When the instance fleet launches, Amazon EMR tries to
--   provision Spot instances as specified by <a>InstanceTypeConfig</a> .
--   Each instance configuration has a specified <tt>WeightedCapacity</tt>
--   . When a Spot instance is provisioned, the <tt>WeightedCapacity</tt>
--   units count toward the target capacity. Amazon EMR provisions
--   instances until the target capacity is totally fulfilled, even if this
--   results in an overage. For example, if there are 2 units remaining to
--   fulfill capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedSpotCapacity' to determine the Spot capacity
--   units that have been provisioned for the instance fleet.</li>
--   <li><a>ifId</a> - The unique identifier of the instance fleet.</li>
--   <li><a>ifLaunchSpecifications</a> - Describes the launch specification
--   for an instance fleet.</li>
--   </ul>
instanceFleet :: InstanceFleet

-- | The number of Spot units that have been provisioned for this instance
--   fleet to fulfill <tt>TargetSpotCapacity</tt> . This provisioned
--   capacity might be less than or greater than
--   <tt>TargetSpotCapacity</tt> .
ifProvisionedSpotCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The current status of the instance fleet.
ifStatus :: Lens' InstanceFleet (Maybe InstanceFleetStatus)

-- | The target capacity of On-Demand units for the instance fleet, which
--   determines how many On-Demand instances to provision. When the
--   instance fleet launches, Amazon EMR tries to provision On-Demand
--   instances as specified by <a>InstanceTypeConfig</a> . Each instance
--   configuration has a specified <tt>WeightedCapacity</tt> . When an
--   On-Demand instance is provisioned, the <tt>WeightedCapacity</tt> units
--   count toward the target capacity. Amazon EMR provisions instances
--   until the target capacity is totally fulfilled, even if this results
--   in an overage. For example, if there are 2 units remaining to fulfill
--   capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedOnDemandCapacity' to determine the Spot
--   capacity units that have been provisioned for the instance fleet.
ifTargetOnDemandCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The node type that the instance fleet hosts. Valid values are MASTER,
--   CORE, or TASK.
ifInstanceFleetType :: Lens' InstanceFleet (Maybe InstanceFleetType)

-- | The specification for the instance types that comprise an instance
--   fleet. Up to five unique instance specifications may be defined for
--   each instance fleet.
ifInstanceTypeSpecifications :: Lens' InstanceFleet [InstanceTypeSpecification]

-- | A friendly name for the instance fleet.
ifName :: Lens' InstanceFleet (Maybe Text)

-- | The number of On-Demand units that have been provisioned for the
--   instance fleet to fulfill <tt>TargetOnDemandCapacity</tt> . This
--   provisioned capacity might be less than or greater than
--   <tt>TargetOnDemandCapacity</tt> .
ifProvisionedOnDemandCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The target capacity of Spot units for the instance fleet, which
--   determines how many Spot instances to provision. When the instance
--   fleet launches, Amazon EMR tries to provision Spot instances as
--   specified by <a>InstanceTypeConfig</a> . Each instance configuration
--   has a specified <tt>WeightedCapacity</tt> . When a Spot instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedSpotCapacity' to determine the Spot capacity
--   units that have been provisioned for the instance fleet.
ifTargetSpotCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The unique identifier of the instance fleet.
ifId :: Lens' InstanceFleet (Maybe Text)

-- | Describes the launch specification for an instance fleet.
ifLaunchSpecifications :: Lens' InstanceFleet (Maybe InstanceFleetProvisioningSpecifications)

-- | The configuration that defines an instance fleet.
--   
--   <i>See:</i> <a>instanceFleetConfig</a> smart constructor.
data InstanceFleetConfig

-- | Creates a value of <a>InstanceFleetConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifcInstanceTypeConfigs</a> - The instance type configurations
--   that define the EC2 instances in the instance fleet.</li>
--   <li><a>ifcTargetOnDemandCapacity</a> - The target capacity of
--   On-Demand units for the instance fleet, which determines how many
--   On-Demand instances to provision. When the instance fleet launches,
--   Amazon EMR tries to provision On-Demand instances as specified by
--   <a>InstanceTypeConfig</a> . Each instance configuration has a
--   specified <tt>WeightedCapacity</tt> . When an On-Demand instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.</li>
--   <li><a>ifcName</a> - The friendly name of the instance fleet.</li>
--   <li><a>ifcTargetSpotCapacity</a> - The target capacity of Spot units
--   for the instance fleet, which determines how many Spot instances to
--   provision. When the instance fleet launches, Amazon EMR tries to
--   provision Spot instances as specified by <a>InstanceTypeConfig</a> .
--   Each instance configuration has a specified <tt>WeightedCapacity</tt>
--   . When a Spot instance is provisioned, the <tt>WeightedCapacity</tt>
--   units count toward the target capacity. Amazon EMR provisions
--   instances until the target capacity is totally fulfilled, even if this
--   results in an overage. For example, if there are 2 units remaining to
--   fulfill capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.</li>
--   <li><a>ifcLaunchSpecifications</a> - The launch specification for the
--   instance fleet.</li>
--   <li><a>ifcInstanceFleetType</a> - The node type that the instance
--   fleet hosts. Valid values are MASTER,CORE,and TASK.</li>
--   </ul>
instanceFleetConfig :: InstanceFleetType -> InstanceFleetConfig

-- | The instance type configurations that define the EC2 instances in the
--   instance fleet.
ifcInstanceTypeConfigs :: Lens' InstanceFleetConfig [InstanceTypeConfig]

-- | The target capacity of On-Demand units for the instance fleet, which
--   determines how many On-Demand instances to provision. When the
--   instance fleet launches, Amazon EMR tries to provision On-Demand
--   instances as specified by <a>InstanceTypeConfig</a> . Each instance
--   configuration has a specified <tt>WeightedCapacity</tt> . When an
--   On-Demand instance is provisioned, the <tt>WeightedCapacity</tt> units
--   count toward the target capacity. Amazon EMR provisions instances
--   until the target capacity is totally fulfilled, even if this results
--   in an overage. For example, if there are 2 units remaining to fulfill
--   capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.
ifcTargetOnDemandCapacity :: Lens' InstanceFleetConfig (Maybe Natural)

-- | The friendly name of the instance fleet.
ifcName :: Lens' InstanceFleetConfig (Maybe Text)

-- | The target capacity of Spot units for the instance fleet, which
--   determines how many Spot instances to provision. When the instance
--   fleet launches, Amazon EMR tries to provision Spot instances as
--   specified by <a>InstanceTypeConfig</a> . Each instance configuration
--   has a specified <tt>WeightedCapacity</tt> . When a Spot instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.
ifcTargetSpotCapacity :: Lens' InstanceFleetConfig (Maybe Natural)

-- | The launch specification for the instance fleet.
ifcLaunchSpecifications :: Lens' InstanceFleetConfig (Maybe InstanceFleetProvisioningSpecifications)

-- | The node type that the instance fleet hosts. Valid values are
--   MASTER,CORE,and TASK.
ifcInstanceFleetType :: Lens' InstanceFleetConfig InstanceFleetType

-- | Configuration parameters for an instance fleet modification request.
--   
--   <i>See:</i> <a>instanceFleetModifyConfig</a> smart constructor.
data InstanceFleetModifyConfig

-- | Creates a value of <a>InstanceFleetModifyConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifmcTargetOnDemandCapacity</a> - The target capacity of
--   On-Demand units for the instance fleet. For more information see
--   'InstanceFleetConfig$TargetOnDemandCapacity' .</li>
--   <li><a>ifmcTargetSpotCapacity</a> - The target capacity of Spot units
--   for the instance fleet. For more information, see
--   'InstanceFleetConfig$TargetSpotCapacity' .</li>
--   <li><a>ifmcInstanceFleetId</a> - A unique identifier for the instance
--   fleet.</li>
--   </ul>
instanceFleetModifyConfig :: Text -> InstanceFleetModifyConfig

-- | The target capacity of On-Demand units for the instance fleet. For
--   more information see 'InstanceFleetConfig$TargetOnDemandCapacity' .
ifmcTargetOnDemandCapacity :: Lens' InstanceFleetModifyConfig (Maybe Natural)

-- | The target capacity of Spot units for the instance fleet. For more
--   information, see 'InstanceFleetConfig$TargetSpotCapacity' .
ifmcTargetSpotCapacity :: Lens' InstanceFleetModifyConfig (Maybe Natural)

-- | A unique identifier for the instance fleet.
ifmcInstanceFleetId :: Lens' InstanceFleetModifyConfig Text

-- | The launch specification for Spot instances in the fleet, which
--   determines the defined duration and provisioning timeout behavior.
--   
--   <i>See:</i> <a>instanceFleetProvisioningSpecifications</a> smart
--   constructor.
data InstanceFleetProvisioningSpecifications

-- | Creates a value of <a>InstanceFleetProvisioningSpecifications</a> with
--   the minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifpsSpotSpecification</a> - The launch specification for Spot
--   instances in the fleet, which determines the defined duration and
--   provisioning timeout behavior.</li>
--   </ul>
instanceFleetProvisioningSpecifications :: SpotProvisioningSpecification -> InstanceFleetProvisioningSpecifications

-- | The launch specification for Spot instances in the fleet, which
--   determines the defined duration and provisioning timeout behavior.
ifpsSpotSpecification :: Lens' InstanceFleetProvisioningSpecifications SpotProvisioningSpecification

-- | Provides status change reason details for the instance fleet.
--   
--   <i>See:</i> <a>instanceFleetStateChangeReason</a> smart constructor.
data InstanceFleetStateChangeReason

-- | Creates a value of <a>InstanceFleetStateChangeReason</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifscrCode</a> - A code corresponding to the reason the state
--   change occurred.</li>
--   <li><a>ifscrMessage</a> - An explanatory message.</li>
--   </ul>
instanceFleetStateChangeReason :: InstanceFleetStateChangeReason

-- | A code corresponding to the reason the state change occurred.
ifscrCode :: Lens' InstanceFleetStateChangeReason (Maybe InstanceFleetStateChangeReasonCode)

-- | An explanatory message.
ifscrMessage :: Lens' InstanceFleetStateChangeReason (Maybe Text)

-- | The status of the instance fleet.
--   
--   <i>See:</i> <a>instanceFleetStatus</a> smart constructor.
data InstanceFleetStatus

-- | Creates a value of <a>InstanceFleetStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifsState</a> - A code representing the instance fleet status. *
--   <tt>PROVISIONING</tt> —The instance fleet is provisioning EC2
--   resources and is not yet ready to run jobs. * <tt>BOOTSTRAPPING</tt>
--   —EC2 instances and other resources have been provisioned and the
--   bootstrap actions specified for the instances are underway. *
--   <tt>RUNNING</tt> —EC2 instances and other resources are running. They
--   are either executing jobs or waiting to execute jobs. *
--   <tt>RESIZING</tt> —A resize operation is underway. EC2 instances are
--   either being added or removed. * <tt>SUSPENDED</tt> —A resize
--   operation could not complete. Existing EC2 instances are running, but
--   instances can't be added or removed. * <tt>TERMINATING</tt> —The
--   instance fleet is terminating EC2 instances. * <tt>TERMINATED</tt>
--   —The instance fleet is no longer active, and all EC2 instances have
--   been terminated.</li>
--   <li><a>ifsStateChangeReason</a> - Provides status change reason
--   details for the instance fleet.</li>
--   <li><a>ifsTimeline</a> - Provides historical timestamps for the
--   instance fleet, including the time of creation, the time it became
--   ready to run jobs, and the time of termination.</li>
--   </ul>
instanceFleetStatus :: InstanceFleetStatus

-- | A code representing the instance fleet status. * <tt>PROVISIONING</tt>
--   —The instance fleet is provisioning EC2 resources and is not yet ready
--   to run jobs. * <tt>BOOTSTRAPPING</tt> —EC2 instances and other
--   resources have been provisioned and the bootstrap actions specified
--   for the instances are underway. * <tt>RUNNING</tt> —EC2 instances and
--   other resources are running. They are either executing jobs or waiting
--   to execute jobs. * <tt>RESIZING</tt> —A resize operation is underway.
--   EC2 instances are either being added or removed. * <tt>SUSPENDED</tt>
--   —A resize operation could not complete. Existing EC2 instances are
--   running, but instances can't be added or removed. *
--   <tt>TERMINATING</tt> —The instance fleet is terminating EC2 instances.
--   * <tt>TERMINATED</tt> —The instance fleet is no longer active, and all
--   EC2 instances have been terminated.
ifsState :: Lens' InstanceFleetStatus (Maybe InstanceFleetState)

-- | Provides status change reason details for the instance fleet.
ifsStateChangeReason :: Lens' InstanceFleetStatus (Maybe InstanceFleetStateChangeReason)

-- | Provides historical timestamps for the instance fleet, including the
--   time of creation, the time it became ready to run jobs, and the time
--   of termination.
ifsTimeline :: Lens' InstanceFleetStatus (Maybe InstanceFleetTimeline)

-- | Provides historical timestamps for the instance fleet, including the
--   time of creation, the time it became ready to run jobs, and the time
--   of termination.
--   
--   <i>See:</i> <a>instanceFleetTimeline</a> smart constructor.
data InstanceFleetTimeline

-- | Creates a value of <a>InstanceFleetTimeline</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>iftReadyDateTime</a> - The time and date the instance fleet was
--   ready to run jobs.</li>
--   <li><a>iftCreationDateTime</a> - The time and date the instance fleet
--   was created.</li>
--   <li><a>iftEndDateTime</a> - The time and date the instance fleet
--   terminated.</li>
--   </ul>
instanceFleetTimeline :: InstanceFleetTimeline

-- | The time and date the instance fleet was ready to run jobs.
iftReadyDateTime :: Lens' InstanceFleetTimeline (Maybe UTCTime)

-- | The time and date the instance fleet was created.
iftCreationDateTime :: Lens' InstanceFleetTimeline (Maybe UTCTime)

-- | The time and date the instance fleet terminated.
iftEndDateTime :: Lens' InstanceFleetTimeline (Maybe UTCTime)

-- | This entity represents an instance group, which is a group of
--   instances that have common purpose. For example, CORE instance group
--   is used for HDFS.
--   
--   <i>See:</i> <a>instanceGroup</a> smart constructor.
data InstanceGroup

-- | Creates a value of <a>InstanceGroup</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igStatus</a> - The current status of the instance group.</li>
--   <li><a>igBidPrice</a> - The bid price for each EC2 instance in the
--   instance group when launching nodes as Spot Instances, expressed in
--   USD.</li>
--   <li><a>igRequestedInstanceCount</a> - The target number of instances
--   for the instance group.</li>
--   <li><a>igRunningInstanceCount</a> - The number of instances currently
--   running in this instance group.</li>
--   <li><a>igConfigurations</a> - The list of configurations supplied for
--   an EMR cluster instance group. You can specify a separate
--   configuration for each instance group (master, core, and task).</li>
--   <li><a>igInstanceGroupType</a> - The type of the instance group. Valid
--   values are MASTER, CORE or TASK.</li>
--   <li><a>igEBSBlockDevices</a> - The EBS block devices that are mapped
--   to this instance group.</li>
--   <li><a>igInstanceType</a> - The EC2 instance type for all instances in
--   the instance group.</li>
--   <li><a>igEBSOptimized</a> - If the instance group is EBS-optimized. An
--   Amazon EBS-optimized instance uses an optimized configuration stack
--   and provides additional, dedicated capacity for Amazon EBS I/O.</li>
--   <li><a>igMarket</a> - The marketplace to provision instances for this
--   group. Valid values are ON_DEMAND or SPOT.</li>
--   <li><a>igName</a> - The name of the instance group.</li>
--   <li><a>igAutoScalingPolicy</a> - An automatic scaling policy for a
--   core instance group or task instance group in an Amazon EMR cluster.
--   The automatic scaling policy defines how an instance group dynamically
--   adds and terminates EC2 instances in response to the value of a
--   CloudWatch metric. See PutAutoScalingPolicy.</li>
--   <li><a>igShrinkPolicy</a> - Policy for customizing shrink
--   operations.</li>
--   <li><a>igId</a> - The identifier of the instance group.</li>
--   </ul>
instanceGroup :: InstanceGroup

-- | The current status of the instance group.
igStatus :: Lens' InstanceGroup (Maybe InstanceGroupStatus)

-- | The bid price for each EC2 instance in the instance group when
--   launching nodes as Spot Instances, expressed in USD.
igBidPrice :: Lens' InstanceGroup (Maybe Text)

-- | The target number of instances for the instance group.
igRequestedInstanceCount :: Lens' InstanceGroup (Maybe Int)

-- | The number of instances currently running in this instance group.
igRunningInstanceCount :: Lens' InstanceGroup (Maybe Int)

-- | The list of configurations supplied for an EMR cluster instance group.
--   You can specify a separate configuration for each instance group
--   (master, core, and task).
igConfigurations :: Lens' InstanceGroup [Configuration]

-- | The type of the instance group. Valid values are MASTER, CORE or TASK.
igInstanceGroupType :: Lens' InstanceGroup (Maybe InstanceGroupType)

-- | The EBS block devices that are mapped to this instance group.
igEBSBlockDevices :: Lens' InstanceGroup [EBSBlockDevice]

-- | The EC2 instance type for all instances in the instance group.
igInstanceType :: Lens' InstanceGroup (Maybe Text)

-- | If the instance group is EBS-optimized. An Amazon EBS-optimized
--   instance uses an optimized configuration stack and provides
--   additional, dedicated capacity for Amazon EBS I/O.
igEBSOptimized :: Lens' InstanceGroup (Maybe Bool)

-- | The marketplace to provision instances for this group. Valid values
--   are ON_DEMAND or SPOT.
igMarket :: Lens' InstanceGroup (Maybe MarketType)

-- | The name of the instance group.
igName :: Lens' InstanceGroup (Maybe Text)

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. The automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   PutAutoScalingPolicy.
igAutoScalingPolicy :: Lens' InstanceGroup (Maybe AutoScalingPolicyDescription)

-- | Policy for customizing shrink operations.
igShrinkPolicy :: Lens' InstanceGroup (Maybe ShrinkPolicy)

-- | The identifier of the instance group.
igId :: Lens' InstanceGroup (Maybe Text)

-- | Configuration defining a new instance group.
--   
--   <i>See:</i> <a>instanceGroupConfig</a> smart constructor.
data InstanceGroupConfig

-- | Creates a value of <a>InstanceGroupConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igcEBSConfiguration</a> - EBS configurations that will be
--   attached to each EC2 instance in the instance group.</li>
--   <li><a>igcBidPrice</a> - Bid price for each EC2 instance in the
--   instance group when launching nodes as Spot Instances, expressed in
--   USD.</li>
--   <li><a>igcConfigurations</a> - The list of configurations supplied for
--   an EMR cluster instance group. You can specify a separate
--   configuration for each instance group (master, core, and task).</li>
--   <li><a>igcMarket</a> - Market type of the EC2 instances used to create
--   a cluster node.</li>
--   <li><a>igcName</a> - Friendly name given to the instance group.</li>
--   <li><a>igcAutoScalingPolicy</a> - An automatic scaling policy for a
--   core instance group or task instance group in an Amazon EMR cluster.
--   The automatic scaling policy defines how an instance group dynamically
--   adds and terminates EC2 instances in response to the value of a
--   CloudWatch metric. See <tt>PutAutoScalingPolicy</tt> .</li>
--   <li><a>igcInstanceRole</a> - The role of the instance group in the
--   cluster.</li>
--   <li><a>igcInstanceType</a> - The EC2 instance type for all instances
--   in the instance group.</li>
--   <li><a>igcInstanceCount</a> - Target number of instances for the
--   instance group.</li>
--   </ul>
instanceGroupConfig :: InstanceRoleType -> Text -> Int -> InstanceGroupConfig

-- | EBS configurations that will be attached to each EC2 instance in the
--   instance group.
igcEBSConfiguration :: Lens' InstanceGroupConfig (Maybe EBSConfiguration)

-- | Bid price for each EC2 instance in the instance group when launching
--   nodes as Spot Instances, expressed in USD.
igcBidPrice :: Lens' InstanceGroupConfig (Maybe Text)

-- | The list of configurations supplied for an EMR cluster instance group.
--   You can specify a separate configuration for each instance group
--   (master, core, and task).
igcConfigurations :: Lens' InstanceGroupConfig [Configuration]

-- | Market type of the EC2 instances used to create a cluster node.
igcMarket :: Lens' InstanceGroupConfig (Maybe MarketType)

-- | Friendly name given to the instance group.
igcName :: Lens' InstanceGroupConfig (Maybe Text)

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. The automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   <tt>PutAutoScalingPolicy</tt> .
igcAutoScalingPolicy :: Lens' InstanceGroupConfig (Maybe AutoScalingPolicy)

-- | The role of the instance group in the cluster.
igcInstanceRole :: Lens' InstanceGroupConfig InstanceRoleType

-- | The EC2 instance type for all instances in the instance group.
igcInstanceType :: Lens' InstanceGroupConfig Text

-- | Target number of instances for the instance group.
igcInstanceCount :: Lens' InstanceGroupConfig Int

-- | Modify an instance group size.
--   
--   <i>See:</i> <a>instanceGroupModifyConfig</a> smart constructor.
data InstanceGroupModifyConfig

-- | Creates a value of <a>InstanceGroupModifyConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igmcInstanceCount</a> - Target size for the instance
--   group.</li>
--   <li><a>igmcEC2InstanceIdsToTerminate</a> - The EC2 InstanceIds to
--   terminate. After you terminate the instances, the instance group will
--   not return to its original requested size.</li>
--   <li><a>igmcShrinkPolicy</a> - Policy for customizing shrink
--   operations.</li>
--   <li><a>igmcInstanceGroupId</a> - Unique ID of the instance group to
--   expand or shrink.</li>
--   </ul>
instanceGroupModifyConfig :: Text -> InstanceGroupModifyConfig

-- | Target size for the instance group.
igmcInstanceCount :: Lens' InstanceGroupModifyConfig (Maybe Int)

-- | The EC2 InstanceIds to terminate. After you terminate the instances,
--   the instance group will not return to its original requested size.
igmcEC2InstanceIdsToTerminate :: Lens' InstanceGroupModifyConfig [Text]

-- | Policy for customizing shrink operations.
igmcShrinkPolicy :: Lens' InstanceGroupModifyConfig (Maybe ShrinkPolicy)

-- | Unique ID of the instance group to expand or shrink.
igmcInstanceGroupId :: Lens' InstanceGroupModifyConfig Text

-- | The status change reason details for the instance group.
--   
--   <i>See:</i> <a>instanceGroupStateChangeReason</a> smart constructor.
data InstanceGroupStateChangeReason

-- | Creates a value of <a>InstanceGroupStateChangeReason</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igscrCode</a> - The programmable code for the state change
--   reason.</li>
--   <li><a>igscrMessage</a> - The status change reason description.</li>
--   </ul>
instanceGroupStateChangeReason :: InstanceGroupStateChangeReason

-- | The programmable code for the state change reason.
igscrCode :: Lens' InstanceGroupStateChangeReason (Maybe InstanceGroupStateChangeReasonCode)

-- | The status change reason description.
igscrMessage :: Lens' InstanceGroupStateChangeReason (Maybe Text)

-- | The details of the instance group status.
--   
--   <i>See:</i> <a>instanceGroupStatus</a> smart constructor.
data InstanceGroupStatus

-- | Creates a value of <a>InstanceGroupStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igsState</a> - The current state of the instance group.</li>
--   <li><a>igsStateChangeReason</a> - The status change reason details for
--   the instance group.</li>
--   <li><a>igsTimeline</a> - The timeline of the instance group status
--   over time.</li>
--   </ul>
instanceGroupStatus :: InstanceGroupStatus

-- | The current state of the instance group.
igsState :: Lens' InstanceGroupStatus (Maybe InstanceGroupState)

-- | The status change reason details for the instance group.
igsStateChangeReason :: Lens' InstanceGroupStatus (Maybe InstanceGroupStateChangeReason)

-- | The timeline of the instance group status over time.
igsTimeline :: Lens' InstanceGroupStatus (Maybe InstanceGroupTimeline)

-- | The timeline of the instance group lifecycle.
--   
--   <i>See:</i> <a>instanceGroupTimeline</a> smart constructor.
data InstanceGroupTimeline

-- | Creates a value of <a>InstanceGroupTimeline</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igtReadyDateTime</a> - The date and time when the instance
--   group became ready to perform tasks.</li>
--   <li><a>igtCreationDateTime</a> - The creation date and time of the
--   instance group.</li>
--   <li><a>igtEndDateTime</a> - The date and time when the instance group
--   terminated.</li>
--   </ul>
instanceGroupTimeline :: InstanceGroupTimeline

-- | The date and time when the instance group became ready to perform
--   tasks.
igtReadyDateTime :: Lens' InstanceGroupTimeline (Maybe UTCTime)

-- | The creation date and time of the instance group.
igtCreationDateTime :: Lens' InstanceGroupTimeline (Maybe UTCTime)

-- | The date and time when the instance group terminated.
igtEndDateTime :: Lens' InstanceGroupTimeline (Maybe UTCTime)

-- | Custom policy for requesting termination protection or termination of
--   specific instances when shrinking an instance group.
--   
--   <i>See:</i> <a>instanceResizePolicy</a> smart constructor.
data InstanceResizePolicy

-- | Creates a value of <a>InstanceResizePolicy</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>irpInstancesToProtect</a> - Specific list of instances to be
--   protected when shrinking an instance group.</li>
--   <li><a>irpInstancesToTerminate</a> - Specific list of instances to be
--   terminated when shrinking an instance group.</li>
--   <li><a>irpInstanceTerminationTimeout</a> - Decommissioning timeout
--   override for the specific list of instances to be terminated.</li>
--   </ul>
instanceResizePolicy :: InstanceResizePolicy

-- | Specific list of instances to be protected when shrinking an instance
--   group.
irpInstancesToProtect :: Lens' InstanceResizePolicy [Text]

-- | Specific list of instances to be terminated when shrinking an instance
--   group.
irpInstancesToTerminate :: Lens' InstanceResizePolicy [Text]

-- | Decommissioning timeout override for the specific list of instances to
--   be terminated.
irpInstanceTerminationTimeout :: Lens' InstanceResizePolicy (Maybe Int)

-- | The details of the status change reason for the instance.
--   
--   <i>See:</i> <a>instanceStateChangeReason</a> smart constructor.
data InstanceStateChangeReason

-- | Creates a value of <a>InstanceStateChangeReason</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>iscrCode</a> - The programmable code for the state change
--   reason.</li>
--   <li><a>iscrMessage</a> - The status change reason description.</li>
--   </ul>
instanceStateChangeReason :: InstanceStateChangeReason

-- | The programmable code for the state change reason.
iscrCode :: Lens' InstanceStateChangeReason (Maybe InstanceStateChangeReasonCode)

-- | The status change reason description.
iscrMessage :: Lens' InstanceStateChangeReason (Maybe Text)

-- | The instance status details.
--   
--   <i>See:</i> <a>instanceStatus</a> smart constructor.
data InstanceStatus

-- | Creates a value of <a>InstanceStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>isState</a> - The current state of the instance.</li>
--   <li><a>isStateChangeReason</a> - The details of the status change
--   reason for the instance.</li>
--   <li><a>isTimeline</a> - The timeline of the instance status over
--   time.</li>
--   </ul>
instanceStatus :: InstanceStatus

-- | The current state of the instance.
isState :: Lens' InstanceStatus (Maybe InstanceState)

-- | The details of the status change reason for the instance.
isStateChangeReason :: Lens' InstanceStatus (Maybe InstanceStateChangeReason)

-- | The timeline of the instance status over time.
isTimeline :: Lens' InstanceStatus (Maybe InstanceTimeline)

-- | The timeline of the instance lifecycle.
--   
--   <i>See:</i> <a>instanceTimeline</a> smart constructor.
data InstanceTimeline

-- | Creates a value of <a>InstanceTimeline</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>itReadyDateTime</a> - The date and time when the instance was
--   ready to perform tasks.</li>
--   <li><a>itCreationDateTime</a> - The creation date and time of the
--   instance.</li>
--   <li><a>itEndDateTime</a> - The date and time when the instance was
--   terminated.</li>
--   </ul>
instanceTimeline :: InstanceTimeline

-- | The date and time when the instance was ready to perform tasks.
itReadyDateTime :: Lens' InstanceTimeline (Maybe UTCTime)

-- | The creation date and time of the instance.
itCreationDateTime :: Lens' InstanceTimeline (Maybe UTCTime)

-- | The date and time when the instance was terminated.
itEndDateTime :: Lens' InstanceTimeline (Maybe UTCTime)

-- | An instance type configuration for each instance type in an instance
--   fleet, which determines the EC2 instances Amazon EMR attempts to
--   provision to fulfill On-Demand and Spot target capacities. There can
--   be a maximum of 5 instance type configurations in a fleet.
--   
--   <i>See:</i> <a>instanceTypeConfig</a> smart constructor.
data InstanceTypeConfig

-- | Creates a value of <a>InstanceTypeConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>itcEBSConfiguration</a> - The configuration of Amazon Elastic
--   Block Storage (EBS) attached to each instance as defined by
--   <tt>InstanceType</tt> .</li>
--   <li><a>itcBidPrice</a> - The bid price for each EC2 Spot instance type
--   as defined by <tt>InstanceType</tt> . Expressed in USD. If neither
--   <tt>BidPrice</tt> nor <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is
--   provided, <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to
--   100%.</li>
--   <li><a>itcWeightedCapacity</a> - The number of units that a
--   provisioned instance of this type provides toward fulfilling the
--   target capacities defined in <a>InstanceFleetConfig</a> . This value
--   is 1 for a master instance fleet, and must be 1 or greater for core
--   and task instance fleets. Defaults to 1 if not specified.</li>
--   <li><a>itcConfigurations</a> - A configuration classification that
--   applies when provisioning cluster instances, which can include
--   configurations for applications and software that run on the
--   cluster.</li>
--   <li><a>itcBidPriceAsPercentageOfOnDemandPrice</a> - The bid price, as
--   a percentage of On-Demand price, for each EC2 Spot instance as defined
--   by <tt>InstanceType</tt> . Expressed as a number (for example, 20
--   specifies 20%). If neither <tt>BidPrice</tt> nor
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is provided,
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to 100%.</li>
--   <li><a>itcInstanceType</a> - An EC2 instance type, such as
--   <tt>m3.xlarge</tt> .</li>
--   </ul>
instanceTypeConfig :: Text -> InstanceTypeConfig

-- | The configuration of Amazon Elastic Block Storage (EBS) attached to
--   each instance as defined by <tt>InstanceType</tt> .
itcEBSConfiguration :: Lens' InstanceTypeConfig (Maybe EBSConfiguration)

-- | The bid price for each EC2 Spot instance type as defined by
--   <tt>InstanceType</tt> . Expressed in USD. If neither <tt>BidPrice</tt>
--   nor <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is provided,
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to 100%.
itcBidPrice :: Lens' InstanceTypeConfig (Maybe Text)

-- | The number of units that a provisioned instance of this type provides
--   toward fulfilling the target capacities defined in
--   <a>InstanceFleetConfig</a> . This value is 1 for a master instance
--   fleet, and must be 1 or greater for core and task instance fleets.
--   Defaults to 1 if not specified.
itcWeightedCapacity :: Lens' InstanceTypeConfig (Maybe Natural)

-- | A configuration classification that applies when provisioning cluster
--   instances, which can include configurations for applications and
--   software that run on the cluster.
itcConfigurations :: Lens' InstanceTypeConfig [Configuration]

-- | The bid price, as a percentage of On-Demand price, for each EC2 Spot
--   instance as defined by <tt>InstanceType</tt> . Expressed as a number
--   (for example, 20 specifies 20%). If neither <tt>BidPrice</tt> nor
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is provided,
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to 100%.
itcBidPriceAsPercentageOfOnDemandPrice :: Lens' InstanceTypeConfig (Maybe Double)

-- | An EC2 instance type, such as <tt>m3.xlarge</tt> .
itcInstanceType :: Lens' InstanceTypeConfig Text

-- | The configuration specification for each instance type in an instance
--   fleet.
--   
--   <i>See:</i> <a>instanceTypeSpecification</a> smart constructor.
data InstanceTypeSpecification

-- | Creates a value of <a>InstanceTypeSpecification</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>itsBidPrice</a> - The bid price for each EC2 Spot instance type
--   as defined by <tt>InstanceType</tt> . Expressed in USD.</li>
--   <li><a>itsWeightedCapacity</a> - The number of units that a
--   provisioned instance of this type provides toward fulfilling the
--   target capacities defined in <a>InstanceFleetConfig</a> . Capacity
--   values represent performance characteristics such as vCPUs, memory, or
--   I/O. If not specified, the default value is 1.</li>
--   <li><a>itsConfigurations</a> - A configuration classification that
--   applies when provisioning cluster instances, which can include
--   configurations for applications and software bundled with Amazon
--   EMR.</li>
--   <li><a>itsEBSBlockDevices</a> - The configuration of Amazon Elastic
--   Block Storage (EBS) attached to each instance as defined by
--   <tt>InstanceType</tt> .</li>
--   <li><a>itsInstanceType</a> - The EC2 instance type, for example
--   <tt>m3.xlarge</tt> .</li>
--   <li><a>itsEBSOptimized</a> - Evaluates to <tt>TRUE</tt> when the
--   specified <tt>InstanceType</tt> is EBS-optimized.</li>
--   <li><a>itsBidPriceAsPercentageOfOnDemandPrice</a> - The bid price, as
--   a percentage of On-Demand price, for each EC2 Spot instance as defined
--   by <tt>InstanceType</tt> . Expressed as a number (for example, 20
--   specifies 20%).</li>
--   </ul>
instanceTypeSpecification :: InstanceTypeSpecification

-- | The bid price for each EC2 Spot instance type as defined by
--   <tt>InstanceType</tt> . Expressed in USD.
itsBidPrice :: Lens' InstanceTypeSpecification (Maybe Text)

-- | The number of units that a provisioned instance of this type provides
--   toward fulfilling the target capacities defined in
--   <a>InstanceFleetConfig</a> . Capacity values represent performance
--   characteristics such as vCPUs, memory, or I/O. If not specified, the
--   default value is 1.
itsWeightedCapacity :: Lens' InstanceTypeSpecification (Maybe Natural)

-- | A configuration classification that applies when provisioning cluster
--   instances, which can include configurations for applications and
--   software bundled with Amazon EMR.
itsConfigurations :: Lens' InstanceTypeSpecification [Configuration]

-- | The configuration of Amazon Elastic Block Storage (EBS) attached to
--   each instance as defined by <tt>InstanceType</tt> .
itsEBSBlockDevices :: Lens' InstanceTypeSpecification [EBSBlockDevice]

-- | The EC2 instance type, for example <tt>m3.xlarge</tt> .
itsInstanceType :: Lens' InstanceTypeSpecification (Maybe Text)

-- | Evaluates to <tt>TRUE</tt> when the specified <tt>InstanceType</tt> is
--   EBS-optimized.
itsEBSOptimized :: Lens' InstanceTypeSpecification (Maybe Bool)

-- | The bid price, as a percentage of On-Demand price, for each EC2 Spot
--   instance as defined by <tt>InstanceType</tt> . Expressed as a number
--   (for example, 20 specifies 20%).
itsBidPriceAsPercentageOfOnDemandPrice :: Lens' InstanceTypeSpecification (Maybe Double)

-- | A description of the Amazon EC2 instance on which the cluster (job
--   flow) runs. A valid JobFlowInstancesConfig must contain either
--   InstanceGroups or InstanceFleets, which is the recommended
--   configuration. They cannot be used together. You may also have
--   MasterInstanceType, SlaveInstanceType, and InstanceCount (all three
--   must be present), but we don't recommend this configuration.
--   
--   <i>See:</i> <a>jobFlowInstancesConfig</a> smart constructor.
data JobFlowInstancesConfig

-- | Creates a value of <a>JobFlowInstancesConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>jficInstanceFleets</a> - Describes the EC2 instances and
--   instance configurations for clusters that use the instance fleet
--   configuration.</li>
--   <li><a>jficEC2KeyName</a> - The name of the EC2 key pair that can be
--   used to ssh to the master node as the user called "hadoop."</li>
--   <li><a>jficSlaveInstanceType</a> - The EC2 instance type of the slave
--   nodes.</li>
--   <li><a>jficInstanceCount</a> - The number of EC2 instances in the
--   cluster.</li>
--   <li><a>jficEmrManagedSlaveSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the slave nodes.</li>
--   <li><a>jficAdditionalSlaveSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the slave nodes.</li>
--   <li><a>jficEC2SubnetIds</a> - Applies to clusters that use the
--   instance fleet configuration. When multiple EC2 subnet IDs are
--   specified, Amazon EMR evaluates them and launches instances in the
--   optimal subnet.</li>
--   <li><a>jficHadoopVersion</a> - The Hadoop version for the cluster.
--   Valid inputs are "0.18" (deprecated), "0.20" (deprecated), "0.20.205"
--   (deprecated), "1.0.3", "2.2.0", or "2.4.0". If you do not set this
--   value, the default of 0.18 is used, unless the AmiVersion parameter is
--   set in the RunJobFlow call, in which case the default version of
--   Hadoop for that AMI version is used.</li>
--   <li><a>jficAdditionalMasterSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the master node.</li>
--   <li><a>jficEmrManagedMasterSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the master node.</li>
--   <li><a>jficEC2SubnetId</a> - Applies to clusters that use the uniform
--   instance group configuration. To launch the cluster in Amazon Virtual
--   Private Cloud (Amazon VPC), set this parameter to the identifier of
--   the Amazon VPC subnet where you want the cluster to launch. If you do
--   not specify this value, the cluster launches in the normal Amazon Web
--   Services cloud, outside of an Amazon VPC, if the account launching the
--   cluster supports EC2 Classic networks in the region where the cluster
--   launches. Amazon VPC currently does not support cluster compute
--   quadruple extra large (cc1.4xlarge) instances. Thus you cannot specify
--   the cc1.4xlarge instance type for clusters launched in an Amazon
--   VPC.</li>
--   <li><a>jficMasterInstanceType</a> - The EC2 instance type of the
--   master node.</li>
--   <li><a>jficInstanceGroups</a> - Configuration for the instance groups
--   in a cluster.</li>
--   <li><a>jficKeepJobFlowAliveWhenNoSteps</a> - Specifies whether the
--   cluster should remain available after completing all steps.</li>
--   <li><a>jficServiceAccessSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the Amazon EMR service to access
--   clusters in VPC private subnets.</li>
--   <li><a>jficTerminationProtected</a> - Specifies whether to lock the
--   cluster to prevent the Amazon EC2 instances from being terminated by
--   API call, user intervention, or in the event of a job-flow error.</li>
--   <li><a>jficPlacement</a> - The Availability Zone in which the cluster
--   runs.</li>
--   </ul>
jobFlowInstancesConfig :: JobFlowInstancesConfig

-- | Describes the EC2 instances and instance configurations for clusters
--   that use the instance fleet configuration.
jficInstanceFleets :: Lens' JobFlowInstancesConfig [InstanceFleetConfig]

-- | The name of the EC2 key pair that can be used to ssh to the master
--   node as the user called "hadoop."
jficEC2KeyName :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | The EC2 instance type of the slave nodes.
jficSlaveInstanceType :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | The number of EC2 instances in the cluster.
jficInstanceCount :: Lens' JobFlowInstancesConfig (Maybe Int)

-- | The identifier of the Amazon EC2 security group for the slave nodes.
jficEmrManagedSlaveSecurityGroup :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | A list of additional Amazon EC2 security group IDs for the slave
--   nodes.
jficAdditionalSlaveSecurityGroups :: Lens' JobFlowInstancesConfig [Text]

-- | Applies to clusters that use the instance fleet configuration. When
--   multiple EC2 subnet IDs are specified, Amazon EMR evaluates them and
--   launches instances in the optimal subnet.
jficEC2SubnetIds :: Lens' JobFlowInstancesConfig [Text]

-- | The Hadoop version for the cluster. Valid inputs are "0.18"
--   (deprecated), "0.20" (deprecated), "0.20.205" (deprecated), "1.0.3",
--   "2.2.0", or "2.4.0". If you do not set this value, the default of 0.18
--   is used, unless the AmiVersion parameter is set in the RunJobFlow
--   call, in which case the default version of Hadoop for that AMI version
--   is used.
jficHadoopVersion :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | A list of additional Amazon EC2 security group IDs for the master
--   node.
jficAdditionalMasterSecurityGroups :: Lens' JobFlowInstancesConfig [Text]

-- | The identifier of the Amazon EC2 security group for the master node.
jficEmrManagedMasterSecurityGroup :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | Applies to clusters that use the uniform instance group configuration.
--   To launch the cluster in Amazon Virtual Private Cloud (Amazon VPC),
--   set this parameter to the identifier of the Amazon VPC subnet where
--   you want the cluster to launch. If you do not specify this value, the
--   cluster launches in the normal Amazon Web Services cloud, outside of
--   an Amazon VPC, if the account launching the cluster supports EC2
--   Classic networks in the region where the cluster launches. Amazon VPC
--   currently does not support cluster compute quadruple extra large
--   (cc1.4xlarge) instances. Thus you cannot specify the cc1.4xlarge
--   instance type for clusters launched in an Amazon VPC.
jficEC2SubnetId :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | The EC2 instance type of the master node.
jficMasterInstanceType :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | Configuration for the instance groups in a cluster.
jficInstanceGroups :: Lens' JobFlowInstancesConfig [InstanceGroupConfig]

-- | Specifies whether the cluster should remain available after completing
--   all steps.
jficKeepJobFlowAliveWhenNoSteps :: Lens' JobFlowInstancesConfig (Maybe Bool)

-- | The identifier of the Amazon EC2 security group for the Amazon EMR
--   service to access clusters in VPC private subnets.
jficServiceAccessSecurityGroup :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | Specifies whether to lock the cluster to prevent the Amazon EC2
--   instances from being terminated by API call, user intervention, or in
--   the event of a job-flow error.
jficTerminationProtected :: Lens' JobFlowInstancesConfig (Maybe Bool)

-- | The Availability Zone in which the cluster runs.
jficPlacement :: Lens' JobFlowInstancesConfig (Maybe PlacementType)

-- | Attributes for Kerberos configuration when Kerberos authentication is
--   enabled using a security configuration. For more information see
--   <a>Use Kerberos Authentication</a> in the <i>EMR Management Guide</i>
--   .
--   
--   <i>See:</i> <a>kerberosAttributes</a> smart constructor.
data KerberosAttributes

-- | Creates a value of <a>KerberosAttributes</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>kaADDomainJoinPassword</a> - The Active Directory password for
--   <tt>ADDomainJoinUser</tt> .</li>
--   <li><a>kaCrossRealmTrustPrincipalPassword</a> - Required only when
--   establishing a cross-realm trust with a KDC in a different realm. The
--   cross-realm principal password, which must be identical across
--   realms.</li>
--   <li><a>kaADDomainJoinUser</a> - Required only when establishing a
--   cross-realm trust with an Active Directory domain. A user with
--   sufficient privileges to join resources to the domain.</li>
--   <li><a>kaRealm</a> - The name of the Kerberos realm to which all nodes
--   in a cluster belong. For example, <tt>EC2.INTERNAL</tt> .</li>
--   <li><a>kaKdcAdminPassword</a> - The password used within the cluster
--   for the kadmin service on the cluster-dedicated KDC, which maintains
--   Kerberos principals, password policies, and keytabs for the
--   cluster.</li>
--   </ul>
kerberosAttributes :: Text -> Text -> KerberosAttributes

-- | The Active Directory password for <tt>ADDomainJoinUser</tt> .
kaADDomainJoinPassword :: Lens' KerberosAttributes (Maybe Text)

-- | Required only when establishing a cross-realm trust with a KDC in a
--   different realm. The cross-realm principal password, which must be
--   identical across realms.
kaCrossRealmTrustPrincipalPassword :: Lens' KerberosAttributes (Maybe Text)

-- | Required only when establishing a cross-realm trust with an Active
--   Directory domain. A user with sufficient privileges to join resources
--   to the domain.
kaADDomainJoinUser :: Lens' KerberosAttributes (Maybe Text)

-- | The name of the Kerberos realm to which all nodes in a cluster belong.
--   For example, <tt>EC2.INTERNAL</tt> .
kaRealm :: Lens' KerberosAttributes Text

-- | The password used within the cluster for the kadmin service on the
--   cluster-dedicated KDC, which maintains Kerberos principals, password
--   policies, and keytabs for the cluster.
kaKdcAdminPassword :: Lens' KerberosAttributes Text

-- | A key value pair.
--   
--   <i>See:</i> <a>keyValue</a> smart constructor.
data KeyValue

-- | Creates a value of <a>KeyValue</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>kvValue</a> - The value part of the identified key.</li>
--   <li><a>kvKey</a> - The unique identifier of a key value pair.</li>
--   </ul>
keyValue :: KeyValue

-- | The value part of the identified key.
kvValue :: Lens' KeyValue (Maybe Text)

-- | The unique identifier of a key value pair.
kvKey :: Lens' KeyValue (Maybe Text)

-- | A CloudWatch dimension, which is specified using a <tt>Key</tt> (known
--   as a <tt>Name</tt> in CloudWatch), <tt>Value</tt> pair. By default,
--   Amazon EMR uses one dimension whose <tt>Key</tt> is <tt>JobFlowID</tt>
--   and <tt>Value</tt> is a variable representing the cluster ID, which is
--   <tt>&gt; {emr.clusterId}</tt> . This enables the rule to bootstrap
--   when the cluster ID becomes available.
--   
--   <i>See:</i> <a>metricDimension</a> smart constructor.
data MetricDimension

-- | Creates a value of <a>MetricDimension</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>mdValue</a> - The dimension value.</li>
--   <li><a>mdKey</a> - The dimension name.</li>
--   </ul>
metricDimension :: MetricDimension

-- | The dimension value.
mdValue :: Lens' MetricDimension (Maybe Text)

-- | The dimension name.
mdKey :: Lens' MetricDimension (Maybe Text)

-- | The Amazon EC2 Availability Zone configuration of the cluster (job
--   flow).
--   
--   <i>See:</i> <a>placementType</a> smart constructor.
data PlacementType

-- | Creates a value of <a>PlacementType</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ptAvailabilityZones</a> - When multiple Availability Zones are
--   specified, Amazon EMR evaluates them and launches instances in the
--   optimal Availability Zone. <tt>AvailabilityZones</tt> is used for
--   instance fleets, while <tt>AvailabilityZone</tt> (singular) is used
--   for uniform instance groups.</li>
--   <li><a>ptAvailabilityZone</a> - The Amazon EC2 Availability Zone for
--   the cluster. <tt>AvailabilityZone</tt> is used for uniform instance
--   groups, while <tt>AvailabilityZones</tt> (plural) is used for instance
--   fleets.</li>
--   </ul>
placementType :: PlacementType

-- | When multiple Availability Zones are specified, Amazon EMR evaluates
--   them and launches instances in the optimal Availability Zone.
--   <tt>AvailabilityZones</tt> is used for instance fleets, while
--   <tt>AvailabilityZone</tt> (singular) is used for uniform instance
--   groups.
ptAvailabilityZones :: Lens' PlacementType [Text]

-- | The Amazon EC2 Availability Zone for the cluster.
--   <tt>AvailabilityZone</tt> is used for uniform instance groups, while
--   <tt>AvailabilityZones</tt> (plural) is used for instance fleets.
ptAvailabilityZone :: Lens' PlacementType (Maybe Text)

-- | The type of adjustment the automatic scaling activity makes when
--   triggered, and the periodicity of the adjustment.
--   
--   <i>See:</i> <a>scalingAction</a> smart constructor.
data ScalingAction

-- | Creates a value of <a>ScalingAction</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>saMarket</a> - Not available for instance groups. Instance
--   groups use the market type specified for the group.</li>
--   <li><a>saSimpleScalingPolicyConfiguration</a> - The type of adjustment
--   the automatic scaling activity makes when triggered, and the
--   periodicity of the adjustment.</li>
--   </ul>
scalingAction :: SimpleScalingPolicyConfiguration -> ScalingAction

-- | Not available for instance groups. Instance groups use the market type
--   specified for the group.
saMarket :: Lens' ScalingAction (Maybe MarketType)

-- | The type of adjustment the automatic scaling activity makes when
--   triggered, and the periodicity of the adjustment.
saSimpleScalingPolicyConfiguration :: Lens' ScalingAction SimpleScalingPolicyConfiguration

-- | The upper and lower EC2 instance limits for an automatic scaling
--   policy. Automatic scaling activities triggered by automatic scaling
--   rules will not cause an instance group to grow above or below these
--   limits.
--   
--   <i>See:</i> <a>scalingConstraints</a> smart constructor.
data ScalingConstraints

-- | Creates a value of <a>ScalingConstraints</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>scMinCapacity</a> - The lower boundary of EC2 instances in an
--   instance group below which scaling activities are not allowed to
--   shrink. Scale-in activities will not terminate instances below this
--   boundary.</li>
--   <li><a>scMaxCapacity</a> - The upper boundary of EC2 instances in an
--   instance group beyond which scaling activities are not allowed to
--   grow. Scale-out activities will not add instances beyond this
--   boundary.</li>
--   </ul>
scalingConstraints :: Int -> Int -> ScalingConstraints

-- | The lower boundary of EC2 instances in an instance group below which
--   scaling activities are not allowed to shrink. Scale-in activities will
--   not terminate instances below this boundary.
scMinCapacity :: Lens' ScalingConstraints Int

-- | The upper boundary of EC2 instances in an instance group beyond which
--   scaling activities are not allowed to grow. Scale-out activities will
--   not add instances beyond this boundary.
scMaxCapacity :: Lens' ScalingConstraints Int

-- | A scale-in or scale-out rule that defines scaling activity, including
--   the CloudWatch metric alarm that triggers activity, how EC2 instances
--   are added or removed, and the periodicity of adjustments. The
--   automatic scaling policy for an instance group can comprise one or
--   more automatic scaling rules.
--   
--   <i>See:</i> <a>scalingRule</a> smart constructor.
data ScalingRule

-- | Creates a value of <a>ScalingRule</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>srDescription</a> - A friendly, more verbose description of the
--   automatic scaling rule.</li>
--   <li><a>srName</a> - The name used to identify an automatic scaling
--   rule. Rule names must be unique within a scaling policy.</li>
--   <li><a>srAction</a> - The conditions that trigger an automatic scaling
--   activity.</li>
--   <li><a>srTrigger</a> - The CloudWatch alarm definition that determines
--   when automatic scaling activity is triggered.</li>
--   </ul>
scalingRule :: Text -> ScalingAction -> ScalingTrigger -> ScalingRule

-- | A friendly, more verbose description of the automatic scaling rule.
srDescription :: Lens' ScalingRule (Maybe Text)

-- | The name used to identify an automatic scaling rule. Rule names must
--   be unique within a scaling policy.
srName :: Lens' ScalingRule Text

-- | The conditions that trigger an automatic scaling activity.
srAction :: Lens' ScalingRule ScalingAction

-- | The CloudWatch alarm definition that determines when automatic scaling
--   activity is triggered.
srTrigger :: Lens' ScalingRule ScalingTrigger

-- | The conditions that trigger an automatic scaling activity.
--   
--   <i>See:</i> <a>scalingTrigger</a> smart constructor.
data ScalingTrigger

-- | Creates a value of <a>ScalingTrigger</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>stCloudWatchAlarmDefinition</a> - The definition of a
--   CloudWatch metric alarm. When the defined alarm conditions are met
--   along with other trigger parameters, scaling activity begins.</li>
--   </ul>
scalingTrigger :: CloudWatchAlarmDefinition -> ScalingTrigger

-- | The definition of a CloudWatch metric alarm. When the defined alarm
--   conditions are met along with other trigger parameters, scaling
--   activity begins.
stCloudWatchAlarmDefinition :: Lens' ScalingTrigger CloudWatchAlarmDefinition

-- | Configuration of the script to run during a bootstrap action.
--   
--   <i>See:</i> <a>scriptBootstrapActionConfig</a> smart constructor.
data ScriptBootstrapActionConfig

-- | Creates a value of <a>ScriptBootstrapActionConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sbacArgs</a> - A list of command line arguments to pass to the
--   bootstrap action script.</li>
--   <li><a>sbacPath</a> - Location of the script to run during a bootstrap
--   action. Can be either a location in Amazon S3 or on a local file
--   system.</li>
--   </ul>
scriptBootstrapActionConfig :: Text -> ScriptBootstrapActionConfig

-- | A list of command line arguments to pass to the bootstrap action
--   script.
sbacArgs :: Lens' ScriptBootstrapActionConfig [Text]

-- | Location of the script to run during a bootstrap action. Can be either
--   a location in Amazon S3 or on a local file system.
sbacPath :: Lens' ScriptBootstrapActionConfig Text

-- | The creation date and time, and name, of a security configuration.
--   
--   <i>See:</i> <a>securityConfigurationSummary</a> smart constructor.
data SecurityConfigurationSummary

-- | Creates a value of <a>SecurityConfigurationSummary</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>scsName</a> - The name of the security configuration.</li>
--   <li><a>scsCreationDateTime</a> - The date and time the security
--   configuration was created.</li>
--   </ul>
securityConfigurationSummary :: SecurityConfigurationSummary

-- | The name of the security configuration.
scsName :: Lens' SecurityConfigurationSummary (Maybe Text)

-- | The date and time the security configuration was created.
scsCreationDateTime :: Lens' SecurityConfigurationSummary (Maybe UTCTime)

-- | Policy for customizing shrink operations. Allows configuration of
--   decommissioning timeout and targeted instance shrinking.
--   
--   <i>See:</i> <a>shrinkPolicy</a> smart constructor.
data ShrinkPolicy

-- | Creates a value of <a>ShrinkPolicy</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>spDecommissionTimeout</a> - The desired timeout for
--   decommissioning an instance. Overrides the default YARN
--   decommissioning timeout.</li>
--   <li><a>spInstanceResizePolicy</a> - Custom policy for requesting
--   termination protection or termination of specific instances when
--   shrinking an instance group.</li>
--   </ul>
shrinkPolicy :: ShrinkPolicy

-- | The desired timeout for decommissioning an instance. Overrides the
--   default YARN decommissioning timeout.
spDecommissionTimeout :: Lens' ShrinkPolicy (Maybe Int)

-- | Custom policy for requesting termination protection or termination of
--   specific instances when shrinking an instance group.
spInstanceResizePolicy :: Lens' ShrinkPolicy (Maybe InstanceResizePolicy)

-- | An automatic scaling configuration, which describes how the policy
--   adds or removes instances, the cooldown period, and the number of EC2
--   instances that will be added each time the CloudWatch metric alarm
--   condition is satisfied.
--   
--   <i>See:</i> <a>simpleScalingPolicyConfiguration</a> smart constructor.
data SimpleScalingPolicyConfiguration

-- | Creates a value of <a>SimpleScalingPolicyConfiguration</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sspcAdjustmentType</a> - The way in which EC2 instances are
--   added (if <tt>ScalingAdjustment</tt> is a positive number) or
--   terminated (if <tt>ScalingAdjustment</tt> is a negative number) each
--   time the scaling activity is triggered. <tt>CHANGE_IN_CAPACITY</tt> is
--   the default. <tt>CHANGE_IN_CAPACITY</tt> indicates that the EC2
--   instance count increments or decrements by <tt>ScalingAdjustment</tt>
--   , which should be expressed as an integer.
--   <tt>PERCENT_CHANGE_IN_CAPACITY</tt> indicates the instance count
--   increments or decrements by the percentage specified by
--   <tt>ScalingAdjustment</tt> , which should be expressed as an integer.
--   For example, 20 indicates an increase in 20% increments of cluster
--   capacity. <tt>EXACT_CAPACITY</tt> indicates the scaling activity
--   results in an instance group with the number of EC2 instances
--   specified by <tt>ScalingAdjustment</tt> , which should be expressed as
--   a positive integer.</li>
--   <li><a>sspcCoolDown</a> - The amount of time, in seconds, after a
--   scaling activity completes before any further trigger-related scaling
--   activities can start. The default value is 0.</li>
--   <li><a>sspcScalingAdjustment</a> - The amount by which to scale in or
--   scale out, based on the specified <tt>AdjustmentType</tt> . A positive
--   value adds to the instance group's EC2 instance count while a negative
--   number removes instances. If <tt>AdjustmentType</tt> is set to
--   <tt>EXACT_CAPACITY</tt> , the number should only be a positive
--   integer. If <tt>AdjustmentType</tt> is set to
--   <tt>PERCENT_CHANGE_IN_CAPACITY</tt> , the value should express the
--   percentage as an integer. For example, -20 indicates a decrease in 20%
--   increments of cluster capacity.</li>
--   </ul>
simpleScalingPolicyConfiguration :: Int -> SimpleScalingPolicyConfiguration

-- | The way in which EC2 instances are added (if
--   <tt>ScalingAdjustment</tt> is a positive number) or terminated (if
--   <tt>ScalingAdjustment</tt> is a negative number) each time the scaling
--   activity is triggered. <tt>CHANGE_IN_CAPACITY</tt> is the default.
--   <tt>CHANGE_IN_CAPACITY</tt> indicates that the EC2 instance count
--   increments or decrements by <tt>ScalingAdjustment</tt> , which should
--   be expressed as an integer. <tt>PERCENT_CHANGE_IN_CAPACITY</tt>
--   indicates the instance count increments or decrements by the
--   percentage specified by <tt>ScalingAdjustment</tt> , which should be
--   expressed as an integer. For example, 20 indicates an increase in 20%
--   increments of cluster capacity. <tt>EXACT_CAPACITY</tt> indicates the
--   scaling activity results in an instance group with the number of EC2
--   instances specified by <tt>ScalingAdjustment</tt> , which should be
--   expressed as a positive integer.
sspcAdjustmentType :: Lens' SimpleScalingPolicyConfiguration (Maybe AdjustmentType)

-- | The amount of time, in seconds, after a scaling activity completes
--   before any further trigger-related scaling activities can start. The
--   default value is 0.
sspcCoolDown :: Lens' SimpleScalingPolicyConfiguration (Maybe Int)

-- | The amount by which to scale in or scale out, based on the specified
--   <tt>AdjustmentType</tt> . A positive value adds to the instance
--   group's EC2 instance count while a negative number removes instances.
--   If <tt>AdjustmentType</tt> is set to <tt>EXACT_CAPACITY</tt> , the
--   number should only be a positive integer. If <tt>AdjustmentType</tt>
--   is set to <tt>PERCENT_CHANGE_IN_CAPACITY</tt> , the value should
--   express the percentage as an integer. For example, -20 indicates a
--   decrease in 20% increments of cluster capacity.
sspcScalingAdjustment :: Lens' SimpleScalingPolicyConfiguration Int

-- | The launch specification for Spot instances in the instance fleet,
--   which determines the defined duration and provisioning timeout
--   behavior.
--   
--   <i>See:</i> <a>spotProvisioningSpecification</a> smart constructor.
data SpotProvisioningSpecification

-- | Creates a value of <a>SpotProvisioningSpecification</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>spsBlockDurationMinutes</a> - The defined duration for Spot
--   instances (also known as Spot blocks) in minutes. When specified, the
--   Spot instance does not terminate before the defined duration expires,
--   and defined duration pricing for Spot instances applies. Valid values
--   are 60, 120, 180, 240, 300, or 360. The duration period starts as soon
--   as a Spot instance receives its instance ID. At the end of the
--   duration, Amazon EC2 marks the Spot instance for termination and
--   provides a Spot instance termination notice, which gives the instance
--   a two-minute warning before it terminates.</li>
--   <li><a>spsTimeoutDurationMinutes</a> - The spot provisioning timeout
--   period in minutes. If Spot instances are not provisioned within this
--   time period, the <tt>TimeOutAction</tt> is taken. Minimum value is 5
--   and maximum value is 1440. The timeout applies only during initial
--   provisioning, when the cluster is first created.</li>
--   <li><a>spsTimeoutAction</a> - The action to take when
--   <tt>TargetSpotCapacity</tt> has not been fulfilled when the
--   <tt>TimeoutDurationMinutes</tt> has expired. Spot instances are not
--   uprovisioned within the Spot provisioining timeout. Valid values are
--   <tt>TERMINATE_CLUSTER</tt> and <tt>SWITCH_TO_ON_DEMAND</tt> .
--   SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available,
--   On-Demand Instances should be provisioned to fulfill any remaining
--   Spot capacity.</li>
--   </ul>
spotProvisioningSpecification :: Natural -> SpotProvisioningTimeoutAction -> SpotProvisioningSpecification

-- | The defined duration for Spot instances (also known as Spot blocks) in
--   minutes. When specified, the Spot instance does not terminate before
--   the defined duration expires, and defined duration pricing for Spot
--   instances applies. Valid values are 60, 120, 180, 240, 300, or 360.
--   The duration period starts as soon as a Spot instance receives its
--   instance ID. At the end of the duration, Amazon EC2 marks the Spot
--   instance for termination and provides a Spot instance termination
--   notice, which gives the instance a two-minute warning before it
--   terminates.
spsBlockDurationMinutes :: Lens' SpotProvisioningSpecification (Maybe Natural)

-- | The spot provisioning timeout period in minutes. If Spot instances are
--   not provisioned within this time period, the <tt>TimeOutAction</tt> is
--   taken. Minimum value is 5 and maximum value is 1440. The timeout
--   applies only during initial provisioning, when the cluster is first
--   created.
spsTimeoutDurationMinutes :: Lens' SpotProvisioningSpecification Natural

-- | The action to take when <tt>TargetSpotCapacity</tt> has not been
--   fulfilled when the <tt>TimeoutDurationMinutes</tt> has expired. Spot
--   instances are not uprovisioned within the Spot provisioining timeout.
--   Valid values are <tt>TERMINATE_CLUSTER</tt> and
--   <tt>SWITCH_TO_ON_DEMAND</tt> . SWITCH_TO_ON_DEMAND specifies that if
--   no Spot instances are available, On-Demand Instances should be
--   provisioned to fulfill any remaining Spot capacity.
spsTimeoutAction :: Lens' SpotProvisioningSpecification SpotProvisioningTimeoutAction

-- | This represents a step in a cluster.
--   
--   <i>See:</i> <a>step</a> smart constructor.
data Step

-- | Creates a value of <a>Step</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sStatus</a> - The current execution status details of the
--   cluster step.</li>
--   <li><a>sActionOnFailure</a> - This specifies what action to take when
--   the cluster step fails. Possible values are TERMINATE_CLUSTER,
--   CANCEL_AND_WAIT, and CONTINUE.</li>
--   <li><a>sConfig</a> - The Hadoop job configuration of the cluster
--   step.</li>
--   <li><a>sName</a> - The name of the cluster step.</li>
--   <li><a>sId</a> - The identifier of the cluster step.</li>
--   </ul>
step :: Step

-- | The current execution status details of the cluster step.
sStatus :: Lens' Step (Maybe StepStatus)

-- | This specifies what action to take when the cluster step fails.
--   Possible values are TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE.
sActionOnFailure :: Lens' Step (Maybe ActionOnFailure)

-- | The Hadoop job configuration of the cluster step.
sConfig :: Lens' Step (Maybe HadoopStepConfig)

-- | The name of the cluster step.
sName :: Lens' Step (Maybe Text)

-- | The identifier of the cluster step.
sId :: Lens' Step (Maybe Text)

-- | Specification of a cluster (job flow) step.
--   
--   <i>See:</i> <a>stepConfig</a> smart constructor.
data StepConfig

-- | Creates a value of <a>StepConfig</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>scActionOnFailure</a> - The action to take if the step
--   fails.</li>
--   <li><a>scName</a> - The name of the step.</li>
--   <li><a>scHadoopJARStep</a> - The JAR file used for the step.</li>
--   </ul>
stepConfig :: Text -> HadoopJARStepConfig -> StepConfig

-- | The action to take if the step fails.
scActionOnFailure :: Lens' StepConfig (Maybe ActionOnFailure)

-- | The name of the step.
scName :: Lens' StepConfig Text

-- | The JAR file used for the step.
scHadoopJARStep :: Lens' StepConfig HadoopJARStepConfig

-- | The details of the step state change reason.
--   
--   <i>See:</i> <a>stepStateChangeReason</a> smart constructor.
data StepStateChangeReason

-- | Creates a value of <a>StepStateChangeReason</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sscrCode</a> - The programmable code for the state change
--   reason. Note: Currently, the service provides no code for the state
--   change.</li>
--   <li><a>sscrMessage</a> - The descriptive message for the state change
--   reason.</li>
--   </ul>
stepStateChangeReason :: StepStateChangeReason

-- | The programmable code for the state change reason. Note: Currently,
--   the service provides no code for the state change.
sscrCode :: Lens' StepStateChangeReason (Maybe StepStateChangeReasonCode)

-- | The descriptive message for the state change reason.
sscrMessage :: Lens' StepStateChangeReason (Maybe Text)

-- | The execution status details of the cluster step.
--   
--   <i>See:</i> <a>stepStatus</a> smart constructor.
data StepStatus

-- | Creates a value of <a>StepStatus</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ssState</a> - The execution state of the cluster step.</li>
--   <li><a>ssFailureDetails</a> - The details for the step failure
--   including reason, message, and log file path where the root cause was
--   identified.</li>
--   <li><a>ssStateChangeReason</a> - The reason for the step execution
--   status change.</li>
--   <li><a>ssTimeline</a> - The timeline of the cluster step status over
--   time.</li>
--   </ul>
stepStatus :: StepStatus

-- | The execution state of the cluster step.
ssState :: Lens' StepStatus (Maybe StepState)

-- | The details for the step failure including reason, message, and log
--   file path where the root cause was identified.
ssFailureDetails :: Lens' StepStatus (Maybe FailureDetails)

-- | The reason for the step execution status change.
ssStateChangeReason :: Lens' StepStatus (Maybe StepStateChangeReason)

-- | The timeline of the cluster step status over time.
ssTimeline :: Lens' StepStatus (Maybe StepTimeline)

-- | The summary of the cluster step.
--   
--   <i>See:</i> <a>stepSummary</a> smart constructor.
data StepSummary

-- | Creates a value of <a>StepSummary</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ssStatus</a> - The current execution status details of the
--   cluster step.</li>
--   <li><a>ssActionOnFailure</a> - This specifies what action to take when
--   the cluster step fails. Possible values are TERMINATE_CLUSTER,
--   CANCEL_AND_WAIT, and CONTINUE.</li>
--   <li><a>ssConfig</a> - The Hadoop job configuration of the cluster
--   step.</li>
--   <li><a>ssName</a> - The name of the cluster step.</li>
--   <li><a>ssId</a> - The identifier of the cluster step.</li>
--   </ul>
stepSummary :: StepSummary

-- | The current execution status details of the cluster step.
ssStatus :: Lens' StepSummary (Maybe StepStatus)

-- | This specifies what action to take when the cluster step fails.
--   Possible values are TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE.
ssActionOnFailure :: Lens' StepSummary (Maybe ActionOnFailure)

-- | The Hadoop job configuration of the cluster step.
ssConfig :: Lens' StepSummary (Maybe HadoopStepConfig)

-- | The name of the cluster step.
ssName :: Lens' StepSummary (Maybe Text)

-- | The identifier of the cluster step.
ssId :: Lens' StepSummary (Maybe Text)

-- | The timeline of the cluster step lifecycle.
--   
--   <i>See:</i> <a>stepTimeline</a> smart constructor.
data StepTimeline

-- | Creates a value of <a>StepTimeline</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>stCreationDateTime</a> - The date and time when the cluster
--   step was created.</li>
--   <li><a>stEndDateTime</a> - The date and time when the cluster step
--   execution completed or failed.</li>
--   <li><a>stStartDateTime</a> - The date and time when the cluster step
--   execution started.</li>
--   </ul>
stepTimeline :: StepTimeline

-- | The date and time when the cluster step was created.
stCreationDateTime :: Lens' StepTimeline (Maybe UTCTime)

-- | The date and time when the cluster step execution completed or failed.
stEndDateTime :: Lens' StepTimeline (Maybe UTCTime)

-- | The date and time when the cluster step execution started.
stStartDateTime :: Lens' StepTimeline (Maybe UTCTime)

-- | The list of supported product configurations which allow user-supplied
--   arguments. EMR accepts these arguments and forwards them to the
--   corresponding installation script as bootstrap action arguments.
--   
--   <i>See:</i> <a>supportedProductConfig</a> smart constructor.
data SupportedProductConfig

-- | Creates a value of <a>SupportedProductConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>spcArgs</a> - The list of user-supplied arguments.</li>
--   <li><a>spcName</a> - The name of the product configuration.</li>
--   </ul>
supportedProductConfig :: SupportedProductConfig

-- | The list of user-supplied arguments.
spcArgs :: Lens' SupportedProductConfig [Text]

-- | The name of the product configuration.
spcName :: Lens' SupportedProductConfig (Maybe Text)

-- | A key<i>value pair containing user-defined metadata that you can
--   associate with an Amazon EMR resource. Tags make it easier to
--   associate clusters in various ways, such as grouping clusters to track
--   your Amazon EMR resource allocation costs. For more information, see
--   &lt;http:</i><i>docs.aws.amazon.com</i>emr<i>latest</i>ManagementGuide/emr-plan-tags.html
--   Tag Clusters&gt; .
--   
--   <i>See:</i> <a>tag</a> smart constructor.
data Tag

-- | Creates a value of <a>Tag</a> with the minimum fields required to make
--   a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>tagValue</a> - A user-defined value, which is optional in a
--   tag. For more information, see <a>Tag Clusters</a> .</li>
--   <li><a>tagKey</a> - A user-defined key, which is the minimum required
--   information for a valid tag. For more information, see <a>Tag</a>
--   .</li>
--   </ul>
tag :: Tag

-- | A user-defined value, which is optional in a tag. For more
--   information, see <a>Tag Clusters</a> .
tagValue :: Lens' Tag (Maybe Text)

-- | A user-defined key, which is the minimum required information for a
--   valid tag. For more information, see <a>Tag</a> .
tagKey :: Lens' Tag (Maybe Text)

-- | EBS volume specifications such as volume type, IOPS, and size (GiB)
--   that will be requested for the EBS volume attached to an EC2 instance
--   in the cluster.
--   
--   <i>See:</i> <a>volumeSpecification</a> smart constructor.
data VolumeSpecification

-- | Creates a value of <a>VolumeSpecification</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>vsIOPS</a> - The number of I/O operations per second (IOPS)
--   that the volume supports.</li>
--   <li><a>vsVolumeType</a> - The volume type. Volume types supported are
--   gp2, io1, standard.</li>
--   <li><a>vsSizeInGB</a> - The volume size, in gibibytes (GiB). This can
--   be a number from 1 - 1024. If the volume type is EBS-optimized, the
--   minimum value is 10.</li>
--   </ul>
volumeSpecification :: Text -> Int -> VolumeSpecification

-- | The number of I/O operations per second (IOPS) that the volume
--   supports.
vsIOPS :: Lens' VolumeSpecification (Maybe Int)

-- | The volume type. Volume types supported are gp2, io1, standard.
vsVolumeType :: Lens' VolumeSpecification Text

-- | The volume size, in gibibytes (GiB). This can be a number from 1 -
--   1024. If the volume type is EBS-optimized, the minimum value is 10.
vsSizeInGB :: Lens' VolumeSpecification Int


-- | TerminateJobFlows shuts a list of clusters (job flows) down. When a
--   job flow is shut down, any step not yet completed is canceled and the
--   EC2 instances on which the cluster is running are stopped. Any log
--   files not already saved are uploaded to Amazon S3 if a LogUri was
--   specified when the cluster was created.
--   
--   The maximum number of clusters allowed is 10. The call to
--   <tt>TerminateJobFlows</tt> is asynchronous. Depending on the
--   configuration of the cluster, it may take up to 1-5 minutes for the
--   cluster to completely terminate and release allocated resources, such
--   as Amazon EC2 instances.
module Network.AWS.EMR.TerminateJobFlows

-- | Creates a value of <a>TerminateJobFlows</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>tjfJobFlowIds</a> - A list of job flows to be shutdown.</li>
--   </ul>
terminateJobFlows :: TerminateJobFlows

-- | Input to the <a>TerminateJobFlows</a> operation.
--   
--   <i>See:</i> <a>terminateJobFlows</a> smart constructor.
data TerminateJobFlows

-- | A list of job flows to be shutdown.
tjfJobFlowIds :: Lens' TerminateJobFlows [Text]

-- | Creates a value of <a>TerminateJobFlowsResponse</a> with the minimum
--   fields required to make a request.
terminateJobFlowsResponse :: TerminateJobFlowsResponse

-- | <i>See:</i> <a>terminateJobFlowsResponse</a> smart constructor.
data TerminateJobFlowsResponse
instance GHC.Generics.Generic Network.AWS.EMR.TerminateJobFlows.TerminateJobFlowsResponse
instance Data.Data.Data Network.AWS.EMR.TerminateJobFlows.TerminateJobFlowsResponse
instance GHC.Show.Show Network.AWS.EMR.TerminateJobFlows.TerminateJobFlowsResponse
instance GHC.Read.Read Network.AWS.EMR.TerminateJobFlows.TerminateJobFlowsResponse
instance GHC.Classes.Eq Network.AWS.EMR.TerminateJobFlows.TerminateJobFlowsResponse
instance GHC.Generics.Generic Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Data.Data.Data Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance GHC.Show.Show Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance GHC.Read.Read Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance GHC.Classes.Eq Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Control.DeepSeq.NFData Network.AWS.EMR.TerminateJobFlows.TerminateJobFlowsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Control.DeepSeq.NFData Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.TerminateJobFlows.TerminateJobFlows


-- | Sets whether all AWS Identity and Access Management (IAM) users under
--   your account can access the specified clusters (job flows). This
--   action works on running clusters. You can also set the visibility of a
--   cluster when you launch it using the <tt>VisibleToAllUsers</tt>
--   parameter of <tt>RunJobFlow</tt> . The SetVisibleToAllUsers action can
--   be called only by an IAM user who created the cluster or the AWS
--   account that owns the cluster.
module Network.AWS.EMR.SetVisibleToAllUsers

-- | Creates a value of <a>SetVisibleToAllUsers</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>svtauJobFlowIds</a> - Identifiers of the job flows to receive
--   the new visibility setting.</li>
--   <li><a>svtauVisibleToAllUsers</a> - Whether the specified clusters are
--   visible to all IAM users of the AWS account associated with the
--   cluster. If this value is set to True, all IAM users of that AWS
--   account can view and, if they have the proper IAM policy permissions
--   set, manage the clusters. If it is set to False, only the IAM user
--   that created a cluster can view and manage it.</li>
--   </ul>
setVisibleToAllUsers :: Bool -> SetVisibleToAllUsers

-- | The input to the SetVisibleToAllUsers action.
--   
--   <i>See:</i> <a>setVisibleToAllUsers</a> smart constructor.
data SetVisibleToAllUsers

-- | Identifiers of the job flows to receive the new visibility setting.
svtauJobFlowIds :: Lens' SetVisibleToAllUsers [Text]

-- | Whether the specified clusters are visible to all IAM users of the AWS
--   account associated with the cluster. If this value is set to True, all
--   IAM users of that AWS account can view and, if they have the proper
--   IAM policy permissions set, manage the clusters. If it is set to
--   False, only the IAM user that created a cluster can view and manage
--   it.
svtauVisibleToAllUsers :: Lens' SetVisibleToAllUsers Bool

-- | Creates a value of <a>SetVisibleToAllUsersResponse</a> with the
--   minimum fields required to make a request.
setVisibleToAllUsersResponse :: SetVisibleToAllUsersResponse

-- | <i>See:</i> <a>setVisibleToAllUsersResponse</a> smart constructor.
data SetVisibleToAllUsersResponse
instance GHC.Generics.Generic Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsersResponse
instance Data.Data.Data Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsersResponse
instance GHC.Show.Show Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsersResponse
instance GHC.Read.Read Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsersResponse
instance GHC.Classes.Eq Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsersResponse
instance GHC.Generics.Generic Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Data.Data.Data Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance GHC.Show.Show Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance GHC.Read.Read Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance GHC.Classes.Eq Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Control.DeepSeq.NFData Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsersResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Control.DeepSeq.NFData Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsers


-- | SetTerminationProtection locks a cluster (job flow) so the EC2
--   instances in the cluster cannot be terminated by user intervention, an
--   API call, or in the event of a job-flow error. The cluster still
--   terminates upon successful completion of the job flow. Calling
--   <tt>SetTerminationProtection</tt> on a cluster is similar to calling
--   the Amazon EC2 <tt>DisableAPITermination</tt> API on all EC2 instances
--   in a cluster.
--   
--   <tt>SetTerminationProtection</tt> is used to prevent accidental
--   termination of a cluster and to ensure that in the event of an error,
--   the instances persist so that you can recover any data stored in their
--   ephemeral instance storage.
--   
--   To terminate a cluster that has been locked by setting
--   <tt>SetTerminationProtection</tt> to <tt>true</tt> , you must first
--   unlock the job flow by a subsequent call to
--   <tt>SetTerminationProtection</tt> in which you set the value to
--   <tt>false</tt> .
--   
--   For more information, see<a>Managing Cluster Termination</a> in the
--   <i>Amazon EMR Management Guide</i> .
module Network.AWS.EMR.SetTerminationProtection

-- | Creates a value of <a>SetTerminationProtection</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>stpJobFlowIds</a> - A list of strings that uniquely identify
--   the clusters to protect. This identifier is returned by
--   <tt>RunJobFlow</tt> and can also be obtained from
--   <tt>DescribeJobFlows</tt> .</li>
--   <li><a>stpTerminationProtected</a> - A Boolean that indicates whether
--   to protect the cluster and prevent the Amazon EC2 instances in the
--   cluster from shutting down due to API calls, user intervention, or
--   job-flow error.</li>
--   </ul>
setTerminationProtection :: Bool -> SetTerminationProtection

-- | The input argument to the <tt>TerminationProtection</tt> operation.
--   
--   <i>See:</i> <a>setTerminationProtection</a> smart constructor.
data SetTerminationProtection

-- | A list of strings that uniquely identify the clusters to protect. This
--   identifier is returned by <tt>RunJobFlow</tt> and can also be obtained
--   from <tt>DescribeJobFlows</tt> .
stpJobFlowIds :: Lens' SetTerminationProtection [Text]

-- | A Boolean that indicates whether to protect the cluster and prevent
--   the Amazon EC2 instances in the cluster from shutting down due to API
--   calls, user intervention, or job-flow error.
stpTerminationProtected :: Lens' SetTerminationProtection Bool

-- | Creates a value of <a>SetTerminationProtectionResponse</a> with the
--   minimum fields required to make a request.
setTerminationProtectionResponse :: SetTerminationProtectionResponse

-- | <i>See:</i> <a>setTerminationProtectionResponse</a> smart constructor.
data SetTerminationProtectionResponse
instance GHC.Generics.Generic Network.AWS.EMR.SetTerminationProtection.SetTerminationProtectionResponse
instance Data.Data.Data Network.AWS.EMR.SetTerminationProtection.SetTerminationProtectionResponse
instance GHC.Show.Show Network.AWS.EMR.SetTerminationProtection.SetTerminationProtectionResponse
instance GHC.Read.Read Network.AWS.EMR.SetTerminationProtection.SetTerminationProtectionResponse
instance GHC.Classes.Eq Network.AWS.EMR.SetTerminationProtection.SetTerminationProtectionResponse
instance GHC.Generics.Generic Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Data.Data.Data Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance GHC.Show.Show Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance GHC.Read.Read Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance GHC.Classes.Eq Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Control.DeepSeq.NFData Network.AWS.EMR.SetTerminationProtection.SetTerminationProtectionResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Control.DeepSeq.NFData Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.SetTerminationProtection.SetTerminationProtection


-- | RunJobFlow creates and starts running a new cluster (job flow). The
--   cluster runs the steps specified. After the steps complete, the
--   cluster stops and the HDFS partition is lost. To prevent loss of data,
--   configure the last step of the job flow to store results in Amazon S3.
--   If the <a>JobFlowInstancesConfig</a>
--   <tt>KeepJobFlowAliveWhenNoSteps</tt> parameter is set to <tt>TRUE</tt>
--   , the cluster transitions to the WAITING state rather than shutting
--   down after the steps have completed.
--   
--   For additional protection, you can set the
--   <a>JobFlowInstancesConfig</a> <tt>TerminationProtected</tt> parameter
--   to <tt>TRUE</tt> to lock the cluster and prevent it from being
--   terminated by API call, user intervention, or in the event of a job
--   flow error.
--   
--   A maximum of 256 steps are allowed in each job flow.
--   
--   If your cluster is long-running (such as a Hive data warehouse) or
--   complex, you may require more than 256 steps to process your data. You
--   can bypass the 256-step limitation in various ways, including using
--   the SSH shell to connect to the master node and submitting queries
--   directly to the software running on the master node, such as Hive and
--   Hadoop. For more information on how to do this, see <a>Add More than
--   256 Steps to a Cluster</a> in the <i>Amazon EMR Management Guide</i> .
--   
--   For long running clusters, we recommend that you periodically store
--   your results.
module Network.AWS.EMR.RunJobFlow

-- | Creates a value of <a>RunJobFlow</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>rjfAMIVersion</a> - For Amazon EMR AMI versions 3.x and 2.x.
--   For Amazon EMR releases 4.0 and later, the Linux AMI is determined by
--   the <tt>ReleaseLabel</tt> specified or by <tt>CustomAmiID</tt> . The
--   version of the Amazon Machine Image (AMI) to use when launching Amazon
--   EC2 instances in the job flow. For details about the AMI versions
--   currently supported in EMR version 3.x and 2.x, see <a>AMI Versions
--   Supported in EMR</a> in the <i>Amazon EMR Developer Guide</i> . If the
--   AMI supports multiple versions of Hadoop (for example, AMI 1.0
--   supports both Hadoop 0.18 and 0.20), you can use the
--   <a>JobFlowInstancesConfig</a> <tt>HadoopVersion</tt> parameter to
--   modify the version of Hadoop from the defaults shown above.</li>
--   <li><a>rjfEBSRootVolumeSize</a> - The size, in GiB, of the EBS root
--   device volume of the Linux AMI that is used for each EC2 instance.
--   Available in Amazon EMR version 4.x and later.</li>
--   <li><a>rjfAdditionalInfo</a> - A JSON string for selecting additional
--   features.</li>
--   <li><a>rjfConfigurations</a> - For Amazon EMR releases 4.0 and later.
--   The list of configurations supplied for the EMR cluster you are
--   creating.</li>
--   <li><a>rjfCustomAMIId</a> - Available only in Amazon EMR version 5.7.0
--   and later. The ID of a custom Amazon EBS-backed Linux AMI. If
--   specified, Amazon EMR uses this AMI when it launches cluster EC2
--   instances. For more information about custom AMIs in Amazon EMR, see
--   <a>Using a Custom AMI</a> in the <i>Amazon EMR Management Guide</i> .
--   If omitted, the cluster uses the base Linux AMI for the
--   <tt>ReleaseLabel</tt> specified. For Amazon EMR versions 2.x and 3.x,
--   use <tt>AmiVersion</tt> instead. For information about creating a
--   custom AMI, see <a>Creating an Amazon EBS-Backed Linux AMI</a> in the
--   <i>Amazon Elastic Compute Cloud User Guide for Linux Instances</i> .
--   For information about finding an AMI ID, see <a>Finding a Linux
--   AMI</a> .</li>
--   <li><a>rjfAutoScalingRole</a> - An IAM role for automatic scaling
--   policies. The default role is <tt>EMR_AutoScaling_DefaultRole</tt> .
--   The IAM role provides permissions that the automatic scaling feature
--   requires to launch and terminate EC2 instances in an instance
--   group.</li>
--   <li><a>rjfSecurityConfiguration</a> - The name of a security
--   configuration to apply to the cluster.</li>
--   <li><a>rjfScaleDownBehavior</a> - Specifies the way that individual
--   Amazon EC2 instances terminate when an automatic scale-in activity
--   occurs or an instance group is resized.
--   <tt>TERMINATE_AT_INSTANCE_HOUR</tt> indicates that Amazon EMR
--   terminates nodes at the instance-hour boundary, regardless of when the
--   request to terminate the instance was submitted. This option is only
--   available with Amazon EMR 5.1.0 and later and is the default for
--   clusters created using that version.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> indicates that Amazon EMR
--   blacklists and drains tasks from nodes before terminating the Amazon
--   EC2 instances, regardless of the instance-hour boundary. With either
--   behavior, Amazon EMR removes the least active nodes first and blocks
--   instance termination if it could lead to HDFS corruption.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> available only in Amazon EMR
--   version 4.1.0 and later, and is the default for versions of Amazon EMR
--   earlier than 5.1.0.</li>
--   <li><a>rjfSteps</a> - A list of steps to run.</li>
--   <li><a>rjfJobFlowRole</a> - Also called instance profile and EC2 role.
--   An IAM role for an EMR cluster. The EC2 instances of the cluster
--   assume this role. The default role is <tt>EMR_EC2_DefaultRole</tt> .
--   In order to use the default role, you must have already created it
--   using the CLI or console.</li>
--   <li><a>rjfBootstrapActions</a> - A list of bootstrap actions to run
--   before Hadoop starts on the cluster nodes.</li>
--   <li><a>rjfReleaseLabel</a> - The release label for the Amazon EMR
--   release. For Amazon EMR 3.x and 2.x AMIs, use <tt>AmiVersion</tt>
--   instead.</li>
--   <li><a>rjfRepoUpgradeOnBoot</a> - Applies only when
--   <tt>CustomAmiID</tt> is used. Specifies which updates from the Amazon
--   Linux AMI package repositories to apply automatically when the
--   instance boots using the AMI. If omitted, the default is
--   <tt>SECURITY</tt> , which indicates that only security updates are
--   applied. If <tt>NONE</tt> is specified, no updates are applied, and
--   all updates must be applied manually.</li>
--   <li><a>rjfLogURI</a> - The location in Amazon S3 to write the log
--   files of the job flow. If a value is not provided, logs are not
--   created.</li>
--   <li><a>rjfKerberosAttributes</a> - Attributes for Kerberos
--   configuration when Kerberos authentication is enabled using a security
--   configuration. For more information see <a>Use Kerberos
--   Authentication</a> in the <i>EMR Management Guide</i> .</li>
--   <li><a>rjfNewSupportedProducts</a> - A list of strings that indicates
--   third-party software to use with the job flow that accepts a user
--   argument list. EMR accepts and forwards the argument list to the
--   corresponding installation script as bootstrap action arguments. For
--   more information, see "Launch a Job Flow on the MapR Distribution for
--   Hadoop" in the <a>Amazon EMR Developer Guide</a> . Supported values
--   are: * "mapr-m3" - launch the cluster using MapR M3 Edition. *
--   "mapr-m5" - launch the cluster using MapR M5 Edition. * "mapr" with
--   the user arguments specifying "--edition,m3" or "--edition,m5" -
--   launch the job flow using MapR M3 or M5 Edition respectively. *
--   "mapr-m7" - launch the cluster using MapR M7 Edition. * "hunk" -
--   launch the cluster with the Hunk Big Data Analtics Platform. * "hue"-
--   launch the cluster with Hue installed. * "spark" - launch the cluster
--   with Apache Spark installed. * "ganglia" - launch the cluster with the
--   Ganglia Monitoring System installed.</li>
--   <li><a>rjfVisibleToAllUsers</a> - Whether the cluster is visible to
--   all IAM users of the AWS account associated with the cluster. If this
--   value is set to <tt>true</tt> , all IAM users of that AWS account can
--   view and (if they have the proper policy permissions set) manage the
--   cluster. If it is set to <tt>false</tt> , only the IAM user that
--   created the cluster can view and manage it.</li>
--   <li><a>rjfSupportedProducts</a> - A list of strings that indicates
--   third-party software to use. For more information, see the <a>Amazon
--   EMR Developer Guide</a> . Currently supported values are: * "mapr-m3"
--   - launch the job flow using MapR M3 Edition. * "mapr-m5" - launch the
--   job flow using MapR M5 Edition.</li>
--   <li><a>rjfApplications</a> - For Amazon EMR releases 4.0 and later. A
--   list of applications for the cluster. Valid values are: <a>Hadoop</a>,
--   <a>Hive</a>, <a>Mahout</a>, <a>Pig</a>, and "Spark." They are case
--   insensitive.</li>
--   <li><a>rjfTags</a> - A list of tags to associate with a cluster and
--   propagate to Amazon EC2 instances.</li>
--   <li><a>rjfServiceRole</a> - The IAM role that will be assumed by the
--   Amazon EMR service to access AWS resources on your behalf.</li>
--   <li><a>rjfName</a> - The name of the job flow.</li>
--   <li><a>rjfInstances</a> - A specification of the number and type of
--   Amazon EC2 instances.</li>
--   </ul>
runJobFlow :: Text -> JobFlowInstancesConfig -> RunJobFlow

-- | Input to the <a>RunJobFlow</a> operation.
--   
--   <i>See:</i> <a>runJobFlow</a> smart constructor.
data RunJobFlow

-- | For Amazon EMR AMI versions 3.x and 2.x. For Amazon EMR releases 4.0
--   and later, the Linux AMI is determined by the <tt>ReleaseLabel</tt>
--   specified or by <tt>CustomAmiID</tt> . The version of the Amazon
--   Machine Image (AMI) to use when launching Amazon EC2 instances in the
--   job flow. For details about the AMI versions currently supported in
--   EMR version 3.x and 2.x, see <a>AMI Versions Supported in EMR</a> in
--   the <i>Amazon EMR Developer Guide</i> . If the AMI supports multiple
--   versions of Hadoop (for example, AMI 1.0 supports both Hadoop 0.18 and
--   0.20), you can use the <a>JobFlowInstancesConfig</a>
--   <tt>HadoopVersion</tt> parameter to modify the version of Hadoop from
--   the defaults shown above.
rjfAMIVersion :: Lens' RunJobFlow (Maybe Text)

-- | The size, in GiB, of the EBS root device volume of the Linux AMI that
--   is used for each EC2 instance. Available in Amazon EMR version 4.x and
--   later.
rjfEBSRootVolumeSize :: Lens' RunJobFlow (Maybe Int)

-- | A JSON string for selecting additional features.
rjfAdditionalInfo :: Lens' RunJobFlow (Maybe Text)

-- | For Amazon EMR releases 4.0 and later. The list of configurations
--   supplied for the EMR cluster you are creating.
rjfConfigurations :: Lens' RunJobFlow [Configuration]

-- | Available only in Amazon EMR version 5.7.0 and later. The ID of a
--   custom Amazon EBS-backed Linux AMI. If specified, Amazon EMR uses this
--   AMI when it launches cluster EC2 instances. For more information about
--   custom AMIs in Amazon EMR, see <a>Using a Custom AMI</a> in the
--   <i>Amazon EMR Management Guide</i> . If omitted, the cluster uses the
--   base Linux AMI for the <tt>ReleaseLabel</tt> specified. For Amazon EMR
--   versions 2.x and 3.x, use <tt>AmiVersion</tt> instead. For information
--   about creating a custom AMI, see <a>Creating an Amazon EBS-Backed
--   Linux AMI</a> in the <i>Amazon Elastic Compute Cloud User Guide for
--   Linux Instances</i> . For information about finding an AMI ID, see
--   <a>Finding a Linux AMI</a> .
rjfCustomAMIId :: Lens' RunJobFlow (Maybe Text)

-- | An IAM role for automatic scaling policies. The default role is
--   <tt>EMR_AutoScaling_DefaultRole</tt> . The IAM role provides
--   permissions that the automatic scaling feature requires to launch and
--   terminate EC2 instances in an instance group.
rjfAutoScalingRole :: Lens' RunJobFlow (Maybe Text)

-- | The name of a security configuration to apply to the cluster.
rjfSecurityConfiguration :: Lens' RunJobFlow (Maybe Text)

-- | Specifies the way that individual Amazon EC2 instances terminate when
--   an automatic scale-in activity occurs or an instance group is resized.
--   <tt>TERMINATE_AT_INSTANCE_HOUR</tt> indicates that Amazon EMR
--   terminates nodes at the instance-hour boundary, regardless of when the
--   request to terminate the instance was submitted. This option is only
--   available with Amazon EMR 5.1.0 and later and is the default for
--   clusters created using that version.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> indicates that Amazon EMR
--   blacklists and drains tasks from nodes before terminating the Amazon
--   EC2 instances, regardless of the instance-hour boundary. With either
--   behavior, Amazon EMR removes the least active nodes first and blocks
--   instance termination if it could lead to HDFS corruption.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> available only in Amazon EMR
--   version 4.1.0 and later, and is the default for versions of Amazon EMR
--   earlier than 5.1.0.
rjfScaleDownBehavior :: Lens' RunJobFlow (Maybe ScaleDownBehavior)

-- | A list of steps to run.
rjfSteps :: Lens' RunJobFlow [StepConfig]

-- | Also called instance profile and EC2 role. An IAM role for an EMR
--   cluster. The EC2 instances of the cluster assume this role. The
--   default role is <tt>EMR_EC2_DefaultRole</tt> . In order to use the
--   default role, you must have already created it using the CLI or
--   console.
rjfJobFlowRole :: Lens' RunJobFlow (Maybe Text)

-- | A list of bootstrap actions to run before Hadoop starts on the cluster
--   nodes.
rjfBootstrapActions :: Lens' RunJobFlow [BootstrapActionConfig]

-- | The release label for the Amazon EMR release. For Amazon EMR 3.x and
--   2.x AMIs, use <tt>AmiVersion</tt> instead.
rjfReleaseLabel :: Lens' RunJobFlow (Maybe Text)

-- | Applies only when <tt>CustomAmiID</tt> is used. Specifies which
--   updates from the Amazon Linux AMI package repositories to apply
--   automatically when the instance boots using the AMI. If omitted, the
--   default is <tt>SECURITY</tt> , which indicates that only security
--   updates are applied. If <tt>NONE</tt> is specified, no updates are
--   applied, and all updates must be applied manually.
rjfRepoUpgradeOnBoot :: Lens' RunJobFlow (Maybe RepoUpgradeOnBoot)

-- | The location in Amazon S3 to write the log files of the job flow. If a
--   value is not provided, logs are not created.
rjfLogURI :: Lens' RunJobFlow (Maybe Text)

-- | Attributes for Kerberos configuration when Kerberos authentication is
--   enabled using a security configuration. For more information see
--   <a>Use Kerberos Authentication</a> in the <i>EMR Management Guide</i>
--   .
rjfKerberosAttributes :: Lens' RunJobFlow (Maybe KerberosAttributes)

-- | A list of strings that indicates third-party software to use with the
--   job flow that accepts a user argument list. EMR accepts and forwards
--   the argument list to the corresponding installation script as
--   bootstrap action arguments. For more information, see "Launch a Job
--   Flow on the MapR Distribution for Hadoop" in the <a>Amazon EMR
--   Developer Guide</a> . Supported values are: * "mapr-m3" - launch the
--   cluster using MapR M3 Edition. * "mapr-m5" - launch the cluster using
--   MapR M5 Edition. * "mapr" with the user arguments specifying
--   "--edition,m3" or "--edition,m5" - launch the job flow using MapR M3
--   or M5 Edition respectively. * "mapr-m7" - launch the cluster using
--   MapR M7 Edition. * "hunk" - launch the cluster with the Hunk Big Data
--   Analtics Platform. * "hue"- launch the cluster with Hue installed. *
--   "spark" - launch the cluster with Apache Spark installed. * "ganglia"
--   - launch the cluster with the Ganglia Monitoring System installed.
rjfNewSupportedProducts :: Lens' RunJobFlow [SupportedProductConfig]

-- | Whether the cluster is visible to all IAM users of the AWS account
--   associated with the cluster. If this value is set to <tt>true</tt> ,
--   all IAM users of that AWS account can view and (if they have the
--   proper policy permissions set) manage the cluster. If it is set to
--   <tt>false</tt> , only the IAM user that created the cluster can view
--   and manage it.
rjfVisibleToAllUsers :: Lens' RunJobFlow (Maybe Bool)

-- | A list of strings that indicates third-party software to use. For more
--   information, see the <a>Amazon EMR Developer Guide</a> . Currently
--   supported values are: * "mapr-m3" - launch the job flow using MapR M3
--   Edition. * "mapr-m5" - launch the job flow using MapR M5 Edition.
rjfSupportedProducts :: Lens' RunJobFlow [Text]

-- | For Amazon EMR releases 4.0 and later. A list of applications for the
--   cluster. Valid values are: <a>Hadoop</a>, <a>Hive</a>, <a>Mahout</a>,
--   <a>Pig</a>, and "Spark." They are case insensitive.
rjfApplications :: Lens' RunJobFlow [Application]

-- | A list of tags to associate with a cluster and propagate to Amazon EC2
--   instances.
rjfTags :: Lens' RunJobFlow [Tag]

-- | The IAM role that will be assumed by the Amazon EMR service to access
--   AWS resources on your behalf.
rjfServiceRole :: Lens' RunJobFlow (Maybe Text)

-- | The name of the job flow.
rjfName :: Lens' RunJobFlow Text

-- | A specification of the number and type of Amazon EC2 instances.
rjfInstances :: Lens' RunJobFlow JobFlowInstancesConfig

-- | Creates a value of <a>RunJobFlowResponse</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>rjfrsJobFlowId</a> - An unique identifier for the job
--   flow.</li>
--   <li><a>rjfrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
runJobFlowResponse :: Int -> RunJobFlowResponse

-- | The result of the <a>RunJobFlow</a> operation.
--   
--   <i>See:</i> <a>runJobFlowResponse</a> smart constructor.
data RunJobFlowResponse

-- | An unique identifier for the job flow.
rjfrsJobFlowId :: Lens' RunJobFlowResponse (Maybe Text)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
rjfrsResponseStatus :: Lens' RunJobFlowResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.RunJobFlow.RunJobFlowResponse
instance Data.Data.Data Network.AWS.EMR.RunJobFlow.RunJobFlowResponse
instance GHC.Show.Show Network.AWS.EMR.RunJobFlow.RunJobFlowResponse
instance GHC.Read.Read Network.AWS.EMR.RunJobFlow.RunJobFlowResponse
instance GHC.Classes.Eq Network.AWS.EMR.RunJobFlow.RunJobFlowResponse
instance GHC.Generics.Generic Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Data.Data.Data Network.AWS.EMR.RunJobFlow.RunJobFlow
instance GHC.Show.Show Network.AWS.EMR.RunJobFlow.RunJobFlow
instance GHC.Read.Read Network.AWS.EMR.RunJobFlow.RunJobFlow
instance GHC.Classes.Eq Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Control.DeepSeq.NFData Network.AWS.EMR.RunJobFlow.RunJobFlowResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Control.DeepSeq.NFData Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.RunJobFlow.RunJobFlow
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.RunJobFlow.RunJobFlow


-- | Removes tags from an Amazon EMR resource. Tags make it easier to
--   associate clusters in various ways, such as grouping clusters to track
--   your Amazon EMR resource allocation costs. For more information, see
--   <a>Tag Clusters</a> .
--   
--   The following example removes the stack tag with value Prod from a
--   cluster:
module Network.AWS.EMR.RemoveTags

-- | Creates a value of <a>RemoveTags</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>rtResourceId</a> - The Amazon EMR resource identifier from
--   which tags will be removed. This value must be a cluster
--   identifier.</li>
--   <li><a>rtTagKeys</a> - A list of tag keys to remove from a
--   resource.</li>
--   </ul>
removeTags :: Text -> RemoveTags

-- | This input identifies a cluster and a list of tags to remove.
--   
--   <i>See:</i> <a>removeTags</a> smart constructor.
data RemoveTags

-- | The Amazon EMR resource identifier from which tags will be removed.
--   This value must be a cluster identifier.
rtResourceId :: Lens' RemoveTags Text

-- | A list of tag keys to remove from a resource.
rtTagKeys :: Lens' RemoveTags [Text]

-- | Creates a value of <a>RemoveTagsResponse</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>rtrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
removeTagsResponse :: Int -> RemoveTagsResponse

-- | This output indicates the result of removing tags from a resource.
--   
--   <i>See:</i> <a>removeTagsResponse</a> smart constructor.
data RemoveTagsResponse

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
rtrsResponseStatus :: Lens' RemoveTagsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.RemoveTags.RemoveTagsResponse
instance Data.Data.Data Network.AWS.EMR.RemoveTags.RemoveTagsResponse
instance GHC.Show.Show Network.AWS.EMR.RemoveTags.RemoveTagsResponse
instance GHC.Read.Read Network.AWS.EMR.RemoveTags.RemoveTagsResponse
instance GHC.Classes.Eq Network.AWS.EMR.RemoveTags.RemoveTagsResponse
instance GHC.Generics.Generic Network.AWS.EMR.RemoveTags.RemoveTags
instance Data.Data.Data Network.AWS.EMR.RemoveTags.RemoveTags
instance GHC.Show.Show Network.AWS.EMR.RemoveTags.RemoveTags
instance GHC.Read.Read Network.AWS.EMR.RemoveTags.RemoveTags
instance GHC.Classes.Eq Network.AWS.EMR.RemoveTags.RemoveTags
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.RemoveTags.RemoveTags
instance Control.DeepSeq.NFData Network.AWS.EMR.RemoveTags.RemoveTagsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.RemoveTags.RemoveTags
instance Control.DeepSeq.NFData Network.AWS.EMR.RemoveTags.RemoveTags
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.RemoveTags.RemoveTags
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.RemoveTags.RemoveTags
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.RemoveTags.RemoveTags
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.RemoveTags.RemoveTags


-- | Removes an automatic scaling policy from a specified instance group
--   within an EMR cluster.
module Network.AWS.EMR.RemoveAutoScalingPolicy

-- | Creates a value of <a>RemoveAutoScalingPolicy</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>raspClusterId</a> - Specifies the ID of a cluster. The instance
--   group to which the automatic scaling policy is applied is within this
--   cluster.</li>
--   <li><a>raspInstanceGroupId</a> - Specifies the ID of the instance
--   group to which the scaling policy is applied.</li>
--   </ul>
removeAutoScalingPolicy :: Text -> Text -> RemoveAutoScalingPolicy

-- | <i>See:</i> <a>removeAutoScalingPolicy</a> smart constructor.
data RemoveAutoScalingPolicy

-- | Specifies the ID of a cluster. The instance group to which the
--   automatic scaling policy is applied is within this cluster.
raspClusterId :: Lens' RemoveAutoScalingPolicy Text

-- | Specifies the ID of the instance group to which the scaling policy is
--   applied.
raspInstanceGroupId :: Lens' RemoveAutoScalingPolicy Text

-- | Creates a value of <a>RemoveAutoScalingPolicyResponse</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>rasprsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
removeAutoScalingPolicyResponse :: Int -> RemoveAutoScalingPolicyResponse

-- | <i>See:</i> <a>removeAutoScalingPolicyResponse</a> smart constructor.
data RemoveAutoScalingPolicyResponse

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
rasprsResponseStatus :: Lens' RemoveAutoScalingPolicyResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicyResponse
instance Data.Data.Data Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicyResponse
instance GHC.Show.Show Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicyResponse
instance GHC.Read.Read Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicyResponse
instance GHC.Classes.Eq Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicyResponse
instance GHC.Generics.Generic Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Data.Data.Data Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance GHC.Show.Show Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance GHC.Read.Read Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance GHC.Classes.Eq Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Control.DeepSeq.NFData Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicyResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Control.DeepSeq.NFData Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicy


-- | Creates or updates an automatic scaling policy for a core instance
--   group or task instance group in an Amazon EMR cluster. The automatic
--   scaling policy defines how an instance group dynamically adds and
--   terminates EC2 instances in response to the value of a CloudWatch
--   metric.
module Network.AWS.EMR.PutAutoScalingPolicy

-- | Creates a value of <a>PutAutoScalingPolicy</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>paspClusterId</a> - Specifies the ID of a cluster. The instance
--   group to which the automatic scaling policy is applied is within this
--   cluster.</li>
--   <li><a>paspInstanceGroupId</a> - Specifies the ID of the instance
--   group to which the automatic scaling policy is applied.</li>
--   <li><a>paspAutoScalingPolicy</a> - Specifies the definition of the
--   automatic scaling policy.</li>
--   </ul>
putAutoScalingPolicy :: Text -> Text -> AutoScalingPolicy -> PutAutoScalingPolicy

-- | <i>See:</i> <a>putAutoScalingPolicy</a> smart constructor.
data PutAutoScalingPolicy

-- | Specifies the ID of a cluster. The instance group to which the
--   automatic scaling policy is applied is within this cluster.
paspClusterId :: Lens' PutAutoScalingPolicy Text

-- | Specifies the ID of the instance group to which the automatic scaling
--   policy is applied.
paspInstanceGroupId :: Lens' PutAutoScalingPolicy Text

-- | Specifies the definition of the automatic scaling policy.
paspAutoScalingPolicy :: Lens' PutAutoScalingPolicy AutoScalingPolicy

-- | Creates a value of <a>PutAutoScalingPolicyResponse</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>pasprsClusterId</a> - Specifies the ID of a cluster. The
--   instance group to which the automatic scaling policy is applied is
--   within this cluster.</li>
--   <li><a>pasprsAutoScalingPolicy</a> - The automatic scaling policy
--   definition.</li>
--   <li><a>pasprsInstanceGroupId</a> - Specifies the ID of the instance
--   group to which the scaling policy is applied.</li>
--   <li><a>pasprsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
putAutoScalingPolicyResponse :: Int -> PutAutoScalingPolicyResponse

-- | <i>See:</i> <a>putAutoScalingPolicyResponse</a> smart constructor.
data PutAutoScalingPolicyResponse

-- | Specifies the ID of a cluster. The instance group to which the
--   automatic scaling policy is applied is within this cluster.
pasprsClusterId :: Lens' PutAutoScalingPolicyResponse (Maybe Text)

-- | The automatic scaling policy definition.
pasprsAutoScalingPolicy :: Lens' PutAutoScalingPolicyResponse (Maybe AutoScalingPolicyDescription)

-- | Specifies the ID of the instance group to which the scaling policy is
--   applied.
pasprsInstanceGroupId :: Lens' PutAutoScalingPolicyResponse (Maybe Text)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
pasprsResponseStatus :: Lens' PutAutoScalingPolicyResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicyResponse
instance Data.Data.Data Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicyResponse
instance GHC.Show.Show Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicyResponse
instance GHC.Read.Read Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicyResponse
instance GHC.Classes.Eq Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicyResponse
instance GHC.Generics.Generic Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Data.Data.Data Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance GHC.Show.Show Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance GHC.Read.Read Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance GHC.Classes.Eq Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Control.DeepSeq.NFData Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicyResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Control.DeepSeq.NFData Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicy


-- | ModifyInstanceGroups modifies the number of nodes and configuration
--   settings of an instance group. The input parameters include the new
--   target instance count for the group and the instance group ID. The
--   call will either succeed or fail atomically.
module Network.AWS.EMR.ModifyInstanceGroups

-- | Creates a value of <a>ModifyInstanceGroups</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>migClusterId</a> - The ID of the cluster to which the instance
--   group belongs.</li>
--   <li><a>migInstanceGroups</a> - Instance groups to change.</li>
--   </ul>
modifyInstanceGroups :: ModifyInstanceGroups

-- | Change the size of some instance groups.
--   
--   <i>See:</i> <a>modifyInstanceGroups</a> smart constructor.
data ModifyInstanceGroups

-- | The ID of the cluster to which the instance group belongs.
migClusterId :: Lens' ModifyInstanceGroups (Maybe Text)

-- | Instance groups to change.
migInstanceGroups :: Lens' ModifyInstanceGroups [InstanceGroupModifyConfig]

-- | Creates a value of <a>ModifyInstanceGroupsResponse</a> with the
--   minimum fields required to make a request.
modifyInstanceGroupsResponse :: ModifyInstanceGroupsResponse

-- | <i>See:</i> <a>modifyInstanceGroupsResponse</a> smart constructor.
data ModifyInstanceGroupsResponse
instance GHC.Generics.Generic Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroupsResponse
instance Data.Data.Data Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroupsResponse
instance GHC.Show.Show Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroupsResponse
instance GHC.Read.Read Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroupsResponse
instance GHC.Classes.Eq Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroupsResponse
instance GHC.Generics.Generic Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Data.Data.Data Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance GHC.Show.Show Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance GHC.Read.Read Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance GHC.Classes.Eq Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Control.DeepSeq.NFData Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroupsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Control.DeepSeq.NFData Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroups


-- | Modifies the target On-Demand and target Spot capacities for the
--   instance fleet with the specified InstanceFleetID within the cluster
--   specified using ClusterID. The call either succeeds or fails
--   atomically.
module Network.AWS.EMR.ModifyInstanceFleet

-- | Creates a value of <a>ModifyInstanceFleet</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>mifClusterId</a> - The unique identifier of the cluster.</li>
--   <li><a>mifInstanceFleet</a> - The unique identifier of the instance
--   fleet.</li>
--   </ul>
modifyInstanceFleet :: Text -> InstanceFleetModifyConfig -> ModifyInstanceFleet

-- | <i>See:</i> <a>modifyInstanceFleet</a> smart constructor.
data ModifyInstanceFleet

-- | The unique identifier of the cluster.
mifClusterId :: Lens' ModifyInstanceFleet Text

-- | The unique identifier of the instance fleet.
mifInstanceFleet :: Lens' ModifyInstanceFleet InstanceFleetModifyConfig

-- | Creates a value of <a>ModifyInstanceFleetResponse</a> with the minimum
--   fields required to make a request.
modifyInstanceFleetResponse :: ModifyInstanceFleetResponse

-- | <i>See:</i> <a>modifyInstanceFleetResponse</a> smart constructor.
data ModifyInstanceFleetResponse
instance GHC.Generics.Generic Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleetResponse
instance Data.Data.Data Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleetResponse
instance GHC.Show.Show Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleetResponse
instance GHC.Read.Read Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleetResponse
instance GHC.Classes.Eq Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleetResponse
instance GHC.Generics.Generic Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Data.Data.Data Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance GHC.Show.Show Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance GHC.Read.Read Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance GHC.Classes.Eq Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Control.DeepSeq.NFData Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleetResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Control.DeepSeq.NFData Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ModifyInstanceFleet.ModifyInstanceFleet


-- | Provides a list of steps for the cluster in reverse order unless you
--   specify stepIds with the request.
--   
--   This operation returns paginated results.
module Network.AWS.EMR.ListSteps

-- | Creates a value of <a>ListSteps</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lsStepIds</a> - The filter to limit the step list based on the
--   identifier of the steps.</li>
--   <li><a>lsStepStates</a> - The filter to limit the step list based on
--   certain states.</li>
--   <li><a>lsMarker</a> - The pagination token that indicates the next set
--   of results to retrieve.</li>
--   <li><a>lsClusterId</a> - The identifier of the cluster for which to
--   list the steps.</li>
--   </ul>
listSteps :: Text -> ListSteps

-- | This input determines which steps to list.
--   
--   <i>See:</i> <a>listSteps</a> smart constructor.
data ListSteps

-- | The filter to limit the step list based on the identifier of the
--   steps.
lsStepIds :: Lens' ListSteps [Text]

-- | The filter to limit the step list based on certain states.
lsStepStates :: Lens' ListSteps [StepState]

-- | The pagination token that indicates the next set of results to
--   retrieve.
lsMarker :: Lens' ListSteps (Maybe Text)

-- | The identifier of the cluster for which to list the steps.
lsClusterId :: Lens' ListSteps Text

-- | Creates a value of <a>ListStepsResponse</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lsrsSteps</a> - The filtered list of steps for the
--   cluster.</li>
--   <li><a>lsrsMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>lsrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
listStepsResponse :: Int -> ListStepsResponse

-- | This output contains the list of steps returned in reverse order. This
--   means that the last step is the first element in the list.
--   
--   <i>See:</i> <a>listStepsResponse</a> smart constructor.
data ListStepsResponse

-- | The filtered list of steps for the cluster.
lsrsSteps :: Lens' ListStepsResponse [StepSummary]

-- | The pagination token that indicates the next set of results to
--   retrieve.
lsrsMarker :: Lens' ListStepsResponse (Maybe Text)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
lsrsResponseStatus :: Lens' ListStepsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.ListSteps.ListStepsResponse
instance Data.Data.Data Network.AWS.EMR.ListSteps.ListStepsResponse
instance GHC.Show.Show Network.AWS.EMR.ListSteps.ListStepsResponse
instance GHC.Read.Read Network.AWS.EMR.ListSteps.ListStepsResponse
instance GHC.Classes.Eq Network.AWS.EMR.ListSteps.ListStepsResponse
instance GHC.Generics.Generic Network.AWS.EMR.ListSteps.ListSteps
instance Data.Data.Data Network.AWS.EMR.ListSteps.ListSteps
instance GHC.Show.Show Network.AWS.EMR.ListSteps.ListSteps
instance GHC.Read.Read Network.AWS.EMR.ListSteps.ListSteps
instance GHC.Classes.Eq Network.AWS.EMR.ListSteps.ListSteps
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ListSteps.ListSteps
instance Control.DeepSeq.NFData Network.AWS.EMR.ListSteps.ListStepsResponse
instance Network.AWS.Pager.AWSPager Network.AWS.EMR.ListSteps.ListSteps
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ListSteps.ListSteps
instance Control.DeepSeq.NFData Network.AWS.EMR.ListSteps.ListSteps
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ListSteps.ListSteps
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ListSteps.ListSteps
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ListSteps.ListSteps
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ListSteps.ListSteps


-- | Lists all the security configurations visible to this account,
--   providing their creation dates and times, and their names. This call
--   returns a maximum of 50 clusters per call, but returns a marker to
--   track the paging of the cluster list across multiple
--   ListSecurityConfigurations calls.
module Network.AWS.EMR.ListSecurityConfigurations

-- | Creates a value of <a>ListSecurityConfigurations</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lscMarker</a> - The pagination token that indicates the set of
--   results to retrieve.</li>
--   </ul>
listSecurityConfigurations :: ListSecurityConfigurations

-- | <i>See:</i> <a>listSecurityConfigurations</a> smart constructor.
data ListSecurityConfigurations

-- | The pagination token that indicates the set of results to retrieve.
lscMarker :: Lens' ListSecurityConfigurations (Maybe Text)

-- | Creates a value of <a>ListSecurityConfigurationsResponse</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lscrsSecurityConfigurations</a> - The creation date and time,
--   and name, of each security configuration.</li>
--   <li><a>lscrsMarker</a> - A pagination token that indicates the next
--   set of results to retrieve. Include the marker in the next
--   ListSecurityConfiguration call to retrieve the next page of results,
--   if required.</li>
--   <li><a>lscrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
listSecurityConfigurationsResponse :: Int -> ListSecurityConfigurationsResponse

-- | <i>See:</i> <a>listSecurityConfigurationsResponse</a> smart
--   constructor.
data ListSecurityConfigurationsResponse

-- | The creation date and time, and name, of each security configuration.
lscrsSecurityConfigurations :: Lens' ListSecurityConfigurationsResponse [SecurityConfigurationSummary]

-- | A pagination token that indicates the next set of results to retrieve.
--   Include the marker in the next ListSecurityConfiguration call to
--   retrieve the next page of results, if required.
lscrsMarker :: Lens' ListSecurityConfigurationsResponse (Maybe Text)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
lscrsResponseStatus :: Lens' ListSecurityConfigurationsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurationsResponse
instance Data.Data.Data Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurationsResponse
instance GHC.Show.Show Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurationsResponse
instance GHC.Read.Read Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurationsResponse
instance GHC.Classes.Eq Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurationsResponse
instance GHC.Generics.Generic Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Data.Data.Data Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance GHC.Show.Show Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance GHC.Read.Read Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance GHC.Classes.Eq Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Control.DeepSeq.NFData Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurationsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Control.DeepSeq.NFData Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurations


-- | Provides information for all active EC2 instances and EC2 instances
--   terminated in the last 30 days, up to a maximum of 2,000. EC2
--   instances in any of the following states are considered active:
--   AWAITING_FULFILLMENT, PROVISIONING, BOOTSTRAPPING, RUNNING.
--   
--   This operation returns paginated results.
module Network.AWS.EMR.ListInstances

-- | Creates a value of <a>ListInstances</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>liInstanceGroupTypes</a> - The type of instance group for which
--   to list the instances.</li>
--   <li><a>liInstanceFleetType</a> - The node type of the instance fleet.
--   For example MASTER, CORE, or TASK.</li>
--   <li><a>liMarker</a> - The pagination token that indicates the next set
--   of results to retrieve.</li>
--   <li><a>liInstanceFleetId</a> - The unique identifier of the instance
--   fleet.</li>
--   <li><a>liInstanceStates</a> - A list of instance states that will
--   filter the instances returned with this request.</li>
--   <li><a>liInstanceGroupId</a> - The identifier of the instance group
--   for which to list the instances.</li>
--   <li><a>liClusterId</a> - The identifier of the cluster for which to
--   list the instances.</li>
--   </ul>
listInstances :: Text -> ListInstances

-- | This input determines which instances to list.
--   
--   <i>See:</i> <a>listInstances</a> smart constructor.
data ListInstances

-- | The type of instance group for which to list the instances.
liInstanceGroupTypes :: Lens' ListInstances [InstanceGroupType]

-- | The node type of the instance fleet. For example MASTER, CORE, or
--   TASK.
liInstanceFleetType :: Lens' ListInstances (Maybe InstanceFleetType)

-- | The pagination token that indicates the next set of results to
--   retrieve.
liMarker :: Lens' ListInstances (Maybe Text)

-- | The unique identifier of the instance fleet.
liInstanceFleetId :: Lens' ListInstances (Maybe Text)

-- | A list of instance states that will filter the instances returned with
--   this request.
liInstanceStates :: Lens' ListInstances [InstanceState]

-- | The identifier of the instance group for which to list the instances.
liInstanceGroupId :: Lens' ListInstances (Maybe Text)

-- | The identifier of the cluster for which to list the instances.
liClusterId :: Lens' ListInstances Text

-- | Creates a value of <a>ListInstancesResponse</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lirsMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>lirsInstances</a> - The list of instances for the cluster and
--   given filters.</li>
--   <li><a>lirsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
listInstancesResponse :: Int -> ListInstancesResponse

-- | This output contains the list of instances.
--   
--   <i>See:</i> <a>listInstancesResponse</a> smart constructor.
data ListInstancesResponse

-- | The pagination token that indicates the next set of results to
--   retrieve.
lirsMarker :: Lens' ListInstancesResponse (Maybe Text)

-- | The list of instances for the cluster and given filters.
lirsInstances :: Lens' ListInstancesResponse [Instance]

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
lirsResponseStatus :: Lens' ListInstancesResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.ListInstances.ListInstancesResponse
instance Data.Data.Data Network.AWS.EMR.ListInstances.ListInstancesResponse
instance GHC.Show.Show Network.AWS.EMR.ListInstances.ListInstancesResponse
instance GHC.Read.Read Network.AWS.EMR.ListInstances.ListInstancesResponse
instance GHC.Classes.Eq Network.AWS.EMR.ListInstances.ListInstancesResponse
instance GHC.Generics.Generic Network.AWS.EMR.ListInstances.ListInstances
instance Data.Data.Data Network.AWS.EMR.ListInstances.ListInstances
instance GHC.Show.Show Network.AWS.EMR.ListInstances.ListInstances
instance GHC.Read.Read Network.AWS.EMR.ListInstances.ListInstances
instance GHC.Classes.Eq Network.AWS.EMR.ListInstances.ListInstances
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ListInstances.ListInstances
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstances.ListInstancesResponse
instance Network.AWS.Pager.AWSPager Network.AWS.EMR.ListInstances.ListInstances
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ListInstances.ListInstances
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstances.ListInstances
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ListInstances.ListInstances
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ListInstances.ListInstances
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ListInstances.ListInstances
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ListInstances.ListInstances


-- | Provides all available details about the instance groups in a cluster.
--   
--   This operation returns paginated results.
module Network.AWS.EMR.ListInstanceGroups

-- | Creates a value of <a>ListInstanceGroups</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ligMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>ligClusterId</a> - The identifier of the cluster for which to
--   list the instance groups.</li>
--   </ul>
listInstanceGroups :: Text -> ListInstanceGroups

-- | This input determines which instance groups to retrieve.
--   
--   <i>See:</i> <a>listInstanceGroups</a> smart constructor.
data ListInstanceGroups

-- | The pagination token that indicates the next set of results to
--   retrieve.
ligMarker :: Lens' ListInstanceGroups (Maybe Text)

-- | The identifier of the cluster for which to list the instance groups.
ligClusterId :: Lens' ListInstanceGroups Text

-- | Creates a value of <a>ListInstanceGroupsResponse</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ligrsMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>ligrsInstanceGroups</a> - The list of instance groups for the
--   cluster and given filters.</li>
--   <li><a>ligrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
listInstanceGroupsResponse :: Int -> ListInstanceGroupsResponse

-- | This input determines which instance groups to retrieve.
--   
--   <i>See:</i> <a>listInstanceGroupsResponse</a> smart constructor.
data ListInstanceGroupsResponse

-- | The pagination token that indicates the next set of results to
--   retrieve.
ligrsMarker :: Lens' ListInstanceGroupsResponse (Maybe Text)

-- | The list of instance groups for the cluster and given filters.
ligrsInstanceGroups :: Lens' ListInstanceGroupsResponse [InstanceGroup]

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
ligrsResponseStatus :: Lens' ListInstanceGroupsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.ListInstanceGroups.ListInstanceGroupsResponse
instance Data.Data.Data Network.AWS.EMR.ListInstanceGroups.ListInstanceGroupsResponse
instance GHC.Show.Show Network.AWS.EMR.ListInstanceGroups.ListInstanceGroupsResponse
instance GHC.Read.Read Network.AWS.EMR.ListInstanceGroups.ListInstanceGroupsResponse
instance GHC.Classes.Eq Network.AWS.EMR.ListInstanceGroups.ListInstanceGroupsResponse
instance GHC.Generics.Generic Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Data.Data.Data Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance GHC.Show.Show Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance GHC.Read.Read Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance GHC.Classes.Eq Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstanceGroups.ListInstanceGroupsResponse
instance Network.AWS.Pager.AWSPager Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups


-- | Lists all available details about the instance fleets in a cluster.
--   
--   This operation returns paginated results.
module Network.AWS.EMR.ListInstanceFleets

-- | Creates a value of <a>ListInstanceFleets</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lifMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>lifClusterId</a> - The unique identifier of the cluster.</li>
--   </ul>
listInstanceFleets :: Text -> ListInstanceFleets

-- | <i>See:</i> <a>listInstanceFleets</a> smart constructor.
data ListInstanceFleets

-- | The pagination token that indicates the next set of results to
--   retrieve.
lifMarker :: Lens' ListInstanceFleets (Maybe Text)

-- | The unique identifier of the cluster.
lifClusterId :: Lens' ListInstanceFleets Text

-- | Creates a value of <a>ListInstanceFleetsResponse</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lifrsInstanceFleets</a> - The list of instance fleets for the
--   cluster and given filters.</li>
--   <li><a>lifrsMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>lifrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
listInstanceFleetsResponse :: Int -> ListInstanceFleetsResponse

-- | <i>See:</i> <a>listInstanceFleetsResponse</a> smart constructor.
data ListInstanceFleetsResponse

-- | The list of instance fleets for the cluster and given filters.
lifrsInstanceFleets :: Lens' ListInstanceFleetsResponse [InstanceFleet]

-- | The pagination token that indicates the next set of results to
--   retrieve.
lifrsMarker :: Lens' ListInstanceFleetsResponse (Maybe Text)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
lifrsResponseStatus :: Lens' ListInstanceFleetsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.ListInstanceFleets.ListInstanceFleetsResponse
instance Data.Data.Data Network.AWS.EMR.ListInstanceFleets.ListInstanceFleetsResponse
instance GHC.Show.Show Network.AWS.EMR.ListInstanceFleets.ListInstanceFleetsResponse
instance GHC.Read.Read Network.AWS.EMR.ListInstanceFleets.ListInstanceFleetsResponse
instance GHC.Classes.Eq Network.AWS.EMR.ListInstanceFleets.ListInstanceFleetsResponse
instance GHC.Generics.Generic Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Data.Data.Data Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance GHC.Show.Show Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance GHC.Read.Read Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance GHC.Classes.Eq Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstanceFleets.ListInstanceFleetsResponse
instance Network.AWS.Pager.AWSPager Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ListInstanceFleets.ListInstanceFleets


-- | Provides the status of all clusters visible to this AWS account.
--   Allows you to filter the list of clusters based on certain criteria;
--   for example, filtering by cluster creation date and time or by status.
--   This call returns a maximum of 50 clusters per call, but returns a
--   marker to track the paging of the cluster list across multiple
--   ListClusters calls.
--   
--   This operation returns paginated results.
module Network.AWS.EMR.ListClusters

-- | Creates a value of <a>ListClusters</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lcCreatedAfter</a> - The creation date and time beginning value
--   filter for listing clusters.</li>
--   <li><a>lcMarker</a> - The pagination token that indicates the next set
--   of results to retrieve.</li>
--   <li><a>lcClusterStates</a> - The cluster state filters to apply when
--   listing clusters.</li>
--   <li><a>lcCreatedBefore</a> - The creation date and time end value
--   filter for listing clusters.</li>
--   </ul>
listClusters :: ListClusters

-- | This input determines how the ListClusters action filters the list of
--   clusters that it returns.
--   
--   <i>See:</i> <a>listClusters</a> smart constructor.
data ListClusters

-- | The creation date and time beginning value filter for listing
--   clusters.
lcCreatedAfter :: Lens' ListClusters (Maybe UTCTime)

-- | The pagination token that indicates the next set of results to
--   retrieve.
lcMarker :: Lens' ListClusters (Maybe Text)

-- | The cluster state filters to apply when listing clusters.
lcClusterStates :: Lens' ListClusters [ClusterState]

-- | The creation date and time end value filter for listing clusters.
lcCreatedBefore :: Lens' ListClusters (Maybe UTCTime)

-- | Creates a value of <a>ListClustersResponse</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lcrsMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>lcrsClusters</a> - The list of clusters for the account based
--   on the given filters.</li>
--   <li><a>lcrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
listClustersResponse :: Int -> ListClustersResponse

-- | This contains a ClusterSummaryList with the cluster details; for
--   example, the cluster IDs, names, and status.
--   
--   <i>See:</i> <a>listClustersResponse</a> smart constructor.
data ListClustersResponse

-- | The pagination token that indicates the next set of results to
--   retrieve.
lcrsMarker :: Lens' ListClustersResponse (Maybe Text)

-- | The list of clusters for the account based on the given filters.
lcrsClusters :: Lens' ListClustersResponse [ClusterSummary]

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
lcrsResponseStatus :: Lens' ListClustersResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.ListClusters.ListClustersResponse
instance Data.Data.Data Network.AWS.EMR.ListClusters.ListClustersResponse
instance GHC.Show.Show Network.AWS.EMR.ListClusters.ListClustersResponse
instance GHC.Read.Read Network.AWS.EMR.ListClusters.ListClustersResponse
instance GHC.Classes.Eq Network.AWS.EMR.ListClusters.ListClustersResponse
instance GHC.Generics.Generic Network.AWS.EMR.ListClusters.ListClusters
instance Data.Data.Data Network.AWS.EMR.ListClusters.ListClusters
instance GHC.Show.Show Network.AWS.EMR.ListClusters.ListClusters
instance GHC.Read.Read Network.AWS.EMR.ListClusters.ListClusters
instance GHC.Classes.Eq Network.AWS.EMR.ListClusters.ListClusters
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ListClusters.ListClusters
instance Control.DeepSeq.NFData Network.AWS.EMR.ListClusters.ListClustersResponse
instance Network.AWS.Pager.AWSPager Network.AWS.EMR.ListClusters.ListClusters
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ListClusters.ListClusters
instance Control.DeepSeq.NFData Network.AWS.EMR.ListClusters.ListClusters
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ListClusters.ListClusters
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ListClusters.ListClusters
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ListClusters.ListClusters
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ListClusters.ListClusters


-- | Provides information about the bootstrap actions associated with a
--   cluster.
--   
--   This operation returns paginated results.
module Network.AWS.EMR.ListBootstrapActions

-- | Creates a value of <a>ListBootstrapActions</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lbaMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>lbaClusterId</a> - The cluster identifier for the bootstrap
--   actions to list.</li>
--   </ul>
listBootstrapActions :: Text -> ListBootstrapActions

-- | This input determines which bootstrap actions to retrieve.
--   
--   <i>See:</i> <a>listBootstrapActions</a> smart constructor.
data ListBootstrapActions

-- | The pagination token that indicates the next set of results to
--   retrieve.
lbaMarker :: Lens' ListBootstrapActions (Maybe Text)

-- | The cluster identifier for the bootstrap actions to list.
lbaClusterId :: Lens' ListBootstrapActions Text

-- | Creates a value of <a>ListBootstrapActionsResponse</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>lbarsBootstrapActions</a> - The bootstrap actions associated
--   with the cluster.</li>
--   <li><a>lbarsMarker</a> - The pagination token that indicates the next
--   set of results to retrieve.</li>
--   <li><a>lbarsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
listBootstrapActionsResponse :: Int -> ListBootstrapActionsResponse

-- | This output contains the bootstrap actions detail.
--   
--   <i>See:</i> <a>listBootstrapActionsResponse</a> smart constructor.
data ListBootstrapActionsResponse

-- | The bootstrap actions associated with the cluster.
lbarsBootstrapActions :: Lens' ListBootstrapActionsResponse [Command]

-- | The pagination token that indicates the next set of results to
--   retrieve.
lbarsMarker :: Lens' ListBootstrapActionsResponse (Maybe Text)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
lbarsResponseStatus :: Lens' ListBootstrapActionsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.ListBootstrapActions.ListBootstrapActionsResponse
instance Data.Data.Data Network.AWS.EMR.ListBootstrapActions.ListBootstrapActionsResponse
instance GHC.Show.Show Network.AWS.EMR.ListBootstrapActions.ListBootstrapActionsResponse
instance GHC.Read.Read Network.AWS.EMR.ListBootstrapActions.ListBootstrapActionsResponse
instance GHC.Classes.Eq Network.AWS.EMR.ListBootstrapActions.ListBootstrapActionsResponse
instance GHC.Generics.Generic Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Data.Data.Data Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance GHC.Show.Show Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance GHC.Read.Read Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance GHC.Classes.Eq Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Control.DeepSeq.NFData Network.AWS.EMR.ListBootstrapActions.ListBootstrapActionsResponse
instance Network.AWS.Pager.AWSPager Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Data.Hashable.Class.Hashable Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Control.DeepSeq.NFData Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions


-- | Provides more detail about the cluster step.
module Network.AWS.EMR.DescribeStep

-- | Creates a value of <a>DescribeStep</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>dsClusterId</a> - The identifier of the cluster with steps to
--   describe.</li>
--   <li><a>dsStepId</a> - The identifier of the step to describe.</li>
--   </ul>
describeStep :: Text -> Text -> DescribeStep

-- | This input determines which step to describe.
--   
--   <i>See:</i> <a>describeStep</a> smart constructor.
data DescribeStep

-- | The identifier of the cluster with steps to describe.
dsClusterId :: Lens' DescribeStep Text

-- | The identifier of the step to describe.
dsStepId :: Lens' DescribeStep Text

-- | Creates a value of <a>DescribeStepResponse</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>dsrsStep</a> - The step details for the requested step
--   identifier.</li>
--   <li><a>dsrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
describeStepResponse :: Int -> DescribeStepResponse

-- | This output contains the description of the cluster step.
--   
--   <i>See:</i> <a>describeStepResponse</a> smart constructor.
data DescribeStepResponse

-- | The step details for the requested step identifier.
dsrsStep :: Lens' DescribeStepResponse (Maybe Step)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
dsrsResponseStatus :: Lens' DescribeStepResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.DescribeStep.DescribeStepResponse
instance Data.Data.Data Network.AWS.EMR.DescribeStep.DescribeStepResponse
instance GHC.Show.Show Network.AWS.EMR.DescribeStep.DescribeStepResponse
instance GHC.Read.Read Network.AWS.EMR.DescribeStep.DescribeStepResponse
instance GHC.Classes.Eq Network.AWS.EMR.DescribeStep.DescribeStepResponse
instance GHC.Generics.Generic Network.AWS.EMR.DescribeStep.DescribeStep
instance Data.Data.Data Network.AWS.EMR.DescribeStep.DescribeStep
instance GHC.Show.Show Network.AWS.EMR.DescribeStep.DescribeStep
instance GHC.Read.Read Network.AWS.EMR.DescribeStep.DescribeStep
instance GHC.Classes.Eq Network.AWS.EMR.DescribeStep.DescribeStep
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.DescribeStep.DescribeStep
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeStep.DescribeStepResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.DescribeStep.DescribeStep
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeStep.DescribeStep
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.DescribeStep.DescribeStep
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.DescribeStep.DescribeStep
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.DescribeStep.DescribeStep
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.DescribeStep.DescribeStep


-- | Provides the details of a security configuration by returning the
--   configuration JSON.
module Network.AWS.EMR.DescribeSecurityConfiguration

-- | Creates a value of <a>DescribeSecurityConfiguration</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>dName</a> - The name of the security configuration.</li>
--   </ul>
describeSecurityConfiguration :: Text -> DescribeSecurityConfiguration

-- | <i>See:</i> <a>describeSecurityConfiguration</a> smart constructor.
data DescribeSecurityConfiguration

-- | The name of the security configuration.
dName :: Lens' DescribeSecurityConfiguration Text

-- | Creates a value of <a>DescribeSecurityConfigurationResponse</a> with
--   the minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>drsSecurityConfiguration</a> - The security configuration
--   details in JSON format.</li>
--   <li><a>drsName</a> - The name of the security configuration.</li>
--   <li><a>drsCreationDateTime</a> - The date and time the security
--   configuration was created</li>
--   <li><a>drsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
describeSecurityConfigurationResponse :: Int -> DescribeSecurityConfigurationResponse

-- | <i>See:</i> <a>describeSecurityConfigurationResponse</a> smart
--   constructor.
data DescribeSecurityConfigurationResponse

-- | The security configuration details in JSON format.
drsSecurityConfiguration :: Lens' DescribeSecurityConfigurationResponse (Maybe Text)

-- | The name of the security configuration.
drsName :: Lens' DescribeSecurityConfigurationResponse (Maybe Text)

-- | The date and time the security configuration was created
drsCreationDateTime :: Lens' DescribeSecurityConfigurationResponse (Maybe UTCTime)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
drsResponseStatus :: Lens' DescribeSecurityConfigurationResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfigurationResponse
instance Data.Data.Data Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfigurationResponse
instance GHC.Show.Show Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfigurationResponse
instance GHC.Read.Read Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfigurationResponse
instance GHC.Classes.Eq Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfigurationResponse
instance GHC.Generics.Generic Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Data.Data.Data Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance GHC.Show.Show Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance GHC.Read.Read Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance GHC.Classes.Eq Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfigurationResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfiguration


-- | Provides cluster-level details including status, hardware and software
--   configuration, VPC settings, and so on. For information about the
--   cluster steps, see <tt>ListSteps</tt> .
module Network.AWS.EMR.DescribeCluster

-- | Creates a value of <a>DescribeCluster</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>dcClusterId</a> - The identifier of the cluster to
--   describe.</li>
--   </ul>
describeCluster :: Text -> DescribeCluster

-- | This input determines which cluster to describe.
--   
--   <i>See:</i> <a>describeCluster</a> smart constructor.
data DescribeCluster

-- | The identifier of the cluster to describe.
dcClusterId :: Lens' DescribeCluster Text

-- | Creates a value of <a>DescribeClusterResponse</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>dcrsResponseStatus</a> - -- | The response status code.</li>
--   <li><a>dcrsCluster</a> - This output contains the details for the
--   requested cluster.</li>
--   </ul>
describeClusterResponse :: Int -> Cluster -> DescribeClusterResponse

-- | This output contains the description of the cluster.
--   
--   <i>See:</i> <a>describeClusterResponse</a> smart constructor.
data DescribeClusterResponse

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
dcrsResponseStatus :: Lens' DescribeClusterResponse Int

-- | This output contains the details for the requested cluster.
dcrsCluster :: Lens' DescribeClusterResponse Cluster
instance GHC.Generics.Generic Network.AWS.EMR.DescribeCluster.DescribeClusterResponse
instance Data.Data.Data Network.AWS.EMR.DescribeCluster.DescribeClusterResponse
instance GHC.Show.Show Network.AWS.EMR.DescribeCluster.DescribeClusterResponse
instance GHC.Read.Read Network.AWS.EMR.DescribeCluster.DescribeClusterResponse
instance GHC.Classes.Eq Network.AWS.EMR.DescribeCluster.DescribeClusterResponse
instance GHC.Generics.Generic Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Data.Data.Data Network.AWS.EMR.DescribeCluster.DescribeCluster
instance GHC.Show.Show Network.AWS.EMR.DescribeCluster.DescribeCluster
instance GHC.Read.Read Network.AWS.EMR.DescribeCluster.DescribeCluster
instance GHC.Classes.Eq Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeCluster.DescribeClusterResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.DescribeCluster.DescribeCluster
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.DescribeCluster.DescribeCluster


-- | Deletes a security configuration.
module Network.AWS.EMR.DeleteSecurityConfiguration

-- | Creates a value of <a>DeleteSecurityConfiguration</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>dscName</a> - The name of the security configuration.</li>
--   </ul>
deleteSecurityConfiguration :: Text -> DeleteSecurityConfiguration

-- | <i>See:</i> <a>deleteSecurityConfiguration</a> smart constructor.
data DeleteSecurityConfiguration

-- | The name of the security configuration.
dscName :: Lens' DeleteSecurityConfiguration Text

-- | Creates a value of <a>DeleteSecurityConfigurationResponse</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>dscrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
deleteSecurityConfigurationResponse :: Int -> DeleteSecurityConfigurationResponse

-- | <i>See:</i> <a>deleteSecurityConfigurationResponse</a> smart
--   constructor.
data DeleteSecurityConfigurationResponse

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
dscrsResponseStatus :: Lens' DeleteSecurityConfigurationResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfigurationResponse
instance Data.Data.Data Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfigurationResponse
instance GHC.Show.Show Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfigurationResponse
instance GHC.Read.Read Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfigurationResponse
instance GHC.Classes.Eq Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfigurationResponse
instance GHC.Generics.Generic Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Data.Data.Data Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance GHC.Show.Show Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance GHC.Read.Read Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance GHC.Classes.Eq Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Control.DeepSeq.NFData Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfigurationResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Control.DeepSeq.NFData Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfiguration


-- | Creates a security configuration, which is stored in the service and
--   can be specified when a cluster is created.
module Network.AWS.EMR.CreateSecurityConfiguration

-- | Creates a value of <a>CreateSecurityConfiguration</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cscName</a> - The name of the security configuration.</li>
--   <li><a>cscSecurityConfiguration</a> - The security configuration
--   details in JSON format. For JSON parameters and examples, see <a>Use
--   Security Configurations to Set Up Cluster Security</a> in the
--   <i>Amazon EMR Management Guide</i> .</li>
--   </ul>
createSecurityConfiguration :: Text -> Text -> CreateSecurityConfiguration

-- | <i>See:</i> <a>createSecurityConfiguration</a> smart constructor.
data CreateSecurityConfiguration

-- | The name of the security configuration.
cscName :: Lens' CreateSecurityConfiguration Text

-- | The security configuration details in JSON format. For JSON parameters
--   and examples, see <a>Use Security Configurations to Set Up Cluster
--   Security</a> in the <i>Amazon EMR Management Guide</i> .
cscSecurityConfiguration :: Lens' CreateSecurityConfiguration Text

-- | Creates a value of <a>CreateSecurityConfigurationResponse</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cscrsResponseStatus</a> - -- | The response status code.</li>
--   <li><a>cscrsName</a> - The name of the security configuration.</li>
--   <li><a>cscrsCreationDateTime</a> - The date and time the security
--   configuration was created.</li>
--   </ul>
createSecurityConfigurationResponse :: Int -> Text -> UTCTime -> CreateSecurityConfigurationResponse

-- | <i>See:</i> <a>createSecurityConfigurationResponse</a> smart
--   constructor.
data CreateSecurityConfigurationResponse

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
cscrsResponseStatus :: Lens' CreateSecurityConfigurationResponse Int

-- | The name of the security configuration.
cscrsName :: Lens' CreateSecurityConfigurationResponse Text

-- | The date and time the security configuration was created.
cscrsCreationDateTime :: Lens' CreateSecurityConfigurationResponse UTCTime
instance GHC.Generics.Generic Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfigurationResponse
instance Data.Data.Data Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfigurationResponse
instance GHC.Show.Show Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfigurationResponse
instance GHC.Read.Read Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfigurationResponse
instance GHC.Classes.Eq Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfigurationResponse
instance GHC.Generics.Generic Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Data.Data.Data Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance GHC.Show.Show Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance GHC.Read.Read Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance GHC.Classes.Eq Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Control.DeepSeq.NFData Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfigurationResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Control.DeepSeq.NFData Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfiguration


-- | Cancels a pending step or steps in a running cluster. Available only
--   in Amazon EMR versions 4.8.0 and later, excluding version 5.0.0. A
--   maximum of 256 steps are allowed in each CancelSteps request.
--   CancelSteps is idempotent but asynchronous; it does not guarantee a
--   step will be canceled, even if the request is successfully submitted.
--   You can only cancel steps that are in a <tt>PENDING</tt> state.
module Network.AWS.EMR.CancelSteps

-- | Creates a value of <a>CancelSteps</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csStepIds</a> - The list of <tt>StepIDs</tt> to cancel. Use
--   <tt>ListSteps</tt> to get steps and their states for the specified
--   cluster.</li>
--   <li><a>csClusterId</a> - The <tt>ClusterID</tt> for which specified
--   steps will be canceled. Use <tt>RunJobFlow</tt> and
--   <tt>ListClusters</tt> to get ClusterIDs.</li>
--   </ul>
cancelSteps :: CancelSteps

-- | The input argument to the <a>CancelSteps</a> operation.
--   
--   <i>See:</i> <a>cancelSteps</a> smart constructor.
data CancelSteps

-- | The list of <tt>StepIDs</tt> to cancel. Use <tt>ListSteps</tt> to get
--   steps and their states for the specified cluster.
csStepIds :: Lens' CancelSteps [Text]

-- | The <tt>ClusterID</tt> for which specified steps will be canceled. Use
--   <tt>RunJobFlow</tt> and <tt>ListClusters</tt> to get ClusterIDs.
csClusterId :: Lens' CancelSteps (Maybe Text)

-- | Creates a value of <a>CancelStepsResponse</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csrsCancelStepsInfoList</a> - A list of <a>CancelStepsInfo</a>
--   , which shows the status of specified cancel requests for each
--   <tt>StepID</tt> specified.</li>
--   <li><a>csrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
cancelStepsResponse :: Int -> CancelStepsResponse

-- | The output for the <a>CancelSteps</a> operation.
--   
--   <i>See:</i> <a>cancelStepsResponse</a> smart constructor.
data CancelStepsResponse

-- | A list of <a>CancelStepsInfo</a> , which shows the status of specified
--   cancel requests for each <tt>StepID</tt> specified.
csrsCancelStepsInfoList :: Lens' CancelStepsResponse [CancelStepsInfo]

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
csrsResponseStatus :: Lens' CancelStepsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.CancelSteps.CancelStepsResponse
instance Data.Data.Data Network.AWS.EMR.CancelSteps.CancelStepsResponse
instance GHC.Show.Show Network.AWS.EMR.CancelSteps.CancelStepsResponse
instance GHC.Read.Read Network.AWS.EMR.CancelSteps.CancelStepsResponse
instance GHC.Classes.Eq Network.AWS.EMR.CancelSteps.CancelStepsResponse
instance GHC.Generics.Generic Network.AWS.EMR.CancelSteps.CancelSteps
instance Data.Data.Data Network.AWS.EMR.CancelSteps.CancelSteps
instance GHC.Show.Show Network.AWS.EMR.CancelSteps.CancelSteps
instance GHC.Read.Read Network.AWS.EMR.CancelSteps.CancelSteps
instance GHC.Classes.Eq Network.AWS.EMR.CancelSteps.CancelSteps
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.CancelSteps.CancelSteps
instance Control.DeepSeq.NFData Network.AWS.EMR.CancelSteps.CancelStepsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.CancelSteps.CancelSteps
instance Control.DeepSeq.NFData Network.AWS.EMR.CancelSteps.CancelSteps
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.CancelSteps.CancelSteps
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.CancelSteps.CancelSteps
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.CancelSteps.CancelSteps
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.CancelSteps.CancelSteps


-- | Adds tags to an Amazon EMR resource. Tags make it easier to associate
--   clusters in various ways, such as grouping clusters to track your
--   Amazon EMR resource allocation costs. For more information, see <a>Tag
--   Clusters</a> .
module Network.AWS.EMR.AddTags

-- | Creates a value of <a>AddTags</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>atResourceId</a> - The Amazon EMR resource identifier to which
--   tags will be added. This value must be a cluster identifier.</li>
--   <li><a>atTags</a> - A list of tags to associate with a cluster and
--   propagate to EC2 instances. Tags are user-defined key/value pairs that
--   consist of a required key string with a maximum of 128 characters, and
--   an optional value string with a maximum of 256 characters.</li>
--   </ul>
addTags :: Text -> AddTags

-- | This input identifies a cluster and a list of tags to attach.
--   
--   <i>See:</i> <a>addTags</a> smart constructor.
data AddTags

-- | The Amazon EMR resource identifier to which tags will be added. This
--   value must be a cluster identifier.
atResourceId :: Lens' AddTags Text

-- | A list of tags to associate with a cluster and propagate to EC2
--   instances. Tags are user-defined key/value pairs that consist of a
--   required key string with a maximum of 128 characters, and an optional
--   value string with a maximum of 256 characters.
atTags :: Lens' AddTags [Tag]

-- | Creates a value of <a>AddTagsResponse</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>atrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
addTagsResponse :: Int -> AddTagsResponse

-- | This output indicates the result of adding tags to a resource.
--   
--   <i>See:</i> <a>addTagsResponse</a> smart constructor.
data AddTagsResponse

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
atrsResponseStatus :: Lens' AddTagsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.AddTags.AddTagsResponse
instance Data.Data.Data Network.AWS.EMR.AddTags.AddTagsResponse
instance GHC.Show.Show Network.AWS.EMR.AddTags.AddTagsResponse
instance GHC.Read.Read Network.AWS.EMR.AddTags.AddTagsResponse
instance GHC.Classes.Eq Network.AWS.EMR.AddTags.AddTagsResponse
instance GHC.Generics.Generic Network.AWS.EMR.AddTags.AddTags
instance Data.Data.Data Network.AWS.EMR.AddTags.AddTags
instance GHC.Show.Show Network.AWS.EMR.AddTags.AddTags
instance GHC.Read.Read Network.AWS.EMR.AddTags.AddTags
instance GHC.Classes.Eq Network.AWS.EMR.AddTags.AddTags
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.AddTags.AddTags
instance Control.DeepSeq.NFData Network.AWS.EMR.AddTags.AddTagsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.AddTags.AddTags
instance Control.DeepSeq.NFData Network.AWS.EMR.AddTags.AddTags
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.AddTags.AddTags
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.AddTags.AddTags
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.AddTags.AddTags
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.AddTags.AddTags


-- | AddJobFlowSteps adds new steps to a running cluster. A maximum of 256
--   steps are allowed in each job flow.
--   
--   If your cluster is long-running (such as a Hive data warehouse) or
--   complex, you may require more than 256 steps to process your data. You
--   can bypass the 256-step limitation in various ways, including using
--   SSH to connect to the master node and submitting queries directly to
--   the software running on the master node, such as Hive and Hadoop. For
--   more information on how to do this, see <a>Add More than 256 Steps to
--   a Cluster</a> in the <i>Amazon EMR Management Guide</i> .
--   
--   A step specifies the location of a JAR file stored either on the
--   master node of the cluster or in Amazon S3. Each step is performed by
--   the main function of the main class of the JAR file. The main class
--   can be specified either in the manifest of the JAR or by using the
--   MainFunction parameter of the step.
--   
--   Amazon EMR executes each step in the order listed. For a step to be
--   considered complete, the main function must exit with a zero exit code
--   and all Hadoop jobs started while the step was running must have
--   completed and run successfully.
--   
--   You can only add steps to a cluster that is in one of the following
--   states: STARTING, BOOTSTRAPPING, RUNNING, or WAITING.
module Network.AWS.EMR.AddJobFlowSteps

-- | Creates a value of <a>AddJobFlowSteps</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ajfsJobFlowId</a> - A string that uniquely identifies the job
--   flow. This identifier is returned by <tt>RunJobFlow</tt> and can also
--   be obtained from <tt>ListClusters</tt> .</li>
--   <li><a>ajfsSteps</a> - A list of <a>StepConfig</a> to be executed by
--   the job flow.</li>
--   </ul>
addJobFlowSteps :: Text -> AddJobFlowSteps

-- | The input argument to the <a>AddJobFlowSteps</a> operation.
--   
--   <i>See:</i> <a>addJobFlowSteps</a> smart constructor.
data AddJobFlowSteps

-- | A string that uniquely identifies the job flow. This identifier is
--   returned by <tt>RunJobFlow</tt> and can also be obtained from
--   <tt>ListClusters</tt> .
ajfsJobFlowId :: Lens' AddJobFlowSteps Text

-- | A list of <a>StepConfig</a> to be executed by the job flow.
ajfsSteps :: Lens' AddJobFlowSteps [StepConfig]

-- | Creates a value of <a>AddJobFlowStepsResponse</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ajfsrsStepIds</a> - The identifiers of the list of steps added
--   to the job flow.</li>
--   <li><a>ajfsrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
addJobFlowStepsResponse :: Int -> AddJobFlowStepsResponse

-- | The output for the <a>AddJobFlowSteps</a> operation.
--   
--   <i>See:</i> <a>addJobFlowStepsResponse</a> smart constructor.
data AddJobFlowStepsResponse

-- | The identifiers of the list of steps added to the job flow.
ajfsrsStepIds :: Lens' AddJobFlowStepsResponse [Text]

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
ajfsrsResponseStatus :: Lens' AddJobFlowStepsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.AddJobFlowSteps.AddJobFlowStepsResponse
instance Data.Data.Data Network.AWS.EMR.AddJobFlowSteps.AddJobFlowStepsResponse
instance GHC.Show.Show Network.AWS.EMR.AddJobFlowSteps.AddJobFlowStepsResponse
instance GHC.Read.Read Network.AWS.EMR.AddJobFlowSteps.AddJobFlowStepsResponse
instance GHC.Classes.Eq Network.AWS.EMR.AddJobFlowSteps.AddJobFlowStepsResponse
instance GHC.Generics.Generic Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Data.Data.Data Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance GHC.Show.Show Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance GHC.Read.Read Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance GHC.Classes.Eq Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Control.DeepSeq.NFData Network.AWS.EMR.AddJobFlowSteps.AddJobFlowStepsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Control.DeepSeq.NFData Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.AddJobFlowSteps.AddJobFlowSteps


-- | Adds one or more instance groups to a running cluster.
module Network.AWS.EMR.AddInstanceGroups

-- | Creates a value of <a>AddInstanceGroups</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aigInstanceGroups</a> - Instance groups to add.</li>
--   <li><a>aigJobFlowId</a> - Job flow in which to add the instance
--   groups.</li>
--   </ul>
addInstanceGroups :: Text -> AddInstanceGroups

-- | Input to an AddInstanceGroups call.
--   
--   <i>See:</i> <a>addInstanceGroups</a> smart constructor.
data AddInstanceGroups

-- | Instance groups to add.
aigInstanceGroups :: Lens' AddInstanceGroups [InstanceGroupConfig]

-- | Job flow in which to add the instance groups.
aigJobFlowId :: Lens' AddInstanceGroups Text

-- | Creates a value of <a>AddInstanceGroupsResponse</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aigrsJobFlowId</a> - The job flow ID in which the instance
--   groups are added.</li>
--   <li><a>aigrsInstanceGroupIds</a> - Instance group IDs of the newly
--   created instance groups.</li>
--   <li><a>aigrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
addInstanceGroupsResponse :: Int -> AddInstanceGroupsResponse

-- | Output from an AddInstanceGroups call.
--   
--   <i>See:</i> <a>addInstanceGroupsResponse</a> smart constructor.
data AddInstanceGroupsResponse

-- | The job flow ID in which the instance groups are added.
aigrsJobFlowId :: Lens' AddInstanceGroupsResponse (Maybe Text)

-- | Instance group IDs of the newly created instance groups.
aigrsInstanceGroupIds :: Lens' AddInstanceGroupsResponse [Text]

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
aigrsResponseStatus :: Lens' AddInstanceGroupsResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.AddInstanceGroups.AddInstanceGroupsResponse
instance Data.Data.Data Network.AWS.EMR.AddInstanceGroups.AddInstanceGroupsResponse
instance GHC.Show.Show Network.AWS.EMR.AddInstanceGroups.AddInstanceGroupsResponse
instance GHC.Read.Read Network.AWS.EMR.AddInstanceGroups.AddInstanceGroupsResponse
instance GHC.Classes.Eq Network.AWS.EMR.AddInstanceGroups.AddInstanceGroupsResponse
instance GHC.Generics.Generic Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Data.Data.Data Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance GHC.Show.Show Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance GHC.Read.Read Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance GHC.Classes.Eq Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Control.DeepSeq.NFData Network.AWS.EMR.AddInstanceGroups.AddInstanceGroupsResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Control.DeepSeq.NFData Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.AddInstanceGroups.AddInstanceGroups


-- | Adds an instance fleet to a running cluster.
module Network.AWS.EMR.AddInstanceFleet

-- | Creates a value of <a>AddInstanceFleet</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aifClusterId</a> - The unique identifier of the cluster.</li>
--   <li><a>aifInstanceFleet</a> - Specifies the configuration of the
--   instance fleet.</li>
--   </ul>
addInstanceFleet :: Text -> InstanceFleetConfig -> AddInstanceFleet

-- | <i>See:</i> <a>addInstanceFleet</a> smart constructor.
data AddInstanceFleet

-- | The unique identifier of the cluster.
aifClusterId :: Lens' AddInstanceFleet Text

-- | Specifies the configuration of the instance fleet.
aifInstanceFleet :: Lens' AddInstanceFleet InstanceFleetConfig

-- | Creates a value of <a>AddInstanceFleetResponse</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aifrsClusterId</a> - The unique identifier of the cluster.</li>
--   <li><a>aifrsInstanceFleetId</a> - The unique identifier of the
--   instance fleet.</li>
--   <li><a>aifrsResponseStatus</a> - -- | The response status code.</li>
--   </ul>
addInstanceFleetResponse :: Int -> AddInstanceFleetResponse

-- | <i>See:</i> <a>addInstanceFleetResponse</a> smart constructor.
data AddInstanceFleetResponse

-- | The unique identifier of the cluster.
aifrsClusterId :: Lens' AddInstanceFleetResponse (Maybe Text)

-- | The unique identifier of the instance fleet.
aifrsInstanceFleetId :: Lens' AddInstanceFleetResponse (Maybe Text)

-- | <ul>
--   <li>- | The response status code.</li>
--   </ul>
aifrsResponseStatus :: Lens' AddInstanceFleetResponse Int
instance GHC.Generics.Generic Network.AWS.EMR.AddInstanceFleet.AddInstanceFleetResponse
instance Data.Data.Data Network.AWS.EMR.AddInstanceFleet.AddInstanceFleetResponse
instance GHC.Show.Show Network.AWS.EMR.AddInstanceFleet.AddInstanceFleetResponse
instance GHC.Read.Read Network.AWS.EMR.AddInstanceFleet.AddInstanceFleetResponse
instance GHC.Classes.Eq Network.AWS.EMR.AddInstanceFleet.AddInstanceFleetResponse
instance GHC.Generics.Generic Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Data.Data.Data Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance GHC.Show.Show Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance GHC.Read.Read Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance GHC.Classes.Eq Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Network.AWS.Types.AWSRequest Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Control.DeepSeq.NFData Network.AWS.EMR.AddInstanceFleet.AddInstanceFleetResponse
instance Data.Hashable.Class.Hashable Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Control.DeepSeq.NFData Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Network.AWS.Data.Headers.ToHeaders Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Data.Aeson.Types.ToJSON.ToJSON Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Network.AWS.Data.Path.ToPath Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet
instance Network.AWS.Data.Query.ToQuery Network.AWS.EMR.AddInstanceFleet.AddInstanceFleet


module Network.AWS.EMR.Waiters

-- | Polls <a>DescribeStep</a> every 30 seconds until a successful state is
--   reached. An error is returned after 60 failed checks.
stepComplete :: Wait DescribeStep

-- | Polls <a>DescribeCluster</a> every 30 seconds until a successful state
--   is reached. An error is returned after 60 failed checks.
clusterTerminated :: Wait DescribeCluster

-- | Polls <a>DescribeCluster</a> every 30 seconds until a successful state
--   is reached. An error is returned after 60 failed checks.
clusterRunning :: Wait DescribeCluster


-- | Amazon EMR is a web service that makes it easy to process large
--   amounts of data efficiently. Amazon EMR uses Hadoop processing
--   combined with several AWS products to do tasks such as web indexing,
--   data mining, log file analysis, machine learning, scientific
--   simulation, and data warehousing.
module Network.AWS.EMR

-- | API version <tt>2009-03-31</tt> of the Amazon Elastic MapReduce SDK
--   configuration.
emr :: Service

-- | This exception occurs when there is something wrong with user input.
_InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError

-- | Indicates that an error occurred while processing the request and that
--   the request was not completed.
_InternalServerError :: AsError a => Getting (First ServiceError) a ServiceError

-- | This exception occurs when there is an internal failure in the EMR
--   service.
_InternalServerException :: AsError a => Getting (First ServiceError) a ServiceError

-- | Polls <a>DescribeStep</a> every 30 seconds until a successful state is
--   reached. An error is returned after 60 failed checks.
stepComplete :: Wait DescribeStep

-- | Polls <a>DescribeCluster</a> every 30 seconds until a successful state
--   is reached. An error is returned after 60 failed checks.
clusterTerminated :: Wait DescribeCluster

-- | Polls <a>DescribeCluster</a> every 30 seconds until a successful state
--   is reached. An error is returned after 60 failed checks.
clusterRunning :: Wait DescribeCluster
data ActionOnFailure
CancelAndWait :: ActionOnFailure
Continue :: ActionOnFailure
TerminateCluster :: ActionOnFailure
TerminateJobFlow :: ActionOnFailure
data AdjustmentType
ChangeInCapacity :: AdjustmentType
ExactCapacity :: AdjustmentType
PercentChangeInCapacity :: AdjustmentType
data AutoScalingPolicyState
Attached :: AutoScalingPolicyState
Attaching :: AutoScalingPolicyState
Detached :: AutoScalingPolicyState
Detaching :: AutoScalingPolicyState
Failed :: AutoScalingPolicyState
Pending :: AutoScalingPolicyState
data AutoScalingPolicyStateChangeReasonCode
CleanupFailure :: AutoScalingPolicyStateChangeReasonCode
ProvisionFailure :: AutoScalingPolicyStateChangeReasonCode
UserRequest :: AutoScalingPolicyStateChangeReasonCode
data CancelStepsRequestStatus
CSRSFailed :: CancelStepsRequestStatus
CSRSSubmitted :: CancelStepsRequestStatus
data ClusterState
CSBootstrapping :: ClusterState
CSRunning :: ClusterState
CSStarting :: ClusterState
CSTerminated :: ClusterState
CSTerminatedWithErrors :: ClusterState
CSTerminating :: ClusterState
CSWaiting :: ClusterState
data ClusterStateChangeReasonCode
CSCRCAllStepsCompleted :: ClusterStateChangeReasonCode
CSCRCBootstrapFailure :: ClusterStateChangeReasonCode
CSCRCInstanceFailure :: ClusterStateChangeReasonCode
CSCRCInstanceFleetTimeout :: ClusterStateChangeReasonCode
CSCRCInternalError :: ClusterStateChangeReasonCode
CSCRCStepFailure :: ClusterStateChangeReasonCode
CSCRCUserRequest :: ClusterStateChangeReasonCode
CSCRCValidationError :: ClusterStateChangeReasonCode
data ComparisonOperator
GreaterThan :: ComparisonOperator
GreaterThanOrEqual :: ComparisonOperator
LessThan :: ComparisonOperator
LessThanOrEqual :: ComparisonOperator
data InstanceCollectionType
InstanceFleet :: InstanceCollectionType
InstanceGroup :: InstanceCollectionType
data InstanceFleetState
IFSBootstrapping :: InstanceFleetState
IFSProvisioning :: InstanceFleetState
IFSResizing :: InstanceFleetState
IFSRunning :: InstanceFleetState
IFSSuspended :: InstanceFleetState
IFSTerminated :: InstanceFleetState
IFSTerminating :: InstanceFleetState
data InstanceFleetStateChangeReasonCode
IFSCRCClusterTerminated :: InstanceFleetStateChangeReasonCode
IFSCRCInstanceFailure :: InstanceFleetStateChangeReasonCode
IFSCRCInternalError :: InstanceFleetStateChangeReasonCode
IFSCRCValidationError :: InstanceFleetStateChangeReasonCode
data InstanceFleetType
IFTCore :: InstanceFleetType
IFTMaster :: InstanceFleetType
IFTTask :: InstanceFleetType
data InstanceGroupState
Arrested :: InstanceGroupState
Bootstrapping :: InstanceGroupState
Ended :: InstanceGroupState
Provisioning :: InstanceGroupState
Resizing :: InstanceGroupState
Running :: InstanceGroupState
ShuttingDown :: InstanceGroupState
Suspended :: InstanceGroupState
Terminated :: InstanceGroupState
Terminating :: InstanceGroupState
data InstanceGroupStateChangeReasonCode
ClusterTerminated :: InstanceGroupStateChangeReasonCode
InstanceFailure :: InstanceGroupStateChangeReasonCode
InternalError :: InstanceGroupStateChangeReasonCode
ValidationError :: InstanceGroupStateChangeReasonCode
data InstanceGroupType
Core :: InstanceGroupType
Master :: InstanceGroupType
Task :: InstanceGroupType
data InstanceRoleType
IRTCore :: InstanceRoleType
IRTMaster :: InstanceRoleType
IRTTask :: InstanceRoleType
data InstanceState
ISAwaitingFulfillment :: InstanceState
ISBootstrapping :: InstanceState
ISProvisioning :: InstanceState
ISRunning :: InstanceState
ISTerminated :: InstanceState
data InstanceStateChangeReasonCode
ISCRCBootstrapFailure :: InstanceStateChangeReasonCode
ISCRCClusterTerminated :: InstanceStateChangeReasonCode
ISCRCInstanceFailure :: InstanceStateChangeReasonCode
ISCRCInternalError :: InstanceStateChangeReasonCode
ISCRCValidationError :: InstanceStateChangeReasonCode
data MarketType
OnDemand :: MarketType
Spot :: MarketType
data RepoUpgradeOnBoot
RUOBNone :: RepoUpgradeOnBoot
RUOBSecurity :: RepoUpgradeOnBoot
data ScaleDownBehavior
TerminateAtInstanceHour :: ScaleDownBehavior
TerminateAtTaskCompletion :: ScaleDownBehavior
data SpotProvisioningTimeoutAction
SPTASwitchToOnDemand :: SpotProvisioningTimeoutAction
SPTATerminateCluster :: SpotProvisioningTimeoutAction
data Statistic
Average :: Statistic
Maximum :: Statistic
Minimum :: Statistic
SampleCount :: Statistic
Sum :: Statistic
data StepState
SSCancelPending :: StepState
SSCancelled :: StepState
SSCompleted :: StepState
SSFailed :: StepState
SSInterrupted :: StepState
SSPending :: StepState
SSRunning :: StepState
data StepStateChangeReasonCode
SSCRCNone :: StepStateChangeReasonCode
data Unit
Bits :: Unit
BitsPerSecond :: Unit
Bytes :: Unit
BytesPerSecond :: Unit
Count :: Unit
CountPerSecond :: Unit
GigaBits :: Unit
GigaBitsPerSecond :: Unit
GigaBytes :: Unit
GigaBytesPerSecond :: Unit
KiloBits :: Unit
KiloBitsPerSecond :: Unit
KiloBytes :: Unit
KiloBytesPerSecond :: Unit
MegaBits :: Unit
MegaBitsPerSecond :: Unit
MegaBytes :: Unit
MegaBytesPerSecond :: Unit
MicroSeconds :: Unit
MilliSeconds :: Unit
None :: Unit
Percent :: Unit
Seconds :: Unit
TeraBits :: Unit
TeraBitsPerSecond :: Unit
TeraBytes :: Unit
TeraBytesPerSecond :: Unit

-- | An application is any Amazon or third-party software that you can add
--   to the cluster. This structure contains a list of strings that
--   indicates the software to use with the cluster and accepts a user
--   argument list. Amazon EMR accepts and forwards the argument list to
--   the corresponding installation script as bootstrap action argument.
--   For more information, see <a>Using the MapR Distribution for
--   Hadoop</a> . Currently supported values are:
--   
--   <ul>
--   <li>"mapr-m3" - launch the cluster using MapR M3 Edition.</li>
--   <li>"mapr-m5" - launch the cluster using MapR M5 Edition.</li>
--   <li>"mapr" with the user arguments specifying "--edition,m3" or
--   "--edition,m5" - launch the cluster using MapR M3 or M5 Edition,
--   respectively.</li>
--   </ul>
--   
--   <i>See:</i> <a>application</a> smart constructor.
data Application

-- | Creates a value of <a>Application</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aArgs</a> - Arguments for Amazon EMR to pass to the
--   application.</li>
--   <li><a>aAdditionalInfo</a> - This option is for advanced users only.
--   This is meta information about third-party applications that
--   third-party vendors use for testing purposes.</li>
--   <li><a>aName</a> - The name of the application.</li>
--   <li><a>aVersion</a> - The version of the application.</li>
--   </ul>
application :: Application

-- | Arguments for Amazon EMR to pass to the application.
aArgs :: Lens' Application [Text]

-- | This option is for advanced users only. This is meta information about
--   third-party applications that third-party vendors use for testing
--   purposes.
aAdditionalInfo :: Lens' Application (HashMap Text Text)

-- | The name of the application.
aName :: Lens' Application (Maybe Text)

-- | The version of the application.
aVersion :: Lens' Application (Maybe Text)

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. An automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   <tt>PutAutoScalingPolicy</tt> .
--   
--   <i>See:</i> <a>autoScalingPolicy</a> smart constructor.
data AutoScalingPolicy

-- | Creates a value of <a>AutoScalingPolicy</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspConstraints</a> - The upper and lower EC2 instance limits
--   for an automatic scaling policy. Automatic scaling activity will not
--   cause an instance group to grow above or below these limits.</li>
--   <li><a>aspRules</a> - The scale-in and scale-out rules that comprise
--   the automatic scaling policy.</li>
--   </ul>
autoScalingPolicy :: ScalingConstraints -> AutoScalingPolicy

-- | The upper and lower EC2 instance limits for an automatic scaling
--   policy. Automatic scaling activity will not cause an instance group to
--   grow above or below these limits.
aspConstraints :: Lens' AutoScalingPolicy ScalingConstraints

-- | The scale-in and scale-out rules that comprise the automatic scaling
--   policy.
aspRules :: Lens' AutoScalingPolicy [ScalingRule]

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. The automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   <tt>PutAutoScalingPolicy</tt> .
--   
--   <i>See:</i> <a>autoScalingPolicyDescription</a> smart constructor.
data AutoScalingPolicyDescription

-- | Creates a value of <a>AutoScalingPolicyDescription</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspdStatus</a> - The status of an automatic scaling
--   policy.</li>
--   <li><a>aspdRules</a> - The scale-in and scale-out rules that comprise
--   the automatic scaling policy.</li>
--   <li><a>aspdConstraints</a> - The upper and lower EC2 instance limits
--   for an automatic scaling policy. Automatic scaling activity will not
--   cause an instance group to grow above or below these limits.</li>
--   </ul>
autoScalingPolicyDescription :: AutoScalingPolicyDescription

-- | The status of an automatic scaling policy.
aspdStatus :: Lens' AutoScalingPolicyDescription (Maybe AutoScalingPolicyStatus)

-- | The scale-in and scale-out rules that comprise the automatic scaling
--   policy.
aspdRules :: Lens' AutoScalingPolicyDescription [ScalingRule]

-- | The upper and lower EC2 instance limits for an automatic scaling
--   policy. Automatic scaling activity will not cause an instance group to
--   grow above or below these limits.
aspdConstraints :: Lens' AutoScalingPolicyDescription (Maybe ScalingConstraints)

-- | The reason for an <a>AutoScalingPolicyStatus</a> change.
--   
--   <i>See:</i> <a>autoScalingPolicyStateChangeReason</a> smart
--   constructor.
data AutoScalingPolicyStateChangeReason

-- | Creates a value of <a>AutoScalingPolicyStateChangeReason</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspscrCode</a> - The code indicating the reason for the change
--   in status.<tt>USER_REQUEST</tt> indicates that the scaling policy
--   status was changed by a user. <tt>PROVISION_FAILURE</tt> indicates
--   that the status change was because the policy failed to provision.
--   <tt>CLEANUP_FAILURE</tt> indicates an error.</li>
--   <li><a>aspscrMessage</a> - A friendly, more verbose message that
--   accompanies an automatic scaling policy state change.</li>
--   </ul>
autoScalingPolicyStateChangeReason :: AutoScalingPolicyStateChangeReason

-- | The code indicating the reason for the change in
--   status.<tt>USER_REQUEST</tt> indicates that the scaling policy status
--   was changed by a user. <tt>PROVISION_FAILURE</tt> indicates that the
--   status change was because the policy failed to provision.
--   <tt>CLEANUP_FAILURE</tt> indicates an error.
aspscrCode :: Lens' AutoScalingPolicyStateChangeReason (Maybe AutoScalingPolicyStateChangeReasonCode)

-- | A friendly, more verbose message that accompanies an automatic scaling
--   policy state change.
aspscrMessage :: Lens' AutoScalingPolicyStateChangeReason (Maybe Text)

-- | The status of an automatic scaling policy.
--   
--   <i>See:</i> <a>autoScalingPolicyStatus</a> smart constructor.
data AutoScalingPolicyStatus

-- | Creates a value of <a>AutoScalingPolicyStatus</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>aspsState</a> - Indicates the status of the automatic scaling
--   policy.</li>
--   <li><a>aspsStateChangeReason</a> - The reason for a change in
--   status.</li>
--   </ul>
autoScalingPolicyStatus :: AutoScalingPolicyStatus

-- | Indicates the status of the automatic scaling policy.
aspsState :: Lens' AutoScalingPolicyStatus (Maybe AutoScalingPolicyState)

-- | The reason for a change in status.
aspsStateChangeReason :: Lens' AutoScalingPolicyStatus (Maybe AutoScalingPolicyStateChangeReason)

-- | Configuration of a bootstrap action.
--   
--   <i>See:</i> <a>bootstrapActionConfig</a> smart constructor.
data BootstrapActionConfig

-- | Creates a value of <a>BootstrapActionConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>bacName</a> - The name of the bootstrap action.</li>
--   <li><a>bacScriptBootstrapAction</a> - The script run by the bootstrap
--   action.</li>
--   </ul>
bootstrapActionConfig :: Text -> ScriptBootstrapActionConfig -> BootstrapActionConfig

-- | The name of the bootstrap action.
bacName :: Lens' BootstrapActionConfig Text

-- | The script run by the bootstrap action.
bacScriptBootstrapAction :: Lens' BootstrapActionConfig ScriptBootstrapActionConfig

-- | Specification of the status of a CancelSteps request. Available only
--   in Amazon EMR version 4.8.0 and later, excluding version 5.0.0.
--   
--   <i>See:</i> <a>cancelStepsInfo</a> smart constructor.
data CancelStepsInfo

-- | Creates a value of <a>CancelStepsInfo</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csiStatus</a> - The status of a CancelSteps Request. The value
--   may be SUBMITTED or FAILED.</li>
--   <li><a>csiStepId</a> - The encrypted StepId of a step.</li>
--   <li><a>csiReason</a> - The reason for the failure if the CancelSteps
--   request fails.</li>
--   </ul>
cancelStepsInfo :: CancelStepsInfo

-- | The status of a CancelSteps Request. The value may be SUBMITTED or
--   FAILED.
csiStatus :: Lens' CancelStepsInfo (Maybe CancelStepsRequestStatus)

-- | The encrypted StepId of a step.
csiStepId :: Lens' CancelStepsInfo (Maybe Text)

-- | The reason for the failure if the CancelSteps request fails.
csiReason :: Lens' CancelStepsInfo (Maybe Text)

-- | The definition of a CloudWatch metric alarm, which determines when an
--   automatic scaling activity is triggered. When the defined alarm
--   conditions are satisfied, scaling activity begins.
--   
--   <i>See:</i> <a>cloudWatchAlarmDefinition</a> smart constructor.
data CloudWatchAlarmDefinition

-- | Creates a value of <a>CloudWatchAlarmDefinition</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cwadEvaluationPeriods</a> - The number of periods, expressed in
--   seconds using <tt>Period</tt> , during which the alarm condition must
--   exist before the alarm triggers automatic scaling activity. The
--   default value is <tt>1</tt> .</li>
--   <li><a>cwadNamespace</a> - The namespace for the CloudWatch metric.
--   The default is <tt>AWS/ElasticMapReduce</tt> .</li>
--   <li><a>cwadDimensions</a> - A CloudWatch metric dimension.</li>
--   <li><a>cwadUnit</a> - The unit of measure associated with the
--   CloudWatch metric being watched. The value specified for <tt>Unit</tt>
--   must correspond to the units specified in the CloudWatch metric.</li>
--   <li><a>cwadStatistic</a> - The statistic to apply to the metric
--   associated with the alarm. The default is <tt>AVERAGE</tt> .</li>
--   <li><a>cwadComparisonOperator</a> - Determines how the metric
--   specified by <tt>MetricName</tt> is compared to the value specified by
--   <tt>Threshold</tt> .</li>
--   <li><a>cwadMetricName</a> - The name of the CloudWatch metric that is
--   watched to determine an alarm condition.</li>
--   <li><a>cwadPeriod</a> - The period, in seconds, over which the
--   statistic is applied. EMR CloudWatch metrics are emitted every five
--   minutes (300 seconds), so if an EMR CloudWatch metric is specified,
--   specify <tt>300</tt> .</li>
--   <li><a>cwadThreshold</a> - The value against which the specified
--   statistic is compared.</li>
--   </ul>
cloudWatchAlarmDefinition :: ComparisonOperator -> Text -> Int -> Double -> CloudWatchAlarmDefinition

-- | The number of periods, expressed in seconds using <tt>Period</tt> ,
--   during which the alarm condition must exist before the alarm triggers
--   automatic scaling activity. The default value is <tt>1</tt> .
cwadEvaluationPeriods :: Lens' CloudWatchAlarmDefinition (Maybe Int)

-- | The namespace for the CloudWatch metric. The default is
--   <tt>AWS/ElasticMapReduce</tt> .
cwadNamespace :: Lens' CloudWatchAlarmDefinition (Maybe Text)

-- | A CloudWatch metric dimension.
cwadDimensions :: Lens' CloudWatchAlarmDefinition [MetricDimension]

-- | The unit of measure associated with the CloudWatch metric being
--   watched. The value specified for <tt>Unit</tt> must correspond to the
--   units specified in the CloudWatch metric.
cwadUnit :: Lens' CloudWatchAlarmDefinition (Maybe Unit)

-- | The statistic to apply to the metric associated with the alarm. The
--   default is <tt>AVERAGE</tt> .
cwadStatistic :: Lens' CloudWatchAlarmDefinition (Maybe Statistic)

-- | Determines how the metric specified by <tt>MetricName</tt> is compared
--   to the value specified by <tt>Threshold</tt> .
cwadComparisonOperator :: Lens' CloudWatchAlarmDefinition ComparisonOperator

-- | The name of the CloudWatch metric that is watched to determine an
--   alarm condition.
cwadMetricName :: Lens' CloudWatchAlarmDefinition Text

-- | The period, in seconds, over which the statistic is applied. EMR
--   CloudWatch metrics are emitted every five minutes (300 seconds), so if
--   an EMR CloudWatch metric is specified, specify <tt>300</tt> .
cwadPeriod :: Lens' CloudWatchAlarmDefinition Int

-- | The value against which the specified statistic is compared.
cwadThreshold :: Lens' CloudWatchAlarmDefinition Double

-- | The detailed description of the cluster.
--   
--   <i>See:</i> <a>cluster</a> smart constructor.
data Cluster

-- | Creates a value of <a>Cluster</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cluRequestedAMIVersion</a> - The AMI version requested for this
--   cluster.</li>
--   <li><a>cluEBSRootVolumeSize</a> - The size, in GiB, of the EBS root
--   device volume of the Linux AMI that is used for each EC2 instance.
--   Available in Amazon EMR version 4.x and later.</li>
--   <li><a>cluEC2InstanceAttributes</a> - Provides information about the
--   EC2 instances in a cluster grouped by category. For example, key name,
--   subnet ID, IAM instance profile, and so on.</li>
--   <li><a>cluNormalizedInstanceHours</a> - An approximation of the cost
--   of the cluster, represented in m1.small/hours. This value is
--   incremented one time for every hour an m1.small instance runs. Larger
--   instances are weighted more, so an EC2 instance that is roughly four
--   times more expensive would result in the normalized instance hours
--   being incremented by four. This result is only an approximation and
--   does not reflect the actual billing rate.</li>
--   <li><a>cluConfigurations</a> - Applies only to Amazon EMR releases 4.x
--   and later. The list of Configurations supplied to the EMR
--   cluster.</li>
--   <li><a>cluCustomAMIId</a> - Available only in Amazon EMR version 5.7.0
--   and later. The ID of a custom Amazon EBS-backed Linux AMI if the
--   cluster uses a custom AMI.</li>
--   <li><a>cluAutoScalingRole</a> - An IAM role for automatic scaling
--   policies. The default role is <tt>EMR_AutoScaling_DefaultRole</tt> .
--   The IAM role provides permissions that the automatic scaling feature
--   requires to launch and terminate EC2 instances in an instance
--   group.</li>
--   <li><a>cluSecurityConfiguration</a> - The name of the security
--   configuration applied to the cluster.</li>
--   <li><a>cluScaleDownBehavior</a> - The way that individual Amazon EC2
--   instances terminate when an automatic scale-in activity occurs or an
--   instance group is resized. <tt>TERMINATE_AT_INSTANCE_HOUR</tt>
--   indicates that Amazon EMR terminates nodes at the instance-hour
--   boundary, regardless of when the request to terminate the instance was
--   submitted. This option is only available with Amazon EMR 5.1.0 and
--   later and is the default for clusters created using that version.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> indicates that Amazon EMR
--   blacklists and drains tasks from nodes before terminating the Amazon
--   EC2 instances, regardless of the instance-hour boundary. With either
--   behavior, Amazon EMR removes the least active nodes first and blocks
--   instance termination if it could lead to HDFS corruption.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> is available only in Amazon EMR
--   version 4.1.0 and later, and is the default for versions of Amazon EMR
--   earlier than 5.1.0.</li>
--   <li><a>cluInstanceCollectionType</a> - The instance group
--   configuration of the cluster. A value of <tt>INSTANCE_GROUP</tt>
--   indicates a uniform instance group configuration. A value of
--   <tt>INSTANCE_FLEET</tt> indicates an instance fleets
--   configuration.</li>
--   <li><a>cluReleaseLabel</a> - The release label for the Amazon EMR
--   release.</li>
--   <li><a>cluRepoUpgradeOnBoot</a> - Applies only when
--   <tt>CustomAmiID</tt> is used. Specifies the type of updates that are
--   applied from the Amazon Linux AMI package repositories when an
--   instance boots using the AMI.</li>
--   <li><a>cluLogURI</a> - The path to the Amazon S3 location where logs
--   for this cluster are stored.</li>
--   <li><a>cluKerberosAttributes</a> - Attributes for Kerberos
--   configuration when Kerberos authentication is enabled using a security
--   configuration. For more information see <a>Use Kerberos
--   Authentication</a> in the <i>EMR Management Guide</i> .</li>
--   <li><a>cluRunningAMIVersion</a> - The AMI version running on this
--   cluster.</li>
--   <li><a>cluMasterPublicDNSName</a> - The DNS name of the master node.
--   If the cluster is on a private subnet, this is the private DNS name.
--   On a public subnet, this is the public DNS name.</li>
--   <li><a>cluTerminationProtected</a> - Indicates whether Amazon EMR will
--   lock the cluster to prevent the EC2 instances from being terminated by
--   an API call or user intervention, or in the event of a cluster
--   error.</li>
--   <li><a>cluVisibleToAllUsers</a> - Indicates whether the cluster is
--   visible to all IAM users of the AWS account associated with the
--   cluster. If this value is set to <tt>true</tt> , all IAM users of that
--   AWS account can view and manage the cluster if they have the proper
--   policy permissions set. If this value is <tt>false</tt> , only the IAM
--   user that created the cluster can view and manage it. This value can
--   be changed using the <tt>SetVisibleToAllUsers</tt> action.</li>
--   <li><a>cluAutoTerminate</a> - Specifies whether the cluster should
--   terminate after completing all steps.</li>
--   <li><a>cluApplications</a> - The applications installed on this
--   cluster.</li>
--   <li><a>cluTags</a> - A list of tags associated with a cluster.</li>
--   <li><a>cluServiceRole</a> - The IAM role that will be assumed by the
--   Amazon EMR service to access AWS resources on your behalf.</li>
--   <li><a>cluId</a> - The unique identifier for the cluster.</li>
--   <li><a>cluName</a> - The name of the cluster.</li>
--   <li><a>cluStatus</a> - The current status details about the
--   cluster.</li>
--   </ul>
cluster :: Text -> Text -> ClusterStatus -> Cluster

-- | The AMI version requested for this cluster.
cluRequestedAMIVersion :: Lens' Cluster (Maybe Text)

-- | The size, in GiB, of the EBS root device volume of the Linux AMI that
--   is used for each EC2 instance. Available in Amazon EMR version 4.x and
--   later.
cluEBSRootVolumeSize :: Lens' Cluster (Maybe Int)

-- | Provides information about the EC2 instances in a cluster grouped by
--   category. For example, key name, subnet ID, IAM instance profile, and
--   so on.
cluEC2InstanceAttributes :: Lens' Cluster (Maybe EC2InstanceAttributes)

-- | An approximation of the cost of the cluster, represented in
--   m1.small/hours. This value is incremented one time for every hour an
--   m1.small instance runs. Larger instances are weighted more, so an EC2
--   instance that is roughly four times more expensive would result in the
--   normalized instance hours being incremented by four. This result is
--   only an approximation and does not reflect the actual billing rate.
cluNormalizedInstanceHours :: Lens' Cluster (Maybe Int)

-- | Applies only to Amazon EMR releases 4.x and later. The list of
--   Configurations supplied to the EMR cluster.
cluConfigurations :: Lens' Cluster [Configuration]

-- | Available only in Amazon EMR version 5.7.0 and later. The ID of a
--   custom Amazon EBS-backed Linux AMI if the cluster uses a custom AMI.
cluCustomAMIId :: Lens' Cluster (Maybe Text)

-- | An IAM role for automatic scaling policies. The default role is
--   <tt>EMR_AutoScaling_DefaultRole</tt> . The IAM role provides
--   permissions that the automatic scaling feature requires to launch and
--   terminate EC2 instances in an instance group.
cluAutoScalingRole :: Lens' Cluster (Maybe Text)

-- | The name of the security configuration applied to the cluster.
cluSecurityConfiguration :: Lens' Cluster (Maybe Text)

-- | The way that individual Amazon EC2 instances terminate when an
--   automatic scale-in activity occurs or an instance group is resized.
--   <tt>TERMINATE_AT_INSTANCE_HOUR</tt> indicates that Amazon EMR
--   terminates nodes at the instance-hour boundary, regardless of when the
--   request to terminate the instance was submitted. This option is only
--   available with Amazon EMR 5.1.0 and later and is the default for
--   clusters created using that version.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> indicates that Amazon EMR
--   blacklists and drains tasks from nodes before terminating the Amazon
--   EC2 instances, regardless of the instance-hour boundary. With either
--   behavior, Amazon EMR removes the least active nodes first and blocks
--   instance termination if it could lead to HDFS corruption.
--   <tt>TERMINATE_AT_TASK_COMPLETION</tt> is available only in Amazon EMR
--   version 4.1.0 and later, and is the default for versions of Amazon EMR
--   earlier than 5.1.0.
cluScaleDownBehavior :: Lens' Cluster (Maybe ScaleDownBehavior)

-- | The instance group configuration of the cluster. A value of
--   <tt>INSTANCE_GROUP</tt> indicates a uniform instance group
--   configuration. A value of <tt>INSTANCE_FLEET</tt> indicates an
--   instance fleets configuration.
cluInstanceCollectionType :: Lens' Cluster (Maybe InstanceCollectionType)

-- | The release label for the Amazon EMR release.
cluReleaseLabel :: Lens' Cluster (Maybe Text)

-- | Applies only when <tt>CustomAmiID</tt> is used. Specifies the type of
--   updates that are applied from the Amazon Linux AMI package
--   repositories when an instance boots using the AMI.
cluRepoUpgradeOnBoot :: Lens' Cluster (Maybe RepoUpgradeOnBoot)

-- | The path to the Amazon S3 location where logs for this cluster are
--   stored.
cluLogURI :: Lens' Cluster (Maybe Text)

-- | Attributes for Kerberos configuration when Kerberos authentication is
--   enabled using a security configuration. For more information see
--   <a>Use Kerberos Authentication</a> in the <i>EMR Management Guide</i>
--   .
cluKerberosAttributes :: Lens' Cluster (Maybe KerberosAttributes)

-- | The AMI version running on this cluster.
cluRunningAMIVersion :: Lens' Cluster (Maybe Text)

-- | The DNS name of the master node. If the cluster is on a private
--   subnet, this is the private DNS name. On a public subnet, this is the
--   public DNS name.
cluMasterPublicDNSName :: Lens' Cluster (Maybe Text)

-- | Indicates whether Amazon EMR will lock the cluster to prevent the EC2
--   instances from being terminated by an API call or user intervention,
--   or in the event of a cluster error.
cluTerminationProtected :: Lens' Cluster (Maybe Bool)

-- | Indicates whether the cluster is visible to all IAM users of the AWS
--   account associated with the cluster. If this value is set to
--   <tt>true</tt> , all IAM users of that AWS account can view and manage
--   the cluster if they have the proper policy permissions set. If this
--   value is <tt>false</tt> , only the IAM user that created the cluster
--   can view and manage it. This value can be changed using the
--   <tt>SetVisibleToAllUsers</tt> action.
cluVisibleToAllUsers :: Lens' Cluster (Maybe Bool)

-- | Specifies whether the cluster should terminate after completing all
--   steps.
cluAutoTerminate :: Lens' Cluster (Maybe Bool)

-- | The applications installed on this cluster.
cluApplications :: Lens' Cluster [Application]

-- | A list of tags associated with a cluster.
cluTags :: Lens' Cluster [Tag]

-- | The IAM role that will be assumed by the Amazon EMR service to access
--   AWS resources on your behalf.
cluServiceRole :: Lens' Cluster (Maybe Text)

-- | The unique identifier for the cluster.
cluId :: Lens' Cluster Text

-- | The name of the cluster.
cluName :: Lens' Cluster Text

-- | The current status details about the cluster.
cluStatus :: Lens' Cluster ClusterStatus

-- | The reason that the cluster changed to its current state.
--   
--   <i>See:</i> <a>clusterStateChangeReason</a> smart constructor.
data ClusterStateChangeReason

-- | Creates a value of <a>ClusterStateChangeReason</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cscrCode</a> - The programmatic code for the state change
--   reason.</li>
--   <li><a>cscrMessage</a> - The descriptive message for the state change
--   reason.</li>
--   </ul>
clusterStateChangeReason :: ClusterStateChangeReason

-- | The programmatic code for the state change reason.
cscrCode :: Lens' ClusterStateChangeReason (Maybe ClusterStateChangeReasonCode)

-- | The descriptive message for the state change reason.
cscrMessage :: Lens' ClusterStateChangeReason (Maybe Text)

-- | The detailed status of the cluster.
--   
--   <i>See:</i> <a>clusterStatus</a> smart constructor.
data ClusterStatus

-- | Creates a value of <a>ClusterStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csState</a> - The current state of the cluster.</li>
--   <li><a>csStateChangeReason</a> - The reason for the cluster status
--   change.</li>
--   <li><a>csTimeline</a> - A timeline that represents the status of a
--   cluster over the lifetime of the cluster.</li>
--   </ul>
clusterStatus :: ClusterStatus

-- | The current state of the cluster.
csState :: Lens' ClusterStatus (Maybe ClusterState)

-- | The reason for the cluster status change.
csStateChangeReason :: Lens' ClusterStatus (Maybe ClusterStateChangeReason)

-- | A timeline that represents the status of a cluster over the lifetime
--   of the cluster.
csTimeline :: Lens' ClusterStatus (Maybe ClusterTimeline)

-- | The summary description of the cluster.
--   
--   <i>See:</i> <a>clusterSummary</a> smart constructor.
data ClusterSummary

-- | Creates a value of <a>ClusterSummary</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>csStatus</a> - The details about the current status of the
--   cluster.</li>
--   <li><a>csNormalizedInstanceHours</a> - An approximation of the cost of
--   the cluster, represented in m1.small/hours. This value is incremented
--   one time for every hour an m1.small instance runs. Larger instances
--   are weighted more, so an EC2 instance that is roughly four times more
--   expensive would result in the normalized instance hours being
--   incremented by four. This result is only an approximation and does not
--   reflect the actual billing rate.</li>
--   <li><a>csName</a> - The name of the cluster.</li>
--   <li><a>csId</a> - The unique identifier for the cluster.</li>
--   </ul>
clusterSummary :: ClusterSummary

-- | The details about the current status of the cluster.
csStatus :: Lens' ClusterSummary (Maybe ClusterStatus)

-- | An approximation of the cost of the cluster, represented in
--   m1.small/hours. This value is incremented one time for every hour an
--   m1.small instance runs. Larger instances are weighted more, so an EC2
--   instance that is roughly four times more expensive would result in the
--   normalized instance hours being incremented by four. This result is
--   only an approximation and does not reflect the actual billing rate.
csNormalizedInstanceHours :: Lens' ClusterSummary (Maybe Int)

-- | The name of the cluster.
csName :: Lens' ClusterSummary (Maybe Text)

-- | The unique identifier for the cluster.
csId :: Lens' ClusterSummary (Maybe Text)

-- | Represents the timeline of the cluster's lifecycle.
--   
--   <i>See:</i> <a>clusterTimeline</a> smart constructor.
data ClusterTimeline

-- | Creates a value of <a>ClusterTimeline</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ctReadyDateTime</a> - The date and time when the cluster was
--   ready to execute steps.</li>
--   <li><a>ctCreationDateTime</a> - The creation date and time of the
--   cluster.</li>
--   <li><a>ctEndDateTime</a> - The date and time when the cluster was
--   terminated.</li>
--   </ul>
clusterTimeline :: ClusterTimeline

-- | The date and time when the cluster was ready to execute steps.
ctReadyDateTime :: Lens' ClusterTimeline (Maybe UTCTime)

-- | The creation date and time of the cluster.
ctCreationDateTime :: Lens' ClusterTimeline (Maybe UTCTime)

-- | The date and time when the cluster was terminated.
ctEndDateTime :: Lens' ClusterTimeline (Maybe UTCTime)

-- | An entity describing an executable that runs on a cluster.
--   
--   <i>See:</i> <a>command</a> smart constructor.
data Command

-- | Creates a value of <a>Command</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cArgs</a> - Arguments for Amazon EMR to pass to the command for
--   execution.</li>
--   <li><a>cScriptPath</a> - The Amazon S3 location of the command
--   script.</li>
--   <li><a>cName</a> - The name of the command.</li>
--   </ul>
command :: Command

-- | Arguments for Amazon EMR to pass to the command for execution.
cArgs :: Lens' Command [Text]

-- | The Amazon S3 location of the command script.
cScriptPath :: Lens' Command (Maybe Text)

-- | The name of the command.
cName :: Lens' Command (Maybe Text)

-- | An optional configuration specification to be used when provisioning
--   cluster instances, which can include configurations for applications
--   and software bundled with Amazon EMR. A configuration consists of a
--   classification, properties, and optional nested configurations. A
--   classification refers to an application-specific configuration file.
--   Properties are the settings you want to change in that file. For more
--   information, see <a>Configuring Applications</a> .
--   
--   <i>See:</i> <a>configuration</a> smart constructor.
data Configuration

-- | Creates a value of <a>Configuration</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>cConfigurations</a> - A list of additional configurations to
--   apply within a configuration object.</li>
--   <li><a>cClassification</a> - The classification within a
--   configuration.</li>
--   <li><a>cProperties</a> - A set of properties specified within a
--   configuration classification.</li>
--   </ul>
configuration :: Configuration

-- | A list of additional configurations to apply within a configuration
--   object.
cConfigurations :: Lens' Configuration [Configuration]

-- | The classification within a configuration.
cClassification :: Lens' Configuration (Maybe Text)

-- | A set of properties specified within a configuration classification.
cProperties :: Lens' Configuration (HashMap Text Text)

-- | Configuration of requested EBS block device associated with the
--   instance group.
--   
--   <i>See:</i> <a>ebsBlockDevice</a> smart constructor.
data EBSBlockDevice

-- | Creates a value of <a>EBSBlockDevice</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ebdDevice</a> - The device name that is exposed to the
--   instance, such as <i>dev</i>sdh.</li>
--   <li><a>ebdVolumeSpecification</a> - EBS volume specifications such as
--   volume type, IOPS, and size (GiB) that will be requested for the EBS
--   volume attached to an EC2 instance in the cluster.</li>
--   </ul>
ebsBlockDevice :: EBSBlockDevice

-- | The device name that is exposed to the instance, such as
--   <i>dev</i>sdh.
ebdDevice :: Lens' EBSBlockDevice (Maybe Text)

-- | EBS volume specifications such as volume type, IOPS, and size (GiB)
--   that will be requested for the EBS volume attached to an EC2 instance
--   in the cluster.
ebdVolumeSpecification :: Lens' EBSBlockDevice (Maybe VolumeSpecification)

-- | Configuration of requested EBS block device associated with the
--   instance group with count of volumes that will be associated to every
--   instance.
--   
--   <i>See:</i> <a>ebsBlockDeviceConfig</a> smart constructor.
data EBSBlockDeviceConfig

-- | Creates a value of <a>EBSBlockDeviceConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ebdcVolumesPerInstance</a> - Number of EBS volumes with a
--   specific volume configuration that will be associated with every
--   instance in the instance group</li>
--   <li><a>ebdcVolumeSpecification</a> - EBS volume specifications such as
--   volume type, IOPS, and size (GiB) that will be requested for the EBS
--   volume attached to an EC2 instance in the cluster.</li>
--   </ul>
ebsBlockDeviceConfig :: VolumeSpecification -> EBSBlockDeviceConfig

-- | Number of EBS volumes with a specific volume configuration that will
--   be associated with every instance in the instance group
ebdcVolumesPerInstance :: Lens' EBSBlockDeviceConfig (Maybe Int)

-- | EBS volume specifications such as volume type, IOPS, and size (GiB)
--   that will be requested for the EBS volume attached to an EC2 instance
--   in the cluster.
ebdcVolumeSpecification :: Lens' EBSBlockDeviceConfig VolumeSpecification

-- | The Amazon EBS configuration of a cluster instance.
--   
--   <i>See:</i> <a>ebsConfiguration</a> smart constructor.
data EBSConfiguration

-- | Creates a value of <a>EBSConfiguration</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ecEBSOptimized</a> - Indicates whether an Amazon EBS volume is
--   EBS-optimized.</li>
--   <li><a>ecEBSBlockDeviceConfigs</a> - An array of Amazon EBS volume
--   specifications attached to a cluster instance.</li>
--   </ul>
ebsConfiguration :: EBSConfiguration

-- | Indicates whether an Amazon EBS volume is EBS-optimized.
ecEBSOptimized :: Lens' EBSConfiguration (Maybe Bool)

-- | An array of Amazon EBS volume specifications attached to a cluster
--   instance.
ecEBSBlockDeviceConfigs :: Lens' EBSConfiguration [EBSBlockDeviceConfig]

-- | EBS block device that's attached to an EC2 instance.
--   
--   <i>See:</i> <a>ebsVolume</a> smart constructor.
data EBSVolume

-- | Creates a value of <a>EBSVolume</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>evDevice</a> - The device name that is exposed to the instance,
--   such as <i>dev</i>sdh.</li>
--   <li><a>evVolumeId</a> - The volume identifier of the EBS volume.</li>
--   </ul>
ebsVolume :: EBSVolume

-- | The device name that is exposed to the instance, such as
--   <i>dev</i>sdh.
evDevice :: Lens' EBSVolume (Maybe Text)

-- | The volume identifier of the EBS volume.
evVolumeId :: Lens' EBSVolume (Maybe Text)

-- | Provides information about the EC2 instances in a cluster grouped by
--   category. For example, key name, subnet ID, IAM instance profile, and
--   so on.
--   
--   <i>See:</i> <a>ec2InstanceAttributes</a> smart constructor.
data EC2InstanceAttributes

-- | Creates a value of <a>EC2InstanceAttributes</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>eiaEC2KeyName</a> - The name of the Amazon EC2 key pair to use
--   when connecting with SSH into the master node as a user named
--   "hadoop".</li>
--   <li><a>eiaEmrManagedSlaveSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the slave nodes.</li>
--   <li><a>eiaAdditionalSlaveSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the slave nodes.</li>
--   <li><a>eiaRequestedEC2SubnetIds</a> - Applies to clusters configured
--   with the instance fleets option. Specifies the unique identifier of
--   one or more Amazon EC2 subnets in which to launch EC2 cluster
--   instances. Subnets must exist within the same VPC. Amazon EMR chooses
--   the EC2 subnet with the best fit from among the list of
--   <tt>RequestedEc2SubnetIds</tt> , and then launches all cluster
--   instances within that Subnet. If this value is not specified, and the
--   account and region support EC2-Classic networks, the cluster launches
--   instances in the EC2-Classic network and uses
--   <tt>RequestedEc2AvailabilityZones</tt> instead of this setting. If
--   EC2-Classic is not supported, and no Subnet is specified, Amazon EMR
--   chooses the subnet for you. <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified
--   together.</li>
--   <li><a>eiaAdditionalMasterSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the master node.</li>
--   <li><a>eiaIAMInstanceProfile</a> - The IAM role that was specified
--   when the cluster was launched. The EC2 instances of the cluster assume
--   this role.</li>
--   <li><a>eiaEmrManagedMasterSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the master node.</li>
--   <li><a>eiaEC2SubnetId</a> - To launch the cluster in Amazon VPC, set
--   this parameter to the identifier of the Amazon VPC subnet where you
--   want the cluster to launch. If you do not specify this value, the
--   cluster is launched in the normal AWS cloud, outside of a VPC. Amazon
--   VPC currently does not support cluster compute quadruple extra large
--   (cc1.4xlarge) instances. Thus, you cannot specify the cc1.4xlarge
--   instance type for nodes of a cluster launched in a VPC.</li>
--   <li><a>eiaRequestedEC2AvailabilityZones</a> - Applies to clusters
--   configured with the instance fleets option. Specifies one or more
--   Availability Zones in which to launch EC2 cluster instances when the
--   EC2-Classic network configuration is supported. Amazon EMR chooses the
--   Availability Zone with the best fit from among the list of
--   <tt>RequestedEc2AvailabilityZones</tt> , and then launches all cluster
--   instances within that Availability Zone. If you do not specify this
--   value, Amazon EMR chooses the Availability Zone for you.
--   <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified
--   together.</li>
--   <li><a>eiaServiceAccessSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the Amazon EMR service to access
--   clusters in VPC private subnets.</li>
--   <li><a>eiaEC2AvailabilityZone</a> - The Availability Zone in which the
--   cluster will run.</li>
--   </ul>
ec2InstanceAttributes :: EC2InstanceAttributes

-- | The name of the Amazon EC2 key pair to use when connecting with SSH
--   into the master node as a user named "hadoop".
eiaEC2KeyName :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The identifier of the Amazon EC2 security group for the slave nodes.
eiaEmrManagedSlaveSecurityGroup :: Lens' EC2InstanceAttributes (Maybe Text)

-- | A list of additional Amazon EC2 security group IDs for the slave
--   nodes.
eiaAdditionalSlaveSecurityGroups :: Lens' EC2InstanceAttributes [Text]

-- | Applies to clusters configured with the instance fleets option.
--   Specifies the unique identifier of one or more Amazon EC2 subnets in
--   which to launch EC2 cluster instances. Subnets must exist within the
--   same VPC. Amazon EMR chooses the EC2 subnet with the best fit from
--   among the list of <tt>RequestedEc2SubnetIds</tt> , and then launches
--   all cluster instances within that Subnet. If this value is not
--   specified, and the account and region support EC2-Classic networks,
--   the cluster launches instances in the EC2-Classic network and uses
--   <tt>RequestedEc2AvailabilityZones</tt> instead of this setting. If
--   EC2-Classic is not supported, and no Subnet is specified, Amazon EMR
--   chooses the subnet for you. <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified together.
eiaRequestedEC2SubnetIds :: Lens' EC2InstanceAttributes [Text]

-- | A list of additional Amazon EC2 security group IDs for the master
--   node.
eiaAdditionalMasterSecurityGroups :: Lens' EC2InstanceAttributes [Text]

-- | The IAM role that was specified when the cluster was launched. The EC2
--   instances of the cluster assume this role.
eiaIAMInstanceProfile :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The identifier of the Amazon EC2 security group for the master node.
eiaEmrManagedMasterSecurityGroup :: Lens' EC2InstanceAttributes (Maybe Text)

-- | To launch the cluster in Amazon VPC, set this parameter to the
--   identifier of the Amazon VPC subnet where you want the cluster to
--   launch. If you do not specify this value, the cluster is launched in
--   the normal AWS cloud, outside of a VPC. Amazon VPC currently does not
--   support cluster compute quadruple extra large (cc1.4xlarge) instances.
--   Thus, you cannot specify the cc1.4xlarge instance type for nodes of a
--   cluster launched in a VPC.
eiaEC2SubnetId :: Lens' EC2InstanceAttributes (Maybe Text)

-- | Applies to clusters configured with the instance fleets option.
--   Specifies one or more Availability Zones in which to launch EC2
--   cluster instances when the EC2-Classic network configuration is
--   supported. Amazon EMR chooses the Availability Zone with the best fit
--   from among the list of <tt>RequestedEc2AvailabilityZones</tt> , and
--   then launches all cluster instances within that Availability Zone. If
--   you do not specify this value, Amazon EMR chooses the Availability
--   Zone for you. <tt>RequestedEc2SubnetIDs</tt> and
--   <tt>RequestedEc2AvailabilityZones</tt> cannot be specified together.
eiaRequestedEC2AvailabilityZones :: Lens' EC2InstanceAttributes [Text]

-- | The identifier of the Amazon EC2 security group for the Amazon EMR
--   service to access clusters in VPC private subnets.
eiaServiceAccessSecurityGroup :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The Availability Zone in which the cluster will run.
eiaEC2AvailabilityZone :: Lens' EC2InstanceAttributes (Maybe Text)

-- | The details of the step failure. The service attempts to detect the
--   root cause for many common failures.
--   
--   <i>See:</i> <a>failureDetails</a> smart constructor.
data FailureDetails

-- | Creates a value of <a>FailureDetails</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>fdLogFile</a> - The path to the log file where the step failure
--   root cause was originally recorded.</li>
--   <li><a>fdReason</a> - The reason for the step failure. In the case
--   where the service cannot successfully determine the root cause of the
--   failure, it returns "Unknown Error" as a reason.</li>
--   <li><a>fdMessage</a> - The descriptive message including the error the
--   EMR service has identified as the cause of step failure. This is text
--   from an error log that describes the root cause of the failure.</li>
--   </ul>
failureDetails :: FailureDetails

-- | The path to the log file where the step failure root cause was
--   originally recorded.
fdLogFile :: Lens' FailureDetails (Maybe Text)

-- | The reason for the step failure. In the case where the service cannot
--   successfully determine the root cause of the failure, it returns
--   "Unknown Error" as a reason.
fdReason :: Lens' FailureDetails (Maybe Text)

-- | The descriptive message including the error the EMR service has
--   identified as the cause of step failure. This is text from an error
--   log that describes the root cause of the failure.
fdMessage :: Lens' FailureDetails (Maybe Text)

-- | A job flow step consisting of a JAR file whose main function will be
--   executed. The main function submits a job for Hadoop to execute and
--   waits for the job to finish or fail.
--   
--   <i>See:</i> <a>hadoopJARStepConfig</a> smart constructor.
data HadoopJARStepConfig

-- | Creates a value of <a>HadoopJARStepConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>hjscArgs</a> - A list of command line arguments passed to the
--   JAR file's main function when executed.</li>
--   <li><a>hjscMainClass</a> - The name of the main class in the specified
--   Java file. If not specified, the JAR file should specify a Main-Class
--   in its manifest file.</li>
--   <li><a>hjscProperties</a> - A list of Java properties that are set
--   when the step runs. You can use these properties to pass key value
--   pairs to your main function.</li>
--   <li><a>hjscJAR</a> - A path to a JAR file run during the step.</li>
--   </ul>
hadoopJARStepConfig :: Text -> HadoopJARStepConfig

-- | A list of command line arguments passed to the JAR file's main
--   function when executed.
hjscArgs :: Lens' HadoopJARStepConfig [Text]

-- | The name of the main class in the specified Java file. If not
--   specified, the JAR file should specify a Main-Class in its manifest
--   file.
hjscMainClass :: Lens' HadoopJARStepConfig (Maybe Text)

-- | A list of Java properties that are set when the step runs. You can use
--   these properties to pass key value pairs to your main function.
hjscProperties :: Lens' HadoopJARStepConfig [KeyValue]

-- | A path to a JAR file run during the step.
hjscJAR :: Lens' HadoopJARStepConfig Text

-- | A cluster step consisting of a JAR file whose main function will be
--   executed. The main function submits a job for Hadoop to execute and
--   waits for the job to finish or fail.
--   
--   <i>See:</i> <a>hadoopStepConfig</a> smart constructor.
data HadoopStepConfig

-- | Creates a value of <a>HadoopStepConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>hscArgs</a> - The list of command line arguments to pass to the
--   JAR file's main function for execution.</li>
--   <li><a>hscJAR</a> - The path to the JAR file that runs during the
--   step.</li>
--   <li><a>hscMainClass</a> - The name of the main class in the specified
--   Java file. If not specified, the JAR file should specify a main class
--   in its manifest file.</li>
--   <li><a>hscProperties</a> - The list of Java properties that are set
--   when the step runs. You can use these properties to pass key value
--   pairs to your main function.</li>
--   </ul>
hadoopStepConfig :: HadoopStepConfig

-- | The list of command line arguments to pass to the JAR file's main
--   function for execution.
hscArgs :: Lens' HadoopStepConfig [Text]

-- | The path to the JAR file that runs during the step.
hscJAR :: Lens' HadoopStepConfig (Maybe Text)

-- | The name of the main class in the specified Java file. If not
--   specified, the JAR file should specify a main class in its manifest
--   file.
hscMainClass :: Lens' HadoopStepConfig (Maybe Text)

-- | The list of Java properties that are set when the step runs. You can
--   use these properties to pass key value pairs to your main function.
hscProperties :: Lens' HadoopStepConfig (HashMap Text Text)

-- | Represents an EC2 instance provisioned as part of cluster.
--   
--   <i>See:</i> <a>instance'</a> smart constructor.
data Instance

-- | Creates a value of <a>Instance</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>iStatus</a> - The current status of the instance.</li>
--   <li><a>iPublicDNSName</a> - The public DNS name of the instance.</li>
--   <li><a>iEBSVolumes</a> - The list of EBS volumes that are attached to
--   this instance.</li>
--   <li><a>iEC2InstanceId</a> - The unique identifier of the instance in
--   Amazon EC2.</li>
--   <li><a>iInstanceType</a> - The EC2 instance type, for example
--   <tt>m3.xlarge</tt> .</li>
--   <li><a>iMarket</a> - The instance purchasing option. Valid values are
--   <tt>ON_DEMAND</tt> or <tt>SPOT</tt> .</li>
--   <li><a>iPrivateIPAddress</a> - The private IP address of the
--   instance.</li>
--   <li><a>iInstanceFleetId</a> - The unique identifier of the instance
--   fleet to which an EC2 instance belongs.</li>
--   <li><a>iId</a> - The unique identifier for the instance in Amazon
--   EMR.</li>
--   <li><a>iInstanceGroupId</a> - The identifier of the instance group to
--   which this instance belongs.</li>
--   <li><a>iPrivateDNSName</a> - The private DNS name of the
--   instance.</li>
--   <li><a>iPublicIPAddress</a> - The public IP address of the
--   instance.</li>
--   </ul>
instance' :: Instance

-- | The current status of the instance.
iStatus :: Lens' Instance (Maybe InstanceStatus)

-- | The public DNS name of the instance.
iPublicDNSName :: Lens' Instance (Maybe Text)

-- | The list of EBS volumes that are attached to this instance.
iEBSVolumes :: Lens' Instance [EBSVolume]

-- | The unique identifier of the instance in Amazon EC2.
iEC2InstanceId :: Lens' Instance (Maybe Text)

-- | The EC2 instance type, for example <tt>m3.xlarge</tt> .
iInstanceType :: Lens' Instance (Maybe Text)

-- | The instance purchasing option. Valid values are <tt>ON_DEMAND</tt> or
--   <tt>SPOT</tt> .
iMarket :: Lens' Instance (Maybe MarketType)

-- | The private IP address of the instance.
iPrivateIPAddress :: Lens' Instance (Maybe Text)

-- | The unique identifier of the instance fleet to which an EC2 instance
--   belongs.
iInstanceFleetId :: Lens' Instance (Maybe Text)

-- | The unique identifier for the instance in Amazon EMR.
iId :: Lens' Instance (Maybe Text)

-- | The identifier of the instance group to which this instance belongs.
iInstanceGroupId :: Lens' Instance (Maybe Text)

-- | The private DNS name of the instance.
iPrivateDNSName :: Lens' Instance (Maybe Text)

-- | The public IP address of the instance.
iPublicIPAddress :: Lens' Instance (Maybe Text)

-- | Describes an instance fleet, which is a group of EC2 instances that
--   host a particular node type (master, core, or task) in an Amazon EMR
--   cluster. Instance fleets can consist of a mix of instance types and
--   On-Demand and Spot instances, which are provisioned to meet a defined
--   target capacity.
--   
--   <i>See:</i> <a>instanceFleet</a> smart constructor.
data InstanceFleet

-- | Creates a value of <a>InstanceFleet</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifProvisionedSpotCapacity</a> - The number of Spot units that
--   have been provisioned for this instance fleet to fulfill
--   <tt>TargetSpotCapacity</tt> . This provisioned capacity might be less
--   than or greater than <tt>TargetSpotCapacity</tt> .</li>
--   <li><a>ifStatus</a> - The current status of the instance fleet.</li>
--   <li><a>ifTargetOnDemandCapacity</a> - The target capacity of On-Demand
--   units for the instance fleet, which determines how many On-Demand
--   instances to provision. When the instance fleet launches, Amazon EMR
--   tries to provision On-Demand instances as specified by
--   <a>InstanceTypeConfig</a> . Each instance configuration has a
--   specified <tt>WeightedCapacity</tt> . When an On-Demand instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedOnDemandCapacity' to determine the Spot
--   capacity units that have been provisioned for the instance fleet.</li>
--   <li><a>ifInstanceFleetType</a> - The node type that the instance fleet
--   hosts. Valid values are MASTER, CORE, or TASK.</li>
--   <li><a>ifInstanceTypeSpecifications</a> - The specification for the
--   instance types that comprise an instance fleet. Up to five unique
--   instance specifications may be defined for each instance fleet.</li>
--   <li><a>ifName</a> - A friendly name for the instance fleet.</li>
--   <li><a>ifProvisionedOnDemandCapacity</a> - The number of On-Demand
--   units that have been provisioned for the instance fleet to fulfill
--   <tt>TargetOnDemandCapacity</tt> . This provisioned capacity might be
--   less than or greater than <tt>TargetOnDemandCapacity</tt> .</li>
--   <li><a>ifTargetSpotCapacity</a> - The target capacity of Spot units
--   for the instance fleet, which determines how many Spot instances to
--   provision. When the instance fleet launches, Amazon EMR tries to
--   provision Spot instances as specified by <a>InstanceTypeConfig</a> .
--   Each instance configuration has a specified <tt>WeightedCapacity</tt>
--   . When a Spot instance is provisioned, the <tt>WeightedCapacity</tt>
--   units count toward the target capacity. Amazon EMR provisions
--   instances until the target capacity is totally fulfilled, even if this
--   results in an overage. For example, if there are 2 units remaining to
--   fulfill capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedSpotCapacity' to determine the Spot capacity
--   units that have been provisioned for the instance fleet.</li>
--   <li><a>ifId</a> - The unique identifier of the instance fleet.</li>
--   <li><a>ifLaunchSpecifications</a> - Describes the launch specification
--   for an instance fleet.</li>
--   </ul>
instanceFleet :: InstanceFleet

-- | The number of Spot units that have been provisioned for this instance
--   fleet to fulfill <tt>TargetSpotCapacity</tt> . This provisioned
--   capacity might be less than or greater than
--   <tt>TargetSpotCapacity</tt> .
ifProvisionedSpotCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The current status of the instance fleet.
ifStatus :: Lens' InstanceFleet (Maybe InstanceFleetStatus)

-- | The target capacity of On-Demand units for the instance fleet, which
--   determines how many On-Demand instances to provision. When the
--   instance fleet launches, Amazon EMR tries to provision On-Demand
--   instances as specified by <a>InstanceTypeConfig</a> . Each instance
--   configuration has a specified <tt>WeightedCapacity</tt> . When an
--   On-Demand instance is provisioned, the <tt>WeightedCapacity</tt> units
--   count toward the target capacity. Amazon EMR provisions instances
--   until the target capacity is totally fulfilled, even if this results
--   in an overage. For example, if there are 2 units remaining to fulfill
--   capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedOnDemandCapacity' to determine the Spot
--   capacity units that have been provisioned for the instance fleet.
ifTargetOnDemandCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The node type that the instance fleet hosts. Valid values are MASTER,
--   CORE, or TASK.
ifInstanceFleetType :: Lens' InstanceFleet (Maybe InstanceFleetType)

-- | The specification for the instance types that comprise an instance
--   fleet. Up to five unique instance specifications may be defined for
--   each instance fleet.
ifInstanceTypeSpecifications :: Lens' InstanceFleet [InstanceTypeSpecification]

-- | A friendly name for the instance fleet.
ifName :: Lens' InstanceFleet (Maybe Text)

-- | The number of On-Demand units that have been provisioned for the
--   instance fleet to fulfill <tt>TargetOnDemandCapacity</tt> . This
--   provisioned capacity might be less than or greater than
--   <tt>TargetOnDemandCapacity</tt> .
ifProvisionedOnDemandCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The target capacity of Spot units for the instance fleet, which
--   determines how many Spot instances to provision. When the instance
--   fleet launches, Amazon EMR tries to provision Spot instances as
--   specified by <a>InstanceTypeConfig</a> . Each instance configuration
--   has a specified <tt>WeightedCapacity</tt> . When a Spot instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units. You can use
--   'InstanceFleet$ProvisionedSpotCapacity' to determine the Spot capacity
--   units that have been provisioned for the instance fleet.
ifTargetSpotCapacity :: Lens' InstanceFleet (Maybe Natural)

-- | The unique identifier of the instance fleet.
ifId :: Lens' InstanceFleet (Maybe Text)

-- | Describes the launch specification for an instance fleet.
ifLaunchSpecifications :: Lens' InstanceFleet (Maybe InstanceFleetProvisioningSpecifications)

-- | The configuration that defines an instance fleet.
--   
--   <i>See:</i> <a>instanceFleetConfig</a> smart constructor.
data InstanceFleetConfig

-- | Creates a value of <a>InstanceFleetConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifcInstanceTypeConfigs</a> - The instance type configurations
--   that define the EC2 instances in the instance fleet.</li>
--   <li><a>ifcTargetOnDemandCapacity</a> - The target capacity of
--   On-Demand units for the instance fleet, which determines how many
--   On-Demand instances to provision. When the instance fleet launches,
--   Amazon EMR tries to provision On-Demand instances as specified by
--   <a>InstanceTypeConfig</a> . Each instance configuration has a
--   specified <tt>WeightedCapacity</tt> . When an On-Demand instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.</li>
--   <li><a>ifcName</a> - The friendly name of the instance fleet.</li>
--   <li><a>ifcTargetSpotCapacity</a> - The target capacity of Spot units
--   for the instance fleet, which determines how many Spot instances to
--   provision. When the instance fleet launches, Amazon EMR tries to
--   provision Spot instances as specified by <a>InstanceTypeConfig</a> .
--   Each instance configuration has a specified <tt>WeightedCapacity</tt>
--   . When a Spot instance is provisioned, the <tt>WeightedCapacity</tt>
--   units count toward the target capacity. Amazon EMR provisions
--   instances until the target capacity is totally fulfilled, even if this
--   results in an overage. For example, if there are 2 units remaining to
--   fulfill capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.</li>
--   <li><a>ifcLaunchSpecifications</a> - The launch specification for the
--   instance fleet.</li>
--   <li><a>ifcInstanceFleetType</a> - The node type that the instance
--   fleet hosts. Valid values are MASTER,CORE,and TASK.</li>
--   </ul>
instanceFleetConfig :: InstanceFleetType -> InstanceFleetConfig

-- | The instance type configurations that define the EC2 instances in the
--   instance fleet.
ifcInstanceTypeConfigs :: Lens' InstanceFleetConfig [InstanceTypeConfig]

-- | The target capacity of On-Demand units for the instance fleet, which
--   determines how many On-Demand instances to provision. When the
--   instance fleet launches, Amazon EMR tries to provision On-Demand
--   instances as specified by <a>InstanceTypeConfig</a> . Each instance
--   configuration has a specified <tt>WeightedCapacity</tt> . When an
--   On-Demand instance is provisioned, the <tt>WeightedCapacity</tt> units
--   count toward the target capacity. Amazon EMR provisions instances
--   until the target capacity is totally fulfilled, even if this results
--   in an overage. For example, if there are 2 units remaining to fulfill
--   capacity, and Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.
ifcTargetOnDemandCapacity :: Lens' InstanceFleetConfig (Maybe Natural)

-- | The friendly name of the instance fleet.
ifcName :: Lens' InstanceFleetConfig (Maybe Text)

-- | The target capacity of Spot units for the instance fleet, which
--   determines how many Spot instances to provision. When the instance
--   fleet launches, Amazon EMR tries to provision Spot instances as
--   specified by <a>InstanceTypeConfig</a> . Each instance configuration
--   has a specified <tt>WeightedCapacity</tt> . When a Spot instance is
--   provisioned, the <tt>WeightedCapacity</tt> units count toward the
--   target capacity. Amazon EMR provisions instances until the target
--   capacity is totally fulfilled, even if this results in an overage. For
--   example, if there are 2 units remaining to fulfill capacity, and
--   Amazon EMR can only provision an instance with a
--   <tt>WeightedCapacity</tt> of 5 units, the instance is provisioned, and
--   the target capacity is exceeded by 3 units.
ifcTargetSpotCapacity :: Lens' InstanceFleetConfig (Maybe Natural)

-- | The launch specification for the instance fleet.
ifcLaunchSpecifications :: Lens' InstanceFleetConfig (Maybe InstanceFleetProvisioningSpecifications)

-- | The node type that the instance fleet hosts. Valid values are
--   MASTER,CORE,and TASK.
ifcInstanceFleetType :: Lens' InstanceFleetConfig InstanceFleetType

-- | Configuration parameters for an instance fleet modification request.
--   
--   <i>See:</i> <a>instanceFleetModifyConfig</a> smart constructor.
data InstanceFleetModifyConfig

-- | Creates a value of <a>InstanceFleetModifyConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifmcTargetOnDemandCapacity</a> - The target capacity of
--   On-Demand units for the instance fleet. For more information see
--   'InstanceFleetConfig$TargetOnDemandCapacity' .</li>
--   <li><a>ifmcTargetSpotCapacity</a> - The target capacity of Spot units
--   for the instance fleet. For more information, see
--   'InstanceFleetConfig$TargetSpotCapacity' .</li>
--   <li><a>ifmcInstanceFleetId</a> - A unique identifier for the instance
--   fleet.</li>
--   </ul>
instanceFleetModifyConfig :: Text -> InstanceFleetModifyConfig

-- | The target capacity of On-Demand units for the instance fleet. For
--   more information see 'InstanceFleetConfig$TargetOnDemandCapacity' .
ifmcTargetOnDemandCapacity :: Lens' InstanceFleetModifyConfig (Maybe Natural)

-- | The target capacity of Spot units for the instance fleet. For more
--   information, see 'InstanceFleetConfig$TargetSpotCapacity' .
ifmcTargetSpotCapacity :: Lens' InstanceFleetModifyConfig (Maybe Natural)

-- | A unique identifier for the instance fleet.
ifmcInstanceFleetId :: Lens' InstanceFleetModifyConfig Text

-- | The launch specification for Spot instances in the fleet, which
--   determines the defined duration and provisioning timeout behavior.
--   
--   <i>See:</i> <a>instanceFleetProvisioningSpecifications</a> smart
--   constructor.
data InstanceFleetProvisioningSpecifications

-- | Creates a value of <a>InstanceFleetProvisioningSpecifications</a> with
--   the minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifpsSpotSpecification</a> - The launch specification for Spot
--   instances in the fleet, which determines the defined duration and
--   provisioning timeout behavior.</li>
--   </ul>
instanceFleetProvisioningSpecifications :: SpotProvisioningSpecification -> InstanceFleetProvisioningSpecifications

-- | The launch specification for Spot instances in the fleet, which
--   determines the defined duration and provisioning timeout behavior.
ifpsSpotSpecification :: Lens' InstanceFleetProvisioningSpecifications SpotProvisioningSpecification

-- | Provides status change reason details for the instance fleet.
--   
--   <i>See:</i> <a>instanceFleetStateChangeReason</a> smart constructor.
data InstanceFleetStateChangeReason

-- | Creates a value of <a>InstanceFleetStateChangeReason</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifscrCode</a> - A code corresponding to the reason the state
--   change occurred.</li>
--   <li><a>ifscrMessage</a> - An explanatory message.</li>
--   </ul>
instanceFleetStateChangeReason :: InstanceFleetStateChangeReason

-- | A code corresponding to the reason the state change occurred.
ifscrCode :: Lens' InstanceFleetStateChangeReason (Maybe InstanceFleetStateChangeReasonCode)

-- | An explanatory message.
ifscrMessage :: Lens' InstanceFleetStateChangeReason (Maybe Text)

-- | The status of the instance fleet.
--   
--   <i>See:</i> <a>instanceFleetStatus</a> smart constructor.
data InstanceFleetStatus

-- | Creates a value of <a>InstanceFleetStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ifsState</a> - A code representing the instance fleet status. *
--   <tt>PROVISIONING</tt> —The instance fleet is provisioning EC2
--   resources and is not yet ready to run jobs. * <tt>BOOTSTRAPPING</tt>
--   —EC2 instances and other resources have been provisioned and the
--   bootstrap actions specified for the instances are underway. *
--   <tt>RUNNING</tt> —EC2 instances and other resources are running. They
--   are either executing jobs or waiting to execute jobs. *
--   <tt>RESIZING</tt> —A resize operation is underway. EC2 instances are
--   either being added or removed. * <tt>SUSPENDED</tt> —A resize
--   operation could not complete. Existing EC2 instances are running, but
--   instances can't be added or removed. * <tt>TERMINATING</tt> —The
--   instance fleet is terminating EC2 instances. * <tt>TERMINATED</tt>
--   —The instance fleet is no longer active, and all EC2 instances have
--   been terminated.</li>
--   <li><a>ifsStateChangeReason</a> - Provides status change reason
--   details for the instance fleet.</li>
--   <li><a>ifsTimeline</a> - Provides historical timestamps for the
--   instance fleet, including the time of creation, the time it became
--   ready to run jobs, and the time of termination.</li>
--   </ul>
instanceFleetStatus :: InstanceFleetStatus

-- | A code representing the instance fleet status. * <tt>PROVISIONING</tt>
--   —The instance fleet is provisioning EC2 resources and is not yet ready
--   to run jobs. * <tt>BOOTSTRAPPING</tt> —EC2 instances and other
--   resources have been provisioned and the bootstrap actions specified
--   for the instances are underway. * <tt>RUNNING</tt> —EC2 instances and
--   other resources are running. They are either executing jobs or waiting
--   to execute jobs. * <tt>RESIZING</tt> —A resize operation is underway.
--   EC2 instances are either being added or removed. * <tt>SUSPENDED</tt>
--   —A resize operation could not complete. Existing EC2 instances are
--   running, but instances can't be added or removed. *
--   <tt>TERMINATING</tt> —The instance fleet is terminating EC2 instances.
--   * <tt>TERMINATED</tt> —The instance fleet is no longer active, and all
--   EC2 instances have been terminated.
ifsState :: Lens' InstanceFleetStatus (Maybe InstanceFleetState)

-- | Provides status change reason details for the instance fleet.
ifsStateChangeReason :: Lens' InstanceFleetStatus (Maybe InstanceFleetStateChangeReason)

-- | Provides historical timestamps for the instance fleet, including the
--   time of creation, the time it became ready to run jobs, and the time
--   of termination.
ifsTimeline :: Lens' InstanceFleetStatus (Maybe InstanceFleetTimeline)

-- | Provides historical timestamps for the instance fleet, including the
--   time of creation, the time it became ready to run jobs, and the time
--   of termination.
--   
--   <i>See:</i> <a>instanceFleetTimeline</a> smart constructor.
data InstanceFleetTimeline

-- | Creates a value of <a>InstanceFleetTimeline</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>iftReadyDateTime</a> - The time and date the instance fleet was
--   ready to run jobs.</li>
--   <li><a>iftCreationDateTime</a> - The time and date the instance fleet
--   was created.</li>
--   <li><a>iftEndDateTime</a> - The time and date the instance fleet
--   terminated.</li>
--   </ul>
instanceFleetTimeline :: InstanceFleetTimeline

-- | The time and date the instance fleet was ready to run jobs.
iftReadyDateTime :: Lens' InstanceFleetTimeline (Maybe UTCTime)

-- | The time and date the instance fleet was created.
iftCreationDateTime :: Lens' InstanceFleetTimeline (Maybe UTCTime)

-- | The time and date the instance fleet terminated.
iftEndDateTime :: Lens' InstanceFleetTimeline (Maybe UTCTime)

-- | This entity represents an instance group, which is a group of
--   instances that have common purpose. For example, CORE instance group
--   is used for HDFS.
--   
--   <i>See:</i> <a>instanceGroup</a> smart constructor.
data InstanceGroup

-- | Creates a value of <a>InstanceGroup</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igStatus</a> - The current status of the instance group.</li>
--   <li><a>igBidPrice</a> - The bid price for each EC2 instance in the
--   instance group when launching nodes as Spot Instances, expressed in
--   USD.</li>
--   <li><a>igRequestedInstanceCount</a> - The target number of instances
--   for the instance group.</li>
--   <li><a>igRunningInstanceCount</a> - The number of instances currently
--   running in this instance group.</li>
--   <li><a>igConfigurations</a> - The list of configurations supplied for
--   an EMR cluster instance group. You can specify a separate
--   configuration for each instance group (master, core, and task).</li>
--   <li><a>igInstanceGroupType</a> - The type of the instance group. Valid
--   values are MASTER, CORE or TASK.</li>
--   <li><a>igEBSBlockDevices</a> - The EBS block devices that are mapped
--   to this instance group.</li>
--   <li><a>igInstanceType</a> - The EC2 instance type for all instances in
--   the instance group.</li>
--   <li><a>igEBSOptimized</a> - If the instance group is EBS-optimized. An
--   Amazon EBS-optimized instance uses an optimized configuration stack
--   and provides additional, dedicated capacity for Amazon EBS I/O.</li>
--   <li><a>igMarket</a> - The marketplace to provision instances for this
--   group. Valid values are ON_DEMAND or SPOT.</li>
--   <li><a>igName</a> - The name of the instance group.</li>
--   <li><a>igAutoScalingPolicy</a> - An automatic scaling policy for a
--   core instance group or task instance group in an Amazon EMR cluster.
--   The automatic scaling policy defines how an instance group dynamically
--   adds and terminates EC2 instances in response to the value of a
--   CloudWatch metric. See PutAutoScalingPolicy.</li>
--   <li><a>igShrinkPolicy</a> - Policy for customizing shrink
--   operations.</li>
--   <li><a>igId</a> - The identifier of the instance group.</li>
--   </ul>
instanceGroup :: InstanceGroup

-- | The current status of the instance group.
igStatus :: Lens' InstanceGroup (Maybe InstanceGroupStatus)

-- | The bid price for each EC2 instance in the instance group when
--   launching nodes as Spot Instances, expressed in USD.
igBidPrice :: Lens' InstanceGroup (Maybe Text)

-- | The target number of instances for the instance group.
igRequestedInstanceCount :: Lens' InstanceGroup (Maybe Int)

-- | The number of instances currently running in this instance group.
igRunningInstanceCount :: Lens' InstanceGroup (Maybe Int)

-- | The list of configurations supplied for an EMR cluster instance group.
--   You can specify a separate configuration for each instance group
--   (master, core, and task).
igConfigurations :: Lens' InstanceGroup [Configuration]

-- | The type of the instance group. Valid values are MASTER, CORE or TASK.
igInstanceGroupType :: Lens' InstanceGroup (Maybe InstanceGroupType)

-- | The EBS block devices that are mapped to this instance group.
igEBSBlockDevices :: Lens' InstanceGroup [EBSBlockDevice]

-- | The EC2 instance type for all instances in the instance group.
igInstanceType :: Lens' InstanceGroup (Maybe Text)

-- | If the instance group is EBS-optimized. An Amazon EBS-optimized
--   instance uses an optimized configuration stack and provides
--   additional, dedicated capacity for Amazon EBS I/O.
igEBSOptimized :: Lens' InstanceGroup (Maybe Bool)

-- | The marketplace to provision instances for this group. Valid values
--   are ON_DEMAND or SPOT.
igMarket :: Lens' InstanceGroup (Maybe MarketType)

-- | The name of the instance group.
igName :: Lens' InstanceGroup (Maybe Text)

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. The automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   PutAutoScalingPolicy.
igAutoScalingPolicy :: Lens' InstanceGroup (Maybe AutoScalingPolicyDescription)

-- | Policy for customizing shrink operations.
igShrinkPolicy :: Lens' InstanceGroup (Maybe ShrinkPolicy)

-- | The identifier of the instance group.
igId :: Lens' InstanceGroup (Maybe Text)

-- | Configuration defining a new instance group.
--   
--   <i>See:</i> <a>instanceGroupConfig</a> smart constructor.
data InstanceGroupConfig

-- | Creates a value of <a>InstanceGroupConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igcEBSConfiguration</a> - EBS configurations that will be
--   attached to each EC2 instance in the instance group.</li>
--   <li><a>igcBidPrice</a> - Bid price for each EC2 instance in the
--   instance group when launching nodes as Spot Instances, expressed in
--   USD.</li>
--   <li><a>igcConfigurations</a> - The list of configurations supplied for
--   an EMR cluster instance group. You can specify a separate
--   configuration for each instance group (master, core, and task).</li>
--   <li><a>igcMarket</a> - Market type of the EC2 instances used to create
--   a cluster node.</li>
--   <li><a>igcName</a> - Friendly name given to the instance group.</li>
--   <li><a>igcAutoScalingPolicy</a> - An automatic scaling policy for a
--   core instance group or task instance group in an Amazon EMR cluster.
--   The automatic scaling policy defines how an instance group dynamically
--   adds and terminates EC2 instances in response to the value of a
--   CloudWatch metric. See <tt>PutAutoScalingPolicy</tt> .</li>
--   <li><a>igcInstanceRole</a> - The role of the instance group in the
--   cluster.</li>
--   <li><a>igcInstanceType</a> - The EC2 instance type for all instances
--   in the instance group.</li>
--   <li><a>igcInstanceCount</a> - Target number of instances for the
--   instance group.</li>
--   </ul>
instanceGroupConfig :: InstanceRoleType -> Text -> Int -> InstanceGroupConfig

-- | EBS configurations that will be attached to each EC2 instance in the
--   instance group.
igcEBSConfiguration :: Lens' InstanceGroupConfig (Maybe EBSConfiguration)

-- | Bid price for each EC2 instance in the instance group when launching
--   nodes as Spot Instances, expressed in USD.
igcBidPrice :: Lens' InstanceGroupConfig (Maybe Text)

-- | The list of configurations supplied for an EMR cluster instance group.
--   You can specify a separate configuration for each instance group
--   (master, core, and task).
igcConfigurations :: Lens' InstanceGroupConfig [Configuration]

-- | Market type of the EC2 instances used to create a cluster node.
igcMarket :: Lens' InstanceGroupConfig (Maybe MarketType)

-- | Friendly name given to the instance group.
igcName :: Lens' InstanceGroupConfig (Maybe Text)

-- | An automatic scaling policy for a core instance group or task instance
--   group in an Amazon EMR cluster. The automatic scaling policy defines
--   how an instance group dynamically adds and terminates EC2 instances in
--   response to the value of a CloudWatch metric. See
--   <tt>PutAutoScalingPolicy</tt> .
igcAutoScalingPolicy :: Lens' InstanceGroupConfig (Maybe AutoScalingPolicy)

-- | The role of the instance group in the cluster.
igcInstanceRole :: Lens' InstanceGroupConfig InstanceRoleType

-- | The EC2 instance type for all instances in the instance group.
igcInstanceType :: Lens' InstanceGroupConfig Text

-- | Target number of instances for the instance group.
igcInstanceCount :: Lens' InstanceGroupConfig Int

-- | Modify an instance group size.
--   
--   <i>See:</i> <a>instanceGroupModifyConfig</a> smart constructor.
data InstanceGroupModifyConfig

-- | Creates a value of <a>InstanceGroupModifyConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igmcInstanceCount</a> - Target size for the instance
--   group.</li>
--   <li><a>igmcEC2InstanceIdsToTerminate</a> - The EC2 InstanceIds to
--   terminate. After you terminate the instances, the instance group will
--   not return to its original requested size.</li>
--   <li><a>igmcShrinkPolicy</a> - Policy for customizing shrink
--   operations.</li>
--   <li><a>igmcInstanceGroupId</a> - Unique ID of the instance group to
--   expand or shrink.</li>
--   </ul>
instanceGroupModifyConfig :: Text -> InstanceGroupModifyConfig

-- | Target size for the instance group.
igmcInstanceCount :: Lens' InstanceGroupModifyConfig (Maybe Int)

-- | The EC2 InstanceIds to terminate. After you terminate the instances,
--   the instance group will not return to its original requested size.
igmcEC2InstanceIdsToTerminate :: Lens' InstanceGroupModifyConfig [Text]

-- | Policy for customizing shrink operations.
igmcShrinkPolicy :: Lens' InstanceGroupModifyConfig (Maybe ShrinkPolicy)

-- | Unique ID of the instance group to expand or shrink.
igmcInstanceGroupId :: Lens' InstanceGroupModifyConfig Text

-- | The status change reason details for the instance group.
--   
--   <i>See:</i> <a>instanceGroupStateChangeReason</a> smart constructor.
data InstanceGroupStateChangeReason

-- | Creates a value of <a>InstanceGroupStateChangeReason</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igscrCode</a> - The programmable code for the state change
--   reason.</li>
--   <li><a>igscrMessage</a> - The status change reason description.</li>
--   </ul>
instanceGroupStateChangeReason :: InstanceGroupStateChangeReason

-- | The programmable code for the state change reason.
igscrCode :: Lens' InstanceGroupStateChangeReason (Maybe InstanceGroupStateChangeReasonCode)

-- | The status change reason description.
igscrMessage :: Lens' InstanceGroupStateChangeReason (Maybe Text)

-- | The details of the instance group status.
--   
--   <i>See:</i> <a>instanceGroupStatus</a> smart constructor.
data InstanceGroupStatus

-- | Creates a value of <a>InstanceGroupStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igsState</a> - The current state of the instance group.</li>
--   <li><a>igsStateChangeReason</a> - The status change reason details for
--   the instance group.</li>
--   <li><a>igsTimeline</a> - The timeline of the instance group status
--   over time.</li>
--   </ul>
instanceGroupStatus :: InstanceGroupStatus

-- | The current state of the instance group.
igsState :: Lens' InstanceGroupStatus (Maybe InstanceGroupState)

-- | The status change reason details for the instance group.
igsStateChangeReason :: Lens' InstanceGroupStatus (Maybe InstanceGroupStateChangeReason)

-- | The timeline of the instance group status over time.
igsTimeline :: Lens' InstanceGroupStatus (Maybe InstanceGroupTimeline)

-- | The timeline of the instance group lifecycle.
--   
--   <i>See:</i> <a>instanceGroupTimeline</a> smart constructor.
data InstanceGroupTimeline

-- | Creates a value of <a>InstanceGroupTimeline</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>igtReadyDateTime</a> - The date and time when the instance
--   group became ready to perform tasks.</li>
--   <li><a>igtCreationDateTime</a> - The creation date and time of the
--   instance group.</li>
--   <li><a>igtEndDateTime</a> - The date and time when the instance group
--   terminated.</li>
--   </ul>
instanceGroupTimeline :: InstanceGroupTimeline

-- | The date and time when the instance group became ready to perform
--   tasks.
igtReadyDateTime :: Lens' InstanceGroupTimeline (Maybe UTCTime)

-- | The creation date and time of the instance group.
igtCreationDateTime :: Lens' InstanceGroupTimeline (Maybe UTCTime)

-- | The date and time when the instance group terminated.
igtEndDateTime :: Lens' InstanceGroupTimeline (Maybe UTCTime)

-- | Custom policy for requesting termination protection or termination of
--   specific instances when shrinking an instance group.
--   
--   <i>See:</i> <a>instanceResizePolicy</a> smart constructor.
data InstanceResizePolicy

-- | Creates a value of <a>InstanceResizePolicy</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>irpInstancesToProtect</a> - Specific list of instances to be
--   protected when shrinking an instance group.</li>
--   <li><a>irpInstancesToTerminate</a> - Specific list of instances to be
--   terminated when shrinking an instance group.</li>
--   <li><a>irpInstanceTerminationTimeout</a> - Decommissioning timeout
--   override for the specific list of instances to be terminated.</li>
--   </ul>
instanceResizePolicy :: InstanceResizePolicy

-- | Specific list of instances to be protected when shrinking an instance
--   group.
irpInstancesToProtect :: Lens' InstanceResizePolicy [Text]

-- | Specific list of instances to be terminated when shrinking an instance
--   group.
irpInstancesToTerminate :: Lens' InstanceResizePolicy [Text]

-- | Decommissioning timeout override for the specific list of instances to
--   be terminated.
irpInstanceTerminationTimeout :: Lens' InstanceResizePolicy (Maybe Int)

-- | The details of the status change reason for the instance.
--   
--   <i>See:</i> <a>instanceStateChangeReason</a> smart constructor.
data InstanceStateChangeReason

-- | Creates a value of <a>InstanceStateChangeReason</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>iscrCode</a> - The programmable code for the state change
--   reason.</li>
--   <li><a>iscrMessage</a> - The status change reason description.</li>
--   </ul>
instanceStateChangeReason :: InstanceStateChangeReason

-- | The programmable code for the state change reason.
iscrCode :: Lens' InstanceStateChangeReason (Maybe InstanceStateChangeReasonCode)

-- | The status change reason description.
iscrMessage :: Lens' InstanceStateChangeReason (Maybe Text)

-- | The instance status details.
--   
--   <i>See:</i> <a>instanceStatus</a> smart constructor.
data InstanceStatus

-- | Creates a value of <a>InstanceStatus</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>isState</a> - The current state of the instance.</li>
--   <li><a>isStateChangeReason</a> - The details of the status change
--   reason for the instance.</li>
--   <li><a>isTimeline</a> - The timeline of the instance status over
--   time.</li>
--   </ul>
instanceStatus :: InstanceStatus

-- | The current state of the instance.
isState :: Lens' InstanceStatus (Maybe InstanceState)

-- | The details of the status change reason for the instance.
isStateChangeReason :: Lens' InstanceStatus (Maybe InstanceStateChangeReason)

-- | The timeline of the instance status over time.
isTimeline :: Lens' InstanceStatus (Maybe InstanceTimeline)

-- | The timeline of the instance lifecycle.
--   
--   <i>See:</i> <a>instanceTimeline</a> smart constructor.
data InstanceTimeline

-- | Creates a value of <a>InstanceTimeline</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>itReadyDateTime</a> - The date and time when the instance was
--   ready to perform tasks.</li>
--   <li><a>itCreationDateTime</a> - The creation date and time of the
--   instance.</li>
--   <li><a>itEndDateTime</a> - The date and time when the instance was
--   terminated.</li>
--   </ul>
instanceTimeline :: InstanceTimeline

-- | The date and time when the instance was ready to perform tasks.
itReadyDateTime :: Lens' InstanceTimeline (Maybe UTCTime)

-- | The creation date and time of the instance.
itCreationDateTime :: Lens' InstanceTimeline (Maybe UTCTime)

-- | The date and time when the instance was terminated.
itEndDateTime :: Lens' InstanceTimeline (Maybe UTCTime)

-- | An instance type configuration for each instance type in an instance
--   fleet, which determines the EC2 instances Amazon EMR attempts to
--   provision to fulfill On-Demand and Spot target capacities. There can
--   be a maximum of 5 instance type configurations in a fleet.
--   
--   <i>See:</i> <a>instanceTypeConfig</a> smart constructor.
data InstanceTypeConfig

-- | Creates a value of <a>InstanceTypeConfig</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>itcEBSConfiguration</a> - The configuration of Amazon Elastic
--   Block Storage (EBS) attached to each instance as defined by
--   <tt>InstanceType</tt> .</li>
--   <li><a>itcBidPrice</a> - The bid price for each EC2 Spot instance type
--   as defined by <tt>InstanceType</tt> . Expressed in USD. If neither
--   <tt>BidPrice</tt> nor <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is
--   provided, <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to
--   100%.</li>
--   <li><a>itcWeightedCapacity</a> - The number of units that a
--   provisioned instance of this type provides toward fulfilling the
--   target capacities defined in <a>InstanceFleetConfig</a> . This value
--   is 1 for a master instance fleet, and must be 1 or greater for core
--   and task instance fleets. Defaults to 1 if not specified.</li>
--   <li><a>itcConfigurations</a> - A configuration classification that
--   applies when provisioning cluster instances, which can include
--   configurations for applications and software that run on the
--   cluster.</li>
--   <li><a>itcBidPriceAsPercentageOfOnDemandPrice</a> - The bid price, as
--   a percentage of On-Demand price, for each EC2 Spot instance as defined
--   by <tt>InstanceType</tt> . Expressed as a number (for example, 20
--   specifies 20%). If neither <tt>BidPrice</tt> nor
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is provided,
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to 100%.</li>
--   <li><a>itcInstanceType</a> - An EC2 instance type, such as
--   <tt>m3.xlarge</tt> .</li>
--   </ul>
instanceTypeConfig :: Text -> InstanceTypeConfig

-- | The configuration of Amazon Elastic Block Storage (EBS) attached to
--   each instance as defined by <tt>InstanceType</tt> .
itcEBSConfiguration :: Lens' InstanceTypeConfig (Maybe EBSConfiguration)

-- | The bid price for each EC2 Spot instance type as defined by
--   <tt>InstanceType</tt> . Expressed in USD. If neither <tt>BidPrice</tt>
--   nor <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is provided,
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to 100%.
itcBidPrice :: Lens' InstanceTypeConfig (Maybe Text)

-- | The number of units that a provisioned instance of this type provides
--   toward fulfilling the target capacities defined in
--   <a>InstanceFleetConfig</a> . This value is 1 for a master instance
--   fleet, and must be 1 or greater for core and task instance fleets.
--   Defaults to 1 if not specified.
itcWeightedCapacity :: Lens' InstanceTypeConfig (Maybe Natural)

-- | A configuration classification that applies when provisioning cluster
--   instances, which can include configurations for applications and
--   software that run on the cluster.
itcConfigurations :: Lens' InstanceTypeConfig [Configuration]

-- | The bid price, as a percentage of On-Demand price, for each EC2 Spot
--   instance as defined by <tt>InstanceType</tt> . Expressed as a number
--   (for example, 20 specifies 20%). If neither <tt>BidPrice</tt> nor
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> is provided,
--   <tt>BidPriceAsPercentageOfOnDemandPrice</tt> defaults to 100%.
itcBidPriceAsPercentageOfOnDemandPrice :: Lens' InstanceTypeConfig (Maybe Double)

-- | An EC2 instance type, such as <tt>m3.xlarge</tt> .
itcInstanceType :: Lens' InstanceTypeConfig Text

-- | The configuration specification for each instance type in an instance
--   fleet.
--   
--   <i>See:</i> <a>instanceTypeSpecification</a> smart constructor.
data InstanceTypeSpecification

-- | Creates a value of <a>InstanceTypeSpecification</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>itsBidPrice</a> - The bid price for each EC2 Spot instance type
--   as defined by <tt>InstanceType</tt> . Expressed in USD.</li>
--   <li><a>itsWeightedCapacity</a> - The number of units that a
--   provisioned instance of this type provides toward fulfilling the
--   target capacities defined in <a>InstanceFleetConfig</a> . Capacity
--   values represent performance characteristics such as vCPUs, memory, or
--   I/O. If not specified, the default value is 1.</li>
--   <li><a>itsConfigurations</a> - A configuration classification that
--   applies when provisioning cluster instances, which can include
--   configurations for applications and software bundled with Amazon
--   EMR.</li>
--   <li><a>itsEBSBlockDevices</a> - The configuration of Amazon Elastic
--   Block Storage (EBS) attached to each instance as defined by
--   <tt>InstanceType</tt> .</li>
--   <li><a>itsInstanceType</a> - The EC2 instance type, for example
--   <tt>m3.xlarge</tt> .</li>
--   <li><a>itsEBSOptimized</a> - Evaluates to <tt>TRUE</tt> when the
--   specified <tt>InstanceType</tt> is EBS-optimized.</li>
--   <li><a>itsBidPriceAsPercentageOfOnDemandPrice</a> - The bid price, as
--   a percentage of On-Demand price, for each EC2 Spot instance as defined
--   by <tt>InstanceType</tt> . Expressed as a number (for example, 20
--   specifies 20%).</li>
--   </ul>
instanceTypeSpecification :: InstanceTypeSpecification

-- | The bid price for each EC2 Spot instance type as defined by
--   <tt>InstanceType</tt> . Expressed in USD.
itsBidPrice :: Lens' InstanceTypeSpecification (Maybe Text)

-- | The number of units that a provisioned instance of this type provides
--   toward fulfilling the target capacities defined in
--   <a>InstanceFleetConfig</a> . Capacity values represent performance
--   characteristics such as vCPUs, memory, or I/O. If not specified, the
--   default value is 1.
itsWeightedCapacity :: Lens' InstanceTypeSpecification (Maybe Natural)

-- | A configuration classification that applies when provisioning cluster
--   instances, which can include configurations for applications and
--   software bundled with Amazon EMR.
itsConfigurations :: Lens' InstanceTypeSpecification [Configuration]

-- | The configuration of Amazon Elastic Block Storage (EBS) attached to
--   each instance as defined by <tt>InstanceType</tt> .
itsEBSBlockDevices :: Lens' InstanceTypeSpecification [EBSBlockDevice]

-- | The EC2 instance type, for example <tt>m3.xlarge</tt> .
itsInstanceType :: Lens' InstanceTypeSpecification (Maybe Text)

-- | Evaluates to <tt>TRUE</tt> when the specified <tt>InstanceType</tt> is
--   EBS-optimized.
itsEBSOptimized :: Lens' InstanceTypeSpecification (Maybe Bool)

-- | The bid price, as a percentage of On-Demand price, for each EC2 Spot
--   instance as defined by <tt>InstanceType</tt> . Expressed as a number
--   (for example, 20 specifies 20%).
itsBidPriceAsPercentageOfOnDemandPrice :: Lens' InstanceTypeSpecification (Maybe Double)

-- | A description of the Amazon EC2 instance on which the cluster (job
--   flow) runs. A valid JobFlowInstancesConfig must contain either
--   InstanceGroups or InstanceFleets, which is the recommended
--   configuration. They cannot be used together. You may also have
--   MasterInstanceType, SlaveInstanceType, and InstanceCount (all three
--   must be present), but we don't recommend this configuration.
--   
--   <i>See:</i> <a>jobFlowInstancesConfig</a> smart constructor.
data JobFlowInstancesConfig

-- | Creates a value of <a>JobFlowInstancesConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>jficInstanceFleets</a> - Describes the EC2 instances and
--   instance configurations for clusters that use the instance fleet
--   configuration.</li>
--   <li><a>jficEC2KeyName</a> - The name of the EC2 key pair that can be
--   used to ssh to the master node as the user called "hadoop."</li>
--   <li><a>jficSlaveInstanceType</a> - The EC2 instance type of the slave
--   nodes.</li>
--   <li><a>jficInstanceCount</a> - The number of EC2 instances in the
--   cluster.</li>
--   <li><a>jficEmrManagedSlaveSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the slave nodes.</li>
--   <li><a>jficAdditionalSlaveSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the slave nodes.</li>
--   <li><a>jficEC2SubnetIds</a> - Applies to clusters that use the
--   instance fleet configuration. When multiple EC2 subnet IDs are
--   specified, Amazon EMR evaluates them and launches instances in the
--   optimal subnet.</li>
--   <li><a>jficHadoopVersion</a> - The Hadoop version for the cluster.
--   Valid inputs are "0.18" (deprecated), "0.20" (deprecated), "0.20.205"
--   (deprecated), "1.0.3", "2.2.0", or "2.4.0". If you do not set this
--   value, the default of 0.18 is used, unless the AmiVersion parameter is
--   set in the RunJobFlow call, in which case the default version of
--   Hadoop for that AMI version is used.</li>
--   <li><a>jficAdditionalMasterSecurityGroups</a> - A list of additional
--   Amazon EC2 security group IDs for the master node.</li>
--   <li><a>jficEmrManagedMasterSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the master node.</li>
--   <li><a>jficEC2SubnetId</a> - Applies to clusters that use the uniform
--   instance group configuration. To launch the cluster in Amazon Virtual
--   Private Cloud (Amazon VPC), set this parameter to the identifier of
--   the Amazon VPC subnet where you want the cluster to launch. If you do
--   not specify this value, the cluster launches in the normal Amazon Web
--   Services cloud, outside of an Amazon VPC, if the account launching the
--   cluster supports EC2 Classic networks in the region where the cluster
--   launches. Amazon VPC currently does not support cluster compute
--   quadruple extra large (cc1.4xlarge) instances. Thus you cannot specify
--   the cc1.4xlarge instance type for clusters launched in an Amazon
--   VPC.</li>
--   <li><a>jficMasterInstanceType</a> - The EC2 instance type of the
--   master node.</li>
--   <li><a>jficInstanceGroups</a> - Configuration for the instance groups
--   in a cluster.</li>
--   <li><a>jficKeepJobFlowAliveWhenNoSteps</a> - Specifies whether the
--   cluster should remain available after completing all steps.</li>
--   <li><a>jficServiceAccessSecurityGroup</a> - The identifier of the
--   Amazon EC2 security group for the Amazon EMR service to access
--   clusters in VPC private subnets.</li>
--   <li><a>jficTerminationProtected</a> - Specifies whether to lock the
--   cluster to prevent the Amazon EC2 instances from being terminated by
--   API call, user intervention, or in the event of a job-flow error.</li>
--   <li><a>jficPlacement</a> - The Availability Zone in which the cluster
--   runs.</li>
--   </ul>
jobFlowInstancesConfig :: JobFlowInstancesConfig

-- | Describes the EC2 instances and instance configurations for clusters
--   that use the instance fleet configuration.
jficInstanceFleets :: Lens' JobFlowInstancesConfig [InstanceFleetConfig]

-- | The name of the EC2 key pair that can be used to ssh to the master
--   node as the user called "hadoop."
jficEC2KeyName :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | The EC2 instance type of the slave nodes.
jficSlaveInstanceType :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | The number of EC2 instances in the cluster.
jficInstanceCount :: Lens' JobFlowInstancesConfig (Maybe Int)

-- | The identifier of the Amazon EC2 security group for the slave nodes.
jficEmrManagedSlaveSecurityGroup :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | A list of additional Amazon EC2 security group IDs for the slave
--   nodes.
jficAdditionalSlaveSecurityGroups :: Lens' JobFlowInstancesConfig [Text]

-- | Applies to clusters that use the instance fleet configuration. When
--   multiple EC2 subnet IDs are specified, Amazon EMR evaluates them and
--   launches instances in the optimal subnet.
jficEC2SubnetIds :: Lens' JobFlowInstancesConfig [Text]

-- | The Hadoop version for the cluster. Valid inputs are "0.18"
--   (deprecated), "0.20" (deprecated), "0.20.205" (deprecated), "1.0.3",
--   "2.2.0", or "2.4.0". If you do not set this value, the default of 0.18
--   is used, unless the AmiVersion parameter is set in the RunJobFlow
--   call, in which case the default version of Hadoop for that AMI version
--   is used.
jficHadoopVersion :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | A list of additional Amazon EC2 security group IDs for the master
--   node.
jficAdditionalMasterSecurityGroups :: Lens' JobFlowInstancesConfig [Text]

-- | The identifier of the Amazon EC2 security group for the master node.
jficEmrManagedMasterSecurityGroup :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | Applies to clusters that use the uniform instance group configuration.
--   To launch the cluster in Amazon Virtual Private Cloud (Amazon VPC),
--   set this parameter to the identifier of the Amazon VPC subnet where
--   you want the cluster to launch. If you do not specify this value, the
--   cluster launches in the normal Amazon Web Services cloud, outside of
--   an Amazon VPC, if the account launching the cluster supports EC2
--   Classic networks in the region where the cluster launches. Amazon VPC
--   currently does not support cluster compute quadruple extra large
--   (cc1.4xlarge) instances. Thus you cannot specify the cc1.4xlarge
--   instance type for clusters launched in an Amazon VPC.
jficEC2SubnetId :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | The EC2 instance type of the master node.
jficMasterInstanceType :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | Configuration for the instance groups in a cluster.
jficInstanceGroups :: Lens' JobFlowInstancesConfig [InstanceGroupConfig]

-- | Specifies whether the cluster should remain available after completing
--   all steps.
jficKeepJobFlowAliveWhenNoSteps :: Lens' JobFlowInstancesConfig (Maybe Bool)

-- | The identifier of the Amazon EC2 security group for the Amazon EMR
--   service to access clusters in VPC private subnets.
jficServiceAccessSecurityGroup :: Lens' JobFlowInstancesConfig (Maybe Text)

-- | Specifies whether to lock the cluster to prevent the Amazon EC2
--   instances from being terminated by API call, user intervention, or in
--   the event of a job-flow error.
jficTerminationProtected :: Lens' JobFlowInstancesConfig (Maybe Bool)

-- | The Availability Zone in which the cluster runs.
jficPlacement :: Lens' JobFlowInstancesConfig (Maybe PlacementType)

-- | Attributes for Kerberos configuration when Kerberos authentication is
--   enabled using a security configuration. For more information see
--   <a>Use Kerberos Authentication</a> in the <i>EMR Management Guide</i>
--   .
--   
--   <i>See:</i> <a>kerberosAttributes</a> smart constructor.
data KerberosAttributes

-- | Creates a value of <a>KerberosAttributes</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>kaADDomainJoinPassword</a> - The Active Directory password for
--   <tt>ADDomainJoinUser</tt> .</li>
--   <li><a>kaCrossRealmTrustPrincipalPassword</a> - Required only when
--   establishing a cross-realm trust with a KDC in a different realm. The
--   cross-realm principal password, which must be identical across
--   realms.</li>
--   <li><a>kaADDomainJoinUser</a> - Required only when establishing a
--   cross-realm trust with an Active Directory domain. A user with
--   sufficient privileges to join resources to the domain.</li>
--   <li><a>kaRealm</a> - The name of the Kerberos realm to which all nodes
--   in a cluster belong. For example, <tt>EC2.INTERNAL</tt> .</li>
--   <li><a>kaKdcAdminPassword</a> - The password used within the cluster
--   for the kadmin service on the cluster-dedicated KDC, which maintains
--   Kerberos principals, password policies, and keytabs for the
--   cluster.</li>
--   </ul>
kerberosAttributes :: Text -> Text -> KerberosAttributes

-- | The Active Directory password for <tt>ADDomainJoinUser</tt> .
kaADDomainJoinPassword :: Lens' KerberosAttributes (Maybe Text)

-- | Required only when establishing a cross-realm trust with a KDC in a
--   different realm. The cross-realm principal password, which must be
--   identical across realms.
kaCrossRealmTrustPrincipalPassword :: Lens' KerberosAttributes (Maybe Text)

-- | Required only when establishing a cross-realm trust with an Active
--   Directory domain. A user with sufficient privileges to join resources
--   to the domain.
kaADDomainJoinUser :: Lens' KerberosAttributes (Maybe Text)

-- | The name of the Kerberos realm to which all nodes in a cluster belong.
--   For example, <tt>EC2.INTERNAL</tt> .
kaRealm :: Lens' KerberosAttributes Text

-- | The password used within the cluster for the kadmin service on the
--   cluster-dedicated KDC, which maintains Kerberos principals, password
--   policies, and keytabs for the cluster.
kaKdcAdminPassword :: Lens' KerberosAttributes Text

-- | A key value pair.
--   
--   <i>See:</i> <a>keyValue</a> smart constructor.
data KeyValue

-- | Creates a value of <a>KeyValue</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>kvValue</a> - The value part of the identified key.</li>
--   <li><a>kvKey</a> - The unique identifier of a key value pair.</li>
--   </ul>
keyValue :: KeyValue

-- | The value part of the identified key.
kvValue :: Lens' KeyValue (Maybe Text)

-- | The unique identifier of a key value pair.
kvKey :: Lens' KeyValue (Maybe Text)

-- | A CloudWatch dimension, which is specified using a <tt>Key</tt> (known
--   as a <tt>Name</tt> in CloudWatch), <tt>Value</tt> pair. By default,
--   Amazon EMR uses one dimension whose <tt>Key</tt> is <tt>JobFlowID</tt>
--   and <tt>Value</tt> is a variable representing the cluster ID, which is
--   <tt>&gt; {emr.clusterId}</tt> . This enables the rule to bootstrap
--   when the cluster ID becomes available.
--   
--   <i>See:</i> <a>metricDimension</a> smart constructor.
data MetricDimension

-- | Creates a value of <a>MetricDimension</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>mdValue</a> - The dimension value.</li>
--   <li><a>mdKey</a> - The dimension name.</li>
--   </ul>
metricDimension :: MetricDimension

-- | The dimension value.
mdValue :: Lens' MetricDimension (Maybe Text)

-- | The dimension name.
mdKey :: Lens' MetricDimension (Maybe Text)

-- | The Amazon EC2 Availability Zone configuration of the cluster (job
--   flow).
--   
--   <i>See:</i> <a>placementType</a> smart constructor.
data PlacementType

-- | Creates a value of <a>PlacementType</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ptAvailabilityZones</a> - When multiple Availability Zones are
--   specified, Amazon EMR evaluates them and launches instances in the
--   optimal Availability Zone. <tt>AvailabilityZones</tt> is used for
--   instance fleets, while <tt>AvailabilityZone</tt> (singular) is used
--   for uniform instance groups.</li>
--   <li><a>ptAvailabilityZone</a> - The Amazon EC2 Availability Zone for
--   the cluster. <tt>AvailabilityZone</tt> is used for uniform instance
--   groups, while <tt>AvailabilityZones</tt> (plural) is used for instance
--   fleets.</li>
--   </ul>
placementType :: PlacementType

-- | When multiple Availability Zones are specified, Amazon EMR evaluates
--   them and launches instances in the optimal Availability Zone.
--   <tt>AvailabilityZones</tt> is used for instance fleets, while
--   <tt>AvailabilityZone</tt> (singular) is used for uniform instance
--   groups.
ptAvailabilityZones :: Lens' PlacementType [Text]

-- | The Amazon EC2 Availability Zone for the cluster.
--   <tt>AvailabilityZone</tt> is used for uniform instance groups, while
--   <tt>AvailabilityZones</tt> (plural) is used for instance fleets.
ptAvailabilityZone :: Lens' PlacementType (Maybe Text)

-- | The type of adjustment the automatic scaling activity makes when
--   triggered, and the periodicity of the adjustment.
--   
--   <i>See:</i> <a>scalingAction</a> smart constructor.
data ScalingAction

-- | Creates a value of <a>ScalingAction</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>saMarket</a> - Not available for instance groups. Instance
--   groups use the market type specified for the group.</li>
--   <li><a>saSimpleScalingPolicyConfiguration</a> - The type of adjustment
--   the automatic scaling activity makes when triggered, and the
--   periodicity of the adjustment.</li>
--   </ul>
scalingAction :: SimpleScalingPolicyConfiguration -> ScalingAction

-- | Not available for instance groups. Instance groups use the market type
--   specified for the group.
saMarket :: Lens' ScalingAction (Maybe MarketType)

-- | The type of adjustment the automatic scaling activity makes when
--   triggered, and the periodicity of the adjustment.
saSimpleScalingPolicyConfiguration :: Lens' ScalingAction SimpleScalingPolicyConfiguration

-- | The upper and lower EC2 instance limits for an automatic scaling
--   policy. Automatic scaling activities triggered by automatic scaling
--   rules will not cause an instance group to grow above or below these
--   limits.
--   
--   <i>See:</i> <a>scalingConstraints</a> smart constructor.
data ScalingConstraints

-- | Creates a value of <a>ScalingConstraints</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>scMinCapacity</a> - The lower boundary of EC2 instances in an
--   instance group below which scaling activities are not allowed to
--   shrink. Scale-in activities will not terminate instances below this
--   boundary.</li>
--   <li><a>scMaxCapacity</a> - The upper boundary of EC2 instances in an
--   instance group beyond which scaling activities are not allowed to
--   grow. Scale-out activities will not add instances beyond this
--   boundary.</li>
--   </ul>
scalingConstraints :: Int -> Int -> ScalingConstraints

-- | The lower boundary of EC2 instances in an instance group below which
--   scaling activities are not allowed to shrink. Scale-in activities will
--   not terminate instances below this boundary.
scMinCapacity :: Lens' ScalingConstraints Int

-- | The upper boundary of EC2 instances in an instance group beyond which
--   scaling activities are not allowed to grow. Scale-out activities will
--   not add instances beyond this boundary.
scMaxCapacity :: Lens' ScalingConstraints Int

-- | A scale-in or scale-out rule that defines scaling activity, including
--   the CloudWatch metric alarm that triggers activity, how EC2 instances
--   are added or removed, and the periodicity of adjustments. The
--   automatic scaling policy for an instance group can comprise one or
--   more automatic scaling rules.
--   
--   <i>See:</i> <a>scalingRule</a> smart constructor.
data ScalingRule

-- | Creates a value of <a>ScalingRule</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>srDescription</a> - A friendly, more verbose description of the
--   automatic scaling rule.</li>
--   <li><a>srName</a> - The name used to identify an automatic scaling
--   rule. Rule names must be unique within a scaling policy.</li>
--   <li><a>srAction</a> - The conditions that trigger an automatic scaling
--   activity.</li>
--   <li><a>srTrigger</a> - The CloudWatch alarm definition that determines
--   when automatic scaling activity is triggered.</li>
--   </ul>
scalingRule :: Text -> ScalingAction -> ScalingTrigger -> ScalingRule

-- | A friendly, more verbose description of the automatic scaling rule.
srDescription :: Lens' ScalingRule (Maybe Text)

-- | The name used to identify an automatic scaling rule. Rule names must
--   be unique within a scaling policy.
srName :: Lens' ScalingRule Text

-- | The conditions that trigger an automatic scaling activity.
srAction :: Lens' ScalingRule ScalingAction

-- | The CloudWatch alarm definition that determines when automatic scaling
--   activity is triggered.
srTrigger :: Lens' ScalingRule ScalingTrigger

-- | The conditions that trigger an automatic scaling activity.
--   
--   <i>See:</i> <a>scalingTrigger</a> smart constructor.
data ScalingTrigger

-- | Creates a value of <a>ScalingTrigger</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>stCloudWatchAlarmDefinition</a> - The definition of a
--   CloudWatch metric alarm. When the defined alarm conditions are met
--   along with other trigger parameters, scaling activity begins.</li>
--   </ul>
scalingTrigger :: CloudWatchAlarmDefinition -> ScalingTrigger

-- | The definition of a CloudWatch metric alarm. When the defined alarm
--   conditions are met along with other trigger parameters, scaling
--   activity begins.
stCloudWatchAlarmDefinition :: Lens' ScalingTrigger CloudWatchAlarmDefinition

-- | Configuration of the script to run during a bootstrap action.
--   
--   <i>See:</i> <a>scriptBootstrapActionConfig</a> smart constructor.
data ScriptBootstrapActionConfig

-- | Creates a value of <a>ScriptBootstrapActionConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sbacArgs</a> - A list of command line arguments to pass to the
--   bootstrap action script.</li>
--   <li><a>sbacPath</a> - Location of the script to run during a bootstrap
--   action. Can be either a location in Amazon S3 or on a local file
--   system.</li>
--   </ul>
scriptBootstrapActionConfig :: Text -> ScriptBootstrapActionConfig

-- | A list of command line arguments to pass to the bootstrap action
--   script.
sbacArgs :: Lens' ScriptBootstrapActionConfig [Text]

-- | Location of the script to run during a bootstrap action. Can be either
--   a location in Amazon S3 or on a local file system.
sbacPath :: Lens' ScriptBootstrapActionConfig Text

-- | The creation date and time, and name, of a security configuration.
--   
--   <i>See:</i> <a>securityConfigurationSummary</a> smart constructor.
data SecurityConfigurationSummary

-- | Creates a value of <a>SecurityConfigurationSummary</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>scsName</a> - The name of the security configuration.</li>
--   <li><a>scsCreationDateTime</a> - The date and time the security
--   configuration was created.</li>
--   </ul>
securityConfigurationSummary :: SecurityConfigurationSummary

-- | The name of the security configuration.
scsName :: Lens' SecurityConfigurationSummary (Maybe Text)

-- | The date and time the security configuration was created.
scsCreationDateTime :: Lens' SecurityConfigurationSummary (Maybe UTCTime)

-- | Policy for customizing shrink operations. Allows configuration of
--   decommissioning timeout and targeted instance shrinking.
--   
--   <i>See:</i> <a>shrinkPolicy</a> smart constructor.
data ShrinkPolicy

-- | Creates a value of <a>ShrinkPolicy</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>spDecommissionTimeout</a> - The desired timeout for
--   decommissioning an instance. Overrides the default YARN
--   decommissioning timeout.</li>
--   <li><a>spInstanceResizePolicy</a> - Custom policy for requesting
--   termination protection or termination of specific instances when
--   shrinking an instance group.</li>
--   </ul>
shrinkPolicy :: ShrinkPolicy

-- | The desired timeout for decommissioning an instance. Overrides the
--   default YARN decommissioning timeout.
spDecommissionTimeout :: Lens' ShrinkPolicy (Maybe Int)

-- | Custom policy for requesting termination protection or termination of
--   specific instances when shrinking an instance group.
spInstanceResizePolicy :: Lens' ShrinkPolicy (Maybe InstanceResizePolicy)

-- | An automatic scaling configuration, which describes how the policy
--   adds or removes instances, the cooldown period, and the number of EC2
--   instances that will be added each time the CloudWatch metric alarm
--   condition is satisfied.
--   
--   <i>See:</i> <a>simpleScalingPolicyConfiguration</a> smart constructor.
data SimpleScalingPolicyConfiguration

-- | Creates a value of <a>SimpleScalingPolicyConfiguration</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sspcAdjustmentType</a> - The way in which EC2 instances are
--   added (if <tt>ScalingAdjustment</tt> is a positive number) or
--   terminated (if <tt>ScalingAdjustment</tt> is a negative number) each
--   time the scaling activity is triggered. <tt>CHANGE_IN_CAPACITY</tt> is
--   the default. <tt>CHANGE_IN_CAPACITY</tt> indicates that the EC2
--   instance count increments or decrements by <tt>ScalingAdjustment</tt>
--   , which should be expressed as an integer.
--   <tt>PERCENT_CHANGE_IN_CAPACITY</tt> indicates the instance count
--   increments or decrements by the percentage specified by
--   <tt>ScalingAdjustment</tt> , which should be expressed as an integer.
--   For example, 20 indicates an increase in 20% increments of cluster
--   capacity. <tt>EXACT_CAPACITY</tt> indicates the scaling activity
--   results in an instance group with the number of EC2 instances
--   specified by <tt>ScalingAdjustment</tt> , which should be expressed as
--   a positive integer.</li>
--   <li><a>sspcCoolDown</a> - The amount of time, in seconds, after a
--   scaling activity completes before any further trigger-related scaling
--   activities can start. The default value is 0.</li>
--   <li><a>sspcScalingAdjustment</a> - The amount by which to scale in or
--   scale out, based on the specified <tt>AdjustmentType</tt> . A positive
--   value adds to the instance group's EC2 instance count while a negative
--   number removes instances. If <tt>AdjustmentType</tt> is set to
--   <tt>EXACT_CAPACITY</tt> , the number should only be a positive
--   integer. If <tt>AdjustmentType</tt> is set to
--   <tt>PERCENT_CHANGE_IN_CAPACITY</tt> , the value should express the
--   percentage as an integer. For example, -20 indicates a decrease in 20%
--   increments of cluster capacity.</li>
--   </ul>
simpleScalingPolicyConfiguration :: Int -> SimpleScalingPolicyConfiguration

-- | The way in which EC2 instances are added (if
--   <tt>ScalingAdjustment</tt> is a positive number) or terminated (if
--   <tt>ScalingAdjustment</tt> is a negative number) each time the scaling
--   activity is triggered. <tt>CHANGE_IN_CAPACITY</tt> is the default.
--   <tt>CHANGE_IN_CAPACITY</tt> indicates that the EC2 instance count
--   increments or decrements by <tt>ScalingAdjustment</tt> , which should
--   be expressed as an integer. <tt>PERCENT_CHANGE_IN_CAPACITY</tt>
--   indicates the instance count increments or decrements by the
--   percentage specified by <tt>ScalingAdjustment</tt> , which should be
--   expressed as an integer. For example, 20 indicates an increase in 20%
--   increments of cluster capacity. <tt>EXACT_CAPACITY</tt> indicates the
--   scaling activity results in an instance group with the number of EC2
--   instances specified by <tt>ScalingAdjustment</tt> , which should be
--   expressed as a positive integer.
sspcAdjustmentType :: Lens' SimpleScalingPolicyConfiguration (Maybe AdjustmentType)

-- | The amount of time, in seconds, after a scaling activity completes
--   before any further trigger-related scaling activities can start. The
--   default value is 0.
sspcCoolDown :: Lens' SimpleScalingPolicyConfiguration (Maybe Int)

-- | The amount by which to scale in or scale out, based on the specified
--   <tt>AdjustmentType</tt> . A positive value adds to the instance
--   group's EC2 instance count while a negative number removes instances.
--   If <tt>AdjustmentType</tt> is set to <tt>EXACT_CAPACITY</tt> , the
--   number should only be a positive integer. If <tt>AdjustmentType</tt>
--   is set to <tt>PERCENT_CHANGE_IN_CAPACITY</tt> , the value should
--   express the percentage as an integer. For example, -20 indicates a
--   decrease in 20% increments of cluster capacity.
sspcScalingAdjustment :: Lens' SimpleScalingPolicyConfiguration Int

-- | The launch specification for Spot instances in the instance fleet,
--   which determines the defined duration and provisioning timeout
--   behavior.
--   
--   <i>See:</i> <a>spotProvisioningSpecification</a> smart constructor.
data SpotProvisioningSpecification

-- | Creates a value of <a>SpotProvisioningSpecification</a> with the
--   minimum fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>spsBlockDurationMinutes</a> - The defined duration for Spot
--   instances (also known as Spot blocks) in minutes. When specified, the
--   Spot instance does not terminate before the defined duration expires,
--   and defined duration pricing for Spot instances applies. Valid values
--   are 60, 120, 180, 240, 300, or 360. The duration period starts as soon
--   as a Spot instance receives its instance ID. At the end of the
--   duration, Amazon EC2 marks the Spot instance for termination and
--   provides a Spot instance termination notice, which gives the instance
--   a two-minute warning before it terminates.</li>
--   <li><a>spsTimeoutDurationMinutes</a> - The spot provisioning timeout
--   period in minutes. If Spot instances are not provisioned within this
--   time period, the <tt>TimeOutAction</tt> is taken. Minimum value is 5
--   and maximum value is 1440. The timeout applies only during initial
--   provisioning, when the cluster is first created.</li>
--   <li><a>spsTimeoutAction</a> - The action to take when
--   <tt>TargetSpotCapacity</tt> has not been fulfilled when the
--   <tt>TimeoutDurationMinutes</tt> has expired. Spot instances are not
--   uprovisioned within the Spot provisioining timeout. Valid values are
--   <tt>TERMINATE_CLUSTER</tt> and <tt>SWITCH_TO_ON_DEMAND</tt> .
--   SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available,
--   On-Demand Instances should be provisioned to fulfill any remaining
--   Spot capacity.</li>
--   </ul>
spotProvisioningSpecification :: Natural -> SpotProvisioningTimeoutAction -> SpotProvisioningSpecification

-- | The defined duration for Spot instances (also known as Spot blocks) in
--   minutes. When specified, the Spot instance does not terminate before
--   the defined duration expires, and defined duration pricing for Spot
--   instances applies. Valid values are 60, 120, 180, 240, 300, or 360.
--   The duration period starts as soon as a Spot instance receives its
--   instance ID. At the end of the duration, Amazon EC2 marks the Spot
--   instance for termination and provides a Spot instance termination
--   notice, which gives the instance a two-minute warning before it
--   terminates.
spsBlockDurationMinutes :: Lens' SpotProvisioningSpecification (Maybe Natural)

-- | The spot provisioning timeout period in minutes. If Spot instances are
--   not provisioned within this time period, the <tt>TimeOutAction</tt> is
--   taken. Minimum value is 5 and maximum value is 1440. The timeout
--   applies only during initial provisioning, when the cluster is first
--   created.
spsTimeoutDurationMinutes :: Lens' SpotProvisioningSpecification Natural

-- | The action to take when <tt>TargetSpotCapacity</tt> has not been
--   fulfilled when the <tt>TimeoutDurationMinutes</tt> has expired. Spot
--   instances are not uprovisioned within the Spot provisioining timeout.
--   Valid values are <tt>TERMINATE_CLUSTER</tt> and
--   <tt>SWITCH_TO_ON_DEMAND</tt> . SWITCH_TO_ON_DEMAND specifies that if
--   no Spot instances are available, On-Demand Instances should be
--   provisioned to fulfill any remaining Spot capacity.
spsTimeoutAction :: Lens' SpotProvisioningSpecification SpotProvisioningTimeoutAction

-- | This represents a step in a cluster.
--   
--   <i>See:</i> <a>step</a> smart constructor.
data Step

-- | Creates a value of <a>Step</a> with the minimum fields required to
--   make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sStatus</a> - The current execution status details of the
--   cluster step.</li>
--   <li><a>sActionOnFailure</a> - This specifies what action to take when
--   the cluster step fails. Possible values are TERMINATE_CLUSTER,
--   CANCEL_AND_WAIT, and CONTINUE.</li>
--   <li><a>sConfig</a> - The Hadoop job configuration of the cluster
--   step.</li>
--   <li><a>sName</a> - The name of the cluster step.</li>
--   <li><a>sId</a> - The identifier of the cluster step.</li>
--   </ul>
step :: Step

-- | The current execution status details of the cluster step.
sStatus :: Lens' Step (Maybe StepStatus)

-- | This specifies what action to take when the cluster step fails.
--   Possible values are TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE.
sActionOnFailure :: Lens' Step (Maybe ActionOnFailure)

-- | The Hadoop job configuration of the cluster step.
sConfig :: Lens' Step (Maybe HadoopStepConfig)

-- | The name of the cluster step.
sName :: Lens' Step (Maybe Text)

-- | The identifier of the cluster step.
sId :: Lens' Step (Maybe Text)

-- | Specification of a cluster (job flow) step.
--   
--   <i>See:</i> <a>stepConfig</a> smart constructor.
data StepConfig

-- | Creates a value of <a>StepConfig</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>scActionOnFailure</a> - The action to take if the step
--   fails.</li>
--   <li><a>scName</a> - The name of the step.</li>
--   <li><a>scHadoopJARStep</a> - The JAR file used for the step.</li>
--   </ul>
stepConfig :: Text -> HadoopJARStepConfig -> StepConfig

-- | The action to take if the step fails.
scActionOnFailure :: Lens' StepConfig (Maybe ActionOnFailure)

-- | The name of the step.
scName :: Lens' StepConfig Text

-- | The JAR file used for the step.
scHadoopJARStep :: Lens' StepConfig HadoopJARStepConfig

-- | The details of the step state change reason.
--   
--   <i>See:</i> <a>stepStateChangeReason</a> smart constructor.
data StepStateChangeReason

-- | Creates a value of <a>StepStateChangeReason</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>sscrCode</a> - The programmable code for the state change
--   reason. Note: Currently, the service provides no code for the state
--   change.</li>
--   <li><a>sscrMessage</a> - The descriptive message for the state change
--   reason.</li>
--   </ul>
stepStateChangeReason :: StepStateChangeReason

-- | The programmable code for the state change reason. Note: Currently,
--   the service provides no code for the state change.
sscrCode :: Lens' StepStateChangeReason (Maybe StepStateChangeReasonCode)

-- | The descriptive message for the state change reason.
sscrMessage :: Lens' StepStateChangeReason (Maybe Text)

-- | The execution status details of the cluster step.
--   
--   <i>See:</i> <a>stepStatus</a> smart constructor.
data StepStatus

-- | Creates a value of <a>StepStatus</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ssState</a> - The execution state of the cluster step.</li>
--   <li><a>ssFailureDetails</a> - The details for the step failure
--   including reason, message, and log file path where the root cause was
--   identified.</li>
--   <li><a>ssStateChangeReason</a> - The reason for the step execution
--   status change.</li>
--   <li><a>ssTimeline</a> - The timeline of the cluster step status over
--   time.</li>
--   </ul>
stepStatus :: StepStatus

-- | The execution state of the cluster step.
ssState :: Lens' StepStatus (Maybe StepState)

-- | The details for the step failure including reason, message, and log
--   file path where the root cause was identified.
ssFailureDetails :: Lens' StepStatus (Maybe FailureDetails)

-- | The reason for the step execution status change.
ssStateChangeReason :: Lens' StepStatus (Maybe StepStateChangeReason)

-- | The timeline of the cluster step status over time.
ssTimeline :: Lens' StepStatus (Maybe StepTimeline)

-- | The summary of the cluster step.
--   
--   <i>See:</i> <a>stepSummary</a> smart constructor.
data StepSummary

-- | Creates a value of <a>StepSummary</a> with the minimum fields required
--   to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>ssStatus</a> - The current execution status details of the
--   cluster step.</li>
--   <li><a>ssActionOnFailure</a> - This specifies what action to take when
--   the cluster step fails. Possible values are TERMINATE_CLUSTER,
--   CANCEL_AND_WAIT, and CONTINUE.</li>
--   <li><a>ssConfig</a> - The Hadoop job configuration of the cluster
--   step.</li>
--   <li><a>ssName</a> - The name of the cluster step.</li>
--   <li><a>ssId</a> - The identifier of the cluster step.</li>
--   </ul>
stepSummary :: StepSummary

-- | The current execution status details of the cluster step.
ssStatus :: Lens' StepSummary (Maybe StepStatus)

-- | This specifies what action to take when the cluster step fails.
--   Possible values are TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE.
ssActionOnFailure :: Lens' StepSummary (Maybe ActionOnFailure)

-- | The Hadoop job configuration of the cluster step.
ssConfig :: Lens' StepSummary (Maybe HadoopStepConfig)

-- | The name of the cluster step.
ssName :: Lens' StepSummary (Maybe Text)

-- | The identifier of the cluster step.
ssId :: Lens' StepSummary (Maybe Text)

-- | The timeline of the cluster step lifecycle.
--   
--   <i>See:</i> <a>stepTimeline</a> smart constructor.
data StepTimeline

-- | Creates a value of <a>StepTimeline</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>stCreationDateTime</a> - The date and time when the cluster
--   step was created.</li>
--   <li><a>stEndDateTime</a> - The date and time when the cluster step
--   execution completed or failed.</li>
--   <li><a>stStartDateTime</a> - The date and time when the cluster step
--   execution started.</li>
--   </ul>
stepTimeline :: StepTimeline

-- | The date and time when the cluster step was created.
stCreationDateTime :: Lens' StepTimeline (Maybe UTCTime)

-- | The date and time when the cluster step execution completed or failed.
stEndDateTime :: Lens' StepTimeline (Maybe UTCTime)

-- | The date and time when the cluster step execution started.
stStartDateTime :: Lens' StepTimeline (Maybe UTCTime)

-- | The list of supported product configurations which allow user-supplied
--   arguments. EMR accepts these arguments and forwards them to the
--   corresponding installation script as bootstrap action arguments.
--   
--   <i>See:</i> <a>supportedProductConfig</a> smart constructor.
data SupportedProductConfig

-- | Creates a value of <a>SupportedProductConfig</a> with the minimum
--   fields required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>spcArgs</a> - The list of user-supplied arguments.</li>
--   <li><a>spcName</a> - The name of the product configuration.</li>
--   </ul>
supportedProductConfig :: SupportedProductConfig

-- | The list of user-supplied arguments.
spcArgs :: Lens' SupportedProductConfig [Text]

-- | The name of the product configuration.
spcName :: Lens' SupportedProductConfig (Maybe Text)

-- | A key<i>value pair containing user-defined metadata that you can
--   associate with an Amazon EMR resource. Tags make it easier to
--   associate clusters in various ways, such as grouping clusters to track
--   your Amazon EMR resource allocation costs. For more information, see
--   &lt;http:</i><i>docs.aws.amazon.com</i>emr<i>latest</i>ManagementGuide/emr-plan-tags.html
--   Tag Clusters&gt; .
--   
--   <i>See:</i> <a>tag</a> smart constructor.
data Tag

-- | Creates a value of <a>Tag</a> with the minimum fields required to make
--   a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>tagValue</a> - A user-defined value, which is optional in a
--   tag. For more information, see <a>Tag Clusters</a> .</li>
--   <li><a>tagKey</a> - A user-defined key, which is the minimum required
--   information for a valid tag. For more information, see <a>Tag</a>
--   .</li>
--   </ul>
tag :: Tag

-- | A user-defined value, which is optional in a tag. For more
--   information, see <a>Tag Clusters</a> .
tagValue :: Lens' Tag (Maybe Text)

-- | A user-defined key, which is the minimum required information for a
--   valid tag. For more information, see <a>Tag</a> .
tagKey :: Lens' Tag (Maybe Text)

-- | EBS volume specifications such as volume type, IOPS, and size (GiB)
--   that will be requested for the EBS volume attached to an EC2 instance
--   in the cluster.
--   
--   <i>See:</i> <a>volumeSpecification</a> smart constructor.
data VolumeSpecification

-- | Creates a value of <a>VolumeSpecification</a> with the minimum fields
--   required to make a request.
--   
--   Use one of the following lenses to modify other fields as desired:
--   
--   <ul>
--   <li><a>vsIOPS</a> - The number of I/O operations per second (IOPS)
--   that the volume supports.</li>
--   <li><a>vsVolumeType</a> - The volume type. Volume types supported are
--   gp2, io1, standard.</li>
--   <li><a>vsSizeInGB</a> - The volume size, in gibibytes (GiB). This can
--   be a number from 1 - 1024. If the volume type is EBS-optimized, the
--   minimum value is 10.</li>
--   </ul>
volumeSpecification :: Text -> Int -> VolumeSpecification

-- | The number of I/O operations per second (IOPS) that the volume
--   supports.
vsIOPS :: Lens' VolumeSpecification (Maybe Int)

-- | The volume type. Volume types supported are gp2, io1, standard.
vsVolumeType :: Lens' VolumeSpecification Text

-- | The volume size, in gibibytes (GiB). This can be a number from 1 -
--   1024. If the volume type is EBS-optimized, the minimum value is 10.
vsSizeInGB :: Lens' VolumeSpecification Int
