# 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, Mapping, Optional, Sequence, Union
from .. import _utilities, _tables
from . import outputs

__all__ = [
    'DistributionConfigurationDistribution',
    'DistributionConfigurationDistributionAmiDistributionConfiguration',
    'DistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermission',
    'InfrastructureConfigurationLogging',
    'InfrastructureConfigurationLoggingS3Logs',
    'GetDistributionConfigurationDistributionResult',
    'GetDistributionConfigurationDistributionAmiDistributionConfigurationResult',
    'GetDistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermissionResult',
    'GetInfrastructureConfigurationLoggingResult',
    'GetInfrastructureConfigurationLoggingS3LogResult',
]

@pulumi.output_type
class DistributionConfigurationDistribution(dict):
    def __init__(__self__, *,
                 region: str,
                 ami_distribution_configuration: Optional['outputs.DistributionConfigurationDistributionAmiDistributionConfiguration'] = None,
                 license_configuration_arns: Optional[Sequence[str]] = None):
        """
        :param str region: AWS Region for the distribution.
        :param 'DistributionConfigurationDistributionAmiDistributionConfigurationArgs' ami_distribution_configuration: Configuration block with Amazon Machine Image (AMI) distribution settings. Detailed below.
        :param Sequence[str] license_configuration_arns: Set of Amazon Resource Names (ARNs) of License Manager License Configurations.
        """
        pulumi.set(__self__, "region", region)
        if ami_distribution_configuration is not None:
            pulumi.set(__self__, "ami_distribution_configuration", ami_distribution_configuration)
        if license_configuration_arns is not None:
            pulumi.set(__self__, "license_configuration_arns", license_configuration_arns)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        AWS Region for the distribution.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="amiDistributionConfiguration")
    def ami_distribution_configuration(self) -> Optional['outputs.DistributionConfigurationDistributionAmiDistributionConfiguration']:
        """
        Configuration block with Amazon Machine Image (AMI) distribution settings. Detailed below.
        """
        return pulumi.get(self, "ami_distribution_configuration")

    @property
    @pulumi.getter(name="licenseConfigurationArns")
    def license_configuration_arns(self) -> Optional[Sequence[str]]:
        """
        Set of Amazon Resource Names (ARNs) of License Manager License Configurations.
        """
        return pulumi.get(self, "license_configuration_arns")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class DistributionConfigurationDistributionAmiDistributionConfiguration(dict):
    def __init__(__self__, *,
                 ami_tags: Optional[Mapping[str, str]] = None,
                 description: Optional[str] = None,
                 kms_key_id: Optional[str] = None,
                 launch_permission: Optional['outputs.DistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermission'] = None,
                 name: Optional[str] = None,
                 target_account_ids: Optional[Sequence[str]] = None):
        """
        :param Mapping[str, str] ami_tags: Key-value map of tags to apply to the distributed AMI.
        :param str description: Description to apply to the distributed AMI.
        :param str kms_key_id: Amazon Resource Name (ARN) of the Key Management Service (KMS) Key to encrypt the distributed AMI.
        :param 'DistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermissionArgs' launch_permission: Configuration block of EC2 launch permissions to apply to the distributed AMI. Detailed below.
        :param str name: Name to apply to the distributed AMI.
        :param Sequence[str] target_account_ids: Set of AWS Account identifiers to distribute the AMI.
        """
        if ami_tags is not None:
            pulumi.set(__self__, "ami_tags", ami_tags)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)
        if launch_permission is not None:
            pulumi.set(__self__, "launch_permission", launch_permission)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if target_account_ids is not None:
            pulumi.set(__self__, "target_account_ids", target_account_ids)

    @property
    @pulumi.getter(name="amiTags")
    def ami_tags(self) -> Optional[Mapping[str, str]]:
        """
        Key-value map of tags to apply to the distributed AMI.
        """
        return pulumi.get(self, "ami_tags")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        Description to apply to the distributed AMI.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[str]:
        """
        Amazon Resource Name (ARN) of the Key Management Service (KMS) Key to encrypt the distributed AMI.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="launchPermission")
    def launch_permission(self) -> Optional['outputs.DistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermission']:
        """
        Configuration block of EC2 launch permissions to apply to the distributed AMI. Detailed below.
        """
        return pulumi.get(self, "launch_permission")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        Name to apply to the distributed AMI.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="targetAccountIds")
    def target_account_ids(self) -> Optional[Sequence[str]]:
        """
        Set of AWS Account identifiers to distribute the AMI.
        """
        return pulumi.get(self, "target_account_ids")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class DistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermission(dict):
    def __init__(__self__, *,
                 user_groups: Optional[Sequence[str]] = None,
                 user_ids: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] user_groups: Set of EC2 launch permission user groups to assign. Use `all` to distribute a public AMI.
        :param Sequence[str] user_ids: Set of AWS Account identifiers to assign.
        """
        if user_groups is not None:
            pulumi.set(__self__, "user_groups", user_groups)
        if user_ids is not None:
            pulumi.set(__self__, "user_ids", user_ids)

    @property
    @pulumi.getter(name="userGroups")
    def user_groups(self) -> Optional[Sequence[str]]:
        """
        Set of EC2 launch permission user groups to assign. Use `all` to distribute a public AMI.
        """
        return pulumi.get(self, "user_groups")

    @property
    @pulumi.getter(name="userIds")
    def user_ids(self) -> Optional[Sequence[str]]:
        """
        Set of AWS Account identifiers to assign.
        """
        return pulumi.get(self, "user_ids")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InfrastructureConfigurationLogging(dict):
    def __init__(__self__, *,
                 s3_logs: 'outputs.InfrastructureConfigurationLoggingS3Logs'):
        """
        :param 'InfrastructureConfigurationLoggingS3LogsArgs' s3_logs: Configuration block with S3 logging settings. Detailed below.
        """
        pulumi.set(__self__, "s3_logs", s3_logs)

    @property
    @pulumi.getter(name="s3Logs")
    def s3_logs(self) -> 'outputs.InfrastructureConfigurationLoggingS3Logs':
        """
        Configuration block with S3 logging settings. Detailed below.
        """
        return pulumi.get(self, "s3_logs")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InfrastructureConfigurationLoggingS3Logs(dict):
    def __init__(__self__, *,
                 s3_bucket_name: str,
                 s3_key_prefix: Optional[str] = None):
        """
        :param str s3_bucket_name: Name of the S3 Bucket.
        :param str s3_key_prefix: Prefix to use for S3 logs. Defaults to `/`.
        """
        pulumi.set(__self__, "s3_bucket_name", s3_bucket_name)
        if s3_key_prefix is not None:
            pulumi.set(__self__, "s3_key_prefix", s3_key_prefix)

    @property
    @pulumi.getter(name="s3BucketName")
    def s3_bucket_name(self) -> str:
        """
        Name of the S3 Bucket.
        """
        return pulumi.get(self, "s3_bucket_name")

    @property
    @pulumi.getter(name="s3KeyPrefix")
    def s3_key_prefix(self) -> Optional[str]:
        """
        Prefix to use for S3 logs. Defaults to `/`.
        """
        return pulumi.get(self, "s3_key_prefix")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class GetDistributionConfigurationDistributionResult(dict):
    def __init__(__self__, *,
                 ami_distribution_configurations: Sequence['outputs.GetDistributionConfigurationDistributionAmiDistributionConfigurationResult'],
                 license_configuration_arns: Sequence[str],
                 region: str):
        """
        :param Sequence['GetDistributionConfigurationDistributionAmiDistributionConfigurationArgs'] ami_distribution_configurations: Nested list of AMI distribution configuration.
        :param Sequence[str] license_configuration_arns: Set of Amazon Resource Names (ARNs) of License Manager License Configurations.
        :param str region: AWS Region of distribution.
        """
        pulumi.set(__self__, "ami_distribution_configurations", ami_distribution_configurations)
        pulumi.set(__self__, "license_configuration_arns", license_configuration_arns)
        pulumi.set(__self__, "region", region)

    @property
    @pulumi.getter(name="amiDistributionConfigurations")
    def ami_distribution_configurations(self) -> Sequence['outputs.GetDistributionConfigurationDistributionAmiDistributionConfigurationResult']:
        """
        Nested list of AMI distribution configuration.
        """
        return pulumi.get(self, "ami_distribution_configurations")

    @property
    @pulumi.getter(name="licenseConfigurationArns")
    def license_configuration_arns(self) -> Sequence[str]:
        """
        Set of Amazon Resource Names (ARNs) of License Manager License Configurations.
        """
        return pulumi.get(self, "license_configuration_arns")

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        AWS Region of distribution.
        """
        return pulumi.get(self, "region")


@pulumi.output_type
class GetDistributionConfigurationDistributionAmiDistributionConfigurationResult(dict):
    def __init__(__self__, *,
                 ami_tags: Mapping[str, str],
                 description: str,
                 kms_key_id: str,
                 launch_permissions: Sequence['outputs.GetDistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermissionResult'],
                 name: str,
                 target_account_ids: Sequence[str]):
        """
        :param Mapping[str, str] ami_tags: Key-value map of tags to apply to distributed AMI.
        :param str description: Description to apply to distributed AMI.
        :param str kms_key_id: Amazon Resource Name (ARN) of Key Management Service (KMS) Key to encrypt AMI.
        :param Sequence['GetDistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermissionArgs'] launch_permissions: Nested list of EC2 launch permissions.
        :param str name: Name of the distribution configuration.
        :param Sequence[str] target_account_ids: Set of target AWS Account identifiers.
        """
        pulumi.set(__self__, "ami_tags", ami_tags)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "launch_permissions", launch_permissions)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "target_account_ids", target_account_ids)

    @property
    @pulumi.getter(name="amiTags")
    def ami_tags(self) -> Mapping[str, str]:
        """
        Key-value map of tags to apply to distributed AMI.
        """
        return pulumi.get(self, "ami_tags")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Description to apply to distributed AMI.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        Amazon Resource Name (ARN) of Key Management Service (KMS) Key to encrypt AMI.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="launchPermissions")
    def launch_permissions(self) -> Sequence['outputs.GetDistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermissionResult']:
        """
        Nested list of EC2 launch permissions.
        """
        return pulumi.get(self, "launch_permissions")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        Name of the distribution configuration.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="targetAccountIds")
    def target_account_ids(self) -> Sequence[str]:
        """
        Set of target AWS Account identifiers.
        """
        return pulumi.get(self, "target_account_ids")


@pulumi.output_type
class GetDistributionConfigurationDistributionAmiDistributionConfigurationLaunchPermissionResult(dict):
    def __init__(__self__, *,
                 user_groups: Sequence[str],
                 user_ids: Sequence[str]):
        """
        :param Sequence[str] user_groups: Set of EC2 launch permission user groups.
        :param Sequence[str] user_ids: Set of AWS Account identifiers.
        """
        pulumi.set(__self__, "user_groups", user_groups)
        pulumi.set(__self__, "user_ids", user_ids)

    @property
    @pulumi.getter(name="userGroups")
    def user_groups(self) -> Sequence[str]:
        """
        Set of EC2 launch permission user groups.
        """
        return pulumi.get(self, "user_groups")

    @property
    @pulumi.getter(name="userIds")
    def user_ids(self) -> Sequence[str]:
        """
        Set of AWS Account identifiers.
        """
        return pulumi.get(self, "user_ids")


@pulumi.output_type
class GetInfrastructureConfigurationLoggingResult(dict):
    def __init__(__self__, *,
                 s3_logs: Sequence['outputs.GetInfrastructureConfigurationLoggingS3LogResult']):
        """
        :param Sequence['GetInfrastructureConfigurationLoggingS3LogArgs'] s3_logs: Nested list of S3 logs settings.
        """
        pulumi.set(__self__, "s3_logs", s3_logs)

    @property
    @pulumi.getter(name="s3Logs")
    def s3_logs(self) -> Sequence['outputs.GetInfrastructureConfigurationLoggingS3LogResult']:
        """
        Nested list of S3 logs settings.
        """
        return pulumi.get(self, "s3_logs")


@pulumi.output_type
class GetInfrastructureConfigurationLoggingS3LogResult(dict):
    def __init__(__self__, *,
                 s3_bucket_name: str,
                 s3_key_prefix: str):
        """
        :param str s3_bucket_name: Name of the S3 Bucket for logging.
        :param str s3_key_prefix: Key prefix for S3 Bucket logging.
        """
        pulumi.set(__self__, "s3_bucket_name", s3_bucket_name)
        pulumi.set(__self__, "s3_key_prefix", s3_key_prefix)

    @property
    @pulumi.getter(name="s3BucketName")
    def s3_bucket_name(self) -> str:
        """
        Name of the S3 Bucket for logging.
        """
        return pulumi.get(self, "s3_bucket_name")

    @property
    @pulumi.getter(name="s3KeyPrefix")
    def s3_key_prefix(self) -> str:
        """
        Key prefix for S3 Bucket logging.
        """
        return pulumi.get(self, "s3_key_prefix")


