import type { Construct } from 'constructs';
import * as iam from '../../../aws-iam';
import * as sfn from '../../../aws-stepfunctions';
import * as cdk from '../../../core';
interface EmrCreateClusterOptions {
    /**
     * A specification of the number and type of Amazon EC2 instances.
     */
    readonly instances: EmrCreateCluster.InstancesConfigProperty;
    /**
     * Also called instance profile and EC2 role. An IAM role for an EMR cluster. The EC2 instances of the cluster assume this role.
     *
     * This attribute has been renamed from jobFlowRole to clusterRole to align with other ERM/StepFunction integration parameters.
     *
     * @default - * A Role will be created
     */
    readonly clusterRole?: iam.IRole;
    /**
     * The Name of the Cluster
     */
    readonly name: string;
    /**
     * The IAM role that will be assumed by the Amazon EMR service to access AWS resources on your behalf.
     *
     * @default - A role will be created that Amazon EMR service can assume.
     */
    readonly serviceRole?: iam.IRole;
    /**
     * A JSON string for selecting additional features.
     *
     * @default - None
     */
    readonly additionalInfo?: string;
    /**
     * A case-insensitive list of applications for Amazon EMR to install and configure when launching the cluster.
     *
     * @default - EMR selected default
     */
    readonly applications?: EmrCreateCluster.ApplicationConfigProperty[];
    /**
     * An IAM role for automatic scaling policies.
     *
     * @default - A role will be created.
     */
    readonly autoScalingRole?: iam.IRole;
    /**
     * A list of bootstrap actions to run before Hadoop starts on the cluster nodes.
     *
     * @default - None
     */
    readonly bootstrapActions?: EmrCreateCluster.BootstrapActionConfigProperty[];
    /**
     * The list of configurations supplied for the EMR cluster you are creating.
     *
     * @default - None
     */
    readonly configurations?: EmrCreateCluster.ConfigurationProperty[];
    /**
     * The ID of a custom Amazon EBS-backed Linux AMI.
     *
     * @default - None
     */
    readonly customAmiId?: string;
    /**
     * The size of the EBS root device volume of the Linux AMI that is used for each EC2 instance.
     *
     * @default - EMR selected default
     */
    readonly ebsRootVolumeSize?: cdk.Size;
    /**
     * The IOPS of the EBS root device volume of the Linux AMI that is used for each EC2 instance.
     *
     * Requires EMR release label 6.15.0 or above.
     * Must be in range [3000, 16000].
     * @see https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami-root-volume-size.html#emr-root-volume-overview
     * @default - EMR selected default
     */
    readonly ebsRootVolumeIops?: number;
    /**
     * The throughput, in MiB/s, of the EBS root device volume of the Linux AMI that is used for each EC2 instance.
     *
     * Requires EMR release label 6.15.0 or above.
     * Must be in range [125, 1000].
     * @see https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami-root-volume-size.html#emr-root-volume-overview
     * @default - EMR selected default
     */
    readonly ebsRootVolumeThroughput?: number;
    /**
     * Attributes for Kerberos configuration when Kerberos authentication is enabled using a security configuration.
     *
     * @default - None
     */
    readonly kerberosAttributes?: EmrCreateCluster.KerberosAttributesProperty;
    /**
     * The location in Amazon S3 to write the log files of the job flow.
     *
     * @default - None
     */
    readonly logUri?: string;
    /**
     * The specified managed scaling policy for an Amazon EMR cluster.
     *
     * @default - None
     */
    readonly managedScalingPolicy?: EmrCreateCluster.ManagedScalingPolicyProperty;
    /**
     * The Amazon EMR release label, which determines the version of open-source application packages installed on the cluster.
     *
     * @default - EMR selected default
     */
    readonly releaseLabel?: string;
    /**
     * Specifies the way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an instance group is resized.
     *
     * @default - EMR selected default
     */
    readonly scaleDownBehavior?: EmrCreateCluster.EmrClusterScaleDownBehavior;
    /**
     * The name of a security configuration to apply to the cluster.
     *
     * @default - None
     */
    readonly securityConfiguration?: string;
    /**
     * Specifies the step concurrency level to allow multiple steps to run in parallel
     *
     * Requires EMR release label 5.28.0 or above.
     * Must be in range [1, 256].
     *
     * @default 1 - no step concurrency allowed
     */
    readonly stepConcurrencyLevel?: number;
    /**
     * A list of tags to associate with a cluster and propagate to Amazon EC2 instances.
     *
     * @default - None
     */
    readonly tags?: {
        [key: string]: string;
    };
    /**
     * A value of true indicates that all IAM users in the AWS account can perform cluster actions if they have the proper IAM policy permissions.
     *
     * @default true
     */
    readonly visibleToAllUsers?: boolean;
    /**
     * The amount of idle time after which the cluster automatically terminates.
     *
     * You can specify a minimum of 60 seconds and a maximum of 604800 seconds (seven days).
     *
     * @default - No timeout
     */
    readonly autoTerminationPolicyIdleTimeout?: cdk.Duration;
}
/**
 * Properties for calling an AWS service's API action using JSONPath from your
 * state machine across regions.
 */
export interface EmrCreateClusterJsonPathProps extends sfn.TaskStateJsonPathBaseProps, EmrCreateClusterOptions {
}
/**
 * Properties for calling an AWS service's API action using JSONata from your
 * state machine across regions.
 */
export interface EmrCreateClusterJsonataProps extends sfn.TaskStateJsonataBaseProps, EmrCreateClusterOptions {
}
/**
 * Properties for calling an AWS service's API action from your
 * state machine across regions.
 */
export interface EmrCreateClusterProps extends sfn.TaskStateBaseProps, EmrCreateClusterOptions {
}
/**
 * A Step Functions Task to create an EMR Cluster.
 *
 * The ClusterConfiguration is defined as Parameters in the state machine definition.
 *
 * OUTPUT: the ClusterId.
 *
 */
export declare class EmrCreateCluster extends sfn.TaskStateBase {
    private readonly props;
    /**
     * A Step Functions task using JSONPath to create an EMR Cluster.
     *
     * This task creates a Lambda function to call cross-region AWS API and invokes it.
     */
    static jsonPath(scope: Construct, id: string, props: EmrCreateClusterJsonPathProps): EmrCreateCluster;
    /**
     * A Step Functions task using JSONata to create an EMR Cluster.
     *
     * This task creates a Lambda function to call cross-region AWS API and invokes it.
     */
    static jsonata(scope: Construct, id: string, props: EmrCreateClusterJsonataProps): EmrCreateCluster;
    private static readonly SUPPORTED_INTEGRATION_PATTERNS;
    protected readonly taskPolicies?: iam.PolicyStatement[];
    protected readonly taskMetrics?: sfn.TaskMetricsConfig;
    private readonly visibleToAllUsers;
    private readonly integrationPattern;
    private _serviceRole;
    private _clusterRole;
    private _autoScalingRole?;
    private _baseTags?;
    constructor(scope: Construct, id: string, props: EmrCreateClusterProps);
    /**
     * The service role for the EMR Cluster.
     *
     * Only available after task has been added to a state machine.
     */
    get serviceRole(): iam.IRole;
    /**
     * The instance role for the EMR Cluster.
     *
     * Only available after task has been added to a state machine.
     */
    get clusterRole(): iam.IRole;
    /**
     * The autoscaling role for the EMR Cluster.
     *
     * Only available after task has been added to a state machine.
     */
    get autoScalingRole(): iam.IRole;
    /**
     * @internal
     */
    protected _renderTask(topLevelQueryLanguage?: sfn.QueryLanguage): any;
    private renderTags;
    /**
     * This generates the PolicyStatements required by the Task to call CreateCluster.
     */
    private createPolicyStatements;
    /**
     * Generate the Role used by the EMR Service
     */
    private createServiceRole;
    /**
     * Generate the Role and Instance Profile used by the EC2 instances
     *
     * Data access permissions will need to be updated by the user
     */
    private createClusterRole;
    /**
     * Generate the Role used to AutoScale the Cluster
     */
    private createAutoScalingRole;
    /**
     * Validates the release label string is in proper format.
     * Release labels are in the form `emr-x.x.x`. For example, `emr-5.33.0`.
     *
     * @see https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html
     */
    private validateReleaseLabel;
    private validatePropsRelatedToReleaseLabel;
}
export declare namespace EmrCreateCluster {
    /**
     * The Cluster ScaleDownBehavior specifies the way that individual Amazon EC2 instances terminate when an automatic scale-in activity
     * occurs or an instance group is resized.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html#EMR-RunJobFlow-request-ScaleDownBehavior
     */
    enum EmrClusterScaleDownBehavior {
        /**
         * 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
         */
        TERMINATE_AT_INSTANCE_HOUR = "TERMINATE_AT_INSTANCE_HOUR",
        /**
         * Indicates that Amazon EMR adds nodes to a deny list and drains tasks from nodes before terminating the Amazon EC2 instances, regardless of the
         * instance-hour boundary.
         */
        TERMINATE_AT_TASK_COMPLETION = "TERMINATE_AT_TASK_COMPLETION"
    }
    /**
     * Instance Role Types
     *
     */
    enum InstanceRoleType {
        /**
         * Master Node
         */
        MASTER = "MASTER",
        /**
         * Core Node
         */
        CORE = "CORE",
        /**
         * Task Node
         */
        TASK = "TASK"
    }
    /**
     * EBS Volume Types
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_VolumeSpecification.html#EMR-Type-VolumeSpecification-VolumeType
     *
     */
    enum EbsBlockDeviceVolumeType {
        /**
         * gp3 Volume Type
         */
        GP3 = "gp3",
        /**
         * gp2 Volume Type
         */
        GP2 = "gp2",
        /**
         * io1 Volume Type
         */
        IO1 = "io1",
        /**
         * st1 Volume Type
         */
        ST1 = "st1",
        /**
         * sc1 Volume Type
         */
        SC1 = "sc1",
        /**
         * Standard Volume Type
         */
        STANDARD = "standard"
    }
    /**
     * 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.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_VolumeSpecification.html
     *
     */
    interface VolumeSpecificationProperty {
        /**
         * The number of I/O operations per second (IOPS) that the volume supports.
         *
         * @default - EMR selected default
         */
        readonly iops?: number;
        /**
         * The volume size. If the volume type is EBS-optimized, the minimum value is 10GiB.
         * Maximum size is 1TiB
         */
        readonly volumeSize: cdk.Size;
        /**
         * The volume type. Volume types supported are gp2, io1, standard.
         */
        readonly volumeType: EbsBlockDeviceVolumeType;
    }
    /**
     * Configuration of requested EBS block device associated with the instance group with count of volumes that will be
     * associated to every instance.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_EbsBlockDeviceConfig.html
     *
     */
    interface EbsBlockDeviceConfigProperty {
        /**
         * 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.
         */
        readonly volumeSpecification: VolumeSpecificationProperty;
        /**
         * Number of EBS volumes with a specific volume configuration that will be associated with every instance in the instance group
         *
         * @default EMR selected default
         */
        readonly volumesPerInstance?: number;
    }
    /**
     * The Amazon EBS configuration of a cluster instance.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_EbsConfiguration.html
     *
     */
    interface EbsConfigurationProperty {
        /**
         * An array of Amazon EBS volume specifications attached to a cluster instance.
         *
         * @default - None
         */
        readonly ebsBlockDeviceConfigs?: EbsBlockDeviceConfigProperty[];
        /**
         * Indicates whether an Amazon EBS volume is EBS-optimized.
         *
         * @default - EMR selected default
         */
        readonly ebsOptimized?: boolean;
    }
    /**
     * An instance type configuration for each instance type in an instance fleet, which determines the EC2 instances Amazon EMR attempts to
     * provision to fulfill On-Demand and Spot target capacities.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceTypeConfig.html
     *
     */
    interface InstanceTypeConfigProperty {
        /**
         * The bid price for each EC2 Spot instance type as defined by InstanceType. Expressed in USD.
         *
         * Cannot specify both `bidPrice` and `bidPriceAsPercentageOfOnDemandPrice`.
         *
         * @default - None
         */
        readonly bidPrice?: string;
        /**
         * The bid price, as a percentage of On-Demand price.
         *
         * Cannot specify both `bidPrice` and `bidPriceAsPercentageOfOnDemandPrice`.
         *
         * @default - None
         */
        readonly bidPriceAsPercentageOfOnDemandPrice?: number;
        /**
         * A configuration classification that applies when provisioning cluster instances, which can include configurations for applications
         * and software that run on the cluster.
         *
         * @default - None
         */
        readonly configurations?: ConfigurationProperty[];
        /**
         * The configuration of Amazon Elastic Block Storage (EBS) attached to each instance as defined by InstanceType.
         *
         * @default - None
         */
        readonly ebsConfiguration?: EbsConfigurationProperty;
        /**
         * An EC2 instance type
         */
        readonly instanceType: string;
        /**
         * The number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined
         * in the InstanceFleetConfig.
         *
         * @default - None
         */
        readonly weightedCapacity?: number;
    }
    /**
     * On-Demand Allocation Strategies
     *
     * Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is "lowest-price" (the default), which launches the lowest price first.
     *
     * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-instancefleetconfig-ondemandprovisioningspecification.html
     *
     */
    enum OnDemandAllocationStrategy {
        /**
         * Lowest-price, which launches instances from the lowest priced pool that has available capacity.
         */
        LOWEST_PRICE = "lowest-price"
    }
    /**
     * The launch specification for On-Demand Instances in the instance fleet, which determines the allocation strategy.
     *
     * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-instancefleetconfig-ondemandprovisioningspecification.html
     *
     */
    interface OnDemandProvisioningSpecificationProperty {
        /**
         * Specifies the strategy to use in launching On-Demand instance fleets.
         *
         * Currently, the only option is lowest-price (the default), which launches the lowest price first.
         */
        readonly allocationStrategy: OnDemandAllocationStrategy;
    }
    /**
     * Spot Timeout Actions
     *
     */
    enum SpotTimeoutAction {
        /**
         * SWITCH_TO_ON_DEMAND
         */
        SWITCH_TO_ON_DEMAND = "SWITCH_TO_ON_DEMAND",
        /**
         * TERMINATE_CLUSTER
         */
        TERMINATE_CLUSTER = "TERMINATE_CLUSTER"
    }
    /**
     * Spot Allocation Strategies
     *
     * Specifies the strategy to use in launching Spot Instance fleets. For example, "capacity-optimized" launches instances from Spot Instance pools with optimal capacity for the number of instances that are launching.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_SpotProvisioningSpecification.html
     *
     */
    enum SpotAllocationStrategy {
        /**
         * Capacity-optimized, which launches instances from Spot Instance pools with optimal capacity for the number of instances that are launching.
         */
        CAPACITY_OPTIMIZED = "capacity-optimized",
        /**
         * Price-capacity-optimized, which launches instances from Spot Instance pools with the highest capacity availability for the number of instances that are launching.
         *
         * Recommended.
         */
        PRICE_CAPACITY_OPTIMIZED = "price-capacity-optimized",
        /**
         * Lowest-price, which launches instances from the lowest priced pool that has available capacity.
         */
        LOWEST_PRICE = "lowest-price",
        /**
         * Diversified, which launches instances across all Spot capacity pools.
         */
        DIVERSIFIED = "diversified"
    }
    /**
     * The launch specification for Spot instances in the instance fleet, which determines the defined duration and provisioning timeout behavior.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_SpotProvisioningSpecification.html
     *
     */
    interface SpotProvisioningSpecificationProperty {
        /**
         * Specifies the strategy to use in launching Spot Instance fleets.
         *
         * @default - No allocation strategy, i.e. spot instance type will be chosen based on current price only
         */
        readonly allocationStrategy?: SpotAllocationStrategy;
        /**
         * The defined duration for Spot instances (also known as Spot blocks) in minutes.
         *
         * @default - No blockDurationMinutes
         *
         * @deprecated - Spot Instances with a defined duration (also known as Spot blocks) are no longer available to new customers from July 1, 2021.
         * For customers who have previously used the feature, we will continue to support Spot Instances with a defined duration until December 31, 2022.
         */
        readonly blockDurationMinutes?: number;
        /**
         * The action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired
         */
        readonly timeoutAction: SpotTimeoutAction;
        /**
         * The spot provisioning timeout period in minutes.
         *
         * The value must be between 5 and 1440 minutes.
         *
         * You must specify one of `timeout` and `timeoutDurationMinutes`.
         *
         * @default - The value in `timeout` is used
         *
         * @deprecated - Use `timeout`.
         */
        readonly timeoutDurationMinutes?: number;
        /**
         * The spot provisioning timeout period in minutes.
         *
         * The value must be between 5 and 1440 minutes.
         *
         * You must specify one of `timeout` and `timeoutDurationMinutes`.
         *
         * @default - The value in `timeoutDurationMinutes` is used
         */
        readonly timeout?: cdk.Duration;
    }
    /**
     * The launch specification for On-Demand and Spot instances in the fleet, which determines the defined duration and provisioning timeout behavior, and allocation strategy.
     *
     * The instance fleet configuration is available only in Amazon EMR releases 4.8.0 and later, excluding 5.0.x versions.
     * On-Demand and Spot instance allocation strategies are available in Amazon EMR releases 5.12.1 and later.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceFleetProvisioningSpecifications.html
     *
     */
    interface InstanceFleetProvisioningSpecificationsProperty {
        /**
         * The launch specification for On-Demand Instances in the instance fleet, which determines the allocation strategy.
         *
         * The instance fleet configuration is available only in Amazon EMR releases 4.8.0 and later, excluding 5.0.x versions.
         * On-Demand Instances allocation strategy is available in Amazon EMR releases 5.12.1 and later.
         *
         * @default - no on-demand specification
         */
        readonly onDemandSpecification?: OnDemandProvisioningSpecificationProperty;
        /**
         * The launch specification for Spot instances in the fleet, which determines the defined duration and provisioning timeout behavior.
         *
         * @default - no spot specification
         */
        readonly spotSpecification?: SpotProvisioningSpecificationProperty;
    }
    /**
     * The configuration that defines an instance fleet.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceFleetConfig.html
     *
     */
    interface InstanceFleetConfigProperty {
        /**
         * The node type that the instance fleet hosts. Valid values are MASTER,CORE,and TASK.
         */
        readonly instanceFleetType: InstanceRoleType;
        /**
         * The instance type configurations that define the EC2 instances in the instance fleet.
         *
         * @default No instanceTpeConfigs
         */
        readonly instanceTypeConfigs?: InstanceTypeConfigProperty[];
        /**
         * The launch specification for the instance fleet.
         *
         * @default No launchSpecifications
         */
        readonly launchSpecifications?: InstanceFleetProvisioningSpecificationsProperty;
        /**
         * The friendly name of the instance fleet.
         *
         * @default No name
         */
        readonly name?: string;
        /**
         * The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision.
         *
         * If not specified or set to 0, only Spot Instances are provisioned for the instance fleet using `targetSpotCapacity`.
         *
         * At least one of `targetSpotCapacity` and `targetOnDemandCapacity` should be greater than 0.
         * For a master instance fleet, only one of `targetSpotCapacity` and `targetOnDemandCapacity` can be specified, and its value
         * must be 1.
         *
         * @default No targetOnDemandCapacity
         */
        readonly targetOnDemandCapacity?: number;
        /**
         * The target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision
         *
         * If not specified or set to 0, only On-Demand Instances are provisioned for the instance fleet using `targetOnDemandCapacity`.
         *
         * At least one of `targetSpotCapacity` and `targetOnDemandCapacity` should be greater than 0.
         * For a master instance fleet, only one of `targetSpotCapacity` and `targetOnDemandCapacity` can be specified, and its value
         * must be 1.
         *
         * @default No targetSpotCapacity
         */
        readonly targetSpotCapacity?: number;
    }
    /**
     * CloudWatch Alarm Comparison Operators
     *
     */
    enum CloudWatchAlarmComparisonOperator {
        /**
         * GREATER_THAN_OR_EQUAL
         */
        GREATER_THAN_OR_EQUAL = "GREATER_THAN_OR_EQUAL",
        /**
         * GREATER_THAN
         */
        GREATER_THAN = "GREATER_THAN",
        /**
         * LESS_THAN
         */
        LESS_THAN = "LESS_THAN",
        /**
         * LESS_THAN_OR_EQUAL
         */
        LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL"
    }
    /**
     * CloudWatch Alarm Statistics
     *
     */
    enum CloudWatchAlarmStatistic {
        /**
         * SAMPLE_COUNT
         */
        SAMPLE_COUNT = "SAMPLE_COUNT",
        /**
         * AVERAGE
         */
        AVERAGE = "AVERAGE",
        /**
         * SUM
         */
        SUM = "SUM",
        /**
         * MINIMUM
         */
        MINIMUM = "MINIMUM",
        /**
         * MAXIMUM
         */
        MAXIMUM = "MAXIMUM"
    }
    /**
     * CloudWatch Alarm Units
     *
     */
    enum CloudWatchAlarmUnit {
        /**
         * NONE
         */
        NONE = "NONE",
        /**
         * SECONDS
         */
        SECONDS = "SECONDS",
        /**
         * MICRO_SECONDS
         */
        MICRO_SECONDS = "MICRO_SECONDS",
        /**
         * MILLI_SECONDS
         */
        MILLI_SECONDS = "MILLI_SECONDS",
        /**
         * BYTES
         */
        BYTES = "BYTES",
        /**
         * KILO_BYTES
         */
        KILO_BYTES = "KILO_BYTES",
        /**
         * MEGA_BYTES
         */
        MEGA_BYTES = "MEGA_BYTES",
        /**
         * GIGA_BYTES
         */
        GIGA_BYTES = "GIGA_BYTES",
        /**
         * TERA_BYTES
         */
        TERA_BYTES = "TERA_BYTES",
        /**
         * BITS
         */
        BITS = "BITS",
        /**
         * KILO_BITS
         */
        KILO_BITS = "KILO_BITS",
        /**
         * MEGA_BITS
         */
        MEGA_BITS = "MEGA_BITS",
        /**
         * GIGA_BITS
         */
        GIGA_BITS = "GIGA_BITS",
        /**
         * TERA_BITS
         */
        TERA_BITS = "TERA_BITS",
        /**
         * PERCENT
         */
        PERCENT = "PERCENT",
        /**
         * COUNT
         */
        COUNT = "COUNT",
        /**
         * BYTES_PER_SECOND
         */
        BYTES_PER_SECOND = "BYTES_PER_SECOND",
        /**
         * KILO_BYTES_PER_SECOND
         */
        KILO_BYTES_PER_SECOND = "KILO_BYTES_PER_SECOND",
        /**
         * MEGA_BYTES_PER_SECOND
         */
        MEGA_BYTES_PER_SECOND = "MEGA_BYTES_PER_SECOND",
        /**
         * GIGA_BYTES_PER_SECOND
         */
        GIGA_BYTES_PER_SECOND = "GIGA_BYTES_PER_SECOND",
        /**
         * TERA_BYTES_PER_SECOND
         */
        TERA_BYTES_PER_SECOND = "TERA_BYTES_PER_SECOND",
        /**
         * BITS_PER_SECOND
         */
        BITS_PER_SECOND = "BITS_PER_SECOND",
        /**
         * KILO_BITS_PER_SECOND
         */
        KILO_BITS_PER_SECOND = "KILO_BITS_PER_SECOND",
        /**
         * MEGA_BITS_PER_SECOND
         */
        MEGA_BITS_PER_SECOND = "MEGA_BITS_PER_SECOND",
        /**
         * GIGA_BITS_PER_SECOND
         */
        GIGA_BITS_PER_SECOND = "GIGA_BITS_PER_SECOND",
        /**
         * TERA_BITS_PER_SECOND
         */
        TERA_BITS_PER_SECOND = "TERA_BITS_PER_SECOND",
        /**
         * COUNT_PER_SECOND
         */
        COUNT_PER_SECOND = "COUNT_PER_SECOND"
    }
    /**
     * A CloudWatch dimension, which is specified using a Key (known as a Name in CloudWatch), Value pair. By default, Amazon EMR uses
     * one dimension whose Key is JobFlowID and Value is a variable representing the cluster ID, which is ${emr.clusterId}. This enables
     * the rule to bootstrap when the cluster ID becomes available
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_MetricDimension.html
     *
     */
    interface MetricDimensionProperty {
        /**
         * The dimension name
         */
        readonly key: string;
        /**
         * The dimension value
         */
        readonly value: string;
    }
    /**
     * 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.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_CloudWatchAlarmDefinition.html
     *
     */
    interface CloudWatchAlarmDefinitionProperty {
        /**
         * Determines how the metric specified by MetricName is compared to the value specified by Threshold
         */
        readonly comparisonOperator: CloudWatchAlarmComparisonOperator;
        /**
         * A CloudWatch metric dimension
         *
         * @default - No dimensions
         */
        readonly dimensions?: MetricDimensionProperty[];
        /**
         * The number of periods, in five-minute increments, during which the alarm condition must exist before the alarm triggers automatic
         * scaling activity.
         *
         * @default 1
         */
        readonly evaluationPeriods?: number;
        /**
         * The name of the CloudWatch metric that is watched to determine an alarm condition.
         */
        readonly metricName: string;
        /**
         * The namespace for the CloudWatch metric.
         *
         * @default 'AWS/ElasticMapReduce'
         */
        readonly namespace?: string;
        /**
         * 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 300.
         */
        readonly period: cdk.Duration;
        /**
         * The statistic to apply to the metric associated with the alarm.
         *
         * @default CloudWatchAlarmStatistic.AVERAGE
         */
        readonly statistic?: CloudWatchAlarmStatistic;
        /**
         * The value against which the specified statistic is compared.
         *
         * @default - None
         */
        readonly threshold?: number;
        /**
         * The unit of measure associated with the CloudWatch metric being watched. The value specified for Unit must correspond to the units
         * specified in the CloudWatch metric.
         *
         * @default CloudWatchAlarmUnit.NONE
         */
        readonly unit?: CloudWatchAlarmUnit;
    }
    /**
     * The conditions that trigger an automatic scaling activity and the definition of a CloudWatch metric alarm.
     * When the defined alarm conditions are met along with other trigger parameters, scaling activity begins.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ScalingTrigger.html
     *
     */
    interface ScalingTriggerProperty {
        /**
         * The definition of a CloudWatch metric alarm. When the defined alarm conditions are met along with other trigger parameters,
         * scaling activity begins.
         */
        readonly cloudWatchAlarmDefinition: CloudWatchAlarmDefinitionProperty;
    }
    /**
     * EC2 Instance Market
     *
     */
    enum InstanceMarket {
        /**
         * On Demand Instance
         */
        ON_DEMAND = "ON_DEMAND",
        /**
         * Spot Instance
         */
        SPOT = "SPOT"
    }
    /**
     * AutoScaling Adjustment Type
     *
     */
    enum ScalingAdjustmentType {
        /**
         * CHANGE_IN_CAPACITY
         */
        CHANGE_IN_CAPACITY = "CHANGE_IN_CAPACITY",
        /**
         * PERCENT_CHANGE_IN_CAPACITY
         */
        PERCENT_CHANGE_IN_CAPACITY = "PERCENT_CHANGE_IN_CAPACITY",
        /**
         * EXACT_CAPACITY
         */
        EXACT_CAPACITY = "EXACT_CAPACITY"
    }
    /**
     * 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.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_SimpleScalingPolicyConfiguration.html
     *
     */
    interface SimpleScalingPolicyConfigurationProperty {
        /**
         * The way in which EC2 instances are added (if ScalingAdjustment is a positive number) or terminated (if ScalingAdjustment is a negative
         * number) each time the scaling activity is triggered.
         *
         * @default - None
         */
        readonly adjustmentType?: ScalingAdjustmentType;
        /**
         * The amount of time, in seconds, after a scaling activity completes before any further trigger-related scaling activities can start.
         *
         * @default 0
         */
        readonly coolDown?: number;
        /**
         * The amount by which to scale in or scale out, based on the specified AdjustmentType. A positive value adds to the instance group's
         * EC2 instance count while a negative number removes instances. If AdjustmentType is set to EXACT_CAPACITY, the number should only be
         * a positive integer.
         */
        readonly scalingAdjustment: number;
    }
    /**
     * The type of adjustment the automatic scaling activity makes when triggered, and the periodicity of the adjustment.
     * And 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.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ScalingAction.html
     *
     */
    interface ScalingActionProperty {
        /**
         * Not available for instance groups. Instance groups use the market type specified for the group.
         *
         * @default - EMR selected default
         */
        readonly market?: InstanceMarket;
        /**
         * The type of adjustment the automatic scaling activity makes when triggered, and the periodicity of the adjustment.
         */
        readonly simpleScalingPolicyConfiguration: SimpleScalingPolicyConfigurationProperty;
    }
    /**
     * 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.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ScalingRule.html
     *
     */
    interface ScalingRuleProperty {
        /**
         * The conditions that trigger an automatic scaling activity.
         */
        readonly action: ScalingActionProperty;
        /**
         * A friendly, more verbose description of the automatic scaling rule.
         *
         * @default - None
         */
        readonly description?: string;
        /**
         * The name used to identify an automatic scaling rule. Rule names must be unique within a scaling policy.
         */
        readonly name: string;
        /**
         * The CloudWatch alarm definition that determines when automatic scaling activity is triggered.
         */
        readonly trigger: ScalingTriggerProperty;
    }
    /**
     * 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.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ScalingConstraints.html
     *
     */
    interface ScalingConstraintsProperty {
        /**
         * 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.
         */
        readonly maxCapacity: number;
        /**
         * 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.
         */
        readonly minCapacity: number;
    }
    /**
     * An automatic scaling policy for a core instance group or task instance group in an Amazon EMR cluster.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_AutoScalingPolicy.html
     *
     */
    interface AutoScalingPolicyProperty {
        /**
         * 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.
         */
        readonly constraints: ScalingConstraintsProperty;
        /**
         * The scale-in and scale-out rules that comprise the automatic scaling policy.
         */
        readonly rules: ScalingRuleProperty[];
    }
    /**
     * Configuration defining a new instance group.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceGroupConfig.html
     *
     */
    interface InstanceGroupConfigProperty {
        /**
         * An automatic scaling policy for a core instance group or task instance group in an Amazon EMR cluster.
         *
         * @default - None
         */
        readonly autoScalingPolicy?: AutoScalingPolicyProperty;
        /**
         * The bid price for each EC2 Spot instance type as defined by InstanceType. Expressed in USD.
         *
         * @default - None
         */
        readonly bidPrice?: string;
        /**
         * The list of configurations supplied for an EMR cluster instance group.
         *
         * @default - None
         */
        readonly configurations?: ConfigurationProperty[];
        /**
         * EBS configurations that will be attached to each EC2 instance in the instance group.
         *
         * @default - None
         */
        readonly ebsConfiguration?: EbsConfigurationProperty;
        /**
         * Target number of instances for the instance group.
         */
        readonly instanceCount: number;
        /**
         * The role of the instance group in the cluster.
         */
        readonly instanceRole: InstanceRoleType;
        /**
         * The EC2 instance type for all instances in the instance group.
         */
        readonly instanceType: string;
        /**
         * Market type of the EC2 instances used to create a cluster node.
         *
         * @default - EMR selected default
         */
        readonly market?: InstanceMarket;
        /**
         * Friendly name given to the instance group.
         *
         * @default - None
         */
        readonly name?: string;
    }
    /**
     * The Amazon EC2 Availability Zone configuration of the cluster (job flow).
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_PlacementType.html
     *
     */
    interface PlacementTypeProperty {
        /**
         * The Amazon EC2 Availability Zone for the cluster. AvailabilityZone is used for uniform instance groups, while AvailabilityZones
         * (plural) is used for instance fleets.
         *
         * @default - EMR selected default
         */
        readonly availabilityZone?: string;
        /**
         * When multiple Availability Zones are specified, Amazon EMR evaluates them and launches instances in the optimal Availability Zone.
         * AvailabilityZones is used for instance fleets, while AvailabilityZone (singular) is used for uniform instance groups.
         *
         * @default - EMR selected default
         */
        readonly availabilityZones?: string[];
    }
    /**
     * A specification of the number and type of Amazon EC2 instances.
     *
     * See the RunJobFlow API for complete documentation on input parameters
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_JobFlowInstancesConfig.html
     *
     */
    interface InstancesConfigProperty {
        /**
         * A list of additional Amazon EC2 security group IDs for the master node.
         *
         * @default - None
         */
        readonly additionalMasterSecurityGroups?: string[];
        /**
         * A list of additional Amazon EC2 security group IDs for the core and task nodes.
         *
         * @default - None
         */
        readonly additionalSlaveSecurityGroups?: string[];
        /**
         * The name of the EC2 key pair that can be used to ssh to the master node as the user called "hadoop."
         *
         * @default - None
         */
        readonly ec2KeyName?: string;
        /**
         * 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.
         *
         * @default EMR selected default
         */
        readonly ec2SubnetId?: string;
        /**
         * Applies to clusters that use the instance fleet configuration. When multiple EC2 subnet IDs are specified, Amazon EMR evaluates them and
         * launches instances in the optimal subnet.
         *
         * @default EMR selected default
         */
        readonly ec2SubnetIds?: string[];
        /**
         * The identifier of the Amazon EC2 security group for the master node.
         *
         * @default - None
         */
        readonly emrManagedMasterSecurityGroup?: string;
        /**
         * The identifier of the Amazon EC2 security group for the core and task nodes.
         *
         * @default - None
         */
        readonly emrManagedSlaveSecurityGroup?: string;
        /**
         * Applies only to Amazon EMR release versions earlier than 4.0. The Hadoop version for the cluster.
         *
         * @default - 0.18 if the AmiVersion parameter is not set. If AmiVersion is set, the version of Hadoop for that AMI version is used.
         */
        readonly hadoopVersion?: string;
        /**
         * The number of EC2 instances in the cluster.
         *
         * @default 0
         */
        readonly instanceCount?: number;
        /**
         * Describes the EC2 instances and instance configurations for clusters that use the instance fleet configuration.
         * The instance fleet configuration is available only in Amazon EMR versions 4.8.0 and later, excluding 5.0.x versions.
         *
         * @default - None
         */
        readonly instanceFleets?: InstanceFleetConfigProperty[];
        /**
         * Configuration for the instance groups in a cluster.
         *
         * @default - None
         */
        readonly instanceGroups?: InstanceGroupConfigProperty[];
        /**
         * The EC2 instance type of the master node.
         *
         * @default - None
         */
        readonly masterInstanceType?: string;
        /**
         * The Availability Zone in which the cluster runs.
         *
         * @default - EMR selected default
         */
        readonly placement?: PlacementTypeProperty;
        /**
         * The identifier of the Amazon EC2 security group for the Amazon EMR service to access clusters in VPC private subnets.
         *
         * @default - None
         */
        readonly serviceAccessSecurityGroup?: string;
        /**
         * The EC2 instance type of the core and task nodes.
         *
         * @default - None
         */
        readonly slaveInstanceType?: string;
        /**
         * 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.
         *
         * @default false
         */
        readonly terminationProtected?: boolean;
    }
    /**
     * Properties for the EMR Cluster Applications
     *
     * Applies to Amazon EMR releases 4.0 and later. A case-insensitive list of applications for Amazon EMR to install and configure when launching
     * the cluster.
     *
     * See the RunJobFlow API for complete documentation on input parameters
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_Application.html
     *
     */
    interface ApplicationConfigProperty {
        /**
         * This option is for advanced users only. This is meta information about third-party applications that third-party vendors use
         * for testing purposes.
         *
         * @default No additionalInfo
         */
        readonly additionalInfo?: {
            [key: string]: string;
        };
        /**
         * Arguments for Amazon EMR to pass to the application.
         *
         * @default No args
         */
        readonly args?: string[];
        /**
         * The name of the application.
         */
        readonly name: string;
        /**
         * The version of the application.
         *
         * @default No version
         */
        readonly version?: string;
    }
    /**
     * Configuration of the script to run during a bootstrap action.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ScriptBootstrapActionConfig.html
     *
     */
    interface ScriptBootstrapActionConfigProperty {
        /**
         * Location of the script to run during a bootstrap action. Can be either a location in Amazon S3 or on a local file system.
         */
        readonly path: string;
        /**
         * A list of command line arguments to pass to the bootstrap action script.
         *
         * @default No args
         */
        readonly args?: string[];
    }
    /**
     * Configuration of a bootstrap action.
     *
     * See the RunJobFlow API for complete documentation on input parameters
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_BootstrapActionConfig.html
     *
     */
    interface BootstrapActionConfigProperty {
        /**
         * The name of the bootstrap action.
         */
        readonly name: string;
        /**
         * The script run by the bootstrap action
         */
        readonly scriptBootstrapAction: ScriptBootstrapActionConfigProperty;
    }
    /**
     * An optional configuration specification to be used when provisioning cluster instances, which can include configurations for
     * applications and software bundled with Amazon EMR.
     *
     * See the RunJobFlow API for complete documentation on input parameters
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_Configuration.html
     *
     */
    interface ConfigurationProperty {
        /**
         * The classification within a configuration.
         *
         * @default No classification
         */
        readonly classification?: string;
        /**
         * A set of properties specified within a configuration classification.
         *
         * @default No properties
         */
        readonly properties?: {
            [key: string]: string;
        };
        /**
         * A list of additional configurations to apply within a configuration object.
         *
         * @default No configurations
         */
        readonly configurations?: ConfigurationProperty[];
    }
    /**
     * Attributes for Kerberos configuration when Kerberos authentication is enabled using a security configuration.
     *
     * See the RunJobFlow API for complete documentation on input parameters
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_KerberosAttributes.html
     *
     */
    interface KerberosAttributesProperty {
        /**
         * The Active Directory password for ADDomainJoinUser.
         *
         * @default No adDomainJoinPassword
         */
        readonly adDomainJoinPassword?: string;
        /**
         * Required only when establishing a cross-realm trust with an Active Directory domain. A user with sufficient privileges to join
         * resources to the domain.
         *
         * @default No adDomainJoinUser
         */
        readonly adDomainJoinUser?: string;
        /**
         * Required only when establishing a cross-realm trust with a KDC in a different realm. The cross-realm principal password, which
         * must be identical across realms.
         *
         * @default No crossRealmTrustPrincipalPassword
         */
        readonly crossRealmTrustPrincipalPassword?: string;
        /**
         * The password used within the cluster for the kadmin service on the cluster-dedicated KDC, which maintains Kerberos principals,
         * password policies, and keytabs for the cluster.
         *
         * @default No kdcAdminPassword
         */
        readonly kdcAdminPassword?: string;
        /**
         * The name of the Kerberos realm to which all nodes in a cluster belong. For example, EC2.INTERNAL.
         */
        readonly realm: string;
    }
    /**
     * The managed scaling policy for an Amazon EMR cluster.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ManagedScalingPolicy.html
     */
    interface ManagedScalingPolicyProperty {
        /**
         * The Amazon EC2 unit limits for a managed scaling policy.
         *
         * @default - None
         */
        readonly computeLimits?: ManagedScalingComputeLimitsProperty;
    }
    /**
     * The EC2 unit limits for a managed scaling policy.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ComputeLimits.html
     */
    interface ManagedScalingComputeLimitsProperty {
        /**
         * The unit type used for specifying a managed scaling policy.
         */
        readonly unitType: ComputeLimitsUnitType;
        /**
         * The lower boundary of Amazon EC2 units.
         */
        readonly minimumCapacityUnits: number;
        /**
         * The upper boundary of Amazon EC2 units.
         */
        readonly maximumCapacityUnits: number;
        /**
         * The upper boundary of On-Demand Amazon EC2 units.
         *
         * @default - None
         */
        readonly maximumOnDemandCapacityUnits?: number;
        /**
         * The upper boundary of Amazon EC2 units for core node type in a cluster.
         *
         * @default - None
         */
        readonly maximumCoreCapacityUnits?: number;
    }
    /**
     * The unit type for managed scaling policy compute limits.
     *
     * @see https://docs.aws.amazon.com/emr/latest/APIReference/API_ComputeLimits.html
     */
    enum ComputeLimitsUnitType {
        /**
         * InstanceFleetUnits
         */
        INSTANCE_FLEET_UNITS = "InstanceFleetUnits",
        /**
         * Instances
         */
        INSTANCES = "Instances",
        /**
         * VCPU
         */
        VCPU = "VCPU"
    }
}
export {};
