# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Dict, List, Mapping, Optional, Tuple, Union
from .. import _utilities, _tables

__all__ = [
    'DeploymentConfigMinimumHealthyHostsArgs',
    'DeploymentConfigTrafficRoutingConfigArgs',
    'DeploymentConfigTrafficRoutingConfigTimeBasedCanaryArgs',
    'DeploymentConfigTrafficRoutingConfigTimeBasedLinearArgs',
    'DeploymentGroupAlarmConfigurationArgs',
    'DeploymentGroupAutoRollbackConfigurationArgs',
    'DeploymentGroupBlueGreenDeploymentConfigArgs',
    'DeploymentGroupBlueGreenDeploymentConfigDeploymentReadyOptionArgs',
    'DeploymentGroupBlueGreenDeploymentConfigGreenFleetProvisioningOptionArgs',
    'DeploymentGroupBlueGreenDeploymentConfigTerminateBlueInstancesOnDeploymentSuccessArgs',
    'DeploymentGroupDeploymentStyleArgs',
    'DeploymentGroupEc2TagFilterArgs',
    'DeploymentGroupEc2TagSetArgs',
    'DeploymentGroupEc2TagSetEc2TagFilterArgs',
    'DeploymentGroupEcsServiceArgs',
    'DeploymentGroupLoadBalancerInfoArgs',
    'DeploymentGroupLoadBalancerInfoElbInfoArgs',
    'DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs',
    'DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs',
    'DeploymentGroupLoadBalancerInfoTargetGroupPairInfoProdTrafficRouteArgs',
    'DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTargetGroupArgs',
    'DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTestTrafficRouteArgs',
    'DeploymentGroupOnPremisesInstanceTagFilterArgs',
    'DeploymentGroupTriggerConfigurationArgs',
]

@pulumi.input_type
class DeploymentConfigMinimumHealthyHostsArgs:
    def __init__(__self__, *,
                 type: Optional[pulumi.Input[str]] = None,
                 value: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[str] type: The type can either be `FLEET_PERCENT` or `HOST_COUNT`.
        :param pulumi.Input[float] value: The value when the type is `FLEET_PERCENT` represents the minimum number of healthy instances as
               a percentage of the total number of instances in the deployment. If you specify FLEET_PERCENT, at the start of the
               deployment, AWS CodeDeploy converts the percentage to the equivalent number of instance and rounds up fractional instances.
               When the type is `HOST_COUNT`, the value represents the minimum number of healthy instances as an absolute value.
        """
        if type is not None:
            pulumi.set(__self__, "type", type)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The type can either be `FLEET_PERCENT` or `HOST_COUNT`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[float]]:
        """
        The value when the type is `FLEET_PERCENT` represents the minimum number of healthy instances as
        a percentage of the total number of instances in the deployment. If you specify FLEET_PERCENT, at the start of the
        deployment, AWS CodeDeploy converts the percentage to the equivalent number of instance and rounds up fractional instances.
        When the type is `HOST_COUNT`, the value represents the minimum number of healthy instances as an absolute value.
        """
        return pulumi.get(self, "value")

    @value.setter
    def value(self, value: Optional[pulumi.Input[float]]):
        pulumi.set(self, "value", value)


@pulumi.input_type
class DeploymentConfigTrafficRoutingConfigArgs:
    def __init__(__self__, *,
                 time_based_canary: Optional[pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedCanaryArgs']] = None,
                 time_based_linear: Optional[pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedLinearArgs']] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedCanaryArgs'] time_based_canary: The time based canary configuration information. If `type` is `TimeBasedLinear`, use `time_based_linear` instead.
        :param pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedLinearArgs'] time_based_linear: The time based linear configuration information. If `type` is `TimeBasedCanary`, use `time_based_canary` instead.
        :param pulumi.Input[str] type: Type of traffic routing config. One of `TimeBasedCanary`, `TimeBasedLinear`, `AllAtOnce`.
        """
        if time_based_canary is not None:
            pulumi.set(__self__, "time_based_canary", time_based_canary)
        if time_based_linear is not None:
            pulumi.set(__self__, "time_based_linear", time_based_linear)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="timeBasedCanary")
    def time_based_canary(self) -> Optional[pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedCanaryArgs']]:
        """
        The time based canary configuration information. If `type` is `TimeBasedLinear`, use `time_based_linear` instead.
        """
        return pulumi.get(self, "time_based_canary")

    @time_based_canary.setter
    def time_based_canary(self, value: Optional[pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedCanaryArgs']]):
        pulumi.set(self, "time_based_canary", value)

    @property
    @pulumi.getter(name="timeBasedLinear")
    def time_based_linear(self) -> Optional[pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedLinearArgs']]:
        """
        The time based linear configuration information. If `type` is `TimeBasedCanary`, use `time_based_canary` instead.
        """
        return pulumi.get(self, "time_based_linear")

    @time_based_linear.setter
    def time_based_linear(self, value: Optional[pulumi.Input['DeploymentConfigTrafficRoutingConfigTimeBasedLinearArgs']]):
        pulumi.set(self, "time_based_linear", value)

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        Type of traffic routing config. One of `TimeBasedCanary`, `TimeBasedLinear`, `AllAtOnce`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "type", value)


@pulumi.input_type
class DeploymentConfigTrafficRoutingConfigTimeBasedCanaryArgs:
    def __init__(__self__, *,
                 interval: Optional[pulumi.Input[float]] = None,
                 percentage: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] interval: The number of minutes between the first and second traffic shifts of a `TimeBasedCanary` deployment.
        :param pulumi.Input[float] percentage: The percentage of traffic to shift in the first increment of a `TimeBasedCanary` deployment.
        """
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if percentage is not None:
            pulumi.set(__self__, "percentage", percentage)

    @property
    @pulumi.getter
    def interval(self) -> Optional[pulumi.Input[float]]:
        """
        The number of minutes between the first and second traffic shifts of a `TimeBasedCanary` deployment.
        """
        return pulumi.get(self, "interval")

    @interval.setter
    def interval(self, value: Optional[pulumi.Input[float]]):
        pulumi.set(self, "interval", value)

    @property
    @pulumi.getter
    def percentage(self) -> Optional[pulumi.Input[float]]:
        """
        The percentage of traffic to shift in the first increment of a `TimeBasedCanary` deployment.
        """
        return pulumi.get(self, "percentage")

    @percentage.setter
    def percentage(self, value: Optional[pulumi.Input[float]]):
        pulumi.set(self, "percentage", value)


@pulumi.input_type
class DeploymentConfigTrafficRoutingConfigTimeBasedLinearArgs:
    def __init__(__self__, *,
                 interval: Optional[pulumi.Input[float]] = None,
                 percentage: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] interval: The number of minutes between each incremental traffic shift of a `TimeBasedLinear` deployment.
        :param pulumi.Input[float] percentage: The percentage of traffic that is shifted at the start of each increment of a `TimeBasedLinear` deployment.
        """
        if interval is not None:
            pulumi.set(__self__, "interval", interval)
        if percentage is not None:
            pulumi.set(__self__, "percentage", percentage)

    @property
    @pulumi.getter
    def interval(self) -> Optional[pulumi.Input[float]]:
        """
        The number of minutes between each incremental traffic shift of a `TimeBasedLinear` deployment.
        """
        return pulumi.get(self, "interval")

    @interval.setter
    def interval(self, value: Optional[pulumi.Input[float]]):
        pulumi.set(self, "interval", value)

    @property
    @pulumi.getter
    def percentage(self) -> Optional[pulumi.Input[float]]:
        """
        The percentage of traffic that is shifted at the start of each increment of a `TimeBasedLinear` deployment.
        """
        return pulumi.get(self, "percentage")

    @percentage.setter
    def percentage(self, value: Optional[pulumi.Input[float]]):
        pulumi.set(self, "percentage", value)


@pulumi.input_type
class DeploymentGroupAlarmConfigurationArgs:
    def __init__(__self__, *,
                 alarms: Optional[pulumi.Input[List[pulumi.Input[str]]]] = None,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 ignore_poll_alarm_failure: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[List[pulumi.Input[str]]] alarms: A list of alarms configured for the deployment group. _A maximum of 10 alarms can be added to a deployment group_.
        :param pulumi.Input[bool] enabled: Indicates whether the alarm configuration is enabled. This option is useful when you want to temporarily deactivate alarm monitoring for a deployment group without having to add the same alarms again later.
        :param pulumi.Input[bool] ignore_poll_alarm_failure: Indicates whether a deployment should continue if information about the current state of alarms cannot be retrieved from CloudWatch. The default value is `false`.
               * `true`: The deployment will proceed even if alarm status information can't be retrieved.
               * `false`: The deployment will stop if alarm status information can't be retrieved.
        """
        if alarms is not None:
            pulumi.set(__self__, "alarms", alarms)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if ignore_poll_alarm_failure is not None:
            pulumi.set(__self__, "ignore_poll_alarm_failure", ignore_poll_alarm_failure)

    @property
    @pulumi.getter
    def alarms(self) -> Optional[pulumi.Input[List[pulumi.Input[str]]]]:
        """
        A list of alarms configured for the deployment group. _A maximum of 10 alarms can be added to a deployment group_.
        """
        return pulumi.get(self, "alarms")

    @alarms.setter
    def alarms(self, value: Optional[pulumi.Input[List[pulumi.Input[str]]]]):
        pulumi.set(self, "alarms", value)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether the alarm configuration is enabled. This option is useful when you want to temporarily deactivate alarm monitoring for a deployment group without having to add the same alarms again later.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter(name="ignorePollAlarmFailure")
    def ignore_poll_alarm_failure(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether a deployment should continue if information about the current state of alarms cannot be retrieved from CloudWatch. The default value is `false`.
        * `true`: The deployment will proceed even if alarm status information can't be retrieved.
        * `false`: The deployment will stop if alarm status information can't be retrieved.
        """
        return pulumi.get(self, "ignore_poll_alarm_failure")

    @ignore_poll_alarm_failure.setter
    def ignore_poll_alarm_failure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "ignore_poll_alarm_failure", value)


@pulumi.input_type
class DeploymentGroupAutoRollbackConfigurationArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 events: Optional[pulumi.Input[List[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[bool] enabled: Indicates whether a defined automatic rollback configuration is currently enabled for this Deployment Group. If you enable automatic rollback, you must specify at least one event type.
        :param pulumi.Input[List[pulumi.Input[str]]] events: The event type or types that trigger a rollback. Supported types are `DEPLOYMENT_FAILURE` and `DEPLOYMENT_STOP_ON_ALARM`.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if events is not None:
            pulumi.set(__self__, "events", events)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether a defined automatic rollback configuration is currently enabled for this Deployment Group. If you enable automatic rollback, you must specify at least one event type.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter
    def events(self) -> Optional[pulumi.Input[List[pulumi.Input[str]]]]:
        """
        The event type or types that trigger a rollback. Supported types are `DEPLOYMENT_FAILURE` and `DEPLOYMENT_STOP_ON_ALARM`.
        """
        return pulumi.get(self, "events")

    @events.setter
    def events(self, value: Optional[pulumi.Input[List[pulumi.Input[str]]]]):
        pulumi.set(self, "events", value)


@pulumi.input_type
class DeploymentGroupBlueGreenDeploymentConfigArgs:
    def __init__(__self__, *,
                 deployment_ready_option: Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigDeploymentReadyOptionArgs']] = None,
                 green_fleet_provisioning_option: Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigGreenFleetProvisioningOptionArgs']] = None,
                 terminate_blue_instances_on_deployment_success: Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigTerminateBlueInstancesOnDeploymentSuccessArgs']] = None):
        """
        :param pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigDeploymentReadyOptionArgs'] deployment_ready_option: Information about the action to take when newly provisioned instances are ready to receive traffic in a blue/green deployment (documented below).
        :param pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigGreenFleetProvisioningOptionArgs'] green_fleet_provisioning_option: Information about how instances are provisioned for a replacement environment in a blue/green deployment (documented below).
        :param pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigTerminateBlueInstancesOnDeploymentSuccessArgs'] terminate_blue_instances_on_deployment_success: Information about whether to terminate instances in the original fleet during a blue/green deployment (documented below).
        """
        if deployment_ready_option is not None:
            pulumi.set(__self__, "deployment_ready_option", deployment_ready_option)
        if green_fleet_provisioning_option is not None:
            pulumi.set(__self__, "green_fleet_provisioning_option", green_fleet_provisioning_option)
        if terminate_blue_instances_on_deployment_success is not None:
            pulumi.set(__self__, "terminate_blue_instances_on_deployment_success", terminate_blue_instances_on_deployment_success)

    @property
    @pulumi.getter(name="deploymentReadyOption")
    def deployment_ready_option(self) -> Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigDeploymentReadyOptionArgs']]:
        """
        Information about the action to take when newly provisioned instances are ready to receive traffic in a blue/green deployment (documented below).
        """
        return pulumi.get(self, "deployment_ready_option")

    @deployment_ready_option.setter
    def deployment_ready_option(self, value: Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigDeploymentReadyOptionArgs']]):
        pulumi.set(self, "deployment_ready_option", value)

    @property
    @pulumi.getter(name="greenFleetProvisioningOption")
    def green_fleet_provisioning_option(self) -> Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigGreenFleetProvisioningOptionArgs']]:
        """
        Information about how instances are provisioned for a replacement environment in a blue/green deployment (documented below).
        """
        return pulumi.get(self, "green_fleet_provisioning_option")

    @green_fleet_provisioning_option.setter
    def green_fleet_provisioning_option(self, value: Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigGreenFleetProvisioningOptionArgs']]):
        pulumi.set(self, "green_fleet_provisioning_option", value)

    @property
    @pulumi.getter(name="terminateBlueInstancesOnDeploymentSuccess")
    def terminate_blue_instances_on_deployment_success(self) -> Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigTerminateBlueInstancesOnDeploymentSuccessArgs']]:
        """
        Information about whether to terminate instances in the original fleet during a blue/green deployment (documented below).
        """
        return pulumi.get(self, "terminate_blue_instances_on_deployment_success")

    @terminate_blue_instances_on_deployment_success.setter
    def terminate_blue_instances_on_deployment_success(self, value: Optional[pulumi.Input['DeploymentGroupBlueGreenDeploymentConfigTerminateBlueInstancesOnDeploymentSuccessArgs']]):
        pulumi.set(self, "terminate_blue_instances_on_deployment_success", value)


@pulumi.input_type
class DeploymentGroupBlueGreenDeploymentConfigDeploymentReadyOptionArgs:
    def __init__(__self__, *,
                 action_on_timeout: Optional[pulumi.Input[str]] = None,
                 wait_time_in_minutes: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[str] action_on_timeout: When to reroute traffic from an original environment to a replacement environment in a blue/green deployment.
               * `CONTINUE_DEPLOYMENT`: Register new instances with the load balancer immediately after the new application revision is installed on the instances in the replacement environment.
               * `STOP_DEPLOYMENT`: Do not register new instances with load balancer unless traffic is rerouted manually. If traffic is not rerouted manually before the end of the specified wait period, the deployment status is changed to Stopped.
        :param pulumi.Input[float] wait_time_in_minutes: The number of minutes to wait before the status of a blue/green deployment changed to Stopped if rerouting is not started manually. Applies only to the `STOP_DEPLOYMENT` option for `action_on_timeout`.
        """
        if action_on_timeout is not None:
            pulumi.set(__self__, "action_on_timeout", action_on_timeout)
        if wait_time_in_minutes is not None:
            pulumi.set(__self__, "wait_time_in_minutes", wait_time_in_minutes)

    @property
    @pulumi.getter(name="actionOnTimeout")
    def action_on_timeout(self) -> Optional[pulumi.Input[str]]:
        """
        When to reroute traffic from an original environment to a replacement environment in a blue/green deployment.
        * `CONTINUE_DEPLOYMENT`: Register new instances with the load balancer immediately after the new application revision is installed on the instances in the replacement environment.
        * `STOP_DEPLOYMENT`: Do not register new instances with load balancer unless traffic is rerouted manually. If traffic is not rerouted manually before the end of the specified wait period, the deployment status is changed to Stopped.
        """
        return pulumi.get(self, "action_on_timeout")

    @action_on_timeout.setter
    def action_on_timeout(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "action_on_timeout", value)

    @property
    @pulumi.getter(name="waitTimeInMinutes")
    def wait_time_in_minutes(self) -> Optional[pulumi.Input[float]]:
        """
        The number of minutes to wait before the status of a blue/green deployment changed to Stopped if rerouting is not started manually. Applies only to the `STOP_DEPLOYMENT` option for `action_on_timeout`.
        """
        return pulumi.get(self, "wait_time_in_minutes")

    @wait_time_in_minutes.setter
    def wait_time_in_minutes(self, value: Optional[pulumi.Input[float]]):
        pulumi.set(self, "wait_time_in_minutes", value)


@pulumi.input_type
class DeploymentGroupBlueGreenDeploymentConfigGreenFleetProvisioningOptionArgs:
    def __init__(__self__, *,
                 action: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] action: The method used to add instances to a replacement environment.
               * `DISCOVER_EXISTING`: Use instances that already exist or will be created manually.
               * `COPY_AUTO_SCALING_GROUP`: Use settings from a specified **Auto Scaling** group to define and create instances in a new Auto Scaling group. _Exactly one Auto Scaling group must be specified_ when selecting `COPY_AUTO_SCALING_GROUP`. Use `autoscaling_groups` to specify the Auto Scaling group.
        """
        if action is not None:
            pulumi.set(__self__, "action", action)

    @property
    @pulumi.getter
    def action(self) -> Optional[pulumi.Input[str]]:
        """
        The method used to add instances to a replacement environment.
        * `DISCOVER_EXISTING`: Use instances that already exist or will be created manually.
        * `COPY_AUTO_SCALING_GROUP`: Use settings from a specified **Auto Scaling** group to define and create instances in a new Auto Scaling group. _Exactly one Auto Scaling group must be specified_ when selecting `COPY_AUTO_SCALING_GROUP`. Use `autoscaling_groups` to specify the Auto Scaling group.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "action", value)


@pulumi.input_type
class DeploymentGroupBlueGreenDeploymentConfigTerminateBlueInstancesOnDeploymentSuccessArgs:
    def __init__(__self__, *,
                 action: Optional[pulumi.Input[str]] = None,
                 termination_wait_time_in_minutes: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[str] action: The action to take on instances in the original environment after a successful blue/green deployment.
               * `TERMINATE`: Instances are terminated after a specified wait time.
               * `KEEP_ALIVE`: Instances are left running after they are deregistered from the load balancer and removed from the deployment group.
        :param pulumi.Input[float] termination_wait_time_in_minutes: The number of minutes to wait after a successful blue/green deployment before terminating instances from the original environment.
        """
        if action is not None:
            pulumi.set(__self__, "action", action)
        if termination_wait_time_in_minutes is not None:
            pulumi.set(__self__, "termination_wait_time_in_minutes", termination_wait_time_in_minutes)

    @property
    @pulumi.getter
    def action(self) -> Optional[pulumi.Input[str]]:
        """
        The action to take on instances in the original environment after a successful blue/green deployment.
        * `TERMINATE`: Instances are terminated after a specified wait time.
        * `KEEP_ALIVE`: Instances are left running after they are deregistered from the load balancer and removed from the deployment group.
        """
        return pulumi.get(self, "action")

    @action.setter
    def action(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "action", value)

    @property
    @pulumi.getter(name="terminationWaitTimeInMinutes")
    def termination_wait_time_in_minutes(self) -> Optional[pulumi.Input[float]]:
        """
        The number of minutes to wait after a successful blue/green deployment before terminating instances from the original environment.
        """
        return pulumi.get(self, "termination_wait_time_in_minutes")

    @termination_wait_time_in_minutes.setter
    def termination_wait_time_in_minutes(self, value: Optional[pulumi.Input[float]]):
        pulumi.set(self, "termination_wait_time_in_minutes", value)


@pulumi.input_type
class DeploymentGroupDeploymentStyleArgs:
    def __init__(__self__, *,
                 deployment_option: Optional[pulumi.Input[str]] = None,
                 deployment_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] deployment_option: Indicates whether to route deployment traffic behind a load balancer. Valid Values are `WITH_TRAFFIC_CONTROL` or `WITHOUT_TRAFFIC_CONTROL`. Default is `WITHOUT_TRAFFIC_CONTROL`.
        :param pulumi.Input[str] deployment_type: Indicates whether to run an in-place deployment or a blue/green deployment. Valid Values are `IN_PLACE` or `BLUE_GREEN`. Default is `IN_PLACE`.
        """
        if deployment_option is not None:
            pulumi.set(__self__, "deployment_option", deployment_option)
        if deployment_type is not None:
            pulumi.set(__self__, "deployment_type", deployment_type)

    @property
    @pulumi.getter(name="deploymentOption")
    def deployment_option(self) -> Optional[pulumi.Input[str]]:
        """
        Indicates whether to route deployment traffic behind a load balancer. Valid Values are `WITH_TRAFFIC_CONTROL` or `WITHOUT_TRAFFIC_CONTROL`. Default is `WITHOUT_TRAFFIC_CONTROL`.
        """
        return pulumi.get(self, "deployment_option")

    @deployment_option.setter
    def deployment_option(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "deployment_option", value)

    @property
    @pulumi.getter(name="deploymentType")
    def deployment_type(self) -> Optional[pulumi.Input[str]]:
        """
        Indicates whether to run an in-place deployment or a blue/green deployment. Valid Values are `IN_PLACE` or `BLUE_GREEN`. Default is `IN_PLACE`.
        """
        return pulumi.get(self, "deployment_type")

    @deployment_type.setter
    def deployment_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "deployment_type", value)


@pulumi.input_type
class DeploymentGroupEc2TagFilterArgs:
    def __init__(__self__, *,
                 key: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None,
                 value: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] key: The key of the tag filter.
        :param pulumi.Input[str] type: The type of the tag filter, either `KEY_ONLY`, `VALUE_ONLY`, or `KEY_AND_VALUE`.
        :param pulumi.Input[str] value: The value of the tag filter.
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if type is not None:
            pulumi.set(__self__, "type", type)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[pulumi.Input[str]]:
        """
        The key of the tag filter.
        """
        return pulumi.get(self, "key")

    @key.setter
    def key(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key", value)

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The type of the tag filter, either `KEY_ONLY`, `VALUE_ONLY`, or `KEY_AND_VALUE`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[str]]:
        """
        The value of the tag filter.
        """
        return pulumi.get(self, "value")

    @value.setter
    def value(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "value", value)


@pulumi.input_type
class DeploymentGroupEc2TagSetArgs:
    def __init__(__self__, *,
                 ec2_tag_filters: Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupEc2TagSetEc2TagFilterArgs']]]] = None):
        """
        :param pulumi.Input[List[pulumi.Input['DeploymentGroupEc2TagSetEc2TagFilterArgs']]] ec2_tag_filters: Tag filters associated with the deployment group. See the AWS docs for details.
        """
        if ec2_tag_filters is not None:
            pulumi.set(__self__, "ec2_tag_filters", ec2_tag_filters)

    @property
    @pulumi.getter(name="ec2TagFilters")
    def ec2_tag_filters(self) -> Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupEc2TagSetEc2TagFilterArgs']]]]:
        """
        Tag filters associated with the deployment group. See the AWS docs for details.
        """
        return pulumi.get(self, "ec2_tag_filters")

    @ec2_tag_filters.setter
    def ec2_tag_filters(self, value: Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupEc2TagSetEc2TagFilterArgs']]]]):
        pulumi.set(self, "ec2_tag_filters", value)


@pulumi.input_type
class DeploymentGroupEc2TagSetEc2TagFilterArgs:
    def __init__(__self__, *,
                 key: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None,
                 value: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] key: The key of the tag filter.
        :param pulumi.Input[str] type: The type of the tag filter, either `KEY_ONLY`, `VALUE_ONLY`, or `KEY_AND_VALUE`.
        :param pulumi.Input[str] value: The value of the tag filter.
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if type is not None:
            pulumi.set(__self__, "type", type)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[pulumi.Input[str]]:
        """
        The key of the tag filter.
        """
        return pulumi.get(self, "key")

    @key.setter
    def key(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key", value)

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The type of the tag filter, either `KEY_ONLY`, `VALUE_ONLY`, or `KEY_AND_VALUE`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[str]]:
        """
        The value of the tag filter.
        """
        return pulumi.get(self, "value")

    @value.setter
    def value(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "value", value)


@pulumi.input_type
class DeploymentGroupEcsServiceArgs:
    def __init__(__self__, *,
                 cluster_name: pulumi.Input[str],
                 service_name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] cluster_name: The name of the ECS cluster.
        :param pulumi.Input[str] service_name: The name of the ECS service.
        """
        pulumi.set(__self__, "cluster_name", cluster_name)
        pulumi.set(__self__, "service_name", service_name)

    @property
    @pulumi.getter(name="clusterName")
    def cluster_name(self) -> pulumi.Input[str]:
        """
        The name of the ECS cluster.
        """
        return pulumi.get(self, "cluster_name")

    @cluster_name.setter
    def cluster_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "cluster_name", value)

    @property
    @pulumi.getter(name="serviceName")
    def service_name(self) -> pulumi.Input[str]:
        """
        The name of the ECS service.
        """
        return pulumi.get(self, "service_name")

    @service_name.setter
    def service_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "service_name", value)


@pulumi.input_type
class DeploymentGroupLoadBalancerInfoArgs:
    def __init__(__self__, *,
                 elb_infos: Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoElbInfoArgs']]]] = None,
                 target_group_infos: Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs']]]] = None,
                 target_group_pair_info: Optional[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs']] = None):
        """
        :param pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoElbInfoArgs']]] elb_infos: The Classic Elastic Load Balancer to use in a deployment. Conflicts with `target_group_info` and `target_group_pair_info`.
        :param pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs']]] target_group_infos: The (Application/Network Load Balancer) target group to use in a deployment. Conflicts with `elb_info` and `target_group_pair_info`.
        :param pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs'] target_group_pair_info: The (Application/Network Load Balancer) target group pair to use in a deployment. Conflicts with `elb_info` and `target_group_info`.
        """
        if elb_infos is not None:
            pulumi.set(__self__, "elb_infos", elb_infos)
        if target_group_infos is not None:
            pulumi.set(__self__, "target_group_infos", target_group_infos)
        if target_group_pair_info is not None:
            pulumi.set(__self__, "target_group_pair_info", target_group_pair_info)

    @property
    @pulumi.getter(name="elbInfos")
    def elb_infos(self) -> Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoElbInfoArgs']]]]:
        """
        The Classic Elastic Load Balancer to use in a deployment. Conflicts with `target_group_info` and `target_group_pair_info`.
        """
        return pulumi.get(self, "elb_infos")

    @elb_infos.setter
    def elb_infos(self, value: Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoElbInfoArgs']]]]):
        pulumi.set(self, "elb_infos", value)

    @property
    @pulumi.getter(name="targetGroupInfos")
    def target_group_infos(self) -> Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs']]]]:
        """
        The (Application/Network Load Balancer) target group to use in a deployment. Conflicts with `elb_info` and `target_group_pair_info`.
        """
        return pulumi.get(self, "target_group_infos")

    @target_group_infos.setter
    def target_group_infos(self, value: Optional[pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs']]]]):
        pulumi.set(self, "target_group_infos", value)

    @property
    @pulumi.getter(name="targetGroupPairInfo")
    def target_group_pair_info(self) -> Optional[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs']]:
        """
        The (Application/Network Load Balancer) target group pair to use in a deployment. Conflicts with `elb_info` and `target_group_info`.
        """
        return pulumi.get(self, "target_group_pair_info")

    @target_group_pair_info.setter
    def target_group_pair_info(self, value: Optional[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs']]):
        pulumi.set(self, "target_group_pair_info", value)


@pulumi.input_type
class DeploymentGroupLoadBalancerInfoElbInfoArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the load balancer that will be used to route traffic from original instances to replacement instances in a blue/green deployment. For in-place deployments, the name of the load balancer that instances are deregistered from so they are not serving traffic during a deployment, and then re-registered with after the deployment completes.
        """
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the load balancer that will be used to route traffic from original instances to replacement instances in a blue/green deployment. For in-place deployments, the name of the load balancer that instances are deregistered from so they are not serving traffic during a deployment, and then re-registered with after the deployment completes.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class DeploymentGroupLoadBalancerInfoTargetGroupInfoArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the target group that instances in the original environment are deregistered from, and instances in the replacement environment registered with. For in-place deployments, the name of the target group that instances are deregistered from, so they are not serving traffic during a deployment, and then re-registered with after the deployment completes.
        """
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the target group that instances in the original environment are deregistered from, and instances in the replacement environment registered with. For in-place deployments, the name of the target group that instances are deregistered from, so they are not serving traffic during a deployment, and then re-registered with after the deployment completes.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class DeploymentGroupLoadBalancerInfoTargetGroupPairInfoArgs:
    def __init__(__self__, *,
                 prod_traffic_route: pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoProdTrafficRouteArgs'],
                 target_groups: pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTargetGroupArgs']]],
                 test_traffic_route: Optional[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTestTrafficRouteArgs']] = None):
        """
        :param pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoProdTrafficRouteArgs'] prod_traffic_route: Configuration block for the production traffic route (documented below).
        :param pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTargetGroupArgs']]] target_groups: Configuration blocks for a target group within a target group pair (documented below).
        :param pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTestTrafficRouteArgs'] test_traffic_route: Configuration block for the test traffic route (documented below).
        """
        pulumi.set(__self__, "prod_traffic_route", prod_traffic_route)
        pulumi.set(__self__, "target_groups", target_groups)
        if test_traffic_route is not None:
            pulumi.set(__self__, "test_traffic_route", test_traffic_route)

    @property
    @pulumi.getter(name="prodTrafficRoute")
    def prod_traffic_route(self) -> pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoProdTrafficRouteArgs']:
        """
        Configuration block for the production traffic route (documented below).
        """
        return pulumi.get(self, "prod_traffic_route")

    @prod_traffic_route.setter
    def prod_traffic_route(self, value: pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoProdTrafficRouteArgs']):
        pulumi.set(self, "prod_traffic_route", value)

    @property
    @pulumi.getter(name="targetGroups")
    def target_groups(self) -> pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTargetGroupArgs']]]:
        """
        Configuration blocks for a target group within a target group pair (documented below).
        """
        return pulumi.get(self, "target_groups")

    @target_groups.setter
    def target_groups(self, value: pulumi.Input[List[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTargetGroupArgs']]]):
        pulumi.set(self, "target_groups", value)

    @property
    @pulumi.getter(name="testTrafficRoute")
    def test_traffic_route(self) -> Optional[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTestTrafficRouteArgs']]:
        """
        Configuration block for the test traffic route (documented below).
        """
        return pulumi.get(self, "test_traffic_route")

    @test_traffic_route.setter
    def test_traffic_route(self, value: Optional[pulumi.Input['DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTestTrafficRouteArgs']]):
        pulumi.set(self, "test_traffic_route", value)


@pulumi.input_type
class DeploymentGroupLoadBalancerInfoTargetGroupPairInfoProdTrafficRouteArgs:
    def __init__(__self__, *,
                 listener_arns: pulumi.Input[List[pulumi.Input[str]]]):
        """
        :param pulumi.Input[List[pulumi.Input[str]]] listener_arns: List of Amazon Resource Names (ARNs) of the load balancer listeners.
        """
        pulumi.set(__self__, "listener_arns", listener_arns)

    @property
    @pulumi.getter(name="listenerArns")
    def listener_arns(self) -> pulumi.Input[List[pulumi.Input[str]]]:
        """
        List of Amazon Resource Names (ARNs) of the load balancer listeners.
        """
        return pulumi.get(self, "listener_arns")

    @listener_arns.setter
    def listener_arns(self, value: pulumi.Input[List[pulumi.Input[str]]]):
        pulumi.set(self, "listener_arns", value)


@pulumi.input_type
class DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTargetGroupArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Name of the target group.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Name of the target group.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class DeploymentGroupLoadBalancerInfoTargetGroupPairInfoTestTrafficRouteArgs:
    def __init__(__self__, *,
                 listener_arns: pulumi.Input[List[pulumi.Input[str]]]):
        """
        :param pulumi.Input[List[pulumi.Input[str]]] listener_arns: List of Amazon Resource Names (ARNs) of the load balancer listeners.
        """
        pulumi.set(__self__, "listener_arns", listener_arns)

    @property
    @pulumi.getter(name="listenerArns")
    def listener_arns(self) -> pulumi.Input[List[pulumi.Input[str]]]:
        """
        List of Amazon Resource Names (ARNs) of the load balancer listeners.
        """
        return pulumi.get(self, "listener_arns")

    @listener_arns.setter
    def listener_arns(self, value: pulumi.Input[List[pulumi.Input[str]]]):
        pulumi.set(self, "listener_arns", value)


@pulumi.input_type
class DeploymentGroupOnPremisesInstanceTagFilterArgs:
    def __init__(__self__, *,
                 key: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None,
                 value: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] key: The key of the tag filter.
        :param pulumi.Input[str] type: The type of the tag filter, either `KEY_ONLY`, `VALUE_ONLY`, or `KEY_AND_VALUE`.
        :param pulumi.Input[str] value: The value of the tag filter.
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if type is not None:
            pulumi.set(__self__, "type", type)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[pulumi.Input[str]]:
        """
        The key of the tag filter.
        """
        return pulumi.get(self, "key")

    @key.setter
    def key(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key", value)

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The type of the tag filter, either `KEY_ONLY`, `VALUE_ONLY`, or `KEY_AND_VALUE`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[str]]:
        """
        The value of the tag filter.
        """
        return pulumi.get(self, "value")

    @value.setter
    def value(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "value", value)


@pulumi.input_type
class DeploymentGroupTriggerConfigurationArgs:
    def __init__(__self__, *,
                 trigger_events: pulumi.Input[List[pulumi.Input[str]]],
                 trigger_name: pulumi.Input[str],
                 trigger_target_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[List[pulumi.Input[str]]] trigger_events: The event type or types for which notifications are triggered. Some values that are supported: `DeploymentStart`, `DeploymentSuccess`, `DeploymentFailure`, `DeploymentStop`, `DeploymentRollback`, `InstanceStart`, `InstanceSuccess`, `InstanceFailure`.  See [the CodeDeploy documentation](http://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring-sns-event-notifications-create-trigger.html) for all possible values.
        :param pulumi.Input[str] trigger_name: The name of the notification trigger.
        :param pulumi.Input[str] trigger_target_arn: The ARN of the SNS topic through which notifications are sent.
        """
        pulumi.set(__self__, "trigger_events", trigger_events)
        pulumi.set(__self__, "trigger_name", trigger_name)
        pulumi.set(__self__, "trigger_target_arn", trigger_target_arn)

    @property
    @pulumi.getter(name="triggerEvents")
    def trigger_events(self) -> pulumi.Input[List[pulumi.Input[str]]]:
        """
        The event type or types for which notifications are triggered. Some values that are supported: `DeploymentStart`, `DeploymentSuccess`, `DeploymentFailure`, `DeploymentStop`, `DeploymentRollback`, `InstanceStart`, `InstanceSuccess`, `InstanceFailure`.  See [the CodeDeploy documentation](http://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring-sns-event-notifications-create-trigger.html) for all possible values.
        """
        return pulumi.get(self, "trigger_events")

    @trigger_events.setter
    def trigger_events(self, value: pulumi.Input[List[pulumi.Input[str]]]):
        pulumi.set(self, "trigger_events", value)

    @property
    @pulumi.getter(name="triggerName")
    def trigger_name(self) -> pulumi.Input[str]:
        """
        The name of the notification trigger.
        """
        return pulumi.get(self, "trigger_name")

    @trigger_name.setter
    def trigger_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "trigger_name", value)

    @property
    @pulumi.getter(name="triggerTargetArn")
    def trigger_target_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the SNS topic through which notifications are sent.
        """
        return pulumi.get(self, "trigger_target_arn")

    @trigger_target_arn.setter
    def trigger_target_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "trigger_target_arn", value)


