import { Value } from '../../../cloudformation/Value';
import { InstanceFleetConfigProps } from './InstanceFleetConfigProps';
import { InstanceGroupConfigProps } from './InstanceGroupConfigProps';
import { PlacementTypeProps } from './PlacementTypeProps';
/**
  <code>JobFlowInstancesConfig</code> is a property of the <code>AWS::EMR::Cluster</code> resource. <code>JobFlowInstancesConfig</code> defines the instance groups or instance fleets that comprise the cluster. <code>JobFlowInstancesConfig</code> must contain either <code>InstanceFleetConfig</code> or <code>InstanceGroupConfig</code>. They cannot be used together.
  For full documentation go to <a href="http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html">the AWS Docs</a>
*/
export interface JobFlowInstancesConfigProps {
    /** <code>AdditionalMasterSecurityGroups</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-additionalmastersecuritygroups"></a>
  A list of additional Amazon EC2 security group IDs for the master node.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    additionalMasterSecurityGroups?: Value<Value<string>[]>;
    /** <code>AdditionalSlaveSecurityGroups</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-additionalslavesecuritygroups"></a>
  A list of additional Amazon EC2 security group IDs for the core and task nodes.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    additionalSlaveSecurityGroups?: Value<Value<string>[]>;
    /** <code>CoreInstanceFleet</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-coreinstancefleet"></a>
  Describes the EC2 instances and instance configurations for the core instance fleet when using clusters with the instance fleet configuration.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    coreInstanceFleet?: InstanceFleetConfigProps;
    /** <code>CoreInstanceGroup</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-coreinstancegroup"></a>
  Describes the EC2 instances and instance configurations for core instance groups when using clusters with the uniform instance group configuration.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    coreInstanceGroup?: InstanceGroupConfigProps;
    /** <code>Ec2KeyName</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-ec2keyname"></a>
  The name of the Amazon EC2 key pair that can be used to connect to the master node using SSH as the user called “hadoop.”<br />
  
  Required: No<br />
  
  Minimum: <code>0</code><br />
  
  Maximum: <code>256</code><br />
  
  Pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code><br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    ec2KeyName?: Value<string>;
    /** <code>Ec2SubnetId</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-ec2subnetid"></a>
  Applies to clusters that use the uniform instance group configuration. To launch the cluster in Amazon Virtual Private Cloud (Amazon VPC), set this parameter to the identifier of the Amazon VPC subnet where you want the cluster to launch. If you do not specify this value and your account supports EC2-Classic, the cluster launches in EC2-Classic.<br />
  
  Required: No<br />
  
  Minimum: <code>0</code><br />
  
  Maximum: <code>256</code><br />
  
  Pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code><br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    ec2SubnetId?: Value<string>;
    /** <code>Ec2SubnetIds</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-ec2subnetids"></a>
  Applies to clusters that use the instance fleet configuration. When multiple Amazon EC2 subnet IDs are specified, Amazon EMR evaluates them and launches instances in the optimal subnet.<br />
  The instance fleet configuration is available only in Amazon EMR releases 4.8.0 and later, excluding 5.0.x versions.
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    ec2SubnetIds?: Value<Value<string>[]>;
    /** <code>EmrManagedMasterSecurityGroup</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-emrmanagedmastersecuritygroup"></a>
  The identifier of the Amazon EC2 security group for the master node. If you specify <code>EmrManagedMasterSecurityGroup</code>, you must also specify <code>EmrManagedSlaveSecurityGroup</code>.<br />
  
  Required: No<br />
  
  Minimum: <code>0</code><br />
  
  Maximum: <code>256</code><br />
  
  Pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code><br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    emrManagedMasterSecurityGroup?: Value<string>;
    /** <code>EmrManagedSlaveSecurityGroup</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-emrmanagedslavesecuritygroup"></a>
  The identifier of the Amazon EC2 security group for the core and task nodes. If you specify <code>EmrManagedSlaveSecurityGroup</code>, you must also specify <code>EmrManagedMasterSecurityGroup</code>.<br />
  
  Required: No<br />
  
  Minimum: <code>0</code><br />
  
  Maximum: <code>256</code><br />
  
  Pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code><br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    emrManagedSlaveSecurityGroup?: Value<string>;
    /** <code>HadoopVersion</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-hadoopversion"></a>
  Applies only to Amazon EMR release versions earlier than 4.0. The Hadoop version for the cluster. Valid inputs are “0.18” (no longer maintained), “0.20” (no longer maintained), “0.20.205” (no longer maintained), “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 <code>AmiVersion</code> parameter is set in the RunJobFlow call, in which case the default version of Hadoop for that AMI version is used.<br />
  
  Required: No<br />
  
  Minimum: <code>0</code><br />
  
  Maximum: <code>256</code><br />
  
  Pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code><br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    hadoopVersion?: Value<string>;
    /** <code>KeepJobFlowAliveWhenNoSteps</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-keepjobflowalivewhennosteps"></a>
  Specifies whether the cluster should remain available after completing all steps. Defaults to <code>true</code>. For more information about configuring cluster termination, see <a href="https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html">Control Cluster Termination</a> in the
  EMR Management Guide: br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    keepJobFlowAliveWhenNoSteps?: Value<boolean>;
    /** <code>MasterInstanceFleet</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-masterinstancefleet"></a>
  Describes the EC2 instances and instance configurations for the master instance fleet when using clusters with the instance fleet configuration.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    masterInstanceFleet?: InstanceFleetConfigProps;
    /** <code>MasterInstanceGroup</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-masterinstancegroup"></a>
  Describes the EC2 instances and instance configurations for the master instance group when using clusters with the uniform instance group configuration.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    masterInstanceGroup?: InstanceGroupConfigProps;
    /** <code>Placement</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-placement"></a>
  The Availability Zone in which the cluster runs.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    placement?: PlacementTypeProps;
    /** <code>ServiceAccessSecurityGroup</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-serviceaccesssecuritygroup"></a>
  The identifier of the Amazon EC2 security group for the Amazon EMR service to access clusters in VPC private subnets.<br />
  
  Required: No<br />
  
  Minimum: <code>0</code><br />
  
  Maximum: <code>256</code><br />
  
  Pattern: <code>[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*</code><br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement">Replacement</a> */
    serviceAccessSecurityGroup?: Value<string>;
    /** <code>TaskInstanceFleets</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-taskinstancefleets"></a>
  Describes the EC2 instances and instance configurations for the task instance fleets when using clusters with the instance fleet configuration. These task instance fleets are added to the cluster as part of the cluster launch. Each task instance fleet must have a unique name specified so that CloudFormation can differentiate between the task instance fleets.<br />
  You can currently specify only one task instance fleet for a cluster. After creating the cluster, you can only modify the mutable properties of <code>InstanceFleetConfig</code>, which are <code>TargetOnDemandCapacity</code> and <code>TargetSpotCapacity</code>. Modifying any other property results in cluster replacement.
  To allow a maximum of 30 Amazon EC2 instance types per fleet, include <code>TaskInstanceFleets</code> when you create your cluster. If you create your cluster without <code>TaskInstanceFleets</code>, Amazon EMR uses its default allocation strategy, which allows for a maximum of five Amazon EC2 instance types.
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt">Some interruptions</a> */
    taskInstanceFleets?: InstanceFleetConfigProps[];
    /** <code>TaskInstanceGroups</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-taskinstancegroups"></a>
  Describes the EC2 instances and instance configurations for task instance groups when using clusters with the uniform instance group configuration. These task instance groups are added to the cluster as part of the cluster launch. Each task instance group must have a unique name specified so that CloudFormation can differentiate between the task instance groups.<br />
  After creating the cluster, you can only modify the mutable properties of <code>InstanceGroupConfig</code>, which are <code>AutoScalingPolicy</code> and <code>InstanceCount</code>. Modifying any other property results in cluster replacement.
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt">Some interruptions</a> */
    taskInstanceGroups?: InstanceGroupConfigProps[];
    /** <code>TerminationProtected</code>  <a name="cfn-elasticmapreduce-cluster-jobflowinstancesconfig-terminationprotected"></a>
  Specifies whether to lock the cluster to prevent the Amazon EC2 instances from being terminated by API call, user intervention, or in the event of a job-flow error.<br />
  
  Required: No<br />
  
  Update requires: <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-no-interrupt">No interruption</a> */
    terminationProtected?: Value<boolean>;
}
