# coding=utf-8
# *** WARNING: this file was generated by the Pulumi SDK Generator. ***
# *** 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, overload
from .. import _utilities
from ._enums import *

__all__ = [
    'AppImageConfigFileSystemConfigArgs',
    'AppImageConfigKernelGatewayImageConfigArgs',
    'AppImageConfigKernelSpecArgs',
    'AppImageConfigTagArgs',
    'AppResourceSpecArgs',
    'AppTagArgs',
    'CodeRepositoryGitConfigArgs',
    'CodeRepositoryTagArgs',
    'DataQualityJobDefinitionClusterConfigArgs',
    'DataQualityJobDefinitionConstraintsResourceArgs',
    'DataQualityJobDefinitionDataQualityAppSpecificationArgs',
    'DataQualityJobDefinitionDataQualityBaselineConfigArgs',
    'DataQualityJobDefinitionDataQualityJobInputArgs',
    'DataQualityJobDefinitionEndpointInputArgs',
    'DataQualityJobDefinitionMonitoringOutputConfigArgs',
    'DataQualityJobDefinitionMonitoringOutputArgs',
    'DataQualityJobDefinitionMonitoringResourcesArgs',
    'DataQualityJobDefinitionNetworkConfigArgs',
    'DataQualityJobDefinitionS3OutputArgs',
    'DataQualityJobDefinitionStatisticsResourceArgs',
    'DataQualityJobDefinitionStoppingConditionArgs',
    'DataQualityJobDefinitionTagArgs',
    'DataQualityJobDefinitionVpcConfigArgs',
    'DeviceDeviceArgs',
    'DeviceFleetEdgeOutputConfigArgs',
    'DeviceFleetTagArgs',
    'DeviceTagArgs',
    'DomainCustomImageArgs',
    'DomainJupyterServerAppSettingsArgs',
    'DomainKernelGatewayAppSettingsArgs',
    'DomainResourceSpecArgs',
    'DomainSharingSettingsArgs',
    'DomainTagArgs',
    'DomainUserSettingsArgs',
    'EndpointAlarmArgs',
    'EndpointAutoRollbackConfigArgs',
    'EndpointBlueGreenUpdatePolicyArgs',
    'EndpointCapacitySizeArgs',
    'EndpointConfigAsyncInferenceClientConfigArgs',
    'EndpointConfigAsyncInferenceConfigArgs',
    'EndpointConfigAsyncInferenceNotificationConfigArgs',
    'EndpointConfigAsyncInferenceOutputConfigArgs',
    'EndpointConfigCaptureContentTypeHeaderArgs',
    'EndpointConfigCaptureOptionArgs',
    'EndpointConfigDataCaptureConfigArgs',
    'EndpointConfigProductionVariantArgs',
    'EndpointConfigTagArgs',
    'EndpointDeploymentConfigArgs',
    'EndpointTagArgs',
    'EndpointTrafficRoutingConfigArgs',
    'EndpointVariantPropertyArgs',
    'FeatureGroupFeatureDefinitionArgs',
    'FeatureGroupTagArgs',
    'ImageTagArgs',
    'ModelBiasJobDefinitionClusterConfigArgs',
    'ModelBiasJobDefinitionConstraintsResourceArgs',
    'ModelBiasJobDefinitionEndpointInputArgs',
    'ModelBiasJobDefinitionModelBiasAppSpecificationArgs',
    'ModelBiasJobDefinitionModelBiasBaselineConfigArgs',
    'ModelBiasJobDefinitionModelBiasJobInputArgs',
    'ModelBiasJobDefinitionMonitoringGroundTruthS3InputArgs',
    'ModelBiasJobDefinitionMonitoringOutputConfigArgs',
    'ModelBiasJobDefinitionMonitoringOutputArgs',
    'ModelBiasJobDefinitionMonitoringResourcesArgs',
    'ModelBiasJobDefinitionNetworkConfigArgs',
    'ModelBiasJobDefinitionS3OutputArgs',
    'ModelBiasJobDefinitionStoppingConditionArgs',
    'ModelBiasJobDefinitionTagArgs',
    'ModelBiasJobDefinitionVpcConfigArgs',
    'ModelContainerDefinitionArgs',
    'ModelExplainabilityJobDefinitionClusterConfigArgs',
    'ModelExplainabilityJobDefinitionConstraintsResourceArgs',
    'ModelExplainabilityJobDefinitionEndpointInputArgs',
    'ModelExplainabilityJobDefinitionModelExplainabilityAppSpecificationArgs',
    'ModelExplainabilityJobDefinitionModelExplainabilityBaselineConfigArgs',
    'ModelExplainabilityJobDefinitionModelExplainabilityJobInputArgs',
    'ModelExplainabilityJobDefinitionMonitoringOutputConfigArgs',
    'ModelExplainabilityJobDefinitionMonitoringOutputArgs',
    'ModelExplainabilityJobDefinitionMonitoringResourcesArgs',
    'ModelExplainabilityJobDefinitionNetworkConfigArgs',
    'ModelExplainabilityJobDefinitionS3OutputArgs',
    'ModelExplainabilityJobDefinitionStoppingConditionArgs',
    'ModelExplainabilityJobDefinitionTagArgs',
    'ModelExplainabilityJobDefinitionVpcConfigArgs',
    'ModelImageConfigArgs',
    'ModelInferenceExecutionConfigArgs',
    'ModelMultiModelConfigArgs',
    'ModelPackageGroupTagArgs',
    'ModelQualityJobDefinitionClusterConfigArgs',
    'ModelQualityJobDefinitionConstraintsResourceArgs',
    'ModelQualityJobDefinitionEndpointInputArgs',
    'ModelQualityJobDefinitionModelQualityAppSpecificationArgs',
    'ModelQualityJobDefinitionModelQualityBaselineConfigArgs',
    'ModelQualityJobDefinitionModelQualityJobInputArgs',
    'ModelQualityJobDefinitionMonitoringGroundTruthS3InputArgs',
    'ModelQualityJobDefinitionMonitoringOutputConfigArgs',
    'ModelQualityJobDefinitionMonitoringOutputArgs',
    'ModelQualityJobDefinitionMonitoringResourcesArgs',
    'ModelQualityJobDefinitionNetworkConfigArgs',
    'ModelQualityJobDefinitionS3OutputArgs',
    'ModelQualityJobDefinitionStoppingConditionArgs',
    'ModelQualityJobDefinitionTagArgs',
    'ModelQualityJobDefinitionVpcConfigArgs',
    'ModelRepositoryAuthConfigArgs',
    'ModelTagArgs',
    'ModelVpcConfigArgs',
    'MonitoringScheduleBaselineConfigArgs',
    'MonitoringScheduleClusterConfigArgs',
    'MonitoringScheduleConstraintsResourceArgs',
    'MonitoringScheduleEndpointInputArgs',
    'MonitoringScheduleMonitoringAppSpecificationArgs',
    'MonitoringScheduleMonitoringExecutionSummaryArgs',
    'MonitoringScheduleMonitoringInputArgs',
    'MonitoringScheduleMonitoringJobDefinitionArgs',
    'MonitoringScheduleMonitoringOutputConfigArgs',
    'MonitoringScheduleMonitoringOutputArgs',
    'MonitoringScheduleMonitoringResourcesArgs',
    'MonitoringScheduleMonitoringScheduleConfigArgs',
    'MonitoringScheduleNetworkConfigArgs',
    'MonitoringScheduleS3OutputArgs',
    'MonitoringScheduleScheduleConfigArgs',
    'MonitoringScheduleStatisticsResourceArgs',
    'MonitoringScheduleStoppingConditionArgs',
    'MonitoringScheduleTagArgs',
    'MonitoringScheduleVpcConfigArgs',
    'NotebookInstanceLifecycleConfigNotebookInstanceLifecycleHookArgs',
    'NotebookInstanceTagArgs',
    'PipelineTagArgs',
    'ProjectTagArgs',
    'UserProfileCustomImageArgs',
    'UserProfileJupyterServerAppSettingsArgs',
    'UserProfileKernelGatewayAppSettingsArgs',
    'UserProfileResourceSpecArgs',
    'UserProfileSharingSettingsArgs',
    'UserProfileTagArgs',
    'UserProfileUserSettingsArgs',
    'WorkteamCognitoMemberDefinitionArgs',
    'WorkteamMemberDefinitionArgs',
    'WorkteamNotificationConfigurationArgs',
    'WorkteamTagArgs',
]

@pulumi.input_type
class AppImageConfigFileSystemConfigArgs:
    def __init__(__self__, *,
                 default_gid: Optional[pulumi.Input[int]] = None,
                 default_uid: Optional[pulumi.Input[int]] = None,
                 mount_path: Optional[pulumi.Input[str]] = None):
        """
        The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.
        :param pulumi.Input[int] default_gid: The default POSIX group ID (GID). If not specified, defaults to 100.
        :param pulumi.Input[int] default_uid: The default POSIX user ID (UID). If not specified, defaults to 1000.
        :param pulumi.Input[str] mount_path: The path within the image to mount the user's EFS home directory. The directory should be empty. If not specified, defaults to /home/sagemaker-user.
        """
        if default_gid is not None:
            pulumi.set(__self__, "default_gid", default_gid)
        if default_uid is not None:
            pulumi.set(__self__, "default_uid", default_uid)
        if mount_path is not None:
            pulumi.set(__self__, "mount_path", mount_path)

    @property
    @pulumi.getter(name="defaultGid")
    def default_gid(self) -> Optional[pulumi.Input[int]]:
        """
        The default POSIX group ID (GID). If not specified, defaults to 100.
        """
        return pulumi.get(self, "default_gid")

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

    @property
    @pulumi.getter(name="defaultUid")
    def default_uid(self) -> Optional[pulumi.Input[int]]:
        """
        The default POSIX user ID (UID). If not specified, defaults to 1000.
        """
        return pulumi.get(self, "default_uid")

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

    @property
    @pulumi.getter(name="mountPath")
    def mount_path(self) -> Optional[pulumi.Input[str]]:
        """
        The path within the image to mount the user's EFS home directory. The directory should be empty. If not specified, defaults to /home/sagemaker-user.
        """
        return pulumi.get(self, "mount_path")

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


@pulumi.input_type
class AppImageConfigKernelGatewayImageConfigArgs:
    def __init__(__self__, *,
                 kernel_specs: pulumi.Input[Sequence[pulumi.Input['AppImageConfigKernelSpecArgs']]],
                 file_system_config: Optional[pulumi.Input['AppImageConfigFileSystemConfigArgs']] = None):
        """
        The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app.
        :param pulumi.Input[Sequence[pulumi.Input['AppImageConfigKernelSpecArgs']]] kernel_specs: The specification of the Jupyter kernels in the image.
        :param pulumi.Input['AppImageConfigFileSystemConfigArgs'] file_system_config: The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.
        """
        pulumi.set(__self__, "kernel_specs", kernel_specs)
        if file_system_config is not None:
            pulumi.set(__self__, "file_system_config", file_system_config)

    @property
    @pulumi.getter(name="kernelSpecs")
    def kernel_specs(self) -> pulumi.Input[Sequence[pulumi.Input['AppImageConfigKernelSpecArgs']]]:
        """
        The specification of the Jupyter kernels in the image.
        """
        return pulumi.get(self, "kernel_specs")

    @kernel_specs.setter
    def kernel_specs(self, value: pulumi.Input[Sequence[pulumi.Input['AppImageConfigKernelSpecArgs']]]):
        pulumi.set(self, "kernel_specs", value)

    @property
    @pulumi.getter(name="fileSystemConfig")
    def file_system_config(self) -> Optional[pulumi.Input['AppImageConfigFileSystemConfigArgs']]:
        """
        The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.
        """
        return pulumi.get(self, "file_system_config")

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


@pulumi.input_type
class AppImageConfigKernelSpecArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 display_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the kernel.
        :param pulumi.Input[str] display_name: The display name of the kernel.
        """
        pulumi.set(__self__, "name", name)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)

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

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[str]]:
        """
        The display name of the kernel.
        """
        return pulumi.get(self, "display_name")

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


@pulumi.input_type
class AppImageConfigTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class AppResourceSpecArgs:
    def __init__(__self__, *,
                 instance_type: Optional[pulumi.Input['AppResourceSpecInstanceType']] = None,
                 sage_maker_image_arn: Optional[pulumi.Input[str]] = None,
                 sage_maker_image_version_arn: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['AppResourceSpecInstanceType'] instance_type: The instance type that the image version runs on.
        :param pulumi.Input[str] sage_maker_image_arn: The ARN of the SageMaker image that the image version belongs to.
        :param pulumi.Input[str] sage_maker_image_version_arn: The ARN of the image version created on the instance.
        """
        if instance_type is not None:
            pulumi.set(__self__, "instance_type", instance_type)
        if sage_maker_image_arn is not None:
            pulumi.set(__self__, "sage_maker_image_arn", sage_maker_image_arn)
        if sage_maker_image_version_arn is not None:
            pulumi.set(__self__, "sage_maker_image_version_arn", sage_maker_image_version_arn)

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> Optional[pulumi.Input['AppResourceSpecInstanceType']]:
        """
        The instance type that the image version runs on.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="sageMakerImageArn")
    def sage_maker_image_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the SageMaker image that the image version belongs to.
        """
        return pulumi.get(self, "sage_maker_image_arn")

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

    @property
    @pulumi.getter(name="sageMakerImageVersionArn")
    def sage_maker_image_version_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the image version created on the instance.
        """
        return pulumi.get(self, "sage_maker_image_version_arn")

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


@pulumi.input_type
class AppTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class CodeRepositoryGitConfigArgs:
    def __init__(__self__, *,
                 repository_url: pulumi.Input[str],
                 branch: Optional[pulumi.Input[str]] = None,
                 secret_arn: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "repository_url", repository_url)
        if branch is not None:
            pulumi.set(__self__, "branch", branch)
        if secret_arn is not None:
            pulumi.set(__self__, "secret_arn", secret_arn)

    @property
    @pulumi.getter(name="repositoryUrl")
    def repository_url(self) -> pulumi.Input[str]:
        return pulumi.get(self, "repository_url")

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

    @property
    @pulumi.getter
    def branch(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "branch")

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

    @property
    @pulumi.getter(name="secretArn")
    def secret_arn(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "secret_arn")

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


@pulumi.input_type
class CodeRepositoryTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class DataQualityJobDefinitionClusterConfigArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 instance_type: pulumi.Input[str],
                 volume_size_in_gb: pulumi.Input[int],
                 volume_kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        Configuration for the cluster used to run model monitoring jobs.
        :param pulumi.Input[int] instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        :param pulumi.Input[str] instance_type: The ML compute instance type for the processing job.
        :param pulumi.Input[int] volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        :param pulumi.Input[str] volume_kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "volume_size_in_gb", volume_size_in_gb)
        if volume_kms_key_id is not None:
            pulumi.set(__self__, "volume_kms_key_id", volume_kms_key_id)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> pulumi.Input[int]:
        """
        The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        """
        return pulumi.get(self, "instance_count")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[str]:
        """
        The ML compute instance type for the processing job.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="volumeSizeInGB")
    def volume_size_in_gb(self) -> pulumi.Input[int]:
        """
        The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        """
        return pulumi.get(self, "volume_size_in_gb")

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

    @property
    @pulumi.getter(name="volumeKmsKeyId")
    def volume_kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        return pulumi.get(self, "volume_kms_key_id")

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


@pulumi.input_type
class DataQualityJobDefinitionConstraintsResourceArgs:
    def __init__(__self__, *,
                 s3_uri: Optional[pulumi.Input[str]] = None):
        """
        The baseline constraints resource for a monitoring job.
        :param pulumi.Input[str] s3_uri: The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        if s3_uri is not None:
            pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class DataQualityJobDefinitionDataQualityAppSpecificationArgs:
    def __init__(__self__, *,
                 image_uri: pulumi.Input[str],
                 container_arguments: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 container_entrypoint: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 environment: Optional[Any] = None,
                 post_analytics_processor_source_uri: Optional[pulumi.Input[str]] = None,
                 record_preprocessor_source_uri: Optional[pulumi.Input[str]] = None):
        """
        Container image configuration object for the monitoring job.
        :param pulumi.Input[str] image_uri: The container image to be run by the monitoring job.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] container_arguments: An array of arguments for the container used to run the monitoring job.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] container_entrypoint: Specifies the entrypoint for a container used to run the monitoring job.
        :param Any environment: Sets the environment variables in the Docker container
        :param pulumi.Input[str] post_analytics_processor_source_uri: An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
        :param pulumi.Input[str] record_preprocessor_source_uri: An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers
        """
        pulumi.set(__self__, "image_uri", image_uri)
        if container_arguments is not None:
            pulumi.set(__self__, "container_arguments", container_arguments)
        if container_entrypoint is not None:
            pulumi.set(__self__, "container_entrypoint", container_entrypoint)
        if environment is not None:
            pulumi.set(__self__, "environment", environment)
        if post_analytics_processor_source_uri is not None:
            pulumi.set(__self__, "post_analytics_processor_source_uri", post_analytics_processor_source_uri)
        if record_preprocessor_source_uri is not None:
            pulumi.set(__self__, "record_preprocessor_source_uri", record_preprocessor_source_uri)

    @property
    @pulumi.getter(name="imageUri")
    def image_uri(self) -> pulumi.Input[str]:
        """
        The container image to be run by the monitoring job.
        """
        return pulumi.get(self, "image_uri")

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

    @property
    @pulumi.getter(name="containerArguments")
    def container_arguments(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An array of arguments for the container used to run the monitoring job.
        """
        return pulumi.get(self, "container_arguments")

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

    @property
    @pulumi.getter(name="containerEntrypoint")
    def container_entrypoint(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies the entrypoint for a container used to run the monitoring job.
        """
        return pulumi.get(self, "container_entrypoint")

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

    @property
    @pulumi.getter
    def environment(self) -> Optional[Any]:
        """
        Sets the environment variables in the Docker container
        """
        return pulumi.get(self, "environment")

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

    @property
    @pulumi.getter(name="postAnalyticsProcessorSourceUri")
    def post_analytics_processor_source_uri(self) -> Optional[pulumi.Input[str]]:
        """
        An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
        """
        return pulumi.get(self, "post_analytics_processor_source_uri")

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

    @property
    @pulumi.getter(name="recordPreprocessorSourceUri")
    def record_preprocessor_source_uri(self) -> Optional[pulumi.Input[str]]:
        """
        An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers
        """
        return pulumi.get(self, "record_preprocessor_source_uri")

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


@pulumi.input_type
class DataQualityJobDefinitionDataQualityBaselineConfigArgs:
    def __init__(__self__, *,
                 baselining_job_name: Optional[pulumi.Input[str]] = None,
                 constraints_resource: Optional[pulumi.Input['DataQualityJobDefinitionConstraintsResourceArgs']] = None,
                 statistics_resource: Optional[pulumi.Input['DataQualityJobDefinitionStatisticsResourceArgs']] = None):
        """
        Baseline configuration used to validate that the data conforms to the specified constraints and statistics.
        """
        if baselining_job_name is not None:
            pulumi.set(__self__, "baselining_job_name", baselining_job_name)
        if constraints_resource is not None:
            pulumi.set(__self__, "constraints_resource", constraints_resource)
        if statistics_resource is not None:
            pulumi.set(__self__, "statistics_resource", statistics_resource)

    @property
    @pulumi.getter(name="baseliningJobName")
    def baselining_job_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "baselining_job_name")

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

    @property
    @pulumi.getter(name="constraintsResource")
    def constraints_resource(self) -> Optional[pulumi.Input['DataQualityJobDefinitionConstraintsResourceArgs']]:
        return pulumi.get(self, "constraints_resource")

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

    @property
    @pulumi.getter(name="statisticsResource")
    def statistics_resource(self) -> Optional[pulumi.Input['DataQualityJobDefinitionStatisticsResourceArgs']]:
        return pulumi.get(self, "statistics_resource")

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


@pulumi.input_type
class DataQualityJobDefinitionDataQualityJobInputArgs:
    def __init__(__self__, *,
                 endpoint_input: pulumi.Input['DataQualityJobDefinitionEndpointInputArgs']):
        """
        The inputs for a monitoring job.
        """
        pulumi.set(__self__, "endpoint_input", endpoint_input)

    @property
    @pulumi.getter(name="endpointInput")
    def endpoint_input(self) -> pulumi.Input['DataQualityJobDefinitionEndpointInputArgs']:
        return pulumi.get(self, "endpoint_input")

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


@pulumi.input_type
class DataQualityJobDefinitionEndpointInputArgs:
    def __init__(__self__, *,
                 endpoint_name: pulumi.Input[str],
                 local_path: pulumi.Input[str],
                 s3_data_distribution_type: Optional[pulumi.Input['DataQualityJobDefinitionEndpointInputS3DataDistributionType']] = None,
                 s3_input_mode: Optional[pulumi.Input['DataQualityJobDefinitionEndpointInputS3InputMode']] = None):
        """
        The endpoint for a monitoring job.
        :param pulumi.Input[str] local_path: Path to the filesystem where the endpoint data is available to the container.
        :param pulumi.Input['DataQualityJobDefinitionEndpointInputS3DataDistributionType'] s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        :param pulumi.Input['DataQualityJobDefinitionEndpointInputS3InputMode'] s3_input_mode: Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        pulumi.set(__self__, "endpoint_name", endpoint_name)
        pulumi.set(__self__, "local_path", local_path)
        if s3_data_distribution_type is not None:
            pulumi.set(__self__, "s3_data_distribution_type", s3_data_distribution_type)
        if s3_input_mode is not None:
            pulumi.set(__self__, "s3_input_mode", s3_input_mode)

    @property
    @pulumi.getter(name="endpointName")
    def endpoint_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "endpoint_name")

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

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        Path to the filesystem where the endpoint data is available to the container.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="s3DataDistributionType")
    def s3_data_distribution_type(self) -> Optional[pulumi.Input['DataQualityJobDefinitionEndpointInputS3DataDistributionType']]:
        """
        Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        """
        return pulumi.get(self, "s3_data_distribution_type")

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

    @property
    @pulumi.getter(name="s3InputMode")
    def s3_input_mode(self) -> Optional[pulumi.Input['DataQualityJobDefinitionEndpointInputS3InputMode']]:
        """
        Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        return pulumi.get(self, "s3_input_mode")

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


@pulumi.input_type
class DataQualityJobDefinitionMonitoringOutputConfigArgs:
    def __init__(__self__, *,
                 monitoring_outputs: pulumi.Input[Sequence[pulumi.Input['DataQualityJobDefinitionMonitoringOutputArgs']]],
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        The output configuration for monitoring jobs.
        :param pulumi.Input[Sequence[pulumi.Input['DataQualityJobDefinitionMonitoringOutputArgs']]] monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        :param pulumi.Input[str] kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        pulumi.set(__self__, "monitoring_outputs", monitoring_outputs)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="monitoringOutputs")
    def monitoring_outputs(self) -> pulumi.Input[Sequence[pulumi.Input['DataQualityJobDefinitionMonitoringOutputArgs']]]:
        """
        Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        """
        return pulumi.get(self, "monitoring_outputs")

    @monitoring_outputs.setter
    def monitoring_outputs(self, value: pulumi.Input[Sequence[pulumi.Input['DataQualityJobDefinitionMonitoringOutputArgs']]]):
        pulumi.set(self, "monitoring_outputs", value)

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        return pulumi.get(self, "kms_key_id")

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


@pulumi.input_type
class DataQualityJobDefinitionMonitoringOutputArgs:
    def __init__(__self__, *,
                 s3_output: pulumi.Input['DataQualityJobDefinitionS3OutputArgs']):
        """
        The output object for a monitoring job.
        """
        pulumi.set(__self__, "s3_output", s3_output)

    @property
    @pulumi.getter(name="s3Output")
    def s3_output(self) -> pulumi.Input['DataQualityJobDefinitionS3OutputArgs']:
        return pulumi.get(self, "s3_output")

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


@pulumi.input_type
class DataQualityJobDefinitionMonitoringResourcesArgs:
    def __init__(__self__, *,
                 cluster_config: pulumi.Input['DataQualityJobDefinitionClusterConfigArgs']):
        """
        Identifies the resources to deploy for a monitoring job.
        """
        pulumi.set(__self__, "cluster_config", cluster_config)

    @property
    @pulumi.getter(name="clusterConfig")
    def cluster_config(self) -> pulumi.Input['DataQualityJobDefinitionClusterConfigArgs']:
        return pulumi.get(self, "cluster_config")

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


@pulumi.input_type
class DataQualityJobDefinitionNetworkConfigArgs:
    def __init__(__self__, *,
                 enable_inter_container_traffic_encryption: Optional[pulumi.Input[bool]] = None,
                 enable_network_isolation: Optional[pulumi.Input[bool]] = None,
                 vpc_config: Optional[pulumi.Input['DataQualityJobDefinitionVpcConfigArgs']] = None):
        """
        Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.
        :param pulumi.Input[bool] enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        :param pulumi.Input[bool] enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        if enable_inter_container_traffic_encryption is not None:
            pulumi.set(__self__, "enable_inter_container_traffic_encryption", enable_inter_container_traffic_encryption)
        if enable_network_isolation is not None:
            pulumi.set(__self__, "enable_network_isolation", enable_network_isolation)
        if vpc_config is not None:
            pulumi.set(__self__, "vpc_config", vpc_config)

    @property
    @pulumi.getter(name="enableInterContainerTrafficEncryption")
    def enable_inter_container_traffic_encryption(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        """
        return pulumi.get(self, "enable_inter_container_traffic_encryption")

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

    @property
    @pulumi.getter(name="enableNetworkIsolation")
    def enable_network_isolation(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        return pulumi.get(self, "enable_network_isolation")

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

    @property
    @pulumi.getter(name="vpcConfig")
    def vpc_config(self) -> Optional[pulumi.Input['DataQualityJobDefinitionVpcConfigArgs']]:
        return pulumi.get(self, "vpc_config")

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


@pulumi.input_type
class DataQualityJobDefinitionS3OutputArgs:
    def __init__(__self__, *,
                 local_path: pulumi.Input[str],
                 s3_uri: pulumi.Input[str],
                 s3_upload_mode: Optional[pulumi.Input['DataQualityJobDefinitionS3OutputS3UploadMode']] = None):
        """
        Information about where and how to store the results of a monitoring job.
        :param pulumi.Input[str] local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        :param pulumi.Input[str] s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        :param pulumi.Input['DataQualityJobDefinitionS3OutputS3UploadMode'] s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        pulumi.set(__self__, "local_path", local_path)
        pulumi.set(__self__, "s3_uri", s3_uri)
        if s3_upload_mode is not None:
            pulumi.set(__self__, "s3_upload_mode", s3_upload_mode)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> pulumi.Input[str]:
        """
        A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        return pulumi.get(self, "s3_uri")

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

    @property
    @pulumi.getter(name="s3UploadMode")
    def s3_upload_mode(self) -> Optional[pulumi.Input['DataQualityJobDefinitionS3OutputS3UploadMode']]:
        """
        Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        return pulumi.get(self, "s3_upload_mode")

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


@pulumi.input_type
class DataQualityJobDefinitionStatisticsResourceArgs:
    def __init__(__self__, *,
                 s3_uri: Optional[pulumi.Input[str]] = None):
        """
        The baseline statistics resource for a monitoring job.
        :param pulumi.Input[str] s3_uri: The Amazon S3 URI for the baseline statistics file in Amazon S3 that the current monitoring job should be validated against.
        """
        if s3_uri is not None:
            pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 URI for the baseline statistics file in Amazon S3 that the current monitoring job should be validated against.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class DataQualityJobDefinitionStoppingConditionArgs:
    def __init__(__self__, *,
                 max_runtime_in_seconds: pulumi.Input[int]):
        """
        Specifies a time limit for how long the monitoring job is allowed to run.
        :param pulumi.Input[int] max_runtime_in_seconds: The maximum runtime allowed in seconds.
        """
        pulumi.set(__self__, "max_runtime_in_seconds", max_runtime_in_seconds)

    @property
    @pulumi.getter(name="maxRuntimeInSeconds")
    def max_runtime_in_seconds(self) -> pulumi.Input[int]:
        """
        The maximum runtime allowed in seconds.
        """
        return pulumi.get(self, "max_runtime_in_seconds")

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


@pulumi.input_type
class DataQualityJobDefinitionTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class DataQualityJobDefinitionVpcConfigArgs:
    def __init__(__self__, *,
                 security_group_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subnets: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_group_ids: The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subnets: The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        pulumi.set(__self__, "subnets", subnets)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        """
        return pulumi.get(self, "security_group_ids")

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

    @property
    @pulumi.getter
    def subnets(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        return pulumi.get(self, "subnets")

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


@pulumi.input_type
class DeviceDeviceArgs:
    def __init__(__self__, *,
                 device_name: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 iot_thing_name: Optional[pulumi.Input[str]] = None):
        """
        Edge device you want to create
        :param pulumi.Input[str] device_name: The name of the device
        :param pulumi.Input[str] description: Description of the device
        :param pulumi.Input[str] iot_thing_name: AWS Internet of Things (IoT) object name.
        """
        pulumi.set(__self__, "device_name", device_name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if iot_thing_name is not None:
            pulumi.set(__self__, "iot_thing_name", iot_thing_name)

    @property
    @pulumi.getter(name="deviceName")
    def device_name(self) -> pulumi.Input[str]:
        """
        The name of the device
        """
        return pulumi.get(self, "device_name")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Description of the device
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="iotThingName")
    def iot_thing_name(self) -> Optional[pulumi.Input[str]]:
        """
        AWS Internet of Things (IoT) object name.
        """
        return pulumi.get(self, "iot_thing_name")

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


@pulumi.input_type
class DeviceFleetEdgeOutputConfigArgs:
    def __init__(__self__, *,
                 s3_output_location: pulumi.Input[str],
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] s3_output_location: The Amazon Simple Storage (S3) bucket URI
        :param pulumi.Input[str] kms_key_id: The KMS key id used for encryption on the S3 bucket
        """
        pulumi.set(__self__, "s3_output_location", s3_output_location)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="s3OutputLocation")
    def s3_output_location(self) -> pulumi.Input[str]:
        """
        The Amazon Simple Storage (S3) bucket URI
        """
        return pulumi.get(self, "s3_output_location")

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

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The KMS key id used for encryption on the S3 bucket
        """
        return pulumi.get(self, "kms_key_id")

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


@pulumi.input_type
class DeviceFleetTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        Key-value pair to associate as a tag for the resource
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class DeviceTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class DomainCustomImageArgs:
    def __init__(__self__, *,
                 app_image_config_name: pulumi.Input[str],
                 image_name: pulumi.Input[str],
                 image_version_number: Optional[pulumi.Input[int]] = None):
        """
        A custom SageMaker image.
        :param pulumi.Input[str] app_image_config_name: The Name of the AppImageConfig.
        :param pulumi.Input[str] image_name: The name of the CustomImage. Must be unique to your account.
        :param pulumi.Input[int] image_version_number: The version number of the CustomImage.
        """
        pulumi.set(__self__, "app_image_config_name", app_image_config_name)
        pulumi.set(__self__, "image_name", image_name)
        if image_version_number is not None:
            pulumi.set(__self__, "image_version_number", image_version_number)

    @property
    @pulumi.getter(name="appImageConfigName")
    def app_image_config_name(self) -> pulumi.Input[str]:
        """
        The Name of the AppImageConfig.
        """
        return pulumi.get(self, "app_image_config_name")

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

    @property
    @pulumi.getter(name="imageName")
    def image_name(self) -> pulumi.Input[str]:
        """
        The name of the CustomImage. Must be unique to your account.
        """
        return pulumi.get(self, "image_name")

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

    @property
    @pulumi.getter(name="imageVersionNumber")
    def image_version_number(self) -> Optional[pulumi.Input[int]]:
        """
        The version number of the CustomImage.
        """
        return pulumi.get(self, "image_version_number")

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


@pulumi.input_type
class DomainJupyterServerAppSettingsArgs:
    def __init__(__self__, *,
                 default_resource_spec: Optional[pulumi.Input['DomainResourceSpecArgs']] = None):
        """
        The JupyterServer app settings.
        """
        if default_resource_spec is not None:
            pulumi.set(__self__, "default_resource_spec", default_resource_spec)

    @property
    @pulumi.getter(name="defaultResourceSpec")
    def default_resource_spec(self) -> Optional[pulumi.Input['DomainResourceSpecArgs']]:
        return pulumi.get(self, "default_resource_spec")

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


@pulumi.input_type
class DomainKernelGatewayAppSettingsArgs:
    def __init__(__self__, *,
                 custom_images: Optional[pulumi.Input[Sequence[pulumi.Input['DomainCustomImageArgs']]]] = None,
                 default_resource_spec: Optional[pulumi.Input['DomainResourceSpecArgs']] = None):
        """
        The kernel gateway app settings.
        :param pulumi.Input[Sequence[pulumi.Input['DomainCustomImageArgs']]] custom_images: A list of custom SageMaker images that are configured to run as a KernelGateway app.
        :param pulumi.Input['DomainResourceSpecArgs'] default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app.
        """
        if custom_images is not None:
            pulumi.set(__self__, "custom_images", custom_images)
        if default_resource_spec is not None:
            pulumi.set(__self__, "default_resource_spec", default_resource_spec)

    @property
    @pulumi.getter(name="customImages")
    def custom_images(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['DomainCustomImageArgs']]]]:
        """
        A list of custom SageMaker images that are configured to run as a KernelGateway app.
        """
        return pulumi.get(self, "custom_images")

    @custom_images.setter
    def custom_images(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['DomainCustomImageArgs']]]]):
        pulumi.set(self, "custom_images", value)

    @property
    @pulumi.getter(name="defaultResourceSpec")
    def default_resource_spec(self) -> Optional[pulumi.Input['DomainResourceSpecArgs']]:
        """
        The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app.
        """
        return pulumi.get(self, "default_resource_spec")

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


@pulumi.input_type
class DomainResourceSpecArgs:
    def __init__(__self__, *,
                 instance_type: Optional[pulumi.Input['DomainResourceSpecInstanceType']] = None,
                 sage_maker_image_arn: Optional[pulumi.Input[str]] = None,
                 sage_maker_image_version_arn: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['DomainResourceSpecInstanceType'] instance_type: The instance type that the image version runs on.
        :param pulumi.Input[str] sage_maker_image_arn: The ARN of the SageMaker image that the image version belongs to.
        :param pulumi.Input[str] sage_maker_image_version_arn: The ARN of the image version created on the instance.
        """
        if instance_type is not None:
            pulumi.set(__self__, "instance_type", instance_type)
        if sage_maker_image_arn is not None:
            pulumi.set(__self__, "sage_maker_image_arn", sage_maker_image_arn)
        if sage_maker_image_version_arn is not None:
            pulumi.set(__self__, "sage_maker_image_version_arn", sage_maker_image_version_arn)

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> Optional[pulumi.Input['DomainResourceSpecInstanceType']]:
        """
        The instance type that the image version runs on.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="sageMakerImageArn")
    def sage_maker_image_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the SageMaker image that the image version belongs to.
        """
        return pulumi.get(self, "sage_maker_image_arn")

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

    @property
    @pulumi.getter(name="sageMakerImageVersionArn")
    def sage_maker_image_version_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the image version created on the instance.
        """
        return pulumi.get(self, "sage_maker_image_version_arn")

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


@pulumi.input_type
class DomainSharingSettingsArgs:
    def __init__(__self__, *,
                 notebook_output_option: Optional[pulumi.Input['DomainSharingSettingsNotebookOutputOption']] = None,
                 s3_kms_key_id: Optional[pulumi.Input[str]] = None,
                 s3_output_path: Optional[pulumi.Input[str]] = None):
        """
        Specifies options when sharing an Amazon SageMaker Studio notebook. These settings are specified as part of DefaultUserSettings when the CreateDomain API is called, and as part of UserSettings when the CreateUserProfile API is called.
        :param pulumi.Input['DomainSharingSettingsNotebookOutputOption'] notebook_output_option: Whether to include the notebook cell output when sharing the notebook. The default is Disabled.
        :param pulumi.Input[str] s3_kms_key_id: When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.
        :param pulumi.Input[str] s3_output_path: When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.
        """
        if notebook_output_option is not None:
            pulumi.set(__self__, "notebook_output_option", notebook_output_option)
        if s3_kms_key_id is not None:
            pulumi.set(__self__, "s3_kms_key_id", s3_kms_key_id)
        if s3_output_path is not None:
            pulumi.set(__self__, "s3_output_path", s3_output_path)

    @property
    @pulumi.getter(name="notebookOutputOption")
    def notebook_output_option(self) -> Optional[pulumi.Input['DomainSharingSettingsNotebookOutputOption']]:
        """
        Whether to include the notebook cell output when sharing the notebook. The default is Disabled.
        """
        return pulumi.get(self, "notebook_output_option")

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

    @property
    @pulumi.getter(name="s3KmsKeyId")
    def s3_kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.
        """
        return pulumi.get(self, "s3_kms_key_id")

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

    @property
    @pulumi.getter(name="s3OutputPath")
    def s3_output_path(self) -> Optional[pulumi.Input[str]]:
        """
        When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.
        """
        return pulumi.get(self, "s3_output_path")

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


@pulumi.input_type
class DomainTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class DomainUserSettingsArgs:
    def __init__(__self__, *,
                 execution_role: Optional[pulumi.Input[str]] = None,
                 jupyter_server_app_settings: Optional[pulumi.Input['DomainJupyterServerAppSettingsArgs']] = None,
                 kernel_gateway_app_settings: Optional[pulumi.Input['DomainKernelGatewayAppSettingsArgs']] = None,
                 security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 sharing_settings: Optional[pulumi.Input['DomainSharingSettingsArgs']] = None):
        """
        A collection of settings that apply to users of Amazon SageMaker Studio. These settings are specified when the CreateUserProfile API is called, and as DefaultUserSettings when the CreateDomain API is called.
        :param pulumi.Input[str] execution_role: The user profile Amazon Resource Name (ARN).
        :param pulumi.Input['DomainJupyterServerAppSettingsArgs'] jupyter_server_app_settings: The Jupyter server's app settings.
        :param pulumi.Input['DomainKernelGatewayAppSettingsArgs'] kernel_gateway_app_settings: The kernel gateway app settings.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_groups: The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.
        :param pulumi.Input['DomainSharingSettingsArgs'] sharing_settings: The sharing settings.
        """
        if execution_role is not None:
            pulumi.set(__self__, "execution_role", execution_role)
        if jupyter_server_app_settings is not None:
            pulumi.set(__self__, "jupyter_server_app_settings", jupyter_server_app_settings)
        if kernel_gateway_app_settings is not None:
            pulumi.set(__self__, "kernel_gateway_app_settings", kernel_gateway_app_settings)
        if security_groups is not None:
            pulumi.set(__self__, "security_groups", security_groups)
        if sharing_settings is not None:
            pulumi.set(__self__, "sharing_settings", sharing_settings)

    @property
    @pulumi.getter(name="executionRole")
    def execution_role(self) -> Optional[pulumi.Input[str]]:
        """
        The user profile Amazon Resource Name (ARN).
        """
        return pulumi.get(self, "execution_role")

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

    @property
    @pulumi.getter(name="jupyterServerAppSettings")
    def jupyter_server_app_settings(self) -> Optional[pulumi.Input['DomainJupyterServerAppSettingsArgs']]:
        """
        The Jupyter server's app settings.
        """
        return pulumi.get(self, "jupyter_server_app_settings")

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

    @property
    @pulumi.getter(name="kernelGatewayAppSettings")
    def kernel_gateway_app_settings(self) -> Optional[pulumi.Input['DomainKernelGatewayAppSettingsArgs']]:
        """
        The kernel gateway app settings.
        """
        return pulumi.get(self, "kernel_gateway_app_settings")

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

    @property
    @pulumi.getter(name="securityGroups")
    def security_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.
        """
        return pulumi.get(self, "security_groups")

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

    @property
    @pulumi.getter(name="sharingSettings")
    def sharing_settings(self) -> Optional[pulumi.Input['DomainSharingSettingsArgs']]:
        """
        The sharing settings.
        """
        return pulumi.get(self, "sharing_settings")

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


@pulumi.input_type
class EndpointAlarmArgs:
    def __init__(__self__, *,
                 alarm_name: pulumi.Input[str]):
        pulumi.set(__self__, "alarm_name", alarm_name)

    @property
    @pulumi.getter(name="alarmName")
    def alarm_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "alarm_name")

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


@pulumi.input_type
class EndpointAutoRollbackConfigArgs:
    def __init__(__self__, *,
                 alarms: pulumi.Input[Sequence[pulumi.Input['EndpointAlarmArgs']]]):
        pulumi.set(__self__, "alarms", alarms)

    @property
    @pulumi.getter
    def alarms(self) -> pulumi.Input[Sequence[pulumi.Input['EndpointAlarmArgs']]]:
        return pulumi.get(self, "alarms")

    @alarms.setter
    def alarms(self, value: pulumi.Input[Sequence[pulumi.Input['EndpointAlarmArgs']]]):
        pulumi.set(self, "alarms", value)


@pulumi.input_type
class EndpointBlueGreenUpdatePolicyArgs:
    def __init__(__self__, *,
                 traffic_routing_configuration: pulumi.Input['EndpointTrafficRoutingConfigArgs'],
                 maximum_execution_timeout_in_seconds: Optional[pulumi.Input[int]] = None,
                 termination_wait_in_seconds: Optional[pulumi.Input[int]] = None):
        pulumi.set(__self__, "traffic_routing_configuration", traffic_routing_configuration)
        if maximum_execution_timeout_in_seconds is not None:
            pulumi.set(__self__, "maximum_execution_timeout_in_seconds", maximum_execution_timeout_in_seconds)
        if termination_wait_in_seconds is not None:
            pulumi.set(__self__, "termination_wait_in_seconds", termination_wait_in_seconds)

    @property
    @pulumi.getter(name="trafficRoutingConfiguration")
    def traffic_routing_configuration(self) -> pulumi.Input['EndpointTrafficRoutingConfigArgs']:
        return pulumi.get(self, "traffic_routing_configuration")

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

    @property
    @pulumi.getter(name="maximumExecutionTimeoutInSeconds")
    def maximum_execution_timeout_in_seconds(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "maximum_execution_timeout_in_seconds")

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

    @property
    @pulumi.getter(name="terminationWaitInSeconds")
    def termination_wait_in_seconds(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "termination_wait_in_seconds")

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


@pulumi.input_type
class EndpointCapacitySizeArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 value: pulumi.Input[int]):
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[int]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class EndpointConfigAsyncInferenceClientConfigArgs:
    def __init__(__self__, *,
                 max_concurrent_invocations_per_instance: Optional[pulumi.Input[int]] = None):
        if max_concurrent_invocations_per_instance is not None:
            pulumi.set(__self__, "max_concurrent_invocations_per_instance", max_concurrent_invocations_per_instance)

    @property
    @pulumi.getter(name="maxConcurrentInvocationsPerInstance")
    def max_concurrent_invocations_per_instance(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "max_concurrent_invocations_per_instance")

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


@pulumi.input_type
class EndpointConfigAsyncInferenceConfigArgs:
    def __init__(__self__, *,
                 output_config: pulumi.Input['EndpointConfigAsyncInferenceOutputConfigArgs'],
                 client_config: Optional[pulumi.Input['EndpointConfigAsyncInferenceClientConfigArgs']] = None):
        pulumi.set(__self__, "output_config", output_config)
        if client_config is not None:
            pulumi.set(__self__, "client_config", client_config)

    @property
    @pulumi.getter(name="outputConfig")
    def output_config(self) -> pulumi.Input['EndpointConfigAsyncInferenceOutputConfigArgs']:
        return pulumi.get(self, "output_config")

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

    @property
    @pulumi.getter(name="clientConfig")
    def client_config(self) -> Optional[pulumi.Input['EndpointConfigAsyncInferenceClientConfigArgs']]:
        return pulumi.get(self, "client_config")

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


@pulumi.input_type
class EndpointConfigAsyncInferenceNotificationConfigArgs:
    def __init__(__self__, *,
                 error_topic: Optional[pulumi.Input[str]] = None,
                 success_topic: Optional[pulumi.Input[str]] = None):
        if error_topic is not None:
            pulumi.set(__self__, "error_topic", error_topic)
        if success_topic is not None:
            pulumi.set(__self__, "success_topic", success_topic)

    @property
    @pulumi.getter(name="errorTopic")
    def error_topic(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "error_topic")

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

    @property
    @pulumi.getter(name="successTopic")
    def success_topic(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "success_topic")

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


@pulumi.input_type
class EndpointConfigAsyncInferenceOutputConfigArgs:
    def __init__(__self__, *,
                 s3_output_path: pulumi.Input[str],
                 kms_key_id: Optional[pulumi.Input[str]] = None,
                 notification_config: Optional[pulumi.Input['EndpointConfigAsyncInferenceNotificationConfigArgs']] = None):
        pulumi.set(__self__, "s3_output_path", s3_output_path)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)
        if notification_config is not None:
            pulumi.set(__self__, "notification_config", notification_config)

    @property
    @pulumi.getter(name="s3OutputPath")
    def s3_output_path(self) -> pulumi.Input[str]:
        return pulumi.get(self, "s3_output_path")

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

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "kms_key_id")

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

    @property
    @pulumi.getter(name="notificationConfig")
    def notification_config(self) -> Optional[pulumi.Input['EndpointConfigAsyncInferenceNotificationConfigArgs']]:
        return pulumi.get(self, "notification_config")

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


@pulumi.input_type
class EndpointConfigCaptureContentTypeHeaderArgs:
    def __init__(__self__, *,
                 csv_content_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 json_content_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        if csv_content_types is not None:
            pulumi.set(__self__, "csv_content_types", csv_content_types)
        if json_content_types is not None:
            pulumi.set(__self__, "json_content_types", json_content_types)

    @property
    @pulumi.getter(name="csvContentTypes")
    def csv_content_types(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "csv_content_types")

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

    @property
    @pulumi.getter(name="jsonContentTypes")
    def json_content_types(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "json_content_types")

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


@pulumi.input_type
class EndpointConfigCaptureOptionArgs:
    def __init__(__self__, *,
                 capture_mode: pulumi.Input[str]):
        pulumi.set(__self__, "capture_mode", capture_mode)

    @property
    @pulumi.getter(name="captureMode")
    def capture_mode(self) -> pulumi.Input[str]:
        return pulumi.get(self, "capture_mode")

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


@pulumi.input_type
class EndpointConfigDataCaptureConfigArgs:
    def __init__(__self__, *,
                 capture_options: pulumi.Input[Sequence[pulumi.Input['EndpointConfigCaptureOptionArgs']]],
                 destination_s3_uri: pulumi.Input[str],
                 initial_sampling_percentage: pulumi.Input[int],
                 capture_content_type_header: Optional[pulumi.Input['EndpointConfigCaptureContentTypeHeaderArgs']] = None,
                 enable_capture: Optional[pulumi.Input[bool]] = None,
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "capture_options", capture_options)
        pulumi.set(__self__, "destination_s3_uri", destination_s3_uri)
        pulumi.set(__self__, "initial_sampling_percentage", initial_sampling_percentage)
        if capture_content_type_header is not None:
            pulumi.set(__self__, "capture_content_type_header", capture_content_type_header)
        if enable_capture is not None:
            pulumi.set(__self__, "enable_capture", enable_capture)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="captureOptions")
    def capture_options(self) -> pulumi.Input[Sequence[pulumi.Input['EndpointConfigCaptureOptionArgs']]]:
        return pulumi.get(self, "capture_options")

    @capture_options.setter
    def capture_options(self, value: pulumi.Input[Sequence[pulumi.Input['EndpointConfigCaptureOptionArgs']]]):
        pulumi.set(self, "capture_options", value)

    @property
    @pulumi.getter(name="destinationS3Uri")
    def destination_s3_uri(self) -> pulumi.Input[str]:
        return pulumi.get(self, "destination_s3_uri")

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

    @property
    @pulumi.getter(name="initialSamplingPercentage")
    def initial_sampling_percentage(self) -> pulumi.Input[int]:
        return pulumi.get(self, "initial_sampling_percentage")

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

    @property
    @pulumi.getter(name="captureContentTypeHeader")
    def capture_content_type_header(self) -> Optional[pulumi.Input['EndpointConfigCaptureContentTypeHeaderArgs']]:
        return pulumi.get(self, "capture_content_type_header")

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

    @property
    @pulumi.getter(name="enableCapture")
    def enable_capture(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "enable_capture")

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

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "kms_key_id")

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


@pulumi.input_type
class EndpointConfigProductionVariantArgs:
    def __init__(__self__, *,
                 initial_instance_count: pulumi.Input[int],
                 initial_variant_weight: pulumi.Input[float],
                 instance_type: pulumi.Input[str],
                 model_name: pulumi.Input[str],
                 variant_name: pulumi.Input[str],
                 accelerator_type: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "initial_instance_count", initial_instance_count)
        pulumi.set(__self__, "initial_variant_weight", initial_variant_weight)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "model_name", model_name)
        pulumi.set(__self__, "variant_name", variant_name)
        if accelerator_type is not None:
            pulumi.set(__self__, "accelerator_type", accelerator_type)

    @property
    @pulumi.getter(name="initialInstanceCount")
    def initial_instance_count(self) -> pulumi.Input[int]:
        return pulumi.get(self, "initial_instance_count")

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

    @property
    @pulumi.getter(name="initialVariantWeight")
    def initial_variant_weight(self) -> pulumi.Input[float]:
        return pulumi.get(self, "initial_variant_weight")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="modelName")
    def model_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "model_name")

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

    @property
    @pulumi.getter(name="variantName")
    def variant_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "variant_name")

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

    @property
    @pulumi.getter(name="acceleratorType")
    def accelerator_type(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "accelerator_type")

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


@pulumi.input_type
class EndpointConfigTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class EndpointDeploymentConfigArgs:
    def __init__(__self__, *,
                 blue_green_update_policy: pulumi.Input['EndpointBlueGreenUpdatePolicyArgs'],
                 auto_rollback_configuration: Optional[pulumi.Input['EndpointAutoRollbackConfigArgs']] = None):
        pulumi.set(__self__, "blue_green_update_policy", blue_green_update_policy)
        if auto_rollback_configuration is not None:
            pulumi.set(__self__, "auto_rollback_configuration", auto_rollback_configuration)

    @property
    @pulumi.getter(name="blueGreenUpdatePolicy")
    def blue_green_update_policy(self) -> pulumi.Input['EndpointBlueGreenUpdatePolicyArgs']:
        return pulumi.get(self, "blue_green_update_policy")

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

    @property
    @pulumi.getter(name="autoRollbackConfiguration")
    def auto_rollback_configuration(self) -> Optional[pulumi.Input['EndpointAutoRollbackConfigArgs']]:
        return pulumi.get(self, "auto_rollback_configuration")

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


@pulumi.input_type
class EndpointTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class EndpointTrafficRoutingConfigArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 canary_size: Optional[pulumi.Input['EndpointCapacitySizeArgs']] = None,
                 wait_interval_in_seconds: Optional[pulumi.Input[int]] = None):
        pulumi.set(__self__, "type", type)
        if canary_size is not None:
            pulumi.set(__self__, "canary_size", canary_size)
        if wait_interval_in_seconds is not None:
            pulumi.set(__self__, "wait_interval_in_seconds", wait_interval_in_seconds)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter(name="canarySize")
    def canary_size(self) -> Optional[pulumi.Input['EndpointCapacitySizeArgs']]:
        return pulumi.get(self, "canary_size")

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

    @property
    @pulumi.getter(name="waitIntervalInSeconds")
    def wait_interval_in_seconds(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "wait_interval_in_seconds")

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


@pulumi.input_type
class EndpointVariantPropertyArgs:
    def __init__(__self__, *,
                 variant_property_type: Optional[pulumi.Input[str]] = None):
        if variant_property_type is not None:
            pulumi.set(__self__, "variant_property_type", variant_property_type)

    @property
    @pulumi.getter(name="variantPropertyType")
    def variant_property_type(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "variant_property_type")

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


@pulumi.input_type
class FeatureGroupFeatureDefinitionArgs:
    def __init__(__self__, *,
                 feature_name: pulumi.Input[str],
                 feature_type: pulumi.Input['FeatureGroupFeatureDefinitionFeatureType']):
        pulumi.set(__self__, "feature_name", feature_name)
        pulumi.set(__self__, "feature_type", feature_type)

    @property
    @pulumi.getter(name="featureName")
    def feature_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "feature_name")

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

    @property
    @pulumi.getter(name="featureType")
    def feature_type(self) -> pulumi.Input['FeatureGroupFeatureDefinitionFeatureType']:
        return pulumi.get(self, "feature_type")

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


@pulumi.input_type
class FeatureGroupTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ImageTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ModelBiasJobDefinitionClusterConfigArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 instance_type: pulumi.Input[str],
                 volume_size_in_gb: pulumi.Input[int],
                 volume_kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        Configuration for the cluster used to run model monitoring jobs.
        :param pulumi.Input[int] instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        :param pulumi.Input[str] instance_type: The ML compute instance type for the processing job.
        :param pulumi.Input[int] volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        :param pulumi.Input[str] volume_kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "volume_size_in_gb", volume_size_in_gb)
        if volume_kms_key_id is not None:
            pulumi.set(__self__, "volume_kms_key_id", volume_kms_key_id)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> pulumi.Input[int]:
        """
        The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        """
        return pulumi.get(self, "instance_count")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[str]:
        """
        The ML compute instance type for the processing job.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="volumeSizeInGB")
    def volume_size_in_gb(self) -> pulumi.Input[int]:
        """
        The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        """
        return pulumi.get(self, "volume_size_in_gb")

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

    @property
    @pulumi.getter(name="volumeKmsKeyId")
    def volume_kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        return pulumi.get(self, "volume_kms_key_id")

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


@pulumi.input_type
class ModelBiasJobDefinitionConstraintsResourceArgs:
    def __init__(__self__, *,
                 s3_uri: Optional[pulumi.Input[str]] = None):
        """
        The baseline constraints resource for a monitoring job.
        :param pulumi.Input[str] s3_uri: The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        if s3_uri is not None:
            pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class ModelBiasJobDefinitionEndpointInputArgs:
    def __init__(__self__, *,
                 endpoint_name: pulumi.Input[str],
                 local_path: pulumi.Input[str],
                 end_time_offset: Optional[pulumi.Input[str]] = None,
                 features_attribute: Optional[pulumi.Input[str]] = None,
                 inference_attribute: Optional[pulumi.Input[str]] = None,
                 probability_attribute: Optional[pulumi.Input[str]] = None,
                 probability_threshold_attribute: Optional[pulumi.Input[float]] = None,
                 s3_data_distribution_type: Optional[pulumi.Input['ModelBiasJobDefinitionEndpointInputS3DataDistributionType']] = None,
                 s3_input_mode: Optional[pulumi.Input['ModelBiasJobDefinitionEndpointInputS3InputMode']] = None,
                 start_time_offset: Optional[pulumi.Input[str]] = None):
        """
        The endpoint for a monitoring job.
        :param pulumi.Input[str] local_path: Path to the filesystem where the endpoint data is available to the container.
        :param pulumi.Input[str] end_time_offset: Monitoring end time offset, e.g. PT0H
        :param pulumi.Input[str] features_attribute: JSONpath to locate features in JSONlines dataset
        :param pulumi.Input[str] inference_attribute: Index or JSONpath to locate predicted label(s)
        :param pulumi.Input[str] probability_attribute: Index or JSONpath to locate probabilities
        :param pulumi.Input['ModelBiasJobDefinitionEndpointInputS3DataDistributionType'] s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        :param pulumi.Input['ModelBiasJobDefinitionEndpointInputS3InputMode'] s3_input_mode: Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        :param pulumi.Input[str] start_time_offset: Monitoring start time offset, e.g. -PT1H
        """
        pulumi.set(__self__, "endpoint_name", endpoint_name)
        pulumi.set(__self__, "local_path", local_path)
        if end_time_offset is not None:
            pulumi.set(__self__, "end_time_offset", end_time_offset)
        if features_attribute is not None:
            pulumi.set(__self__, "features_attribute", features_attribute)
        if inference_attribute is not None:
            pulumi.set(__self__, "inference_attribute", inference_attribute)
        if probability_attribute is not None:
            pulumi.set(__self__, "probability_attribute", probability_attribute)
        if probability_threshold_attribute is not None:
            pulumi.set(__self__, "probability_threshold_attribute", probability_threshold_attribute)
        if s3_data_distribution_type is not None:
            pulumi.set(__self__, "s3_data_distribution_type", s3_data_distribution_type)
        if s3_input_mode is not None:
            pulumi.set(__self__, "s3_input_mode", s3_input_mode)
        if start_time_offset is not None:
            pulumi.set(__self__, "start_time_offset", start_time_offset)

    @property
    @pulumi.getter(name="endpointName")
    def endpoint_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "endpoint_name")

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

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        Path to the filesystem where the endpoint data is available to the container.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="endTimeOffset")
    def end_time_offset(self) -> Optional[pulumi.Input[str]]:
        """
        Monitoring end time offset, e.g. PT0H
        """
        return pulumi.get(self, "end_time_offset")

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

    @property
    @pulumi.getter(name="featuresAttribute")
    def features_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        JSONpath to locate features in JSONlines dataset
        """
        return pulumi.get(self, "features_attribute")

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

    @property
    @pulumi.getter(name="inferenceAttribute")
    def inference_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        Index or JSONpath to locate predicted label(s)
        """
        return pulumi.get(self, "inference_attribute")

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

    @property
    @pulumi.getter(name="probabilityAttribute")
    def probability_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        Index or JSONpath to locate probabilities
        """
        return pulumi.get(self, "probability_attribute")

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

    @property
    @pulumi.getter(name="probabilityThresholdAttribute")
    def probability_threshold_attribute(self) -> Optional[pulumi.Input[float]]:
        return pulumi.get(self, "probability_threshold_attribute")

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

    @property
    @pulumi.getter(name="s3DataDistributionType")
    def s3_data_distribution_type(self) -> Optional[pulumi.Input['ModelBiasJobDefinitionEndpointInputS3DataDistributionType']]:
        """
        Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        """
        return pulumi.get(self, "s3_data_distribution_type")

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

    @property
    @pulumi.getter(name="s3InputMode")
    def s3_input_mode(self) -> Optional[pulumi.Input['ModelBiasJobDefinitionEndpointInputS3InputMode']]:
        """
        Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        return pulumi.get(self, "s3_input_mode")

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

    @property
    @pulumi.getter(name="startTimeOffset")
    def start_time_offset(self) -> Optional[pulumi.Input[str]]:
        """
        Monitoring start time offset, e.g. -PT1H
        """
        return pulumi.get(self, "start_time_offset")

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


@pulumi.input_type
class ModelBiasJobDefinitionModelBiasAppSpecificationArgs:
    def __init__(__self__, *,
                 config_uri: pulumi.Input[str],
                 image_uri: pulumi.Input[str],
                 environment: Optional[Any] = None):
        """
        Container image configuration object for the monitoring job.
        :param pulumi.Input[str] config_uri: The S3 URI to an analysis configuration file
        :param pulumi.Input[str] image_uri: The container image to be run by the monitoring job.
        :param Any environment: Sets the environment variables in the Docker container
        """
        pulumi.set(__self__, "config_uri", config_uri)
        pulumi.set(__self__, "image_uri", image_uri)
        if environment is not None:
            pulumi.set(__self__, "environment", environment)

    @property
    @pulumi.getter(name="configUri")
    def config_uri(self) -> pulumi.Input[str]:
        """
        The S3 URI to an analysis configuration file
        """
        return pulumi.get(self, "config_uri")

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

    @property
    @pulumi.getter(name="imageUri")
    def image_uri(self) -> pulumi.Input[str]:
        """
        The container image to be run by the monitoring job.
        """
        return pulumi.get(self, "image_uri")

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

    @property
    @pulumi.getter
    def environment(self) -> Optional[Any]:
        """
        Sets the environment variables in the Docker container
        """
        return pulumi.get(self, "environment")

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


@pulumi.input_type
class ModelBiasJobDefinitionModelBiasBaselineConfigArgs:
    def __init__(__self__, *,
                 baselining_job_name: Optional[pulumi.Input[str]] = None,
                 constraints_resource: Optional[pulumi.Input['ModelBiasJobDefinitionConstraintsResourceArgs']] = None):
        """
        Baseline configuration used to validate that the data conforms to the specified constraints and statistics.
        """
        if baselining_job_name is not None:
            pulumi.set(__self__, "baselining_job_name", baselining_job_name)
        if constraints_resource is not None:
            pulumi.set(__self__, "constraints_resource", constraints_resource)

    @property
    @pulumi.getter(name="baseliningJobName")
    def baselining_job_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "baselining_job_name")

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

    @property
    @pulumi.getter(name="constraintsResource")
    def constraints_resource(self) -> Optional[pulumi.Input['ModelBiasJobDefinitionConstraintsResourceArgs']]:
        return pulumi.get(self, "constraints_resource")

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


@pulumi.input_type
class ModelBiasJobDefinitionModelBiasJobInputArgs:
    def __init__(__self__, *,
                 endpoint_input: pulumi.Input['ModelBiasJobDefinitionEndpointInputArgs'],
                 ground_truth_s3_input: pulumi.Input['ModelBiasJobDefinitionMonitoringGroundTruthS3InputArgs']):
        """
        The inputs for a monitoring job.
        """
        pulumi.set(__self__, "endpoint_input", endpoint_input)
        pulumi.set(__self__, "ground_truth_s3_input", ground_truth_s3_input)

    @property
    @pulumi.getter(name="endpointInput")
    def endpoint_input(self) -> pulumi.Input['ModelBiasJobDefinitionEndpointInputArgs']:
        return pulumi.get(self, "endpoint_input")

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

    @property
    @pulumi.getter(name="groundTruthS3Input")
    def ground_truth_s3_input(self) -> pulumi.Input['ModelBiasJobDefinitionMonitoringGroundTruthS3InputArgs']:
        return pulumi.get(self, "ground_truth_s3_input")

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


@pulumi.input_type
class ModelBiasJobDefinitionMonitoringGroundTruthS3InputArgs:
    def __init__(__self__, *,
                 s3_uri: pulumi.Input[str]):
        """
        Ground truth input provided in S3 
        :param pulumi.Input[str] s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> pulumi.Input[str]:
        """
        A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class ModelBiasJobDefinitionMonitoringOutputConfigArgs:
    def __init__(__self__, *,
                 monitoring_outputs: pulumi.Input[Sequence[pulumi.Input['ModelBiasJobDefinitionMonitoringOutputArgs']]],
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        The output configuration for monitoring jobs.
        :param pulumi.Input[Sequence[pulumi.Input['ModelBiasJobDefinitionMonitoringOutputArgs']]] monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        :param pulumi.Input[str] kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        pulumi.set(__self__, "monitoring_outputs", monitoring_outputs)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="monitoringOutputs")
    def monitoring_outputs(self) -> pulumi.Input[Sequence[pulumi.Input['ModelBiasJobDefinitionMonitoringOutputArgs']]]:
        """
        Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        """
        return pulumi.get(self, "monitoring_outputs")

    @monitoring_outputs.setter
    def monitoring_outputs(self, value: pulumi.Input[Sequence[pulumi.Input['ModelBiasJobDefinitionMonitoringOutputArgs']]]):
        pulumi.set(self, "monitoring_outputs", value)

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        return pulumi.get(self, "kms_key_id")

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


@pulumi.input_type
class ModelBiasJobDefinitionMonitoringOutputArgs:
    def __init__(__self__, *,
                 s3_output: pulumi.Input['ModelBiasJobDefinitionS3OutputArgs']):
        """
        The output object for a monitoring job.
        """
        pulumi.set(__self__, "s3_output", s3_output)

    @property
    @pulumi.getter(name="s3Output")
    def s3_output(self) -> pulumi.Input['ModelBiasJobDefinitionS3OutputArgs']:
        return pulumi.get(self, "s3_output")

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


@pulumi.input_type
class ModelBiasJobDefinitionMonitoringResourcesArgs:
    def __init__(__self__, *,
                 cluster_config: pulumi.Input['ModelBiasJobDefinitionClusterConfigArgs']):
        """
        Identifies the resources to deploy for a monitoring job.
        """
        pulumi.set(__self__, "cluster_config", cluster_config)

    @property
    @pulumi.getter(name="clusterConfig")
    def cluster_config(self) -> pulumi.Input['ModelBiasJobDefinitionClusterConfigArgs']:
        return pulumi.get(self, "cluster_config")

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


@pulumi.input_type
class ModelBiasJobDefinitionNetworkConfigArgs:
    def __init__(__self__, *,
                 enable_inter_container_traffic_encryption: Optional[pulumi.Input[bool]] = None,
                 enable_network_isolation: Optional[pulumi.Input[bool]] = None,
                 vpc_config: Optional[pulumi.Input['ModelBiasJobDefinitionVpcConfigArgs']] = None):
        """
        Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.
        :param pulumi.Input[bool] enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        :param pulumi.Input[bool] enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        if enable_inter_container_traffic_encryption is not None:
            pulumi.set(__self__, "enable_inter_container_traffic_encryption", enable_inter_container_traffic_encryption)
        if enable_network_isolation is not None:
            pulumi.set(__self__, "enable_network_isolation", enable_network_isolation)
        if vpc_config is not None:
            pulumi.set(__self__, "vpc_config", vpc_config)

    @property
    @pulumi.getter(name="enableInterContainerTrafficEncryption")
    def enable_inter_container_traffic_encryption(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        """
        return pulumi.get(self, "enable_inter_container_traffic_encryption")

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

    @property
    @pulumi.getter(name="enableNetworkIsolation")
    def enable_network_isolation(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        return pulumi.get(self, "enable_network_isolation")

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

    @property
    @pulumi.getter(name="vpcConfig")
    def vpc_config(self) -> Optional[pulumi.Input['ModelBiasJobDefinitionVpcConfigArgs']]:
        return pulumi.get(self, "vpc_config")

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


@pulumi.input_type
class ModelBiasJobDefinitionS3OutputArgs:
    def __init__(__self__, *,
                 local_path: pulumi.Input[str],
                 s3_uri: pulumi.Input[str],
                 s3_upload_mode: Optional[pulumi.Input['ModelBiasJobDefinitionS3OutputS3UploadMode']] = None):
        """
        Information about where and how to store the results of a monitoring job.
        :param pulumi.Input[str] local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        :param pulumi.Input[str] s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        :param pulumi.Input['ModelBiasJobDefinitionS3OutputS3UploadMode'] s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        pulumi.set(__self__, "local_path", local_path)
        pulumi.set(__self__, "s3_uri", s3_uri)
        if s3_upload_mode is not None:
            pulumi.set(__self__, "s3_upload_mode", s3_upload_mode)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> pulumi.Input[str]:
        """
        A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        return pulumi.get(self, "s3_uri")

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

    @property
    @pulumi.getter(name="s3UploadMode")
    def s3_upload_mode(self) -> Optional[pulumi.Input['ModelBiasJobDefinitionS3OutputS3UploadMode']]:
        """
        Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        return pulumi.get(self, "s3_upload_mode")

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


@pulumi.input_type
class ModelBiasJobDefinitionStoppingConditionArgs:
    def __init__(__self__, *,
                 max_runtime_in_seconds: pulumi.Input[int]):
        """
        Specifies a time limit for how long the monitoring job is allowed to run.
        :param pulumi.Input[int] max_runtime_in_seconds: The maximum runtime allowed in seconds.
        """
        pulumi.set(__self__, "max_runtime_in_seconds", max_runtime_in_seconds)

    @property
    @pulumi.getter(name="maxRuntimeInSeconds")
    def max_runtime_in_seconds(self) -> pulumi.Input[int]:
        """
        The maximum runtime allowed in seconds.
        """
        return pulumi.get(self, "max_runtime_in_seconds")

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


@pulumi.input_type
class ModelBiasJobDefinitionTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ModelBiasJobDefinitionVpcConfigArgs:
    def __init__(__self__, *,
                 security_group_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subnets: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_group_ids: The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subnets: The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        pulumi.set(__self__, "subnets", subnets)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        """
        return pulumi.get(self, "security_group_ids")

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

    @property
    @pulumi.getter
    def subnets(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        return pulumi.get(self, "subnets")

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


@pulumi.input_type
class ModelContainerDefinitionArgs:
    def __init__(__self__, *,
                 container_hostname: Optional[pulumi.Input[str]] = None,
                 environment: Optional[Any] = None,
                 image: Optional[pulumi.Input[str]] = None,
                 image_config: Optional[pulumi.Input['ModelImageConfigArgs']] = None,
                 mode: Optional[pulumi.Input[str]] = None,
                 model_data_url: Optional[pulumi.Input[str]] = None,
                 model_package_name: Optional[pulumi.Input[str]] = None,
                 multi_model_config: Optional[pulumi.Input['ModelMultiModelConfigArgs']] = None):
        if container_hostname is not None:
            pulumi.set(__self__, "container_hostname", container_hostname)
        if environment is not None:
            pulumi.set(__self__, "environment", environment)
        if image is not None:
            pulumi.set(__self__, "image", image)
        if image_config is not None:
            pulumi.set(__self__, "image_config", image_config)
        if mode is not None:
            pulumi.set(__self__, "mode", mode)
        if model_data_url is not None:
            pulumi.set(__self__, "model_data_url", model_data_url)
        if model_package_name is not None:
            pulumi.set(__self__, "model_package_name", model_package_name)
        if multi_model_config is not None:
            pulumi.set(__self__, "multi_model_config", multi_model_config)

    @property
    @pulumi.getter(name="containerHostname")
    def container_hostname(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "container_hostname")

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

    @property
    @pulumi.getter
    def environment(self) -> Optional[Any]:
        return pulumi.get(self, "environment")

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

    @property
    @pulumi.getter
    def image(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "image")

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

    @property
    @pulumi.getter(name="imageConfig")
    def image_config(self) -> Optional[pulumi.Input['ModelImageConfigArgs']]:
        return pulumi.get(self, "image_config")

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

    @property
    @pulumi.getter
    def mode(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "mode")

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

    @property
    @pulumi.getter(name="modelDataUrl")
    def model_data_url(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "model_data_url")

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

    @property
    @pulumi.getter(name="modelPackageName")
    def model_package_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "model_package_name")

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

    @property
    @pulumi.getter(name="multiModelConfig")
    def multi_model_config(self) -> Optional[pulumi.Input['ModelMultiModelConfigArgs']]:
        return pulumi.get(self, "multi_model_config")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionClusterConfigArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 instance_type: pulumi.Input[str],
                 volume_size_in_gb: pulumi.Input[int],
                 volume_kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        Configuration for the cluster used to run model monitoring jobs.
        :param pulumi.Input[int] instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        :param pulumi.Input[str] instance_type: The ML compute instance type for the processing job.
        :param pulumi.Input[int] volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        :param pulumi.Input[str] volume_kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "volume_size_in_gb", volume_size_in_gb)
        if volume_kms_key_id is not None:
            pulumi.set(__self__, "volume_kms_key_id", volume_kms_key_id)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> pulumi.Input[int]:
        """
        The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        """
        return pulumi.get(self, "instance_count")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[str]:
        """
        The ML compute instance type for the processing job.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="volumeSizeInGB")
    def volume_size_in_gb(self) -> pulumi.Input[int]:
        """
        The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        """
        return pulumi.get(self, "volume_size_in_gb")

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

    @property
    @pulumi.getter(name="volumeKmsKeyId")
    def volume_kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        return pulumi.get(self, "volume_kms_key_id")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionConstraintsResourceArgs:
    def __init__(__self__, *,
                 s3_uri: Optional[pulumi.Input[str]] = None):
        """
        The baseline constraints resource for a monitoring job.
        :param pulumi.Input[str] s3_uri: The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        if s3_uri is not None:
            pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionEndpointInputArgs:
    def __init__(__self__, *,
                 endpoint_name: pulumi.Input[str],
                 local_path: pulumi.Input[str],
                 features_attribute: Optional[pulumi.Input[str]] = None,
                 inference_attribute: Optional[pulumi.Input[str]] = None,
                 probability_attribute: Optional[pulumi.Input[str]] = None,
                 s3_data_distribution_type: Optional[pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputS3DataDistributionType']] = None,
                 s3_input_mode: Optional[pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputS3InputMode']] = None):
        """
        The endpoint for a monitoring job.
        :param pulumi.Input[str] local_path: Path to the filesystem where the endpoint data is available to the container.
        :param pulumi.Input[str] features_attribute: JSONpath to locate features in JSONlines dataset
        :param pulumi.Input[str] inference_attribute: Index or JSONpath to locate predicted label(s)
        :param pulumi.Input[str] probability_attribute: Index or JSONpath to locate probabilities
        :param pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputS3DataDistributionType'] s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        :param pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputS3InputMode'] s3_input_mode: Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        pulumi.set(__self__, "endpoint_name", endpoint_name)
        pulumi.set(__self__, "local_path", local_path)
        if features_attribute is not None:
            pulumi.set(__self__, "features_attribute", features_attribute)
        if inference_attribute is not None:
            pulumi.set(__self__, "inference_attribute", inference_attribute)
        if probability_attribute is not None:
            pulumi.set(__self__, "probability_attribute", probability_attribute)
        if s3_data_distribution_type is not None:
            pulumi.set(__self__, "s3_data_distribution_type", s3_data_distribution_type)
        if s3_input_mode is not None:
            pulumi.set(__self__, "s3_input_mode", s3_input_mode)

    @property
    @pulumi.getter(name="endpointName")
    def endpoint_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "endpoint_name")

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

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        Path to the filesystem where the endpoint data is available to the container.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="featuresAttribute")
    def features_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        JSONpath to locate features in JSONlines dataset
        """
        return pulumi.get(self, "features_attribute")

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

    @property
    @pulumi.getter(name="inferenceAttribute")
    def inference_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        Index or JSONpath to locate predicted label(s)
        """
        return pulumi.get(self, "inference_attribute")

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

    @property
    @pulumi.getter(name="probabilityAttribute")
    def probability_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        Index or JSONpath to locate probabilities
        """
        return pulumi.get(self, "probability_attribute")

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

    @property
    @pulumi.getter(name="s3DataDistributionType")
    def s3_data_distribution_type(self) -> Optional[pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputS3DataDistributionType']]:
        """
        Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        """
        return pulumi.get(self, "s3_data_distribution_type")

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

    @property
    @pulumi.getter(name="s3InputMode")
    def s3_input_mode(self) -> Optional[pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputS3InputMode']]:
        """
        Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        return pulumi.get(self, "s3_input_mode")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionModelExplainabilityAppSpecificationArgs:
    def __init__(__self__, *,
                 config_uri: pulumi.Input[str],
                 image_uri: pulumi.Input[str],
                 environment: Optional[Any] = None):
        """
        Container image configuration object for the monitoring job.
        :param pulumi.Input[str] config_uri: The S3 URI to an analysis configuration file
        :param pulumi.Input[str] image_uri: The container image to be run by the monitoring job.
        :param Any environment: Sets the environment variables in the Docker container
        """
        pulumi.set(__self__, "config_uri", config_uri)
        pulumi.set(__self__, "image_uri", image_uri)
        if environment is not None:
            pulumi.set(__self__, "environment", environment)

    @property
    @pulumi.getter(name="configUri")
    def config_uri(self) -> pulumi.Input[str]:
        """
        The S3 URI to an analysis configuration file
        """
        return pulumi.get(self, "config_uri")

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

    @property
    @pulumi.getter(name="imageUri")
    def image_uri(self) -> pulumi.Input[str]:
        """
        The container image to be run by the monitoring job.
        """
        return pulumi.get(self, "image_uri")

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

    @property
    @pulumi.getter
    def environment(self) -> Optional[Any]:
        """
        Sets the environment variables in the Docker container
        """
        return pulumi.get(self, "environment")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionModelExplainabilityBaselineConfigArgs:
    def __init__(__self__, *,
                 baselining_job_name: Optional[pulumi.Input[str]] = None,
                 constraints_resource: Optional[pulumi.Input['ModelExplainabilityJobDefinitionConstraintsResourceArgs']] = None):
        """
        Baseline configuration used to validate that the data conforms to the specified constraints and statistics.
        """
        if baselining_job_name is not None:
            pulumi.set(__self__, "baselining_job_name", baselining_job_name)
        if constraints_resource is not None:
            pulumi.set(__self__, "constraints_resource", constraints_resource)

    @property
    @pulumi.getter(name="baseliningJobName")
    def baselining_job_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "baselining_job_name")

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

    @property
    @pulumi.getter(name="constraintsResource")
    def constraints_resource(self) -> Optional[pulumi.Input['ModelExplainabilityJobDefinitionConstraintsResourceArgs']]:
        return pulumi.get(self, "constraints_resource")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionModelExplainabilityJobInputArgs:
    def __init__(__self__, *,
                 endpoint_input: pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputArgs']):
        """
        The inputs for a monitoring job.
        """
        pulumi.set(__self__, "endpoint_input", endpoint_input)

    @property
    @pulumi.getter(name="endpointInput")
    def endpoint_input(self) -> pulumi.Input['ModelExplainabilityJobDefinitionEndpointInputArgs']:
        return pulumi.get(self, "endpoint_input")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionMonitoringOutputConfigArgs:
    def __init__(__self__, *,
                 monitoring_outputs: pulumi.Input[Sequence[pulumi.Input['ModelExplainabilityJobDefinitionMonitoringOutputArgs']]],
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        The output configuration for monitoring jobs.
        :param pulumi.Input[Sequence[pulumi.Input['ModelExplainabilityJobDefinitionMonitoringOutputArgs']]] monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        :param pulumi.Input[str] kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        pulumi.set(__self__, "monitoring_outputs", monitoring_outputs)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="monitoringOutputs")
    def monitoring_outputs(self) -> pulumi.Input[Sequence[pulumi.Input['ModelExplainabilityJobDefinitionMonitoringOutputArgs']]]:
        """
        Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        """
        return pulumi.get(self, "monitoring_outputs")

    @monitoring_outputs.setter
    def monitoring_outputs(self, value: pulumi.Input[Sequence[pulumi.Input['ModelExplainabilityJobDefinitionMonitoringOutputArgs']]]):
        pulumi.set(self, "monitoring_outputs", value)

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        return pulumi.get(self, "kms_key_id")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionMonitoringOutputArgs:
    def __init__(__self__, *,
                 s3_output: pulumi.Input['ModelExplainabilityJobDefinitionS3OutputArgs']):
        """
        The output object for a monitoring job.
        """
        pulumi.set(__self__, "s3_output", s3_output)

    @property
    @pulumi.getter(name="s3Output")
    def s3_output(self) -> pulumi.Input['ModelExplainabilityJobDefinitionS3OutputArgs']:
        return pulumi.get(self, "s3_output")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionMonitoringResourcesArgs:
    def __init__(__self__, *,
                 cluster_config: pulumi.Input['ModelExplainabilityJobDefinitionClusterConfigArgs']):
        """
        Identifies the resources to deploy for a monitoring job.
        """
        pulumi.set(__self__, "cluster_config", cluster_config)

    @property
    @pulumi.getter(name="clusterConfig")
    def cluster_config(self) -> pulumi.Input['ModelExplainabilityJobDefinitionClusterConfigArgs']:
        return pulumi.get(self, "cluster_config")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionNetworkConfigArgs:
    def __init__(__self__, *,
                 enable_inter_container_traffic_encryption: Optional[pulumi.Input[bool]] = None,
                 enable_network_isolation: Optional[pulumi.Input[bool]] = None,
                 vpc_config: Optional[pulumi.Input['ModelExplainabilityJobDefinitionVpcConfigArgs']] = None):
        """
        Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.
        :param pulumi.Input[bool] enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        :param pulumi.Input[bool] enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        if enable_inter_container_traffic_encryption is not None:
            pulumi.set(__self__, "enable_inter_container_traffic_encryption", enable_inter_container_traffic_encryption)
        if enable_network_isolation is not None:
            pulumi.set(__self__, "enable_network_isolation", enable_network_isolation)
        if vpc_config is not None:
            pulumi.set(__self__, "vpc_config", vpc_config)

    @property
    @pulumi.getter(name="enableInterContainerTrafficEncryption")
    def enable_inter_container_traffic_encryption(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        """
        return pulumi.get(self, "enable_inter_container_traffic_encryption")

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

    @property
    @pulumi.getter(name="enableNetworkIsolation")
    def enable_network_isolation(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        return pulumi.get(self, "enable_network_isolation")

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

    @property
    @pulumi.getter(name="vpcConfig")
    def vpc_config(self) -> Optional[pulumi.Input['ModelExplainabilityJobDefinitionVpcConfigArgs']]:
        return pulumi.get(self, "vpc_config")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionS3OutputArgs:
    def __init__(__self__, *,
                 local_path: pulumi.Input[str],
                 s3_uri: pulumi.Input[str],
                 s3_upload_mode: Optional[pulumi.Input['ModelExplainabilityJobDefinitionS3OutputS3UploadMode']] = None):
        """
        Information about where and how to store the results of a monitoring job.
        :param pulumi.Input[str] local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        :param pulumi.Input[str] s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        :param pulumi.Input['ModelExplainabilityJobDefinitionS3OutputS3UploadMode'] s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        pulumi.set(__self__, "local_path", local_path)
        pulumi.set(__self__, "s3_uri", s3_uri)
        if s3_upload_mode is not None:
            pulumi.set(__self__, "s3_upload_mode", s3_upload_mode)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> pulumi.Input[str]:
        """
        A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        return pulumi.get(self, "s3_uri")

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

    @property
    @pulumi.getter(name="s3UploadMode")
    def s3_upload_mode(self) -> Optional[pulumi.Input['ModelExplainabilityJobDefinitionS3OutputS3UploadMode']]:
        """
        Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        return pulumi.get(self, "s3_upload_mode")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionStoppingConditionArgs:
    def __init__(__self__, *,
                 max_runtime_in_seconds: pulumi.Input[int]):
        """
        Specifies a time limit for how long the monitoring job is allowed to run.
        :param pulumi.Input[int] max_runtime_in_seconds: The maximum runtime allowed in seconds.
        """
        pulumi.set(__self__, "max_runtime_in_seconds", max_runtime_in_seconds)

    @property
    @pulumi.getter(name="maxRuntimeInSeconds")
    def max_runtime_in_seconds(self) -> pulumi.Input[int]:
        """
        The maximum runtime allowed in seconds.
        """
        return pulumi.get(self, "max_runtime_in_seconds")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ModelExplainabilityJobDefinitionVpcConfigArgs:
    def __init__(__self__, *,
                 security_group_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subnets: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_group_ids: The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subnets: The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        pulumi.set(__self__, "subnets", subnets)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        """
        return pulumi.get(self, "security_group_ids")

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

    @property
    @pulumi.getter
    def subnets(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        return pulumi.get(self, "subnets")

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


@pulumi.input_type
class ModelImageConfigArgs:
    def __init__(__self__, *,
                 repository_access_mode: pulumi.Input[str],
                 repository_auth_config: Optional[pulumi.Input['ModelRepositoryAuthConfigArgs']] = None):
        pulumi.set(__self__, "repository_access_mode", repository_access_mode)
        if repository_auth_config is not None:
            pulumi.set(__self__, "repository_auth_config", repository_auth_config)

    @property
    @pulumi.getter(name="repositoryAccessMode")
    def repository_access_mode(self) -> pulumi.Input[str]:
        return pulumi.get(self, "repository_access_mode")

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

    @property
    @pulumi.getter(name="repositoryAuthConfig")
    def repository_auth_config(self) -> Optional[pulumi.Input['ModelRepositoryAuthConfigArgs']]:
        return pulumi.get(self, "repository_auth_config")

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


@pulumi.input_type
class ModelInferenceExecutionConfigArgs:
    def __init__(__self__, *,
                 mode: pulumi.Input[str]):
        pulumi.set(__self__, "mode", mode)

    @property
    @pulumi.getter
    def mode(self) -> pulumi.Input[str]:
        return pulumi.get(self, "mode")

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


@pulumi.input_type
class ModelMultiModelConfigArgs:
    def __init__(__self__, *,
                 model_cache_setting: Optional[pulumi.Input[str]] = None):
        if model_cache_setting is not None:
            pulumi.set(__self__, "model_cache_setting", model_cache_setting)

    @property
    @pulumi.getter(name="modelCacheSetting")
    def model_cache_setting(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "model_cache_setting")

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


@pulumi.input_type
class ModelPackageGroupTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ModelQualityJobDefinitionClusterConfigArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 instance_type: pulumi.Input[str],
                 volume_size_in_gb: pulumi.Input[int],
                 volume_kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        Configuration for the cluster used to run model monitoring jobs.
        :param pulumi.Input[int] instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        :param pulumi.Input[str] instance_type: The ML compute instance type for the processing job.
        :param pulumi.Input[int] volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        :param pulumi.Input[str] volume_kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "volume_size_in_gb", volume_size_in_gb)
        if volume_kms_key_id is not None:
            pulumi.set(__self__, "volume_kms_key_id", volume_kms_key_id)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> pulumi.Input[int]:
        """
        The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        """
        return pulumi.get(self, "instance_count")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[str]:
        """
        The ML compute instance type for the processing job.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="volumeSizeInGB")
    def volume_size_in_gb(self) -> pulumi.Input[int]:
        """
        The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        """
        return pulumi.get(self, "volume_size_in_gb")

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

    @property
    @pulumi.getter(name="volumeKmsKeyId")
    def volume_kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        return pulumi.get(self, "volume_kms_key_id")

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


@pulumi.input_type
class ModelQualityJobDefinitionConstraintsResourceArgs:
    def __init__(__self__, *,
                 s3_uri: Optional[pulumi.Input[str]] = None):
        """
        The baseline constraints resource for a monitoring job.
        :param pulumi.Input[str] s3_uri: The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        if s3_uri is not None:
            pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class ModelQualityJobDefinitionEndpointInputArgs:
    def __init__(__self__, *,
                 endpoint_name: pulumi.Input[str],
                 local_path: pulumi.Input[str],
                 end_time_offset: Optional[pulumi.Input[str]] = None,
                 inference_attribute: Optional[pulumi.Input[str]] = None,
                 probability_attribute: Optional[pulumi.Input[str]] = None,
                 probability_threshold_attribute: Optional[pulumi.Input[float]] = None,
                 s3_data_distribution_type: Optional[pulumi.Input['ModelQualityJobDefinitionEndpointInputS3DataDistributionType']] = None,
                 s3_input_mode: Optional[pulumi.Input['ModelQualityJobDefinitionEndpointInputS3InputMode']] = None,
                 start_time_offset: Optional[pulumi.Input[str]] = None):
        """
        The endpoint for a monitoring job.
        :param pulumi.Input[str] local_path: Path to the filesystem where the endpoint data is available to the container.
        :param pulumi.Input[str] end_time_offset: Monitoring end time offset, e.g. PT0H
        :param pulumi.Input[str] inference_attribute: Index or JSONpath to locate predicted label(s)
        :param pulumi.Input[str] probability_attribute: Index or JSONpath to locate probabilities
        :param pulumi.Input['ModelQualityJobDefinitionEndpointInputS3DataDistributionType'] s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        :param pulumi.Input['ModelQualityJobDefinitionEndpointInputS3InputMode'] s3_input_mode: Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        :param pulumi.Input[str] start_time_offset: Monitoring start time offset, e.g. -PT1H
        """
        pulumi.set(__self__, "endpoint_name", endpoint_name)
        pulumi.set(__self__, "local_path", local_path)
        if end_time_offset is not None:
            pulumi.set(__self__, "end_time_offset", end_time_offset)
        if inference_attribute is not None:
            pulumi.set(__self__, "inference_attribute", inference_attribute)
        if probability_attribute is not None:
            pulumi.set(__self__, "probability_attribute", probability_attribute)
        if probability_threshold_attribute is not None:
            pulumi.set(__self__, "probability_threshold_attribute", probability_threshold_attribute)
        if s3_data_distribution_type is not None:
            pulumi.set(__self__, "s3_data_distribution_type", s3_data_distribution_type)
        if s3_input_mode is not None:
            pulumi.set(__self__, "s3_input_mode", s3_input_mode)
        if start_time_offset is not None:
            pulumi.set(__self__, "start_time_offset", start_time_offset)

    @property
    @pulumi.getter(name="endpointName")
    def endpoint_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "endpoint_name")

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

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        Path to the filesystem where the endpoint data is available to the container.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="endTimeOffset")
    def end_time_offset(self) -> Optional[pulumi.Input[str]]:
        """
        Monitoring end time offset, e.g. PT0H
        """
        return pulumi.get(self, "end_time_offset")

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

    @property
    @pulumi.getter(name="inferenceAttribute")
    def inference_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        Index or JSONpath to locate predicted label(s)
        """
        return pulumi.get(self, "inference_attribute")

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

    @property
    @pulumi.getter(name="probabilityAttribute")
    def probability_attribute(self) -> Optional[pulumi.Input[str]]:
        """
        Index or JSONpath to locate probabilities
        """
        return pulumi.get(self, "probability_attribute")

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

    @property
    @pulumi.getter(name="probabilityThresholdAttribute")
    def probability_threshold_attribute(self) -> Optional[pulumi.Input[float]]:
        return pulumi.get(self, "probability_threshold_attribute")

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

    @property
    @pulumi.getter(name="s3DataDistributionType")
    def s3_data_distribution_type(self) -> Optional[pulumi.Input['ModelQualityJobDefinitionEndpointInputS3DataDistributionType']]:
        """
        Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        """
        return pulumi.get(self, "s3_data_distribution_type")

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

    @property
    @pulumi.getter(name="s3InputMode")
    def s3_input_mode(self) -> Optional[pulumi.Input['ModelQualityJobDefinitionEndpointInputS3InputMode']]:
        """
        Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        return pulumi.get(self, "s3_input_mode")

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

    @property
    @pulumi.getter(name="startTimeOffset")
    def start_time_offset(self) -> Optional[pulumi.Input[str]]:
        """
        Monitoring start time offset, e.g. -PT1H
        """
        return pulumi.get(self, "start_time_offset")

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


@pulumi.input_type
class ModelQualityJobDefinitionModelQualityAppSpecificationArgs:
    def __init__(__self__, *,
                 image_uri: pulumi.Input[str],
                 problem_type: pulumi.Input['ModelQualityJobDefinitionProblemType'],
                 container_arguments: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 container_entrypoint: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 environment: Optional[Any] = None,
                 post_analytics_processor_source_uri: Optional[pulumi.Input[str]] = None,
                 record_preprocessor_source_uri: Optional[pulumi.Input[str]] = None):
        """
        Container image configuration object for the monitoring job.
        :param pulumi.Input[str] image_uri: The container image to be run by the monitoring job.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] container_arguments: An array of arguments for the container used to run the monitoring job.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] container_entrypoint: Specifies the entrypoint for a container used to run the monitoring job.
        :param Any environment: Sets the environment variables in the Docker container
        :param pulumi.Input[str] post_analytics_processor_source_uri: An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
        :param pulumi.Input[str] record_preprocessor_source_uri: An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers
        """
        pulumi.set(__self__, "image_uri", image_uri)
        pulumi.set(__self__, "problem_type", problem_type)
        if container_arguments is not None:
            pulumi.set(__self__, "container_arguments", container_arguments)
        if container_entrypoint is not None:
            pulumi.set(__self__, "container_entrypoint", container_entrypoint)
        if environment is not None:
            pulumi.set(__self__, "environment", environment)
        if post_analytics_processor_source_uri is not None:
            pulumi.set(__self__, "post_analytics_processor_source_uri", post_analytics_processor_source_uri)
        if record_preprocessor_source_uri is not None:
            pulumi.set(__self__, "record_preprocessor_source_uri", record_preprocessor_source_uri)

    @property
    @pulumi.getter(name="imageUri")
    def image_uri(self) -> pulumi.Input[str]:
        """
        The container image to be run by the monitoring job.
        """
        return pulumi.get(self, "image_uri")

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

    @property
    @pulumi.getter(name="problemType")
    def problem_type(self) -> pulumi.Input['ModelQualityJobDefinitionProblemType']:
        return pulumi.get(self, "problem_type")

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

    @property
    @pulumi.getter(name="containerArguments")
    def container_arguments(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An array of arguments for the container used to run the monitoring job.
        """
        return pulumi.get(self, "container_arguments")

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

    @property
    @pulumi.getter(name="containerEntrypoint")
    def container_entrypoint(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies the entrypoint for a container used to run the monitoring job.
        """
        return pulumi.get(self, "container_entrypoint")

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

    @property
    @pulumi.getter
    def environment(self) -> Optional[Any]:
        """
        Sets the environment variables in the Docker container
        """
        return pulumi.get(self, "environment")

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

    @property
    @pulumi.getter(name="postAnalyticsProcessorSourceUri")
    def post_analytics_processor_source_uri(self) -> Optional[pulumi.Input[str]]:
        """
        An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
        """
        return pulumi.get(self, "post_analytics_processor_source_uri")

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

    @property
    @pulumi.getter(name="recordPreprocessorSourceUri")
    def record_preprocessor_source_uri(self) -> Optional[pulumi.Input[str]]:
        """
        An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers
        """
        return pulumi.get(self, "record_preprocessor_source_uri")

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


@pulumi.input_type
class ModelQualityJobDefinitionModelQualityBaselineConfigArgs:
    def __init__(__self__, *,
                 baselining_job_name: Optional[pulumi.Input[str]] = None,
                 constraints_resource: Optional[pulumi.Input['ModelQualityJobDefinitionConstraintsResourceArgs']] = None):
        """
        Baseline configuration used to validate that the data conforms to the specified constraints and statistics.
        """
        if baselining_job_name is not None:
            pulumi.set(__self__, "baselining_job_name", baselining_job_name)
        if constraints_resource is not None:
            pulumi.set(__self__, "constraints_resource", constraints_resource)

    @property
    @pulumi.getter(name="baseliningJobName")
    def baselining_job_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "baselining_job_name")

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

    @property
    @pulumi.getter(name="constraintsResource")
    def constraints_resource(self) -> Optional[pulumi.Input['ModelQualityJobDefinitionConstraintsResourceArgs']]:
        return pulumi.get(self, "constraints_resource")

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


@pulumi.input_type
class ModelQualityJobDefinitionModelQualityJobInputArgs:
    def __init__(__self__, *,
                 endpoint_input: pulumi.Input['ModelQualityJobDefinitionEndpointInputArgs'],
                 ground_truth_s3_input: pulumi.Input['ModelQualityJobDefinitionMonitoringGroundTruthS3InputArgs']):
        """
        The inputs for a monitoring job.
        """
        pulumi.set(__self__, "endpoint_input", endpoint_input)
        pulumi.set(__self__, "ground_truth_s3_input", ground_truth_s3_input)

    @property
    @pulumi.getter(name="endpointInput")
    def endpoint_input(self) -> pulumi.Input['ModelQualityJobDefinitionEndpointInputArgs']:
        return pulumi.get(self, "endpoint_input")

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

    @property
    @pulumi.getter(name="groundTruthS3Input")
    def ground_truth_s3_input(self) -> pulumi.Input['ModelQualityJobDefinitionMonitoringGroundTruthS3InputArgs']:
        return pulumi.get(self, "ground_truth_s3_input")

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


@pulumi.input_type
class ModelQualityJobDefinitionMonitoringGroundTruthS3InputArgs:
    def __init__(__self__, *,
                 s3_uri: pulumi.Input[str]):
        """
        Ground truth input provided in S3 
        :param pulumi.Input[str] s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> pulumi.Input[str]:
        """
        A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class ModelQualityJobDefinitionMonitoringOutputConfigArgs:
    def __init__(__self__, *,
                 monitoring_outputs: pulumi.Input[Sequence[pulumi.Input['ModelQualityJobDefinitionMonitoringOutputArgs']]],
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        The output configuration for monitoring jobs.
        :param pulumi.Input[Sequence[pulumi.Input['ModelQualityJobDefinitionMonitoringOutputArgs']]] monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        :param pulumi.Input[str] kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        pulumi.set(__self__, "monitoring_outputs", monitoring_outputs)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="monitoringOutputs")
    def monitoring_outputs(self) -> pulumi.Input[Sequence[pulumi.Input['ModelQualityJobDefinitionMonitoringOutputArgs']]]:
        """
        Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        """
        return pulumi.get(self, "monitoring_outputs")

    @monitoring_outputs.setter
    def monitoring_outputs(self, value: pulumi.Input[Sequence[pulumi.Input['ModelQualityJobDefinitionMonitoringOutputArgs']]]):
        pulumi.set(self, "monitoring_outputs", value)

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        return pulumi.get(self, "kms_key_id")

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


@pulumi.input_type
class ModelQualityJobDefinitionMonitoringOutputArgs:
    def __init__(__self__, *,
                 s3_output: pulumi.Input['ModelQualityJobDefinitionS3OutputArgs']):
        """
        The output object for a monitoring job.
        """
        pulumi.set(__self__, "s3_output", s3_output)

    @property
    @pulumi.getter(name="s3Output")
    def s3_output(self) -> pulumi.Input['ModelQualityJobDefinitionS3OutputArgs']:
        return pulumi.get(self, "s3_output")

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


@pulumi.input_type
class ModelQualityJobDefinitionMonitoringResourcesArgs:
    def __init__(__self__, *,
                 cluster_config: pulumi.Input['ModelQualityJobDefinitionClusterConfigArgs']):
        """
        Identifies the resources to deploy for a monitoring job.
        """
        pulumi.set(__self__, "cluster_config", cluster_config)

    @property
    @pulumi.getter(name="clusterConfig")
    def cluster_config(self) -> pulumi.Input['ModelQualityJobDefinitionClusterConfigArgs']:
        return pulumi.get(self, "cluster_config")

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


@pulumi.input_type
class ModelQualityJobDefinitionNetworkConfigArgs:
    def __init__(__self__, *,
                 enable_inter_container_traffic_encryption: Optional[pulumi.Input[bool]] = None,
                 enable_network_isolation: Optional[pulumi.Input[bool]] = None,
                 vpc_config: Optional[pulumi.Input['ModelQualityJobDefinitionVpcConfigArgs']] = None):
        """
        Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.
        :param pulumi.Input[bool] enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        :param pulumi.Input[bool] enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        if enable_inter_container_traffic_encryption is not None:
            pulumi.set(__self__, "enable_inter_container_traffic_encryption", enable_inter_container_traffic_encryption)
        if enable_network_isolation is not None:
            pulumi.set(__self__, "enable_network_isolation", enable_network_isolation)
        if vpc_config is not None:
            pulumi.set(__self__, "vpc_config", vpc_config)

    @property
    @pulumi.getter(name="enableInterContainerTrafficEncryption")
    def enable_inter_container_traffic_encryption(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        """
        return pulumi.get(self, "enable_inter_container_traffic_encryption")

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

    @property
    @pulumi.getter(name="enableNetworkIsolation")
    def enable_network_isolation(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        return pulumi.get(self, "enable_network_isolation")

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

    @property
    @pulumi.getter(name="vpcConfig")
    def vpc_config(self) -> Optional[pulumi.Input['ModelQualityJobDefinitionVpcConfigArgs']]:
        return pulumi.get(self, "vpc_config")

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


@pulumi.input_type
class ModelQualityJobDefinitionS3OutputArgs:
    def __init__(__self__, *,
                 local_path: pulumi.Input[str],
                 s3_uri: pulumi.Input[str],
                 s3_upload_mode: Optional[pulumi.Input['ModelQualityJobDefinitionS3OutputS3UploadMode']] = None):
        """
        Information about where and how to store the results of a monitoring job.
        :param pulumi.Input[str] local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        :param pulumi.Input[str] s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        :param pulumi.Input['ModelQualityJobDefinitionS3OutputS3UploadMode'] s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        pulumi.set(__self__, "local_path", local_path)
        pulumi.set(__self__, "s3_uri", s3_uri)
        if s3_upload_mode is not None:
            pulumi.set(__self__, "s3_upload_mode", s3_upload_mode)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> pulumi.Input[str]:
        """
        A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        return pulumi.get(self, "s3_uri")

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

    @property
    @pulumi.getter(name="s3UploadMode")
    def s3_upload_mode(self) -> Optional[pulumi.Input['ModelQualityJobDefinitionS3OutputS3UploadMode']]:
        """
        Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        return pulumi.get(self, "s3_upload_mode")

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


@pulumi.input_type
class ModelQualityJobDefinitionStoppingConditionArgs:
    def __init__(__self__, *,
                 max_runtime_in_seconds: pulumi.Input[int]):
        """
        Specifies a time limit for how long the monitoring job is allowed to run.
        :param pulumi.Input[int] max_runtime_in_seconds: The maximum runtime allowed in seconds.
        """
        pulumi.set(__self__, "max_runtime_in_seconds", max_runtime_in_seconds)

    @property
    @pulumi.getter(name="maxRuntimeInSeconds")
    def max_runtime_in_seconds(self) -> pulumi.Input[int]:
        """
        The maximum runtime allowed in seconds.
        """
        return pulumi.get(self, "max_runtime_in_seconds")

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


@pulumi.input_type
class ModelQualityJobDefinitionTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ModelQualityJobDefinitionVpcConfigArgs:
    def __init__(__self__, *,
                 security_group_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subnets: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_group_ids: The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subnets: The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        pulumi.set(__self__, "subnets", subnets)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        """
        return pulumi.get(self, "security_group_ids")

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

    @property
    @pulumi.getter
    def subnets(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        return pulumi.get(self, "subnets")

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


@pulumi.input_type
class ModelRepositoryAuthConfigArgs:
    def __init__(__self__, *,
                 repository_credentials_provider_arn: pulumi.Input[str]):
        pulumi.set(__self__, "repository_credentials_provider_arn", repository_credentials_provider_arn)

    @property
    @pulumi.getter(name="repositoryCredentialsProviderArn")
    def repository_credentials_provider_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "repository_credentials_provider_arn")

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


@pulumi.input_type
class ModelTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ModelVpcConfigArgs:
    def __init__(__self__, *,
                 security_group_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subnets: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        pulumi.set(__self__, "subnets", subnets)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "security_group_ids")

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

    @property
    @pulumi.getter
    def subnets(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "subnets")

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


@pulumi.input_type
class MonitoringScheduleBaselineConfigArgs:
    def __init__(__self__, *,
                 constraints_resource: Optional[pulumi.Input['MonitoringScheduleConstraintsResourceArgs']] = None,
                 statistics_resource: Optional[pulumi.Input['MonitoringScheduleStatisticsResourceArgs']] = None):
        """
        Baseline configuration used to validate that the data conforms to the specified constraints and statistics.
        """
        if constraints_resource is not None:
            pulumi.set(__self__, "constraints_resource", constraints_resource)
        if statistics_resource is not None:
            pulumi.set(__self__, "statistics_resource", statistics_resource)

    @property
    @pulumi.getter(name="constraintsResource")
    def constraints_resource(self) -> Optional[pulumi.Input['MonitoringScheduleConstraintsResourceArgs']]:
        return pulumi.get(self, "constraints_resource")

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

    @property
    @pulumi.getter(name="statisticsResource")
    def statistics_resource(self) -> Optional[pulumi.Input['MonitoringScheduleStatisticsResourceArgs']]:
        return pulumi.get(self, "statistics_resource")

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


@pulumi.input_type
class MonitoringScheduleClusterConfigArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 instance_type: pulumi.Input[str],
                 volume_size_in_gb: pulumi.Input[int],
                 volume_kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        Configuration for the cluster used to run model monitoring jobs.
        :param pulumi.Input[int] instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        :param pulumi.Input[str] instance_type: The ML compute instance type for the processing job.
        :param pulumi.Input[int] volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        :param pulumi.Input[str] volume_kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "volume_size_in_gb", volume_size_in_gb)
        if volume_kms_key_id is not None:
            pulumi.set(__self__, "volume_kms_key_id", volume_kms_key_id)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> pulumi.Input[int]:
        """
        The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
        """
        return pulumi.get(self, "instance_count")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[str]:
        """
        The ML compute instance type for the processing job.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="volumeSizeInGB")
    def volume_size_in_gb(self) -> pulumi.Input[int]:
        """
        The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
        """
        return pulumi.get(self, "volume_size_in_gb")

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

    @property
    @pulumi.getter(name="volumeKmsKeyId")
    def volume_kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.
        """
        return pulumi.get(self, "volume_kms_key_id")

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


@pulumi.input_type
class MonitoringScheduleConstraintsResourceArgs:
    def __init__(__self__, *,
                 s3_uri: Optional[pulumi.Input[str]] = None):
        """
        The baseline constraints resource for a monitoring job.
        :param pulumi.Input[str] s3_uri: The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        if s3_uri is not None:
            pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class MonitoringScheduleEndpointInputArgs:
    def __init__(__self__, *,
                 endpoint_name: pulumi.Input[str],
                 local_path: pulumi.Input[str],
                 s3_data_distribution_type: Optional[pulumi.Input['MonitoringScheduleEndpointInputS3DataDistributionType']] = None,
                 s3_input_mode: Optional[pulumi.Input['MonitoringScheduleEndpointInputS3InputMode']] = None):
        """
        The endpoint for a monitoring job.
        :param pulumi.Input[str] local_path: Path to the filesystem where the endpoint data is available to the container.
        :param pulumi.Input['MonitoringScheduleEndpointInputS3DataDistributionType'] s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        :param pulumi.Input['MonitoringScheduleEndpointInputS3InputMode'] s3_input_mode: Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        pulumi.set(__self__, "endpoint_name", endpoint_name)
        pulumi.set(__self__, "local_path", local_path)
        if s3_data_distribution_type is not None:
            pulumi.set(__self__, "s3_data_distribution_type", s3_data_distribution_type)
        if s3_input_mode is not None:
            pulumi.set(__self__, "s3_input_mode", s3_input_mode)

    @property
    @pulumi.getter(name="endpointName")
    def endpoint_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "endpoint_name")

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

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        Path to the filesystem where the endpoint data is available to the container.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="s3DataDistributionType")
    def s3_data_distribution_type(self) -> Optional[pulumi.Input['MonitoringScheduleEndpointInputS3DataDistributionType']]:
        """
        Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated
        """
        return pulumi.get(self, "s3_data_distribution_type")

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

    @property
    @pulumi.getter(name="s3InputMode")
    def s3_input_mode(self) -> Optional[pulumi.Input['MonitoringScheduleEndpointInputS3InputMode']]:
        """
        Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.
        """
        return pulumi.get(self, "s3_input_mode")

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


@pulumi.input_type
class MonitoringScheduleMonitoringAppSpecificationArgs:
    def __init__(__self__, *,
                 image_uri: pulumi.Input[str],
                 container_arguments: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 container_entrypoint: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 post_analytics_processor_source_uri: Optional[pulumi.Input[str]] = None,
                 record_preprocessor_source_uri: Optional[pulumi.Input[str]] = None):
        """
        Container image configuration object for the monitoring job.
        :param pulumi.Input[str] image_uri: The container image to be run by the monitoring job.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] container_arguments: An array of arguments for the container used to run the monitoring job.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] container_entrypoint: Specifies the entrypoint for a container used to run the monitoring job.
        :param pulumi.Input[str] post_analytics_processor_source_uri: An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
        :param pulumi.Input[str] record_preprocessor_source_uri: An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers
        """
        pulumi.set(__self__, "image_uri", image_uri)
        if container_arguments is not None:
            pulumi.set(__self__, "container_arguments", container_arguments)
        if container_entrypoint is not None:
            pulumi.set(__self__, "container_entrypoint", container_entrypoint)
        if post_analytics_processor_source_uri is not None:
            pulumi.set(__self__, "post_analytics_processor_source_uri", post_analytics_processor_source_uri)
        if record_preprocessor_source_uri is not None:
            pulumi.set(__self__, "record_preprocessor_source_uri", record_preprocessor_source_uri)

    @property
    @pulumi.getter(name="imageUri")
    def image_uri(self) -> pulumi.Input[str]:
        """
        The container image to be run by the monitoring job.
        """
        return pulumi.get(self, "image_uri")

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

    @property
    @pulumi.getter(name="containerArguments")
    def container_arguments(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An array of arguments for the container used to run the monitoring job.
        """
        return pulumi.get(self, "container_arguments")

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

    @property
    @pulumi.getter(name="containerEntrypoint")
    def container_entrypoint(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies the entrypoint for a container used to run the monitoring job.
        """
        return pulumi.get(self, "container_entrypoint")

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

    @property
    @pulumi.getter(name="postAnalyticsProcessorSourceUri")
    def post_analytics_processor_source_uri(self) -> Optional[pulumi.Input[str]]:
        """
        An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
        """
        return pulumi.get(self, "post_analytics_processor_source_uri")

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

    @property
    @pulumi.getter(name="recordPreprocessorSourceUri")
    def record_preprocessor_source_uri(self) -> Optional[pulumi.Input[str]]:
        """
        An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers
        """
        return pulumi.get(self, "record_preprocessor_source_uri")

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


@pulumi.input_type
class MonitoringScheduleMonitoringExecutionSummaryArgs:
    def __init__(__self__, *,
                 creation_time: pulumi.Input[str],
                 last_modified_time: pulumi.Input[str],
                 monitoring_execution_status: pulumi.Input['MonitoringScheduleMonitoringExecutionSummaryMonitoringExecutionStatus'],
                 monitoring_schedule_name: pulumi.Input[str],
                 scheduled_time: pulumi.Input[str],
                 endpoint_name: Optional[pulumi.Input[str]] = None,
                 failure_reason: Optional[pulumi.Input[str]] = None,
                 processing_job_arn: Optional[pulumi.Input[str]] = None):
        """
        Summary of information about monitoring job
        :param pulumi.Input[str] creation_time: The time at which the monitoring job was created.
        :param pulumi.Input[str] last_modified_time: A timestamp that indicates the last time the monitoring job was modified.
        :param pulumi.Input['MonitoringScheduleMonitoringExecutionSummaryMonitoringExecutionStatus'] monitoring_execution_status: The status of the monitoring job.
        :param pulumi.Input[str] scheduled_time: The time the monitoring job was scheduled.
        :param pulumi.Input[str] failure_reason: Contains the reason a monitoring job failed, if it failed.
        :param pulumi.Input[str] processing_job_arn: The Amazon Resource Name (ARN) of the monitoring job.
        """
        pulumi.set(__self__, "creation_time", creation_time)
        pulumi.set(__self__, "last_modified_time", last_modified_time)
        pulumi.set(__self__, "monitoring_execution_status", monitoring_execution_status)
        pulumi.set(__self__, "monitoring_schedule_name", monitoring_schedule_name)
        pulumi.set(__self__, "scheduled_time", scheduled_time)
        if endpoint_name is not None:
            pulumi.set(__self__, "endpoint_name", endpoint_name)
        if failure_reason is not None:
            pulumi.set(__self__, "failure_reason", failure_reason)
        if processing_job_arn is not None:
            pulumi.set(__self__, "processing_job_arn", processing_job_arn)

    @property
    @pulumi.getter(name="creationTime")
    def creation_time(self) -> pulumi.Input[str]:
        """
        The time at which the monitoring job was created.
        """
        return pulumi.get(self, "creation_time")

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

    @property
    @pulumi.getter(name="lastModifiedTime")
    def last_modified_time(self) -> pulumi.Input[str]:
        """
        A timestamp that indicates the last time the monitoring job was modified.
        """
        return pulumi.get(self, "last_modified_time")

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

    @property
    @pulumi.getter(name="monitoringExecutionStatus")
    def monitoring_execution_status(self) -> pulumi.Input['MonitoringScheduleMonitoringExecutionSummaryMonitoringExecutionStatus']:
        """
        The status of the monitoring job.
        """
        return pulumi.get(self, "monitoring_execution_status")

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

    @property
    @pulumi.getter(name="monitoringScheduleName")
    def monitoring_schedule_name(self) -> pulumi.Input[str]:
        return pulumi.get(self, "monitoring_schedule_name")

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

    @property
    @pulumi.getter(name="scheduledTime")
    def scheduled_time(self) -> pulumi.Input[str]:
        """
        The time the monitoring job was scheduled.
        """
        return pulumi.get(self, "scheduled_time")

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

    @property
    @pulumi.getter(name="endpointName")
    def endpoint_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "endpoint_name")

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

    @property
    @pulumi.getter(name="failureReason")
    def failure_reason(self) -> Optional[pulumi.Input[str]]:
        """
        Contains the reason a monitoring job failed, if it failed.
        """
        return pulumi.get(self, "failure_reason")

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

    @property
    @pulumi.getter(name="processingJobArn")
    def processing_job_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon Resource Name (ARN) of the monitoring job.
        """
        return pulumi.get(self, "processing_job_arn")

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


@pulumi.input_type
class MonitoringScheduleMonitoringInputArgs:
    def __init__(__self__, *,
                 endpoint_input: pulumi.Input['MonitoringScheduleEndpointInputArgs']):
        """
        The inputs for a monitoring job.
        """
        pulumi.set(__self__, "endpoint_input", endpoint_input)

    @property
    @pulumi.getter(name="endpointInput")
    def endpoint_input(self) -> pulumi.Input['MonitoringScheduleEndpointInputArgs']:
        return pulumi.get(self, "endpoint_input")

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


@pulumi.input_type
class MonitoringScheduleMonitoringJobDefinitionArgs:
    def __init__(__self__, *,
                 monitoring_app_specification: pulumi.Input['MonitoringScheduleMonitoringAppSpecificationArgs'],
                 monitoring_inputs: pulumi.Input[Sequence[pulumi.Input['MonitoringScheduleMonitoringInputArgs']]],
                 monitoring_output_config: pulumi.Input['MonitoringScheduleMonitoringOutputConfigArgs'],
                 monitoring_resources: pulumi.Input['MonitoringScheduleMonitoringResourcesArgs'],
                 role_arn: pulumi.Input[str],
                 baseline_config: Optional[pulumi.Input['MonitoringScheduleBaselineConfigArgs']] = None,
                 environment: Optional[Any] = None,
                 network_config: Optional[pulumi.Input['MonitoringScheduleNetworkConfigArgs']] = None,
                 stopping_condition: Optional[pulumi.Input['MonitoringScheduleStoppingConditionArgs']] = None):
        """
        Defines the monitoring job.
        :param pulumi.Input[str] role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param Any environment: Sets the environment variables in the Docker container
        """
        pulumi.set(__self__, "monitoring_app_specification", monitoring_app_specification)
        pulumi.set(__self__, "monitoring_inputs", monitoring_inputs)
        pulumi.set(__self__, "monitoring_output_config", monitoring_output_config)
        pulumi.set(__self__, "monitoring_resources", monitoring_resources)
        pulumi.set(__self__, "role_arn", role_arn)
        if baseline_config is not None:
            pulumi.set(__self__, "baseline_config", baseline_config)
        if environment is not None:
            pulumi.set(__self__, "environment", environment)
        if network_config is not None:
            pulumi.set(__self__, "network_config", network_config)
        if stopping_condition is not None:
            pulumi.set(__self__, "stopping_condition", stopping_condition)

    @property
    @pulumi.getter(name="monitoringAppSpecification")
    def monitoring_app_specification(self) -> pulumi.Input['MonitoringScheduleMonitoringAppSpecificationArgs']:
        return pulumi.get(self, "monitoring_app_specification")

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

    @property
    @pulumi.getter(name="monitoringInputs")
    def monitoring_inputs(self) -> pulumi.Input[Sequence[pulumi.Input['MonitoringScheduleMonitoringInputArgs']]]:
        return pulumi.get(self, "monitoring_inputs")

    @monitoring_inputs.setter
    def monitoring_inputs(self, value: pulumi.Input[Sequence[pulumi.Input['MonitoringScheduleMonitoringInputArgs']]]):
        pulumi.set(self, "monitoring_inputs", value)

    @property
    @pulumi.getter(name="monitoringOutputConfig")
    def monitoring_output_config(self) -> pulumi.Input['MonitoringScheduleMonitoringOutputConfigArgs']:
        return pulumi.get(self, "monitoring_output_config")

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

    @property
    @pulumi.getter(name="monitoringResources")
    def monitoring_resources(self) -> pulumi.Input['MonitoringScheduleMonitoringResourcesArgs']:
        return pulumi.get(self, "monitoring_resources")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        """
        return pulumi.get(self, "role_arn")

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

    @property
    @pulumi.getter(name="baselineConfig")
    def baseline_config(self) -> Optional[pulumi.Input['MonitoringScheduleBaselineConfigArgs']]:
        return pulumi.get(self, "baseline_config")

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

    @property
    @pulumi.getter
    def environment(self) -> Optional[Any]:
        """
        Sets the environment variables in the Docker container
        """
        return pulumi.get(self, "environment")

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

    @property
    @pulumi.getter(name="networkConfig")
    def network_config(self) -> Optional[pulumi.Input['MonitoringScheduleNetworkConfigArgs']]:
        return pulumi.get(self, "network_config")

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

    @property
    @pulumi.getter(name="stoppingCondition")
    def stopping_condition(self) -> Optional[pulumi.Input['MonitoringScheduleStoppingConditionArgs']]:
        return pulumi.get(self, "stopping_condition")

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


@pulumi.input_type
class MonitoringScheduleMonitoringOutputConfigArgs:
    def __init__(__self__, *,
                 monitoring_outputs: pulumi.Input[Sequence[pulumi.Input['MonitoringScheduleMonitoringOutputArgs']]],
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        The output configuration for monitoring jobs.
        :param pulumi.Input[Sequence[pulumi.Input['MonitoringScheduleMonitoringOutputArgs']]] monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        :param pulumi.Input[str] kms_key_id: The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        pulumi.set(__self__, "monitoring_outputs", monitoring_outputs)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="monitoringOutputs")
    def monitoring_outputs(self) -> pulumi.Input[Sequence[pulumi.Input['MonitoringScheduleMonitoringOutputArgs']]]:
        """
        Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
        """
        return pulumi.get(self, "monitoring_outputs")

    @monitoring_outputs.setter
    def monitoring_outputs(self, value: pulumi.Input[Sequence[pulumi.Input['MonitoringScheduleMonitoringOutputArgs']]]):
        pulumi.set(self, "monitoring_outputs", value)

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.
        """
        return pulumi.get(self, "kms_key_id")

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


@pulumi.input_type
class MonitoringScheduleMonitoringOutputArgs:
    def __init__(__self__, *,
                 s3_output: pulumi.Input['MonitoringScheduleS3OutputArgs']):
        """
        The output object for a monitoring job.
        """
        pulumi.set(__self__, "s3_output", s3_output)

    @property
    @pulumi.getter(name="s3Output")
    def s3_output(self) -> pulumi.Input['MonitoringScheduleS3OutputArgs']:
        return pulumi.get(self, "s3_output")

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


@pulumi.input_type
class MonitoringScheduleMonitoringResourcesArgs:
    def __init__(__self__, *,
                 cluster_config: pulumi.Input['MonitoringScheduleClusterConfigArgs']):
        """
        Identifies the resources to deploy for a monitoring job.
        """
        pulumi.set(__self__, "cluster_config", cluster_config)

    @property
    @pulumi.getter(name="clusterConfig")
    def cluster_config(self) -> pulumi.Input['MonitoringScheduleClusterConfigArgs']:
        return pulumi.get(self, "cluster_config")

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


@pulumi.input_type
class MonitoringScheduleMonitoringScheduleConfigArgs:
    def __init__(__self__, *,
                 monitoring_job_definition: Optional[pulumi.Input['MonitoringScheduleMonitoringJobDefinitionArgs']] = None,
                 monitoring_job_definition_name: Optional[pulumi.Input[str]] = None,
                 monitoring_type: Optional[pulumi.Input['MonitoringScheduleMonitoringType']] = None,
                 schedule_config: Optional[pulumi.Input['MonitoringScheduleScheduleConfigArgs']] = None):
        """
        The configuration object that specifies the monitoring schedule and defines the monitoring job.
        :param pulumi.Input[str] monitoring_job_definition_name: Name of the job definition
        """
        if monitoring_job_definition is not None:
            pulumi.set(__self__, "monitoring_job_definition", monitoring_job_definition)
        if monitoring_job_definition_name is not None:
            pulumi.set(__self__, "monitoring_job_definition_name", monitoring_job_definition_name)
        if monitoring_type is not None:
            pulumi.set(__self__, "monitoring_type", monitoring_type)
        if schedule_config is not None:
            pulumi.set(__self__, "schedule_config", schedule_config)

    @property
    @pulumi.getter(name="monitoringJobDefinition")
    def monitoring_job_definition(self) -> Optional[pulumi.Input['MonitoringScheduleMonitoringJobDefinitionArgs']]:
        return pulumi.get(self, "monitoring_job_definition")

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

    @property
    @pulumi.getter(name="monitoringJobDefinitionName")
    def monitoring_job_definition_name(self) -> Optional[pulumi.Input[str]]:
        """
        Name of the job definition
        """
        return pulumi.get(self, "monitoring_job_definition_name")

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

    @property
    @pulumi.getter(name="monitoringType")
    def monitoring_type(self) -> Optional[pulumi.Input['MonitoringScheduleMonitoringType']]:
        return pulumi.get(self, "monitoring_type")

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

    @property
    @pulumi.getter(name="scheduleConfig")
    def schedule_config(self) -> Optional[pulumi.Input['MonitoringScheduleScheduleConfigArgs']]:
        return pulumi.get(self, "schedule_config")

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


@pulumi.input_type
class MonitoringScheduleNetworkConfigArgs:
    def __init__(__self__, *,
                 enable_inter_container_traffic_encryption: Optional[pulumi.Input[bool]] = None,
                 enable_network_isolation: Optional[pulumi.Input[bool]] = None,
                 vpc_config: Optional[pulumi.Input['MonitoringScheduleVpcConfigArgs']] = None):
        """
        Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.
        :param pulumi.Input[bool] enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        :param pulumi.Input[bool] enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        if enable_inter_container_traffic_encryption is not None:
            pulumi.set(__self__, "enable_inter_container_traffic_encryption", enable_inter_container_traffic_encryption)
        if enable_network_isolation is not None:
            pulumi.set(__self__, "enable_network_isolation", enable_network_isolation)
        if vpc_config is not None:
            pulumi.set(__self__, "vpc_config", vpc_config)

    @property
    @pulumi.getter(name="enableInterContainerTrafficEncryption")
    def enable_inter_container_traffic_encryption(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
        """
        return pulumi.get(self, "enable_inter_container_traffic_encryption")

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

    @property
    @pulumi.getter(name="enableNetworkIsolation")
    def enable_network_isolation(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
        """
        return pulumi.get(self, "enable_network_isolation")

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

    @property
    @pulumi.getter(name="vpcConfig")
    def vpc_config(self) -> Optional[pulumi.Input['MonitoringScheduleVpcConfigArgs']]:
        return pulumi.get(self, "vpc_config")

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


@pulumi.input_type
class MonitoringScheduleS3OutputArgs:
    def __init__(__self__, *,
                 local_path: pulumi.Input[str],
                 s3_uri: pulumi.Input[str],
                 s3_upload_mode: Optional[pulumi.Input['MonitoringScheduleS3OutputS3UploadMode']] = None):
        """
        Information about where and how to store the results of a monitoring job.
        :param pulumi.Input[str] local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        :param pulumi.Input[str] s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        :param pulumi.Input['MonitoringScheduleS3OutputS3UploadMode'] s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        pulumi.set(__self__, "local_path", local_path)
        pulumi.set(__self__, "s3_uri", s3_uri)
        if s3_upload_mode is not None:
            pulumi.set(__self__, "s3_upload_mode", s3_upload_mode)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> pulumi.Input[str]:
        """
        The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
        """
        return pulumi.get(self, "local_path")

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

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> pulumi.Input[str]:
        """
        A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
        """
        return pulumi.get(self, "s3_uri")

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

    @property
    @pulumi.getter(name="s3UploadMode")
    def s3_upload_mode(self) -> Optional[pulumi.Input['MonitoringScheduleS3OutputS3UploadMode']]:
        """
        Whether to upload the results of the monitoring job continuously or after the job completes.
        """
        return pulumi.get(self, "s3_upload_mode")

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


@pulumi.input_type
class MonitoringScheduleScheduleConfigArgs:
    def __init__(__self__, *,
                 schedule_expression: pulumi.Input[str]):
        """
        Configuration details about the monitoring schedule.
        :param pulumi.Input[str] schedule_expression: A cron expression that describes details about the monitoring schedule.
        """
        pulumi.set(__self__, "schedule_expression", schedule_expression)

    @property
    @pulumi.getter(name="scheduleExpression")
    def schedule_expression(self) -> pulumi.Input[str]:
        """
        A cron expression that describes details about the monitoring schedule.
        """
        return pulumi.get(self, "schedule_expression")

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


@pulumi.input_type
class MonitoringScheduleStatisticsResourceArgs:
    def __init__(__self__, *,
                 s3_uri: Optional[pulumi.Input[str]] = None):
        """
        The baseline statistics resource for a monitoring job.
        :param pulumi.Input[str] s3_uri: The Amazon S3 URI for the baseline statistics file in Amazon S3 that the current monitoring job should be validated against.
        """
        if s3_uri is not None:
            pulumi.set(__self__, "s3_uri", s3_uri)

    @property
    @pulumi.getter(name="s3Uri")
    def s3_uri(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 URI for the baseline statistics file in Amazon S3 that the current monitoring job should be validated against.
        """
        return pulumi.get(self, "s3_uri")

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


@pulumi.input_type
class MonitoringScheduleStoppingConditionArgs:
    def __init__(__self__, *,
                 max_runtime_in_seconds: pulumi.Input[int]):
        """
        Specifies a time limit for how long the monitoring job is allowed to run.
        :param pulumi.Input[int] max_runtime_in_seconds: The maximum runtime allowed in seconds.
        """
        pulumi.set(__self__, "max_runtime_in_seconds", max_runtime_in_seconds)

    @property
    @pulumi.getter(name="maxRuntimeInSeconds")
    def max_runtime_in_seconds(self) -> pulumi.Input[int]:
        """
        The maximum runtime allowed in seconds.
        """
        return pulumi.get(self, "max_runtime_in_seconds")

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


@pulumi.input_type
class MonitoringScheduleTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class MonitoringScheduleVpcConfigArgs:
    def __init__(__self__, *,
                 security_group_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subnets: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_group_ids: The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subnets: The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        pulumi.set(__self__, "subnets", subnets)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.
        """
        return pulumi.get(self, "security_group_ids")

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

    @property
    @pulumi.getter
    def subnets(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.
        """
        return pulumi.get(self, "subnets")

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


@pulumi.input_type
class NotebookInstanceLifecycleConfigNotebookInstanceLifecycleHookArgs:
    def __init__(__self__, *,
                 content: Optional[pulumi.Input[str]] = None):
        if content is not None:
            pulumi.set(__self__, "content", content)

    @property
    @pulumi.getter
    def content(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "content")

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


@pulumi.input_type
class NotebookInstanceTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class PipelineTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class ProjectTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        A key-value pair to associate with a resource.
        :param pulumi.Input[str] key: The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        :param pulumi.Input[str] value: The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        """
        The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. 
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class UserProfileCustomImageArgs:
    def __init__(__self__, *,
                 app_image_config_name: pulumi.Input[str],
                 image_name: pulumi.Input[str],
                 image_version_number: Optional[pulumi.Input[int]] = None):
        """
        A custom SageMaker image.
        :param pulumi.Input[str] app_image_config_name: The Name of the AppImageConfig.
        :param pulumi.Input[str] image_name: The name of the CustomImage. Must be unique to your account.
        :param pulumi.Input[int] image_version_number: The version number of the CustomImage.
        """
        pulumi.set(__self__, "app_image_config_name", app_image_config_name)
        pulumi.set(__self__, "image_name", image_name)
        if image_version_number is not None:
            pulumi.set(__self__, "image_version_number", image_version_number)

    @property
    @pulumi.getter(name="appImageConfigName")
    def app_image_config_name(self) -> pulumi.Input[str]:
        """
        The Name of the AppImageConfig.
        """
        return pulumi.get(self, "app_image_config_name")

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

    @property
    @pulumi.getter(name="imageName")
    def image_name(self) -> pulumi.Input[str]:
        """
        The name of the CustomImage. Must be unique to your account.
        """
        return pulumi.get(self, "image_name")

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

    @property
    @pulumi.getter(name="imageVersionNumber")
    def image_version_number(self) -> Optional[pulumi.Input[int]]:
        """
        The version number of the CustomImage.
        """
        return pulumi.get(self, "image_version_number")

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


@pulumi.input_type
class UserProfileJupyterServerAppSettingsArgs:
    def __init__(__self__, *,
                 default_resource_spec: Optional[pulumi.Input['UserProfileResourceSpecArgs']] = None):
        """
        The JupyterServer app settings.
        """
        if default_resource_spec is not None:
            pulumi.set(__self__, "default_resource_spec", default_resource_spec)

    @property
    @pulumi.getter(name="defaultResourceSpec")
    def default_resource_spec(self) -> Optional[pulumi.Input['UserProfileResourceSpecArgs']]:
        return pulumi.get(self, "default_resource_spec")

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


@pulumi.input_type
class UserProfileKernelGatewayAppSettingsArgs:
    def __init__(__self__, *,
                 custom_images: Optional[pulumi.Input[Sequence[pulumi.Input['UserProfileCustomImageArgs']]]] = None,
                 default_resource_spec: Optional[pulumi.Input['UserProfileResourceSpecArgs']] = None):
        """
        The kernel gateway app settings.
        :param pulumi.Input[Sequence[pulumi.Input['UserProfileCustomImageArgs']]] custom_images: A list of custom SageMaker images that are configured to run as a KernelGateway app.
        :param pulumi.Input['UserProfileResourceSpecArgs'] default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app.
        """
        if custom_images is not None:
            pulumi.set(__self__, "custom_images", custom_images)
        if default_resource_spec is not None:
            pulumi.set(__self__, "default_resource_spec", default_resource_spec)

    @property
    @pulumi.getter(name="customImages")
    def custom_images(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['UserProfileCustomImageArgs']]]]:
        """
        A list of custom SageMaker images that are configured to run as a KernelGateway app.
        """
        return pulumi.get(self, "custom_images")

    @custom_images.setter
    def custom_images(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['UserProfileCustomImageArgs']]]]):
        pulumi.set(self, "custom_images", value)

    @property
    @pulumi.getter(name="defaultResourceSpec")
    def default_resource_spec(self) -> Optional[pulumi.Input['UserProfileResourceSpecArgs']]:
        """
        The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app.
        """
        return pulumi.get(self, "default_resource_spec")

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


@pulumi.input_type
class UserProfileResourceSpecArgs:
    def __init__(__self__, *,
                 instance_type: Optional[pulumi.Input['UserProfileResourceSpecInstanceType']] = None,
                 sage_maker_image_arn: Optional[pulumi.Input[str]] = None,
                 sage_maker_image_version_arn: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['UserProfileResourceSpecInstanceType'] instance_type: The instance type that the image version runs on.
        :param pulumi.Input[str] sage_maker_image_arn: The ARN of the SageMaker image that the image version belongs to.
        :param pulumi.Input[str] sage_maker_image_version_arn: The ARN of the image version created on the instance.
        """
        if instance_type is not None:
            pulumi.set(__self__, "instance_type", instance_type)
        if sage_maker_image_arn is not None:
            pulumi.set(__self__, "sage_maker_image_arn", sage_maker_image_arn)
        if sage_maker_image_version_arn is not None:
            pulumi.set(__self__, "sage_maker_image_version_arn", sage_maker_image_version_arn)

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> Optional[pulumi.Input['UserProfileResourceSpecInstanceType']]:
        """
        The instance type that the image version runs on.
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="sageMakerImageArn")
    def sage_maker_image_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the SageMaker image that the image version belongs to.
        """
        return pulumi.get(self, "sage_maker_image_arn")

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

    @property
    @pulumi.getter(name="sageMakerImageVersionArn")
    def sage_maker_image_version_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the image version created on the instance.
        """
        return pulumi.get(self, "sage_maker_image_version_arn")

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


@pulumi.input_type
class UserProfileSharingSettingsArgs:
    def __init__(__self__, *,
                 notebook_output_option: Optional[pulumi.Input['UserProfileSharingSettingsNotebookOutputOption']] = None,
                 s3_kms_key_id: Optional[pulumi.Input[str]] = None,
                 s3_output_path: Optional[pulumi.Input[str]] = None):
        """
        Specifies options when sharing an Amazon SageMaker Studio notebook. These settings are specified as part of DefaultUserSettings when the CreateDomain API is called, and as part of UserSettings when the CreateUserProfile API is called.
        :param pulumi.Input['UserProfileSharingSettingsNotebookOutputOption'] notebook_output_option: Whether to include the notebook cell output when sharing the notebook. The default is Disabled.
        :param pulumi.Input[str] s3_kms_key_id: When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.
        :param pulumi.Input[str] s3_output_path: When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.
        """
        if notebook_output_option is not None:
            pulumi.set(__self__, "notebook_output_option", notebook_output_option)
        if s3_kms_key_id is not None:
            pulumi.set(__self__, "s3_kms_key_id", s3_kms_key_id)
        if s3_output_path is not None:
            pulumi.set(__self__, "s3_output_path", s3_output_path)

    @property
    @pulumi.getter(name="notebookOutputOption")
    def notebook_output_option(self) -> Optional[pulumi.Input['UserProfileSharingSettingsNotebookOutputOption']]:
        """
        Whether to include the notebook cell output when sharing the notebook. The default is Disabled.
        """
        return pulumi.get(self, "notebook_output_option")

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

    @property
    @pulumi.getter(name="s3KmsKeyId")
    def s3_kms_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.
        """
        return pulumi.get(self, "s3_kms_key_id")

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

    @property
    @pulumi.getter(name="s3OutputPath")
    def s3_output_path(self) -> Optional[pulumi.Input[str]]:
        """
        When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.
        """
        return pulumi.get(self, "s3_output_path")

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


@pulumi.input_type
class UserProfileTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


@pulumi.input_type
class UserProfileUserSettingsArgs:
    def __init__(__self__, *,
                 execution_role: Optional[pulumi.Input[str]] = None,
                 jupyter_server_app_settings: Optional[pulumi.Input['UserProfileJupyterServerAppSettingsArgs']] = None,
                 kernel_gateway_app_settings: Optional[pulumi.Input['UserProfileKernelGatewayAppSettingsArgs']] = None,
                 security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 sharing_settings: Optional[pulumi.Input['UserProfileSharingSettingsArgs']] = None):
        """
        A collection of settings that apply to users of Amazon SageMaker Studio. These settings are specified when the CreateUserProfile API is called, and as DefaultUserSettings when the CreateDomain API is called.
        :param pulumi.Input[str] execution_role: The user profile Amazon Resource Name (ARN).
        :param pulumi.Input['UserProfileJupyterServerAppSettingsArgs'] jupyter_server_app_settings: The Jupyter server's app settings.
        :param pulumi.Input['UserProfileKernelGatewayAppSettingsArgs'] kernel_gateway_app_settings: The kernel gateway app settings.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_groups: The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.
        :param pulumi.Input['UserProfileSharingSettingsArgs'] sharing_settings: The sharing settings.
        """
        if execution_role is not None:
            pulumi.set(__self__, "execution_role", execution_role)
        if jupyter_server_app_settings is not None:
            pulumi.set(__self__, "jupyter_server_app_settings", jupyter_server_app_settings)
        if kernel_gateway_app_settings is not None:
            pulumi.set(__self__, "kernel_gateway_app_settings", kernel_gateway_app_settings)
        if security_groups is not None:
            pulumi.set(__self__, "security_groups", security_groups)
        if sharing_settings is not None:
            pulumi.set(__self__, "sharing_settings", sharing_settings)

    @property
    @pulumi.getter(name="executionRole")
    def execution_role(self) -> Optional[pulumi.Input[str]]:
        """
        The user profile Amazon Resource Name (ARN).
        """
        return pulumi.get(self, "execution_role")

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

    @property
    @pulumi.getter(name="jupyterServerAppSettings")
    def jupyter_server_app_settings(self) -> Optional[pulumi.Input['UserProfileJupyterServerAppSettingsArgs']]:
        """
        The Jupyter server's app settings.
        """
        return pulumi.get(self, "jupyter_server_app_settings")

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

    @property
    @pulumi.getter(name="kernelGatewayAppSettings")
    def kernel_gateway_app_settings(self) -> Optional[pulumi.Input['UserProfileKernelGatewayAppSettingsArgs']]:
        """
        The kernel gateway app settings.
        """
        return pulumi.get(self, "kernel_gateway_app_settings")

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

    @property
    @pulumi.getter(name="securityGroups")
    def security_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.
        """
        return pulumi.get(self, "security_groups")

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

    @property
    @pulumi.getter(name="sharingSettings")
    def sharing_settings(self) -> Optional[pulumi.Input['UserProfileSharingSettingsArgs']]:
        """
        The sharing settings.
        """
        return pulumi.get(self, "sharing_settings")

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


@pulumi.input_type
class WorkteamCognitoMemberDefinitionArgs:
    def __init__(__self__, *,
                 cognito_client_id: pulumi.Input[str],
                 cognito_user_group: pulumi.Input[str],
                 cognito_user_pool: pulumi.Input[str]):
        pulumi.set(__self__, "cognito_client_id", cognito_client_id)
        pulumi.set(__self__, "cognito_user_group", cognito_user_group)
        pulumi.set(__self__, "cognito_user_pool", cognito_user_pool)

    @property
    @pulumi.getter(name="cognitoClientId")
    def cognito_client_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "cognito_client_id")

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

    @property
    @pulumi.getter(name="cognitoUserGroup")
    def cognito_user_group(self) -> pulumi.Input[str]:
        return pulumi.get(self, "cognito_user_group")

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

    @property
    @pulumi.getter(name="cognitoUserPool")
    def cognito_user_pool(self) -> pulumi.Input[str]:
        return pulumi.get(self, "cognito_user_pool")

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


@pulumi.input_type
class WorkteamMemberDefinitionArgs:
    def __init__(__self__, *,
                 cognito_member_definition: pulumi.Input['WorkteamCognitoMemberDefinitionArgs']):
        pulumi.set(__self__, "cognito_member_definition", cognito_member_definition)

    @property
    @pulumi.getter(name="cognitoMemberDefinition")
    def cognito_member_definition(self) -> pulumi.Input['WorkteamCognitoMemberDefinitionArgs']:
        return pulumi.get(self, "cognito_member_definition")

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


@pulumi.input_type
class WorkteamNotificationConfigurationArgs:
    def __init__(__self__, *,
                 notification_topic_arn: pulumi.Input[str]):
        pulumi.set(__self__, "notification_topic_arn", notification_topic_arn)

    @property
    @pulumi.getter(name="notificationTopicArn")
    def notification_topic_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "notification_topic_arn")

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


@pulumi.input_type
class WorkteamTagArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        return pulumi.get(self, "value")

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


