-- 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.4.5


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
CSCRCInternalError :: ClusterStateChangeReasonCode
CSCRCStepFailure :: ClusterStateChangeReasonCode
CSCRCUserRequest :: ClusterStateChangeReasonCode
CSCRCValidationError :: ClusterStateChangeReasonCode
data ComparisonOperator
GreaterThan :: ComparisonOperator
GreaterThanOrEqual :: ComparisonOperator
LessThan :: ComparisonOperator
LessThanOrEqual :: ComparisonOperator
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 ScaleDownBehavior
TerminateAtInstanceHour :: ScaleDownBehavior
TerminateAtTaskCompletion :: ScaleDownBehavior
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>Launch a Job Flow on the MapR
--   Distribution for Hadoop</a> . Currently supported values are:
--   
--   <ul>
--   <li>"mapr-m3" - launch the job flow using MapR M3 Edition.</li>
--   <li>"mapr-m5" - launch the job flow using MapR M5 Edition.</li>
--   <li>"mapr" with the user arguments specifying "--edition,m3" or
--   "--edition,m5" - launch the job flow 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 something unclean
--   happened.--&gt;</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 something unclean happened.--&gt;
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> -</li>
--   <li><a>aspsStateChangeReason</a> - The reason for a change in
--   status.</li>
--   </ul>
autoScalingPolicyStatus :: AutoScalingPolicyStatus
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

-- | <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> - Undocumented member.</li>
--   <li><a>csiStepId</a> - Undocumented member.</li>
--   <li><a>csiReason</a> - Undocumented member.</li>
--   </ul>
cancelStepsInfo :: CancelStepsInfo

-- | Undocumented member.
csiStatus :: Lens' CancelStepsInfo (Maybe CancelStepsRequestStatus)

-- | Undocumented member.
csiStepId :: Lens' CancelStepsInfo (Maybe Text)

-- | Undocumented member.
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>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 job flow, 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> - The list of Configurations supplied to
--   the EMR cluster.</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>cluReleaseLabel</a> - The release label for the Amazon EMR
--   release. For Amazon EMR 3.x and 2.x AMIs, use amiVersion instead
--   instead of ReleaseLabel.</li>
--   <li><a>cluLogURI</a> - The path to the Amazon S3 location where logs
--   for this cluster are stored.</li>
--   <li><a>cluRunningAMIVersion</a> - The AMI version running on this
--   cluster.</li>
--   <li><a>cluMasterPublicDNSName</a> - The public DNS name of the master
--   EC2 instance.</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 job flow is
--   visible to all IAM users of the AWS account associated with the job
--   flow. If this value is set to <tt>true</tt> , all IAM users of that
--   AWS account can view and manage the job flow 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)

-- | 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 job flow, 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)

-- | The list of Configurations supplied to the EMR cluster.
cluConfigurations :: Lens' Cluster [Configuration]

-- | 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 release label for the Amazon EMR release. For Amazon EMR 3.x and
--   2.x AMIs, use amiVersion instead instead of ReleaseLabel.
cluReleaseLabel :: Lens' Cluster (Maybe Text)

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

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

-- | The public DNS name of the master EC2 instance.
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 job flow is visible to all IAM users of the AWS
--   account associated with the job flow. If this value is set to
--   <tt>true</tt> , all IAM users of that AWS account can view and manage
--   the job flow 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 job flow, 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 job flow, 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)

-- | Specifies a hardware and software configuration of the EMR cluster.
--   This includes configurations for applications and software bundled
--   with Amazon EMR. The Configuration object is a JSON object which is
--   defined by a classification and a set of properties. Configurations
--   can be nested, so a configuration may have its own Configuration
--   objects listed.
--   
--   <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 configurations you apply to
--   this configuration object.</li>
--   <li><a>cClassification</a> - The classification of a configuration.
--   For more information see, <a>Amazon EMR Configurations</a> .</li>
--   <li><a>cProperties</a> - A set of properties supplied to the
--   Configuration object.</li>
--   </ul>
configuration :: Configuration

-- | A list of configurations you apply to this configuration object.
cConfigurations :: Lens' Configuration [Configuration]

-- | The classification of a configuration. For more information see,
--   <a>Amazon EMR Configurations</a> .
cClassification :: Lens' Configuration (Maybe Text)

-- | A set of properties supplied to the Configuration object.
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>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 job flow was launched. The EC2 instances of the job flow
--   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 job flow in Amazon VPC, set
--   this parameter to the identifier of the Amazon VPC subnet where you
--   want the job flow to launch. If you do not specify this value, the job
--   flow 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 job flow launched in a VPC.</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]

-- | 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 job flow was launched. The
--   EC2 instances of the job flow 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 job flow in Amazon VPC, set this parameter to the
--   identifier of the Amazon VPC subnet where you want the job flow to
--   launch. If you do not specify this value, the job flow 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
--   job flow launched in a VPC.
eiaEC2SubnetId :: Lens' EC2InstanceAttributes (Maybe 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>iPrivateIPAddress</a> - The private IP address of the
--   instance.</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 private IP address of the instance.
iPrivateIPAddress :: 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)

-- | 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)

-- | A description of the Amazon EC2 instance running the job flow. A valid
--   JobFlowInstancesConfig must contain at least InstanceGroups, which is
--   the recommended configuration. However, a valid alternative is to have
--   MasterInstanceType, SlaveInstanceType, and InstanceCount (all three
--   must be present).
--   
--   <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>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 used to
--   execute the job flow.</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>jficHadoopVersion</a> - The Hadoop version for the job flow.
--   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> - To launch the job flow in Amazon Virtual
--   Private Cloud (Amazon VPC), set this parameter to the identifier of
--   the Amazon VPC subnet where you want the job flow to launch. If you do
--   not specify this value, the job flow is launched in the normal Amazon
--   Web Services cloud, outside of an Amazon 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 job flow launched in a Amazon VPC.</li>
--   <li><a>jficMasterInstanceType</a> - The EC2 instance type of the
--   master node.</li>
--   <li><a>jficInstanceGroups</a> - Configuration for the job flow's
--   instance groups.</li>
--   <li><a>jficKeepJobFlowAliveWhenNoSteps</a> - Specifies whether the job
--   flow should be kept alive 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
--   job flow 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 the job flow will run
--   in.</li>
--   </ul>
jobFlowInstancesConfig :: JobFlowInstancesConfig

-- | 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 used to execute the job flow.
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]

-- | The Hadoop version for the job flow. 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)

-- | To launch the job flow in Amazon Virtual Private Cloud (Amazon VPC),
--   set this parameter to the identifier of the Amazon VPC subnet where
--   you want the job flow to launch. If you do not specify this value, the
--   job flow is launched in the normal Amazon Web Services cloud, outside
--   of an Amazon 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 job flow launched
--   in a Amazon VPC.
jficEC2SubnetId :: Lens' JobFlowInstancesConfig (Maybe Text)

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

-- | Configuration for the job flow's instance groups.
jficInstanceGroups :: Lens' JobFlowInstancesConfig [InstanceGroupConfig]

-- | Specifies whether the job flow should be kept alive 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 job flow 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 the job flow will run in.
jficPlacement :: Lens' JobFlowInstancesConfig (Maybe PlacementType)

-- | 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), Value 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:cluster_id}</tt> . This enables the rule to bootstrap
--   when the cluster ID becomes available, and also enables a single
--   automatic scaling policy to be reused for multiple clusters and
--   instance groups.
--   
--   <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 location for the 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>ptAvailabilityZone</a> - The Amazon EC2 Availability Zone for
--   the job flow.</li>
--   </ul>
placementType :: Text -> PlacementType

-- | The Amazon EC2 Availability Zone for the job flow.
ptAvailabilityZone :: Lens' PlacementType 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 a decimal,
--   for example, 0.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 a decimal. For example, -0.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 a decimal, for example, 0.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 a decimal. For example, -0.20 indicates a
--   decrease in 20% increments of cluster capacity.
sspcScalingAdjustment :: Lens' SimpleScalingPolicyConfiguration Int

-- | 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 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 job flow step
--   fails.</li>
--   <li><a>scName</a> - The name of the job flow step.</li>
--   <li><a>scHadoopJARStep</a> - The JAR file used for the job flow
--   step.</li>
--   </ul>
stepConfig :: Text -> HadoopJARStepConfig -> StepConfig

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

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

-- | The JAR file used for the job flow 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>ElasticMapReduce<i>latest</i>DeveloperGuide/emr-plan-tags.html
--   Tagging Amazon EMR Resources&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>Tagging Amazon EMR Resources</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>Tagging
--   Amazon EMR Resources</a> .</li>
--   </ul>
tag :: Tag

-- | A user-defined value, which is optional in a tag. For more
--   information, see <a>Tagging Amazon EMR Resources</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>Tagging Amazon EMR
--   Resources</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 job flows down. When a job flow is
--   shut down, any step not yet completed is canceled and the EC2
--   instances on which the job flow is running are stopped. Any log files
--   not already saved are uploaded to Amazon S3 if a LogUri was specified
--   when the job flow was created.
--   
--   The maximum number of JobFlows allowed is 10. The call to
--   TerminateJobFlows is asynchronous. Depending on the configuration of
--   the job flow, it may take up to 1-5 minutes for the job flow 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.TerminateJobFlows.TerminateJobFlowsResponse


-- | Sets whether all AWS Identity and Access Management (IAM) users under
--   your account can access the specified job flows. This action works on
--   running job flows. You can also set the visibility of a job flow 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 job flow or the AWS account that
--   owns the job flow.
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 job flows
--   are visible to all IAM users of the AWS account associated with the
--   job flow. 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 job flows. If it is set to False, only the IAM user
--   that created a job flow 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 job flows are visible to all IAM users of the
--   AWS account associated with the job flow. 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 job flows. If it is set
--   to False, only the IAM user that created a job flow 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.SetVisibleToAllUsers.SetVisibleToAllUsersResponse


-- | SetTerminationProtection locks a 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
--   SetTerminationProtection on a job flow is analogous to calling the
--   Amazon EC2 DisableAPITermination API on all of the EC2 instances in a
--   cluster.
--   
--   SetTerminationProtection is used to prevent accidental termination of
--   a job flow and to ensure that in the event of an error, the instances
--   will persist so you can recover any data stored in their ephemeral
--   instance storage.
--   
--   To terminate a job flow that has been locked by setting
--   SetTerminationProtection to <tt>true</tt> , you must first unlock the
--   job flow by a subsequent call to SetTerminationProtection in which you
--   set the value to <tt>false</tt> .
--   
--   For more information, see<a>Protecting a Job Flow from Termination</a>
--   in the <i>Amazon EMR 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 job flows 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 job flow 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 job flows 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 job flow 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.SetTerminationProtection.SetTerminationProtectionResponse


-- | RunJobFlow creates and starts running a new job flow. The job flow
--   will run the steps specified. After the job flow completes, the
--   cluster is stopped 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 job flow will transition 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 job flow 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 job flow 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 Job Flow</a> in the <i>Amazon EMR Management Guide</i>
--   .
--   
--   For long running job flows, 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> - The version of the Amazon Machine Image
--   (AMI) to use when launching Amazon EC2 instances in the job flow. The
--   following values are valid: * The version number of the AMI to use,
--   for example, "2.0." 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. For
--   details about the AMI versions currently supported by Amazon Elastic
--   MapReduce, see <a>AMI Versions Supported in Elastic MapReduce</a> in
--   the <i>Amazon Elastic MapReduce Developer Guide.</i></li>
--   <li><a>rjfAdditionalInfo</a> - A JSON string for selecting additional
--   features.</li>
--   <li><a>rjfConfigurations</a> - The list of configurations supplied for
--   the EMR cluster you are creating.</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 be executed by the job
--   flow.</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 that will
--   be run before Hadoop is started 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 amiVersion instead
--   instead of ReleaseLabel.</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>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 <a>Launch a Job Flow on the MapR Distribution
--   for Hadoop</a> . Currently 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 job flow is visible to
--   all IAM users of the AWS account associated with the job flow. 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
--   job flow. If it is set to <tt>false</tt> , only the IAM user that
--   created the job flow can view and manage it.</li>
--   <li><a>rjfSupportedProducts</a> - A list of strings that indicates
--   third-party software to use with the job flow. For more information,
--   see <a>Use Third Party Applications with Amazon EMR</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> - 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 on which to run the job flow.</li>
--   </ul>
runJobFlow :: Text -> JobFlowInstancesConfig -> RunJobFlow

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

-- | The version of the Amazon Machine Image (AMI) to use when launching
--   Amazon EC2 instances in the job flow. The following values are valid:
--   * The version number of the AMI to use, for example, "2.0." 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. For
--   details about the AMI versions currently supported by Amazon Elastic
--   MapReduce, see <a>AMI Versions Supported in Elastic MapReduce</a> in
--   the <i>Amazon Elastic MapReduce Developer Guide.</i>
rjfAMIVersion :: Lens' RunJobFlow (Maybe Text)

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

-- | The list of configurations supplied for the EMR cluster you are
--   creating.
rjfConfigurations :: Lens' RunJobFlow [Configuration]

-- | 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 be executed by the job flow.
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 that will be run before Hadoop is started
--   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 amiVersion instead instead of ReleaseLabel.
rjfReleaseLabel :: Lens' RunJobFlow (Maybe Text)

-- | 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)

-- | 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 <a>Launch a Job
--   Flow on the MapR Distribution for Hadoop</a> . Currently 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 job flow is visible to all IAM users of the AWS account
--   associated with the job flow. 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 job flow. If it is set to
--   <tt>false</tt> , only the IAM user that created the job flow can view
--   and manage it.
rjfVisibleToAllUsers :: Lens' RunJobFlow (Maybe Bool)

-- | A list of strings that indicates third-party software to use with the
--   job flow. For more information, see <a>Use Third Party Applications
--   with Amazon EMR</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]

-- | 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 on
--   which to run the job flow.
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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.RunJobFlow.RunJobFlowResponse


-- | 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>Tagging Amazon EMR Resources</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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.RemoveTags.RemoveTagsResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.RemoveAutoScalingPolicy.RemoveAutoScalingPolicyResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.PutAutoScalingPolicy.PutAutoScalingPolicyResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.ModifyInstanceGroups.ModifyInstanceGroupsResponse


-- | 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.Pager.AWSPager Network.AWS.EMR.ListSteps.ListSteps
instance Network.AWS.Types.AWSRequest 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
instance Control.DeepSeq.NFData Network.AWS.EMR.ListSteps.ListStepsResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.ListSecurityConfigurations.ListSecurityConfigurationsResponse


-- | Provides information about the cluster instances that Amazon EMR
--   provisions on behalf of a user when it creates the cluster. For
--   example, this operation indicates when the EC2 instances reach the
--   Ready state, when instances become available to Amazon EMR to use for
--   jobs, and the IP addresses for cluster instances, etc.
--   
--   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>liMarker</a> - The pagination token that indicates the next set
--   of results to retrieve.</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 pagination token that indicates the next set of results to
--   retrieve.
liMarker :: 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.Pager.AWSPager Network.AWS.EMR.ListInstances.ListInstances
instance Network.AWS.Types.AWSRequest 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
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstances.ListInstancesResponse


-- | 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.Pager.AWSPager Network.AWS.EMR.ListInstanceGroups.ListInstanceGroups
instance Network.AWS.Types.AWSRequest 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
instance Control.DeepSeq.NFData Network.AWS.EMR.ListInstanceGroups.ListInstanceGroupsResponse


-- | 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.Pager.AWSPager Network.AWS.EMR.ListClusters.ListClusters
instance Network.AWS.Types.AWSRequest 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
instance Control.DeepSeq.NFData Network.AWS.EMR.ListClusters.ListClustersResponse


-- | 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.Pager.AWSPager Network.AWS.EMR.ListBootstrapActions.ListBootstrapActions
instance Network.AWS.Types.AWSRequest 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
instance Control.DeepSeq.NFData Network.AWS.EMR.ListBootstrapActions.ListBootstrapActionsResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeStep.DescribeStepResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeSecurityConfiguration.DescribeSecurityConfigurationResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.DescribeCluster.DescribeClusterResponse


module Network.AWS.EMR.Waiters

-- | 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


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.DeleteSecurityConfiguration.DeleteSecurityConfigurationResponse


-- | 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.</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.
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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.CreateSecurityConfiguration.CreateSecurityConfigurationResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.CancelSteps.CancelStepsResponse


-- | 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>Tagging Amazon EMR Resources</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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.AddTags.AddTagsResponse


-- | AddJobFlowSteps adds new steps to a running job flow. A maximum of 256
--   steps are allowed in each job flow.
--   
--   If your job flow 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 Job Flow</a> in the <i>Amazon EMR Developer's Guide</i>
--   .
--   
--   A step specifies the location of a JAR file stored either on the
--   master node of the job flow 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 job flow 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.AddJobFlowSteps.AddJobFlowStepsResponse


-- | 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 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
instance Control.DeepSeq.NFData Network.AWS.EMR.AddInstanceGroups.AddInstanceGroupsResponse


-- | 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>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
CSCRCInternalError :: ClusterStateChangeReasonCode
CSCRCStepFailure :: ClusterStateChangeReasonCode
CSCRCUserRequest :: ClusterStateChangeReasonCode
CSCRCValidationError :: ClusterStateChangeReasonCode
data ComparisonOperator
GreaterThan :: ComparisonOperator
GreaterThanOrEqual :: ComparisonOperator
LessThan :: ComparisonOperator
LessThanOrEqual :: ComparisonOperator
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 ScaleDownBehavior
TerminateAtInstanceHour :: ScaleDownBehavior
TerminateAtTaskCompletion :: ScaleDownBehavior
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>Launch a Job Flow on the MapR
--   Distribution for Hadoop</a> . Currently supported values are:
--   
--   <ul>
--   <li>"mapr-m3" - launch the job flow using MapR M3 Edition.</li>
--   <li>"mapr-m5" - launch the job flow using MapR M5 Edition.</li>
--   <li>"mapr" with the user arguments specifying "--edition,m3" or
--   "--edition,m5" - launch the job flow 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 something unclean
--   happened.--&gt;</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 something unclean happened.--&gt;
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> -</li>
--   <li><a>aspsStateChangeReason</a> - The reason for a change in
--   status.</li>
--   </ul>
autoScalingPolicyStatus :: AutoScalingPolicyStatus
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

-- | <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> - Undocumented member.</li>
--   <li><a>csiStepId</a> - Undocumented member.</li>
--   <li><a>csiReason</a> - Undocumented member.</li>
--   </ul>
cancelStepsInfo :: CancelStepsInfo

-- | Undocumented member.
csiStatus :: Lens' CancelStepsInfo (Maybe CancelStepsRequestStatus)

-- | Undocumented member.
csiStepId :: Lens' CancelStepsInfo (Maybe Text)

-- | Undocumented member.
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>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 job flow, 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> - The list of Configurations supplied to
--   the EMR cluster.</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>cluReleaseLabel</a> - The release label for the Amazon EMR
--   release. For Amazon EMR 3.x and 2.x AMIs, use amiVersion instead
--   instead of ReleaseLabel.</li>
--   <li><a>cluLogURI</a> - The path to the Amazon S3 location where logs
--   for this cluster are stored.</li>
--   <li><a>cluRunningAMIVersion</a> - The AMI version running on this
--   cluster.</li>
--   <li><a>cluMasterPublicDNSName</a> - The public DNS name of the master
--   EC2 instance.</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 job flow is
--   visible to all IAM users of the AWS account associated with the job
--   flow. If this value is set to <tt>true</tt> , all IAM users of that
--   AWS account can view and manage the job flow 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)

-- | 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 job flow, 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)

-- | The list of Configurations supplied to the EMR cluster.
cluConfigurations :: Lens' Cluster [Configuration]

-- | 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 release label for the Amazon EMR release. For Amazon EMR 3.x and
--   2.x AMIs, use amiVersion instead instead of ReleaseLabel.
cluReleaseLabel :: Lens' Cluster (Maybe Text)

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

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

-- | The public DNS name of the master EC2 instance.
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 job flow is visible to all IAM users of the AWS
--   account associated with the job flow. If this value is set to
--   <tt>true</tt> , all IAM users of that AWS account can view and manage
--   the job flow 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 job flow, 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 job flow, 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)

-- | Specifies a hardware and software configuration of the EMR cluster.
--   This includes configurations for applications and software bundled
--   with Amazon EMR. The Configuration object is a JSON object which is
--   defined by a classification and a set of properties. Configurations
--   can be nested, so a configuration may have its own Configuration
--   objects listed.
--   
--   <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 configurations you apply to
--   this configuration object.</li>
--   <li><a>cClassification</a> - The classification of a configuration.
--   For more information see, <a>Amazon EMR Configurations</a> .</li>
--   <li><a>cProperties</a> - A set of properties supplied to the
--   Configuration object.</li>
--   </ul>
configuration :: Configuration

-- | A list of configurations you apply to this configuration object.
cConfigurations :: Lens' Configuration [Configuration]

-- | The classification of a configuration. For more information see,
--   <a>Amazon EMR Configurations</a> .
cClassification :: Lens' Configuration (Maybe Text)

-- | A set of properties supplied to the Configuration object.
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>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 job flow was launched. The EC2 instances of the job flow
--   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 job flow in Amazon VPC, set
--   this parameter to the identifier of the Amazon VPC subnet where you
--   want the job flow to launch. If you do not specify this value, the job
--   flow 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 job flow launched in a VPC.</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]

-- | 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 job flow was launched. The
--   EC2 instances of the job flow 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 job flow in Amazon VPC, set this parameter to the
--   identifier of the Amazon VPC subnet where you want the job flow to
--   launch. If you do not specify this value, the job flow 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
--   job flow launched in a VPC.
eiaEC2SubnetId :: Lens' EC2InstanceAttributes (Maybe 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>iPrivateIPAddress</a> - The private IP address of the
--   instance.</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 private IP address of the instance.
iPrivateIPAddress :: 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)

-- | 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)

-- | A description of the Amazon EC2 instance running the job flow. A valid
--   JobFlowInstancesConfig must contain at least InstanceGroups, which is
--   the recommended configuration. However, a valid alternative is to have
--   MasterInstanceType, SlaveInstanceType, and InstanceCount (all three
--   must be present).
--   
--   <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>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 used to
--   execute the job flow.</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>jficHadoopVersion</a> - The Hadoop version for the job flow.
--   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> - To launch the job flow in Amazon Virtual
--   Private Cloud (Amazon VPC), set this parameter to the identifier of
--   the Amazon VPC subnet where you want the job flow to launch. If you do
--   not specify this value, the job flow is launched in the normal Amazon
--   Web Services cloud, outside of an Amazon 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 job flow launched in a Amazon VPC.</li>
--   <li><a>jficMasterInstanceType</a> - The EC2 instance type of the
--   master node.</li>
--   <li><a>jficInstanceGroups</a> - Configuration for the job flow's
--   instance groups.</li>
--   <li><a>jficKeepJobFlowAliveWhenNoSteps</a> - Specifies whether the job
--   flow should be kept alive 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
--   job flow 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 the job flow will run
--   in.</li>
--   </ul>
jobFlowInstancesConfig :: JobFlowInstancesConfig

-- | 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 used to execute the job flow.
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]

-- | The Hadoop version for the job flow. 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)

-- | To launch the job flow in Amazon Virtual Private Cloud (Amazon VPC),
--   set this parameter to the identifier of the Amazon VPC subnet where
--   you want the job flow to launch. If you do not specify this value, the
--   job flow is launched in the normal Amazon Web Services cloud, outside
--   of an Amazon 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 job flow launched
--   in a Amazon VPC.
jficEC2SubnetId :: Lens' JobFlowInstancesConfig (Maybe Text)

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

-- | Configuration for the job flow's instance groups.
jficInstanceGroups :: Lens' JobFlowInstancesConfig [InstanceGroupConfig]

-- | Specifies whether the job flow should be kept alive 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 job flow 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 the job flow will run in.
jficPlacement :: Lens' JobFlowInstancesConfig (Maybe PlacementType)

-- | 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), Value 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:cluster_id}</tt> . This enables the rule to bootstrap
--   when the cluster ID becomes available, and also enables a single
--   automatic scaling policy to be reused for multiple clusters and
--   instance groups.
--   
--   <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 location for the 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>ptAvailabilityZone</a> - The Amazon EC2 Availability Zone for
--   the job flow.</li>
--   </ul>
placementType :: Text -> PlacementType

-- | The Amazon EC2 Availability Zone for the job flow.
ptAvailabilityZone :: Lens' PlacementType 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 a decimal,
--   for example, 0.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 a decimal. For example, -0.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 a decimal, for example, 0.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 a decimal. For example, -0.20 indicates a
--   decrease in 20% increments of cluster capacity.
sspcScalingAdjustment :: Lens' SimpleScalingPolicyConfiguration Int

-- | 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 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 job flow step
--   fails.</li>
--   <li><a>scName</a> - The name of the job flow step.</li>
--   <li><a>scHadoopJARStep</a> - The JAR file used for the job flow
--   step.</li>
--   </ul>
stepConfig :: Text -> HadoopJARStepConfig -> StepConfig

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

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

-- | The JAR file used for the job flow 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>ElasticMapReduce<i>latest</i>DeveloperGuide/emr-plan-tags.html
--   Tagging Amazon EMR Resources&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>Tagging Amazon EMR Resources</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>Tagging
--   Amazon EMR Resources</a> .</li>
--   </ul>
tag :: Tag

-- | A user-defined value, which is optional in a tag. For more
--   information, see <a>Tagging Amazon EMR Resources</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>Tagging Amazon EMR
--   Resources</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
