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

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union
from .. import _utilities, _tables

__all__ = [
    'AnalyticsApplicationCloudwatchLoggingOptionsArgs',
    'AnalyticsApplicationInputsArgs',
    'AnalyticsApplicationInputsKinesisFirehoseArgs',
    'AnalyticsApplicationInputsKinesisStreamArgs',
    'AnalyticsApplicationInputsParallelismArgs',
    'AnalyticsApplicationInputsProcessingConfigurationArgs',
    'AnalyticsApplicationInputsProcessingConfigurationLambdaArgs',
    'AnalyticsApplicationInputsSchemaArgs',
    'AnalyticsApplicationInputsSchemaRecordColumnArgs',
    'AnalyticsApplicationInputsSchemaRecordFormatArgs',
    'AnalyticsApplicationInputsSchemaRecordFormatMappingParametersArgs',
    'AnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvArgs',
    'AnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonArgs',
    'AnalyticsApplicationInputsStartingPositionConfigurationArgs',
    'AnalyticsApplicationOutputArgs',
    'AnalyticsApplicationOutputKinesisFirehoseArgs',
    'AnalyticsApplicationOutputKinesisStreamArgs',
    'AnalyticsApplicationOutputLambdaArgs',
    'AnalyticsApplicationOutputSchemaArgs',
    'AnalyticsApplicationReferenceDataSourcesArgs',
    'AnalyticsApplicationReferenceDataSourcesS3Args',
    'AnalyticsApplicationReferenceDataSourcesSchemaArgs',
    'AnalyticsApplicationReferenceDataSourcesSchemaRecordColumnArgs',
    'AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatArgs',
    'AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersArgs',
    'AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvArgs',
    'AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonArgs',
    'FirehoseDeliveryStreamElasticsearchConfigurationArgs',
    'FirehoseDeliveryStreamElasticsearchConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationArgs',
    'FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorArgs',
    'FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorParameterArgs',
    'FirehoseDeliveryStreamElasticsearchConfigurationVpcConfigArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerHiveJsonSerDeArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerOpenXJsonSerDeArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerOrcSerDeArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerParquetSerDeArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationSchemaConfigurationArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorParameterArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationArgs',
    'FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamHttpEndpointConfigurationArgs',
    'FirehoseDeliveryStreamHttpEndpointConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationArgs',
    'FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorArgs',
    'FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorParameterArgs',
    'FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationArgs',
    'FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationCommonAttributeArgs',
    'FirehoseDeliveryStreamKinesisSourceConfigurationArgs',
    'FirehoseDeliveryStreamRedshiftConfigurationArgs',
    'FirehoseDeliveryStreamRedshiftConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationArgs',
    'FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorArgs',
    'FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorParameterArgs',
    'FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationArgs',
    'FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamS3ConfigurationArgs',
    'FirehoseDeliveryStreamS3ConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamServerSideEncryptionArgs',
    'FirehoseDeliveryStreamSplunkConfigurationArgs',
    'FirehoseDeliveryStreamSplunkConfigurationCloudwatchLoggingOptionsArgs',
    'FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationArgs',
    'FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorArgs',
    'FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorParameterArgs',
]

@pulumi.input_type
class AnalyticsApplicationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 log_stream_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] log_stream_arn: The ARN of the CloudWatch Log Stream.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to send application messages.
        :param pulumi.Input[str] id: The ARN of the Kinesis Analytics Application.
        """
        pulumi.set(__self__, "log_stream_arn", log_stream_arn)
        pulumi.set(__self__, "role_arn", role_arn)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="logStreamArn")
    def log_stream_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the CloudWatch Log Stream.
        """
        return pulumi.get(self, "log_stream_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to send application messages.
        """
        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
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the Kinesis Analytics Application.
        """
        return pulumi.get(self, "id")

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


@pulumi.input_type
class AnalyticsApplicationInputsArgs:
    def __init__(__self__, *,
                 name_prefix: pulumi.Input[str],
                 schema: pulumi.Input['AnalyticsApplicationInputsSchemaArgs'],
                 id: Optional[pulumi.Input[str]] = None,
                 kinesis_firehose: Optional[pulumi.Input['AnalyticsApplicationInputsKinesisFirehoseArgs']] = None,
                 kinesis_stream: Optional[pulumi.Input['AnalyticsApplicationInputsKinesisStreamArgs']] = None,
                 parallelism: Optional[pulumi.Input['AnalyticsApplicationInputsParallelismArgs']] = None,
                 processing_configuration: Optional[pulumi.Input['AnalyticsApplicationInputsProcessingConfigurationArgs']] = None,
                 starting_position_configurations: Optional[pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationInputsStartingPositionConfigurationArgs']]]] = None,
                 stream_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name_prefix: The Name Prefix to use when creating an in-application stream.
        :param pulumi.Input['AnalyticsApplicationInputsSchemaArgs'] schema: The Schema format of the data in the streaming source. See Source Schema below for more details.
        :param pulumi.Input[str] id: The ARN of the Kinesis Analytics Application.
        :param pulumi.Input['AnalyticsApplicationInputsKinesisFirehoseArgs'] kinesis_firehose: The Kinesis Firehose configuration for the streaming source. Conflicts with `kinesis_stream`.
               See Kinesis Firehose below for more details.
        :param pulumi.Input['AnalyticsApplicationInputsKinesisStreamArgs'] kinesis_stream: The Kinesis Stream configuration for the streaming source. Conflicts with `kinesis_firehose`.
               See Kinesis Stream below for more details.
        :param pulumi.Input['AnalyticsApplicationInputsParallelismArgs'] parallelism: The number of Parallel in-application streams to create.
               See Parallelism below for more details.
        :param pulumi.Input['AnalyticsApplicationInputsProcessingConfigurationArgs'] processing_configuration: The Processing Configuration to transform records as they are received from the stream.
               See Processing Configuration below for more details.
        :param pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationInputsStartingPositionConfigurationArgs']]] starting_position_configurations: The point at which the application starts processing records from the streaming source.
               See Starting Position Configuration below for more details.
        """
        pulumi.set(__self__, "name_prefix", name_prefix)
        pulumi.set(__self__, "schema", schema)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if kinesis_firehose is not None:
            pulumi.set(__self__, "kinesis_firehose", kinesis_firehose)
        if kinesis_stream is not None:
            pulumi.set(__self__, "kinesis_stream", kinesis_stream)
        if parallelism is not None:
            pulumi.set(__self__, "parallelism", parallelism)
        if processing_configuration is not None:
            pulumi.set(__self__, "processing_configuration", processing_configuration)
        if starting_position_configurations is not None:
            pulumi.set(__self__, "starting_position_configurations", starting_position_configurations)
        if stream_names is not None:
            pulumi.set(__self__, "stream_names", stream_names)

    @property
    @pulumi.getter(name="namePrefix")
    def name_prefix(self) -> pulumi.Input[str]:
        """
        The Name Prefix to use when creating an in-application stream.
        """
        return pulumi.get(self, "name_prefix")

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

    @property
    @pulumi.getter
    def schema(self) -> pulumi.Input['AnalyticsApplicationInputsSchemaArgs']:
        """
        The Schema format of the data in the streaming source. See Source Schema below for more details.
        """
        return pulumi.get(self, "schema")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the Kinesis Analytics Application.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="kinesisFirehose")
    def kinesis_firehose(self) -> Optional[pulumi.Input['AnalyticsApplicationInputsKinesisFirehoseArgs']]:
        """
        The Kinesis Firehose configuration for the streaming source. Conflicts with `kinesis_stream`.
        See Kinesis Firehose below for more details.
        """
        return pulumi.get(self, "kinesis_firehose")

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

    @property
    @pulumi.getter(name="kinesisStream")
    def kinesis_stream(self) -> Optional[pulumi.Input['AnalyticsApplicationInputsKinesisStreamArgs']]:
        """
        The Kinesis Stream configuration for the streaming source. Conflicts with `kinesis_firehose`.
        See Kinesis Stream below for more details.
        """
        return pulumi.get(self, "kinesis_stream")

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

    @property
    @pulumi.getter
    def parallelism(self) -> Optional[pulumi.Input['AnalyticsApplicationInputsParallelismArgs']]:
        """
        The number of Parallel in-application streams to create.
        See Parallelism below for more details.
        """
        return pulumi.get(self, "parallelism")

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

    @property
    @pulumi.getter(name="processingConfiguration")
    def processing_configuration(self) -> Optional[pulumi.Input['AnalyticsApplicationInputsProcessingConfigurationArgs']]:
        """
        The Processing Configuration to transform records as they are received from the stream.
        See Processing Configuration below for more details.
        """
        return pulumi.get(self, "processing_configuration")

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

    @property
    @pulumi.getter(name="startingPositionConfigurations")
    def starting_position_configurations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationInputsStartingPositionConfigurationArgs']]]]:
        """
        The point at which the application starts processing records from the streaming source.
        See Starting Position Configuration below for more details.
        """
        return pulumi.get(self, "starting_position_configurations")

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

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

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


@pulumi.input_type
class AnalyticsApplicationInputsKinesisFirehoseArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] resource_arn: The ARN of the Kinesis Firehose delivery stream.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to access the stream.
        """
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceArn")
    def resource_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the Kinesis Firehose delivery stream.
        """
        return pulumi.get(self, "resource_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to access the stream.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class AnalyticsApplicationInputsKinesisStreamArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] resource_arn: The ARN of the Kinesis Stream.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to access the stream.
        """
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceArn")
    def resource_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the Kinesis Stream.
        """
        return pulumi.get(self, "resource_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to access the stream.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class AnalyticsApplicationInputsParallelismArgs:
    def __init__(__self__, *,
                 count: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] count: The Count of streams.
        """
        if count is not None:
            pulumi.set(__self__, "count", count)

    @property
    @pulumi.getter
    def count(self) -> Optional[pulumi.Input[int]]:
        """
        The Count of streams.
        """
        return pulumi.get(self, "count")

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


@pulumi.input_type
class AnalyticsApplicationInputsProcessingConfigurationArgs:
    def __init__(__self__, *,
                 lambda_: pulumi.Input['AnalyticsApplicationInputsProcessingConfigurationLambdaArgs']):
        """
        :param pulumi.Input['AnalyticsApplicationInputsProcessingConfigurationLambdaArgs'] lambda_: The Lambda function configuration. See Lambda below for more details.
        """
        pulumi.set(__self__, "lambda_", lambda_)

    @property
    @pulumi.getter(name="lambda")
    def lambda_(self) -> pulumi.Input['AnalyticsApplicationInputsProcessingConfigurationLambdaArgs']:
        """
        The Lambda function configuration. See Lambda below for more details.
        """
        return pulumi.get(self, "lambda_")

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


@pulumi.input_type
class AnalyticsApplicationInputsProcessingConfigurationLambdaArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] resource_arn: The ARN of the Lambda function.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to access the Lambda function.
        """
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceArn")
    def resource_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the Lambda function.
        """
        return pulumi.get(self, "resource_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to access the Lambda function.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class AnalyticsApplicationInputsSchemaArgs:
    def __init__(__self__, *,
                 record_columns: pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationInputsSchemaRecordColumnArgs']]],
                 record_format: pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatArgs'],
                 record_encoding: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationInputsSchemaRecordColumnArgs']]] record_columns: The Record Column mapping for the streaming source data element.
               See Record Columns below for more details.
        :param pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatArgs'] record_format: The Record Format and mapping information to schematize a record.
               See Record Format below for more details.
        :param pulumi.Input[str] record_encoding: The Encoding of the record in the streaming source.
        """
        pulumi.set(__self__, "record_columns", record_columns)
        pulumi.set(__self__, "record_format", record_format)
        if record_encoding is not None:
            pulumi.set(__self__, "record_encoding", record_encoding)

    @property
    @pulumi.getter(name="recordColumns")
    def record_columns(self) -> pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationInputsSchemaRecordColumnArgs']]]:
        """
        The Record Column mapping for the streaming source data element.
        See Record Columns below for more details.
        """
        return pulumi.get(self, "record_columns")

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

    @property
    @pulumi.getter(name="recordFormat")
    def record_format(self) -> pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatArgs']:
        """
        The Record Format and mapping information to schematize a record.
        See Record Format below for more details.
        """
        return pulumi.get(self, "record_format")

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

    @property
    @pulumi.getter(name="recordEncoding")
    def record_encoding(self) -> Optional[pulumi.Input[str]]:
        """
        The Encoding of the record in the streaming source.
        """
        return pulumi.get(self, "record_encoding")

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


@pulumi.input_type
class AnalyticsApplicationInputsSchemaRecordColumnArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 sql_type: pulumi.Input[str],
                 mapping: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Name of the column.
        :param pulumi.Input[str] sql_type: The SQL Type of the column.
        :param pulumi.Input[str] mapping: The Mapping reference to the data element.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "sql_type", sql_type)
        if mapping is not None:
            pulumi.set(__self__, "mapping", mapping)

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

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

    @property
    @pulumi.getter(name="sqlType")
    def sql_type(self) -> pulumi.Input[str]:
        """
        The SQL Type of the column.
        """
        return pulumi.get(self, "sql_type")

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

    @property
    @pulumi.getter
    def mapping(self) -> Optional[pulumi.Input[str]]:
        """
        The Mapping reference to the data element.
        """
        return pulumi.get(self, "mapping")

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


@pulumi.input_type
class AnalyticsApplicationInputsSchemaRecordFormatArgs:
    def __init__(__self__, *,
                 mapping_parameters: Optional[pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersArgs']] = None,
                 record_format_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersArgs'] mapping_parameters: The Mapping Information for the record format.
               See Mapping Parameters below for more details.
        :param pulumi.Input[str] record_format_type: The type of Record Format. Can be `CSV` or `JSON`.
        """
        if mapping_parameters is not None:
            pulumi.set(__self__, "mapping_parameters", mapping_parameters)
        if record_format_type is not None:
            pulumi.set(__self__, "record_format_type", record_format_type)

    @property
    @pulumi.getter(name="mappingParameters")
    def mapping_parameters(self) -> Optional[pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersArgs']]:
        """
        The Mapping Information for the record format.
        See Mapping Parameters below for more details.
        """
        return pulumi.get(self, "mapping_parameters")

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

    @property
    @pulumi.getter(name="recordFormatType")
    def record_format_type(self) -> Optional[pulumi.Input[str]]:
        """
        The type of Record Format. Can be `CSV` or `JSON`.
        """
        return pulumi.get(self, "record_format_type")

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


@pulumi.input_type
class AnalyticsApplicationInputsSchemaRecordFormatMappingParametersArgs:
    def __init__(__self__, *,
                 csv: Optional[pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvArgs']] = None,
                 json: Optional[pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonArgs']] = None):
        """
        :param pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvArgs'] csv: Mapping information when the record format uses delimiters.
               See CSV Mapping Parameters below for more details.
        :param pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonArgs'] json: Mapping information when JSON is the record format on the streaming source.
               See JSON Mapping Parameters below for more details.
        """
        if csv is not None:
            pulumi.set(__self__, "csv", csv)
        if json is not None:
            pulumi.set(__self__, "json", json)

    @property
    @pulumi.getter
    def csv(self) -> Optional[pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvArgs']]:
        """
        Mapping information when the record format uses delimiters.
        See CSV Mapping Parameters below for more details.
        """
        return pulumi.get(self, "csv")

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

    @property
    @pulumi.getter
    def json(self) -> Optional[pulumi.Input['AnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonArgs']]:
        """
        Mapping information when JSON is the record format on the streaming source.
        See JSON Mapping Parameters below for more details.
        """
        return pulumi.get(self, "json")

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


@pulumi.input_type
class AnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvArgs:
    def __init__(__self__, *,
                 record_column_delimiter: pulumi.Input[str],
                 record_row_delimiter: pulumi.Input[str]):
        """
        :param pulumi.Input[str] record_column_delimiter: The Column Delimiter.
        :param pulumi.Input[str] record_row_delimiter: The Row Delimiter.
        """
        pulumi.set(__self__, "record_column_delimiter", record_column_delimiter)
        pulumi.set(__self__, "record_row_delimiter", record_row_delimiter)

    @property
    @pulumi.getter(name="recordColumnDelimiter")
    def record_column_delimiter(self) -> pulumi.Input[str]:
        """
        The Column Delimiter.
        """
        return pulumi.get(self, "record_column_delimiter")

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

    @property
    @pulumi.getter(name="recordRowDelimiter")
    def record_row_delimiter(self) -> pulumi.Input[str]:
        """
        The Row Delimiter.
        """
        return pulumi.get(self, "record_row_delimiter")

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


@pulumi.input_type
class AnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonArgs:
    def __init__(__self__, *,
                 record_row_path: pulumi.Input[str]):
        """
        :param pulumi.Input[str] record_row_path: Path to the top-level parent that contains the records.
        """
        pulumi.set(__self__, "record_row_path", record_row_path)

    @property
    @pulumi.getter(name="recordRowPath")
    def record_row_path(self) -> pulumi.Input[str]:
        """
        Path to the top-level parent that contains the records.
        """
        return pulumi.get(self, "record_row_path")

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


@pulumi.input_type
class AnalyticsApplicationInputsStartingPositionConfigurationArgs:
    def __init__(__self__, *,
                 starting_position: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] starting_position: The starting position on the stream. Valid values: `LAST_STOPPED_POINT`, `NOW`, `TRIM_HORIZON`.
        """
        if starting_position is not None:
            pulumi.set(__self__, "starting_position", starting_position)

    @property
    @pulumi.getter(name="startingPosition")
    def starting_position(self) -> Optional[pulumi.Input[str]]:
        """
        The starting position on the stream. Valid values: `LAST_STOPPED_POINT`, `NOW`, `TRIM_HORIZON`.
        """
        return pulumi.get(self, "starting_position")

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


@pulumi.input_type
class AnalyticsApplicationOutputArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 schema: pulumi.Input['AnalyticsApplicationOutputSchemaArgs'],
                 id: Optional[pulumi.Input[str]] = None,
                 kinesis_firehose: Optional[pulumi.Input['AnalyticsApplicationOutputKinesisFirehoseArgs']] = None,
                 kinesis_stream: Optional[pulumi.Input['AnalyticsApplicationOutputKinesisStreamArgs']] = None,
                 lambda_: Optional[pulumi.Input['AnalyticsApplicationOutputLambdaArgs']] = None):
        """
        :param pulumi.Input[str] name: The Name of the in-application stream.
        :param pulumi.Input['AnalyticsApplicationOutputSchemaArgs'] schema: The Schema format of the data written to the destination. See Destination Schema below for more details.
        :param pulumi.Input[str] id: The ARN of the Kinesis Analytics Application.
        :param pulumi.Input['AnalyticsApplicationOutputKinesisFirehoseArgs'] kinesis_firehose: The Kinesis Firehose configuration for the destination stream. Conflicts with `kinesis_stream`.
               See Kinesis Firehose below for more details.
        :param pulumi.Input['AnalyticsApplicationOutputKinesisStreamArgs'] kinesis_stream: The Kinesis Stream configuration for the destination stream. Conflicts with `kinesis_firehose`.
               See Kinesis Stream below for more details.
        :param pulumi.Input['AnalyticsApplicationOutputLambdaArgs'] lambda_: The Lambda function destination. See Lambda below for more details.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "schema", schema)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if kinesis_firehose is not None:
            pulumi.set(__self__, "kinesis_firehose", kinesis_firehose)
        if kinesis_stream is not None:
            pulumi.set(__self__, "kinesis_stream", kinesis_stream)
        if lambda_ is not None:
            pulumi.set(__self__, "lambda_", lambda_)

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

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

    @property
    @pulumi.getter
    def schema(self) -> pulumi.Input['AnalyticsApplicationOutputSchemaArgs']:
        """
        The Schema format of the data written to the destination. See Destination Schema below for more details.
        """
        return pulumi.get(self, "schema")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the Kinesis Analytics Application.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="kinesisFirehose")
    def kinesis_firehose(self) -> Optional[pulumi.Input['AnalyticsApplicationOutputKinesisFirehoseArgs']]:
        """
        The Kinesis Firehose configuration for the destination stream. Conflicts with `kinesis_stream`.
        See Kinesis Firehose below for more details.
        """
        return pulumi.get(self, "kinesis_firehose")

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

    @property
    @pulumi.getter(name="kinesisStream")
    def kinesis_stream(self) -> Optional[pulumi.Input['AnalyticsApplicationOutputKinesisStreamArgs']]:
        """
        The Kinesis Stream configuration for the destination stream. Conflicts with `kinesis_firehose`.
        See Kinesis Stream below for more details.
        """
        return pulumi.get(self, "kinesis_stream")

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

    @property
    @pulumi.getter(name="lambda")
    def lambda_(self) -> Optional[pulumi.Input['AnalyticsApplicationOutputLambdaArgs']]:
        """
        The Lambda function destination. See Lambda below for more details.
        """
        return pulumi.get(self, "lambda_")

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


@pulumi.input_type
class AnalyticsApplicationOutputKinesisFirehoseArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] resource_arn: The ARN of the Kinesis Firehose delivery stream.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to access the stream.
        """
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceArn")
    def resource_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the Kinesis Firehose delivery stream.
        """
        return pulumi.get(self, "resource_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to access the stream.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class AnalyticsApplicationOutputKinesisStreamArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] resource_arn: The ARN of the Kinesis Stream.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to access the stream.
        """
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceArn")
    def resource_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the Kinesis Stream.
        """
        return pulumi.get(self, "resource_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to access the stream.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class AnalyticsApplicationOutputLambdaArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] resource_arn: The ARN of the Lambda function.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to access the Lambda function.
        """
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceArn")
    def resource_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the Lambda function.
        """
        return pulumi.get(self, "resource_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to access the Lambda function.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class AnalyticsApplicationOutputSchemaArgs:
    def __init__(__self__, *,
                 record_format_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] record_format_type: The Format Type of the records on the output stream. Can be `CSV` or `JSON`.
        """
        pulumi.set(__self__, "record_format_type", record_format_type)

    @property
    @pulumi.getter(name="recordFormatType")
    def record_format_type(self) -> pulumi.Input[str]:
        """
        The Format Type of the records on the output stream. Can be `CSV` or `JSON`.
        """
        return pulumi.get(self, "record_format_type")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesArgs:
    def __init__(__self__, *,
                 s3: pulumi.Input['AnalyticsApplicationReferenceDataSourcesS3Args'],
                 schema: pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaArgs'],
                 table_name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['AnalyticsApplicationReferenceDataSourcesS3Args'] s3: The S3 configuration for the reference data source. See S3 Reference below for more details.
        :param pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaArgs'] schema: The Schema format of the data in the streaming source. See Source Schema below for more details.
        :param pulumi.Input[str] table_name: The in-application Table Name.
        :param pulumi.Input[str] id: The ARN of the Kinesis Analytics Application.
        """
        pulumi.set(__self__, "s3", s3)
        pulumi.set(__self__, "schema", schema)
        pulumi.set(__self__, "table_name", table_name)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def s3(self) -> pulumi.Input['AnalyticsApplicationReferenceDataSourcesS3Args']:
        """
        The S3 configuration for the reference data source. See S3 Reference below for more details.
        """
        return pulumi.get(self, "s3")

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

    @property
    @pulumi.getter
    def schema(self) -> pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaArgs']:
        """
        The Schema format of the data in the streaming source. See Source Schema below for more details.
        """
        return pulumi.get(self, "schema")

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

    @property
    @pulumi.getter(name="tableName")
    def table_name(self) -> pulumi.Input[str]:
        """
        The in-application Table Name.
        """
        return pulumi.get(self, "table_name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the Kinesis Analytics Application.
        """
        return pulumi.get(self, "id")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesS3Args:
    def __init__(__self__, *,
                 bucket_arn: pulumi.Input[str],
                 file_key: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] bucket_arn: The S3 Bucket ARN.
        :param pulumi.Input[str] file_key: The File Key name containing reference data.
        :param pulumi.Input[str] role_arn: The ARN of the IAM Role used to send application messages.
        """
        pulumi.set(__self__, "bucket_arn", bucket_arn)
        pulumi.set(__self__, "file_key", file_key)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="bucketArn")
    def bucket_arn(self) -> pulumi.Input[str]:
        """
        The S3 Bucket ARN.
        """
        return pulumi.get(self, "bucket_arn")

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

    @property
    @pulumi.getter(name="fileKey")
    def file_key(self) -> pulumi.Input[str]:
        """
        The File Key name containing reference data.
        """
        return pulumi.get(self, "file_key")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM Role used to send application messages.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesSchemaArgs:
    def __init__(__self__, *,
                 record_columns: pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordColumnArgs']]],
                 record_format: pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatArgs'],
                 record_encoding: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordColumnArgs']]] record_columns: The Record Column mapping for the streaming source data element.
               See Record Columns below for more details.
        :param pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatArgs'] record_format: The Record Format and mapping information to schematize a record.
               See Record Format below for more details.
        :param pulumi.Input[str] record_encoding: The Encoding of the record in the streaming source.
        """
        pulumi.set(__self__, "record_columns", record_columns)
        pulumi.set(__self__, "record_format", record_format)
        if record_encoding is not None:
            pulumi.set(__self__, "record_encoding", record_encoding)

    @property
    @pulumi.getter(name="recordColumns")
    def record_columns(self) -> pulumi.Input[Sequence[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordColumnArgs']]]:
        """
        The Record Column mapping for the streaming source data element.
        See Record Columns below for more details.
        """
        return pulumi.get(self, "record_columns")

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

    @property
    @pulumi.getter(name="recordFormat")
    def record_format(self) -> pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatArgs']:
        """
        The Record Format and mapping information to schematize a record.
        See Record Format below for more details.
        """
        return pulumi.get(self, "record_format")

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

    @property
    @pulumi.getter(name="recordEncoding")
    def record_encoding(self) -> Optional[pulumi.Input[str]]:
        """
        The Encoding of the record in the streaming source.
        """
        return pulumi.get(self, "record_encoding")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesSchemaRecordColumnArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 sql_type: pulumi.Input[str],
                 mapping: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Name of the column.
        :param pulumi.Input[str] sql_type: The SQL Type of the column.
        :param pulumi.Input[str] mapping: The Mapping reference to the data element.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "sql_type", sql_type)
        if mapping is not None:
            pulumi.set(__self__, "mapping", mapping)

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

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

    @property
    @pulumi.getter(name="sqlType")
    def sql_type(self) -> pulumi.Input[str]:
        """
        The SQL Type of the column.
        """
        return pulumi.get(self, "sql_type")

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

    @property
    @pulumi.getter
    def mapping(self) -> Optional[pulumi.Input[str]]:
        """
        The Mapping reference to the data element.
        """
        return pulumi.get(self, "mapping")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatArgs:
    def __init__(__self__, *,
                 mapping_parameters: Optional[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersArgs']] = None,
                 record_format_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersArgs'] mapping_parameters: The Mapping Information for the record format.
               See Mapping Parameters below for more details.
        :param pulumi.Input[str] record_format_type: The type of Record Format. Can be `CSV` or `JSON`.
        """
        if mapping_parameters is not None:
            pulumi.set(__self__, "mapping_parameters", mapping_parameters)
        if record_format_type is not None:
            pulumi.set(__self__, "record_format_type", record_format_type)

    @property
    @pulumi.getter(name="mappingParameters")
    def mapping_parameters(self) -> Optional[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersArgs']]:
        """
        The Mapping Information for the record format.
        See Mapping Parameters below for more details.
        """
        return pulumi.get(self, "mapping_parameters")

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

    @property
    @pulumi.getter(name="recordFormatType")
    def record_format_type(self) -> Optional[pulumi.Input[str]]:
        """
        The type of Record Format. Can be `CSV` or `JSON`.
        """
        return pulumi.get(self, "record_format_type")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersArgs:
    def __init__(__self__, *,
                 csv: Optional[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvArgs']] = None,
                 json: Optional[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonArgs']] = None):
        """
        :param pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvArgs'] csv: Mapping information when the record format uses delimiters.
               See CSV Mapping Parameters below for more details.
        :param pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonArgs'] json: Mapping information when JSON is the record format on the streaming source.
               See JSON Mapping Parameters below for more details.
        """
        if csv is not None:
            pulumi.set(__self__, "csv", csv)
        if json is not None:
            pulumi.set(__self__, "json", json)

    @property
    @pulumi.getter
    def csv(self) -> Optional[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvArgs']]:
        """
        Mapping information when the record format uses delimiters.
        See CSV Mapping Parameters below for more details.
        """
        return pulumi.get(self, "csv")

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

    @property
    @pulumi.getter
    def json(self) -> Optional[pulumi.Input['AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonArgs']]:
        """
        Mapping information when JSON is the record format on the streaming source.
        See JSON Mapping Parameters below for more details.
        """
        return pulumi.get(self, "json")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvArgs:
    def __init__(__self__, *,
                 record_column_delimiter: pulumi.Input[str],
                 record_row_delimiter: pulumi.Input[str]):
        """
        :param pulumi.Input[str] record_column_delimiter: The Column Delimiter.
        :param pulumi.Input[str] record_row_delimiter: The Row Delimiter.
        """
        pulumi.set(__self__, "record_column_delimiter", record_column_delimiter)
        pulumi.set(__self__, "record_row_delimiter", record_row_delimiter)

    @property
    @pulumi.getter(name="recordColumnDelimiter")
    def record_column_delimiter(self) -> pulumi.Input[str]:
        """
        The Column Delimiter.
        """
        return pulumi.get(self, "record_column_delimiter")

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

    @property
    @pulumi.getter(name="recordRowDelimiter")
    def record_row_delimiter(self) -> pulumi.Input[str]:
        """
        The Row Delimiter.
        """
        return pulumi.get(self, "record_row_delimiter")

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


@pulumi.input_type
class AnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonArgs:
    def __init__(__self__, *,
                 record_row_path: pulumi.Input[str]):
        """
        :param pulumi.Input[str] record_row_path: Path to the top-level parent that contains the records.
        """
        pulumi.set(__self__, "record_row_path", record_row_path)

    @property
    @pulumi.getter(name="recordRowPath")
    def record_row_path(self) -> pulumi.Input[str]:
        """
        Path to the top-level parent that contains the records.
        """
        return pulumi.get(self, "record_row_path")

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


@pulumi.input_type
class FirehoseDeliveryStreamElasticsearchConfigurationArgs:
    def __init__(__self__, *,
                 index_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 buffering_interval: Optional[pulumi.Input[int]] = None,
                 buffering_size: Optional[pulumi.Input[int]] = None,
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 cluster_endpoint: Optional[pulumi.Input[str]] = None,
                 domain_arn: Optional[pulumi.Input[str]] = None,
                 index_rotation_period: Optional[pulumi.Input[str]] = None,
                 processing_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationArgs']] = None,
                 retry_duration: Optional[pulumi.Input[int]] = None,
                 s3_backup_mode: Optional[pulumi.Input[str]] = None,
                 type_name: Optional[pulumi.Input[str]] = None,
                 vpc_config: Optional[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationVpcConfigArgs']] = None):
        """
        :param pulumi.Input[str] index_name: The Elasticsearch index name.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role to be assumed by Firehose for calling the Amazon ES Configuration API and for indexing documents.  The pattern needs to be `arn:.*`.
        :param pulumi.Input[int] buffering_interval: Buffer incoming data for the specified period of time, in seconds between 60 to 900, before delivering it to the destination.  The default value is 300s.
        :param pulumi.Input[int] buffering_size: Buffer incoming data to the specified size, in MBs between 1 to 100, before delivering it to the destination.  The default value is 5MB.
        :param pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below
        :param pulumi.Input[str] cluster_endpoint: The endpoint to use when communicating with the cluster. Conflicts with `domain_arn`.
        :param pulumi.Input[str] domain_arn: The ARN of the Amazon ES domain.  The IAM role must have permission for `DescribeElasticsearchDomain`, `DescribeElasticsearchDomains`, and `DescribeElasticsearchDomainConfig` after assuming `RoleARN`.  The pattern needs to be `arn:.*`. Conflicts with `cluster_endpoint`.
        :param pulumi.Input[str] index_rotation_period: The Elasticsearch index rotation period.  Index rotation appends a timestamp to the IndexName to facilitate expiration of old data.  Valid values are `NoRotation`, `OneHour`, `OneDay`, `OneWeek`, and `OneMonth`.  The default value is `OneDay`.
        :param pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationArgs'] processing_configuration: The data processing configuration.  More details are given below.
        :param pulumi.Input[int] retry_duration: After an initial failure to deliver to Amazon Elasticsearch, the total amount of time, in seconds between 0 to 7200, during which Firehose re-attempts delivery (including the first attempt).  After this time has elapsed, the failed documents are written to Amazon S3.  The default value is 300s.  There will be no retry if the value is 0.
        :param pulumi.Input[str] s3_backup_mode: Defines how documents should be delivered to Amazon S3.  Valid values are `FailedDocumentsOnly` and `AllDocuments`.  Default value is `FailedDocumentsOnly`.
        :param pulumi.Input[str] type_name: The Elasticsearch type name with maximum length of 100 characters.
        :param pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationVpcConfigArgs'] vpc_config: The VPC configuration for the delivery stream to connect to Elastic Search associated with the VPC. More details are given below
        """
        pulumi.set(__self__, "index_name", index_name)
        pulumi.set(__self__, "role_arn", role_arn)
        if buffering_interval is not None:
            pulumi.set(__self__, "buffering_interval", buffering_interval)
        if buffering_size is not None:
            pulumi.set(__self__, "buffering_size", buffering_size)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if cluster_endpoint is not None:
            pulumi.set(__self__, "cluster_endpoint", cluster_endpoint)
        if domain_arn is not None:
            pulumi.set(__self__, "domain_arn", domain_arn)
        if index_rotation_period is not None:
            pulumi.set(__self__, "index_rotation_period", index_rotation_period)
        if processing_configuration is not None:
            pulumi.set(__self__, "processing_configuration", processing_configuration)
        if retry_duration is not None:
            pulumi.set(__self__, "retry_duration", retry_duration)
        if s3_backup_mode is not None:
            pulumi.set(__self__, "s3_backup_mode", s3_backup_mode)
        if type_name is not None:
            pulumi.set(__self__, "type_name", type_name)
        if vpc_config is not None:
            pulumi.set(__self__, "vpc_config", vpc_config)

    @property
    @pulumi.getter(name="indexName")
    def index_name(self) -> pulumi.Input[str]:
        """
        The Elasticsearch index name.
        """
        return pulumi.get(self, "index_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role to be assumed by Firehose for calling the Amazon ES Configuration API and for indexing documents.  The pattern needs to be `arn:.*`.
        """
        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="bufferingInterval")
    def buffering_interval(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data for the specified period of time, in seconds between 60 to 900, before delivering it to the destination.  The default value is 300s.
        """
        return pulumi.get(self, "buffering_interval")

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

    @property
    @pulumi.getter(name="bufferingSize")
    def buffering_size(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data to the specified size, in MBs between 1 to 100, before delivering it to the destination.  The default value is 5MB.
        """
        return pulumi.get(self, "buffering_size")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

    @property
    @pulumi.getter(name="clusterEndpoint")
    def cluster_endpoint(self) -> Optional[pulumi.Input[str]]:
        """
        The endpoint to use when communicating with the cluster. Conflicts with `domain_arn`.
        """
        return pulumi.get(self, "cluster_endpoint")

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

    @property
    @pulumi.getter(name="domainArn")
    def domain_arn(self) -> Optional[pulumi.Input[str]]:
        """
        The ARN of the Amazon ES domain.  The IAM role must have permission for `DescribeElasticsearchDomain`, `DescribeElasticsearchDomains`, and `DescribeElasticsearchDomainConfig` after assuming `RoleARN`.  The pattern needs to be `arn:.*`. Conflicts with `cluster_endpoint`.
        """
        return pulumi.get(self, "domain_arn")

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

    @property
    @pulumi.getter(name="indexRotationPeriod")
    def index_rotation_period(self) -> Optional[pulumi.Input[str]]:
        """
        The Elasticsearch index rotation period.  Index rotation appends a timestamp to the IndexName to facilitate expiration of old data.  Valid values are `NoRotation`, `OneHour`, `OneDay`, `OneWeek`, and `OneMonth`.  The default value is `OneDay`.
        """
        return pulumi.get(self, "index_rotation_period")

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

    @property
    @pulumi.getter(name="processingConfiguration")
    def processing_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationArgs']]:
        """
        The data processing configuration.  More details are given below.
        """
        return pulumi.get(self, "processing_configuration")

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

    @property
    @pulumi.getter(name="retryDuration")
    def retry_duration(self) -> Optional[pulumi.Input[int]]:
        """
        After an initial failure to deliver to Amazon Elasticsearch, the total amount of time, in seconds between 0 to 7200, during which Firehose re-attempts delivery (including the first attempt).  After this time has elapsed, the failed documents are written to Amazon S3.  The default value is 300s.  There will be no retry if the value is 0.
        """
        return pulumi.get(self, "retry_duration")

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

    @property
    @pulumi.getter(name="s3BackupMode")
    def s3_backup_mode(self) -> Optional[pulumi.Input[str]]:
        """
        Defines how documents should be delivered to Amazon S3.  Valid values are `FailedDocumentsOnly` and `AllDocuments`.  Default value is `FailedDocumentsOnly`.
        """
        return pulumi.get(self, "s3_backup_mode")

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

    @property
    @pulumi.getter(name="typeName")
    def type_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Elasticsearch type name with maximum length of 100 characters.
        """
        return pulumi.get(self, "type_name")

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

    @property
    @pulumi.getter(name="vpcConfig")
    def vpc_config(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationVpcConfigArgs']]:
        """
        The VPC configuration for the delivery stream to connect to Elastic Search associated with the VPC. More details are given below
        """
        return pulumi.get(self, "vpc_config")

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


@pulumi.input_type
class FirehoseDeliveryStreamElasticsearchConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 processors: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorArgs']]]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables data processing.
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorArgs']]] processors: Array of data processors. More details are given below
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if processors is not None:
            pulumi.set(__self__, "processors", processors)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables data processing.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter
    def processors(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorArgs']]]]:
        """
        Array of data processors. More details are given below
        """
        return pulumi.get(self, "processors")

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


@pulumi.input_type
class FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorParameterArgs']]]] = None):
        """
        :param pulumi.Input[str] type: The type of processor. Valid Values: `Lambda`
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorParameterArgs']]] parameters: Array of processor parameters. More details are given below
        """
        pulumi.set(__self__, "type", type)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of processor. Valid Values: `Lambda`
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorParameterArgs']]]]:
        """
        Array of processor parameters. More details are given below
        """
        return pulumi.get(self, "parameters")

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


@pulumi.input_type
class FirehoseDeliveryStreamElasticsearchConfigurationProcessingConfigurationProcessorParameterArgs:
    def __init__(__self__, *,
                 parameter_name: pulumi.Input[str],
                 parameter_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] parameter_name: Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        :param pulumi.Input[str] parameter_value: Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        pulumi.set(__self__, "parameter_name", parameter_name)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterName")
    def parameter_name(self) -> pulumi.Input[str]:
        """
        Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        """
        return pulumi.get(self, "parameter_name")

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

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> pulumi.Input[str]:
        """
        Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        return pulumi.get(self, "parameter_value")

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


@pulumi.input_type
class FirehoseDeliveryStreamElasticsearchConfigurationVpcConfigArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 security_group_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 subnet_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 vpc_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role to be assumed by Firehose for calling the Amazon EC2 configuration API and for creating network interfaces. Make sure role has necessary [IAM permissions](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-es-vpc)
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_group_ids: A list of security group IDs to associate with Kinesis Firehose.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subnet_ids: A list of subnet IDs to associate with Kinesis Firehose.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "security_group_ids", security_group_ids)
        pulumi.set(__self__, "subnet_ids", subnet_ids)
        if vpc_id is not None:
            pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role to be assumed by Firehose for calling the Amazon EC2 configuration API and for creating network interfaces. Make sure role has necessary [IAM permissions](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-es-vpc)
        """
        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="securityGroupIds")
    def security_group_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of security group IDs to associate with Kinesis Firehose.
        """
        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(name="subnetIds")
    def subnet_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of subnet IDs to associate with Kinesis Firehose.
        """
        return pulumi.get(self, "subnet_ids")

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

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

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationArgs:
    def __init__(__self__, *,
                 bucket_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 buffer_interval: Optional[pulumi.Input[int]] = None,
                 buffer_size: Optional[pulumi.Input[int]] = None,
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 compression_format: Optional[pulumi.Input[str]] = None,
                 data_format_conversion_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationArgs']] = None,
                 error_output_prefix: Optional[pulumi.Input[str]] = None,
                 kms_key_arn: Optional[pulumi.Input[str]] = None,
                 prefix: Optional[pulumi.Input[str]] = None,
                 processing_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationArgs']] = None,
                 s3_backup_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationArgs']] = None,
                 s3_backup_mode: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket_arn: The ARN of the S3 bucket
        :param pulumi.Input[str] role_arn: The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        :param pulumi.Input[int] buffer_interval: Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        :param pulumi.Input[int] buffer_size: Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
               We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below
        :param pulumi.Input[str] compression_format: The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationArgs'] data_format_conversion_configuration: Nested argument for the serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3. More details given below.
        :param pulumi.Input[str] error_output_prefix: Prefix added to failed records before writing them to S3. This prefix appears immediately following the bucket name.
        :param pulumi.Input[str] kms_key_arn: Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
               be used.
        :param pulumi.Input[str] prefix: The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationArgs'] processing_configuration: The data processing configuration.  More details are given below.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationArgs'] s3_backup_configuration: The configuration for backup in Amazon S3. Required if `s3_backup_mode` is `Enabled`. Supports the same fields as `s3_configuration` object.
        :param pulumi.Input[str] s3_backup_mode: The Amazon S3 backup mode.  Valid values are `Disabled` and `Enabled`.  Default value is `Disabled`.
        """
        pulumi.set(__self__, "bucket_arn", bucket_arn)
        pulumi.set(__self__, "role_arn", role_arn)
        if buffer_interval is not None:
            pulumi.set(__self__, "buffer_interval", buffer_interval)
        if buffer_size is not None:
            pulumi.set(__self__, "buffer_size", buffer_size)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if compression_format is not None:
            pulumi.set(__self__, "compression_format", compression_format)
        if data_format_conversion_configuration is not None:
            pulumi.set(__self__, "data_format_conversion_configuration", data_format_conversion_configuration)
        if error_output_prefix is not None:
            pulumi.set(__self__, "error_output_prefix", error_output_prefix)
        if kms_key_arn is not None:
            pulumi.set(__self__, "kms_key_arn", kms_key_arn)
        if prefix is not None:
            pulumi.set(__self__, "prefix", prefix)
        if processing_configuration is not None:
            pulumi.set(__self__, "processing_configuration", processing_configuration)
        if s3_backup_configuration is not None:
            pulumi.set(__self__, "s3_backup_configuration", s3_backup_configuration)
        if s3_backup_mode is not None:
            pulumi.set(__self__, "s3_backup_mode", s3_backup_mode)

    @property
    @pulumi.getter(name="bucketArn")
    def bucket_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the S3 bucket
        """
        return pulumi.get(self, "bucket_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        """
        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="bufferInterval")
    def buffer_interval(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        """
        return pulumi.get(self, "buffer_interval")

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

    @property
    @pulumi.getter(name="bufferSize")
    def buffer_size(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
        We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        """
        return pulumi.get(self, "buffer_size")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

    @property
    @pulumi.getter(name="compressionFormat")
    def compression_format(self) -> Optional[pulumi.Input[str]]:
        """
        The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        """
        return pulumi.get(self, "compression_format")

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

    @property
    @pulumi.getter(name="dataFormatConversionConfiguration")
    def data_format_conversion_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationArgs']]:
        """
        Nested argument for the serializer, deserializer, and schema for converting data from the JSON format to the Parquet or ORC format before writing it to Amazon S3. More details given below.
        """
        return pulumi.get(self, "data_format_conversion_configuration")

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

    @property
    @pulumi.getter(name="errorOutputPrefix")
    def error_output_prefix(self) -> Optional[pulumi.Input[str]]:
        """
        Prefix added to failed records before writing them to S3. This prefix appears immediately following the bucket name.
        """
        return pulumi.get(self, "error_output_prefix")

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

    @property
    @pulumi.getter(name="kmsKeyArn")
    def kms_key_arn(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
        be used.
        """
        return pulumi.get(self, "kms_key_arn")

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

    @property
    @pulumi.getter
    def prefix(self) -> Optional[pulumi.Input[str]]:
        """
        The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        """
        return pulumi.get(self, "prefix")

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

    @property
    @pulumi.getter(name="processingConfiguration")
    def processing_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationArgs']]:
        """
        The data processing configuration.  More details are given below.
        """
        return pulumi.get(self, "processing_configuration")

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

    @property
    @pulumi.getter(name="s3BackupConfiguration")
    def s3_backup_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationArgs']]:
        """
        The configuration for backup in Amazon S3. Required if `s3_backup_mode` is `Enabled`. Supports the same fields as `s3_configuration` object.
        """
        return pulumi.get(self, "s3_backup_configuration")

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

    @property
    @pulumi.getter(name="s3BackupMode")
    def s3_backup_mode(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 backup mode.  Valid values are `Disabled` and `Enabled`.  Default value is `Disabled`.
        """
        return pulumi.get(self, "s3_backup_mode")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationArgs:
    def __init__(__self__, *,
                 input_format_configuration: pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationArgs'],
                 output_format_configuration: pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationArgs'],
                 schema_configuration: pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationSchemaConfigurationArgs'],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationArgs'] input_format_configuration: Nested argument that specifies the deserializer that you want Kinesis Data Firehose to use to convert the format of your data from JSON. More details below.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationArgs'] output_format_configuration: Nested argument that specifies the serializer that you want Kinesis Data Firehose to use to convert the format of your data to the Parquet or ORC format. More details below.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationSchemaConfigurationArgs'] schema_configuration: Nested argument that specifies the AWS Glue Data Catalog table that contains the column information. More details below.
        :param pulumi.Input[bool] enabled: Defaults to `true`. Set it to `false` if you want to disable format conversion while preserving the configuration details.
        """
        pulumi.set(__self__, "input_format_configuration", input_format_configuration)
        pulumi.set(__self__, "output_format_configuration", output_format_configuration)
        pulumi.set(__self__, "schema_configuration", schema_configuration)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter(name="inputFormatConfiguration")
    def input_format_configuration(self) -> pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationArgs']:
        """
        Nested argument that specifies the deserializer that you want Kinesis Data Firehose to use to convert the format of your data from JSON. More details below.
        """
        return pulumi.get(self, "input_format_configuration")

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

    @property
    @pulumi.getter(name="outputFormatConfiguration")
    def output_format_configuration(self) -> pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationArgs']:
        """
        Nested argument that specifies the serializer that you want Kinesis Data Firehose to use to convert the format of your data to the Parquet or ORC format. More details below.
        """
        return pulumi.get(self, "output_format_configuration")

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

    @property
    @pulumi.getter(name="schemaConfiguration")
    def schema_configuration(self) -> pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationSchemaConfigurationArgs']:
        """
        Nested argument that specifies the AWS Glue Data Catalog table that contains the column information. More details below.
        """
        return pulumi.get(self, "schema_configuration")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to `true`. Set it to `false` if you want to disable format conversion while preserving the configuration details.
        """
        return pulumi.get(self, "enabled")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationArgs:
    def __init__(__self__, *,
                 deserializer: pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerArgs']):
        """
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerArgs'] deserializer: Nested argument that specifies which deserializer to use. You can choose either the Apache Hive JSON SerDe or the OpenX JSON SerDe. More details below.
        """
        pulumi.set(__self__, "deserializer", deserializer)

    @property
    @pulumi.getter
    def deserializer(self) -> pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerArgs']:
        """
        Nested argument that specifies which deserializer to use. You can choose either the Apache Hive JSON SerDe or the OpenX JSON SerDe. More details below.
        """
        return pulumi.get(self, "deserializer")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerArgs:
    def __init__(__self__, *,
                 hive_json_ser_de: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerHiveJsonSerDeArgs']] = None,
                 open_x_json_ser_de: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerOpenXJsonSerDeArgs']] = None):
        """
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerHiveJsonSerDeArgs'] hive_json_ser_de: Nested argument that specifies the native Hive / HCatalog JsonSerDe. More details below.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerOpenXJsonSerDeArgs'] open_x_json_ser_de: Nested argument that specifies the OpenX SerDe. More details below.
        """
        if hive_json_ser_de is not None:
            pulumi.set(__self__, "hive_json_ser_de", hive_json_ser_de)
        if open_x_json_ser_de is not None:
            pulumi.set(__self__, "open_x_json_ser_de", open_x_json_ser_de)

    @property
    @pulumi.getter(name="hiveJsonSerDe")
    def hive_json_ser_de(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerHiveJsonSerDeArgs']]:
        """
        Nested argument that specifies the native Hive / HCatalog JsonSerDe. More details below.
        """
        return pulumi.get(self, "hive_json_ser_de")

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

    @property
    @pulumi.getter(name="openXJsonSerDe")
    def open_x_json_ser_de(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerOpenXJsonSerDeArgs']]:
        """
        Nested argument that specifies the OpenX SerDe. More details below.
        """
        return pulumi.get(self, "open_x_json_ser_de")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerHiveJsonSerDeArgs:
    def __init__(__self__, *,
                 timestamp_formats: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] timestamp_formats: A list of how you want Kinesis Data Firehose to parse the date and time stamps that may be present in your input data JSON. To specify these format strings, follow the pattern syntax of JodaTime's DateTimeFormat format strings. For more information, see [Class DateTimeFormat](https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html). You can also use the special value millis to parse time stamps in epoch milliseconds. If you don't specify a format, Kinesis Data Firehose uses java.sql.Timestamp::valueOf by default.
        """
        if timestamp_formats is not None:
            pulumi.set(__self__, "timestamp_formats", timestamp_formats)

    @property
    @pulumi.getter(name="timestampFormats")
    def timestamp_formats(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of how you want Kinesis Data Firehose to parse the date and time stamps that may be present in your input data JSON. To specify these format strings, follow the pattern syntax of JodaTime's DateTimeFormat format strings. For more information, see [Class DateTimeFormat](https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html). You can also use the special value millis to parse time stamps in epoch milliseconds. If you don't specify a format, Kinesis Data Firehose uses java.sql.Timestamp::valueOf by default.
        """
        return pulumi.get(self, "timestamp_formats")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationInputFormatConfigurationDeserializerOpenXJsonSerDeArgs:
    def __init__(__self__, *,
                 case_insensitive: Optional[pulumi.Input[bool]] = None,
                 column_to_json_key_mappings: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 convert_dots_in_json_keys_to_underscores: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[bool] case_insensitive: When set to true, which is the default, Kinesis Data Firehose converts JSON keys to lowercase before deserializing them.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] column_to_json_key_mappings: A map of column names to JSON keys that aren't identical to the column names. This is useful when the JSON contains keys that are Hive keywords. For example, timestamp is a Hive keyword. If you have a JSON key named timestamp, set this parameter to `{ ts = "timestamp" }` to map this key to a column named ts.
        :param pulumi.Input[bool] convert_dots_in_json_keys_to_underscores: When set to `true`, specifies that the names of the keys include dots and that you want Kinesis Data Firehose to replace them with underscores. This is useful because Apache Hive does not allow dots in column names. For example, if the JSON contains a key whose name is "a.b", you can define the column name to be "a_b" when using this option. Defaults to `false`.
        """
        if case_insensitive is not None:
            pulumi.set(__self__, "case_insensitive", case_insensitive)
        if column_to_json_key_mappings is not None:
            pulumi.set(__self__, "column_to_json_key_mappings", column_to_json_key_mappings)
        if convert_dots_in_json_keys_to_underscores is not None:
            pulumi.set(__self__, "convert_dots_in_json_keys_to_underscores", convert_dots_in_json_keys_to_underscores)

    @property
    @pulumi.getter(name="caseInsensitive")
    def case_insensitive(self) -> Optional[pulumi.Input[bool]]:
        """
        When set to true, which is the default, Kinesis Data Firehose converts JSON keys to lowercase before deserializing them.
        """
        return pulumi.get(self, "case_insensitive")

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

    @property
    @pulumi.getter(name="columnToJsonKeyMappings")
    def column_to_json_key_mappings(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        A map of column names to JSON keys that aren't identical to the column names. This is useful when the JSON contains keys that are Hive keywords. For example, timestamp is a Hive keyword. If you have a JSON key named timestamp, set this parameter to `{ ts = "timestamp" }` to map this key to a column named ts.
        """
        return pulumi.get(self, "column_to_json_key_mappings")

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

    @property
    @pulumi.getter(name="convertDotsInJsonKeysToUnderscores")
    def convert_dots_in_json_keys_to_underscores(self) -> Optional[pulumi.Input[bool]]:
        """
        When set to `true`, specifies that the names of the keys include dots and that you want Kinesis Data Firehose to replace them with underscores. This is useful because Apache Hive does not allow dots in column names. For example, if the JSON contains a key whose name is "a.b", you can define the column name to be "a_b" when using this option. Defaults to `false`.
        """
        return pulumi.get(self, "convert_dots_in_json_keys_to_underscores")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationArgs:
    def __init__(__self__, *,
                 serializer: pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerArgs']):
        """
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerArgs'] serializer: Nested argument that specifies which serializer to use. You can choose either the ORC SerDe or the Parquet SerDe. More details below.
        """
        pulumi.set(__self__, "serializer", serializer)

    @property
    @pulumi.getter
    def serializer(self) -> pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerArgs']:
        """
        Nested argument that specifies which serializer to use. You can choose either the ORC SerDe or the Parquet SerDe. More details below.
        """
        return pulumi.get(self, "serializer")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerArgs:
    def __init__(__self__, *,
                 orc_ser_de: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerOrcSerDeArgs']] = None,
                 parquet_ser_de: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerParquetSerDeArgs']] = None):
        """
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerOrcSerDeArgs'] orc_ser_de: Nested argument that specifies converting data to the ORC format before storing it in Amazon S3. For more information, see [Apache ORC](https://orc.apache.org/docs/). More details below.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerParquetSerDeArgs'] parquet_ser_de: Nested argument that specifies converting data to the Parquet format before storing it in Amazon S3. For more information, see [Apache Parquet](https://parquet.apache.org/documentation/latest/). More details below.
        """
        if orc_ser_de is not None:
            pulumi.set(__self__, "orc_ser_de", orc_ser_de)
        if parquet_ser_de is not None:
            pulumi.set(__self__, "parquet_ser_de", parquet_ser_de)

    @property
    @pulumi.getter(name="orcSerDe")
    def orc_ser_de(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerOrcSerDeArgs']]:
        """
        Nested argument that specifies converting data to the ORC format before storing it in Amazon S3. For more information, see [Apache ORC](https://orc.apache.org/docs/). More details below.
        """
        return pulumi.get(self, "orc_ser_de")

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

    @property
    @pulumi.getter(name="parquetSerDe")
    def parquet_ser_de(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerParquetSerDeArgs']]:
        """
        Nested argument that specifies converting data to the Parquet format before storing it in Amazon S3. For more information, see [Apache Parquet](https://parquet.apache.org/documentation/latest/). More details below.
        """
        return pulumi.get(self, "parquet_ser_de")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerOrcSerDeArgs:
    def __init__(__self__, *,
                 block_size_bytes: Optional[pulumi.Input[int]] = None,
                 bloom_filter_columns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 bloom_filter_false_positive_probability: Optional[pulumi.Input[float]] = None,
                 compression: Optional[pulumi.Input[str]] = None,
                 dictionary_key_threshold: Optional[pulumi.Input[float]] = None,
                 enable_padding: Optional[pulumi.Input[bool]] = None,
                 format_version: Optional[pulumi.Input[str]] = None,
                 padding_tolerance: Optional[pulumi.Input[float]] = None,
                 row_index_stride: Optional[pulumi.Input[int]] = None,
                 stripe_size_bytes: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] block_size_bytes: The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] bloom_filter_columns: A list of column names for which you want Kinesis Data Firehose to create bloom filters.
        :param pulumi.Input[float] bloom_filter_false_positive_probability: The Bloom filter false positive probability (FPP). The lower the FPP, the bigger the Bloom filter. The default value is `0.05`, the minimum is `0`, and the maximum is `1`.
        :param pulumi.Input[str] compression: The compression code to use over data blocks. The possible values are `UNCOMPRESSED`, `SNAPPY`, and `GZIP`, with the default being `SNAPPY`. Use `SNAPPY` for higher decompression speed. Use `GZIP` if the compression ratio is more important than speed.
        :param pulumi.Input[float] dictionary_key_threshold: A float that represents the fraction of the total number of non-null rows. To turn off dictionary encoding, set this fraction to a number that is less than the number of distinct keys in a dictionary. To always use dictionary encoding, set this threshold to `1`.
        :param pulumi.Input[bool] enable_padding: Set this to `true` to indicate that you want stripes to be padded to the HDFS block boundaries. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is `false`.
        :param pulumi.Input[str] format_version: The version of the file to write. The possible values are `V0_11` and `V0_12`. The default is `V0_12`.
        :param pulumi.Input[float] padding_tolerance: A float between 0 and 1 that defines the tolerance for block padding as a decimal fraction of stripe size. The default value is `0.05`, which means 5 percent of stripe size. For the default values of 64 MiB ORC stripes and 256 MiB HDFS blocks, the default block padding tolerance of 5 percent reserves a maximum of 3.2 MiB for padding within the 256 MiB block. In such a case, if the available size within the block is more than 3.2 MiB, a new, smaller stripe is inserted to fit within that space. This ensures that no stripe crosses block boundaries and causes remote reads within a node-local task. Kinesis Data Firehose ignores this parameter when `enable_padding` is `false`.
        :param pulumi.Input[int] row_index_stride: The number of rows between index entries. The default is `10000` and the minimum is `1000`.
        :param pulumi.Input[int] stripe_size_bytes: The number of bytes in each stripe. The default is 64 MiB and the minimum is 8 MiB.
        """
        if block_size_bytes is not None:
            pulumi.set(__self__, "block_size_bytes", block_size_bytes)
        if bloom_filter_columns is not None:
            pulumi.set(__self__, "bloom_filter_columns", bloom_filter_columns)
        if bloom_filter_false_positive_probability is not None:
            pulumi.set(__self__, "bloom_filter_false_positive_probability", bloom_filter_false_positive_probability)
        if compression is not None:
            pulumi.set(__self__, "compression", compression)
        if dictionary_key_threshold is not None:
            pulumi.set(__self__, "dictionary_key_threshold", dictionary_key_threshold)
        if enable_padding is not None:
            pulumi.set(__self__, "enable_padding", enable_padding)
        if format_version is not None:
            pulumi.set(__self__, "format_version", format_version)
        if padding_tolerance is not None:
            pulumi.set(__self__, "padding_tolerance", padding_tolerance)
        if row_index_stride is not None:
            pulumi.set(__self__, "row_index_stride", row_index_stride)
        if stripe_size_bytes is not None:
            pulumi.set(__self__, "stripe_size_bytes", stripe_size_bytes)

    @property
    @pulumi.getter(name="blockSizeBytes")
    def block_size_bytes(self) -> Optional[pulumi.Input[int]]:
        """
        The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
        """
        return pulumi.get(self, "block_size_bytes")

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

    @property
    @pulumi.getter(name="bloomFilterColumns")
    def bloom_filter_columns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of column names for which you want Kinesis Data Firehose to create bloom filters.
        """
        return pulumi.get(self, "bloom_filter_columns")

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

    @property
    @pulumi.getter(name="bloomFilterFalsePositiveProbability")
    def bloom_filter_false_positive_probability(self) -> Optional[pulumi.Input[float]]:
        """
        The Bloom filter false positive probability (FPP). The lower the FPP, the bigger the Bloom filter. The default value is `0.05`, the minimum is `0`, and the maximum is `1`.
        """
        return pulumi.get(self, "bloom_filter_false_positive_probability")

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

    @property
    @pulumi.getter
    def compression(self) -> Optional[pulumi.Input[str]]:
        """
        The compression code to use over data blocks. The possible values are `UNCOMPRESSED`, `SNAPPY`, and `GZIP`, with the default being `SNAPPY`. Use `SNAPPY` for higher decompression speed. Use `GZIP` if the compression ratio is more important than speed.
        """
        return pulumi.get(self, "compression")

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

    @property
    @pulumi.getter(name="dictionaryKeyThreshold")
    def dictionary_key_threshold(self) -> Optional[pulumi.Input[float]]:
        """
        A float that represents the fraction of the total number of non-null rows. To turn off dictionary encoding, set this fraction to a number that is less than the number of distinct keys in a dictionary. To always use dictionary encoding, set this threshold to `1`.
        """
        return pulumi.get(self, "dictionary_key_threshold")

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

    @property
    @pulumi.getter(name="enablePadding")
    def enable_padding(self) -> Optional[pulumi.Input[bool]]:
        """
        Set this to `true` to indicate that you want stripes to be padded to the HDFS block boundaries. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is `false`.
        """
        return pulumi.get(self, "enable_padding")

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

    @property
    @pulumi.getter(name="formatVersion")
    def format_version(self) -> Optional[pulumi.Input[str]]:
        """
        The version of the file to write. The possible values are `V0_11` and `V0_12`. The default is `V0_12`.
        """
        return pulumi.get(self, "format_version")

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

    @property
    @pulumi.getter(name="paddingTolerance")
    def padding_tolerance(self) -> Optional[pulumi.Input[float]]:
        """
        A float between 0 and 1 that defines the tolerance for block padding as a decimal fraction of stripe size. The default value is `0.05`, which means 5 percent of stripe size. For the default values of 64 MiB ORC stripes and 256 MiB HDFS blocks, the default block padding tolerance of 5 percent reserves a maximum of 3.2 MiB for padding within the 256 MiB block. In such a case, if the available size within the block is more than 3.2 MiB, a new, smaller stripe is inserted to fit within that space. This ensures that no stripe crosses block boundaries and causes remote reads within a node-local task. Kinesis Data Firehose ignores this parameter when `enable_padding` is `false`.
        """
        return pulumi.get(self, "padding_tolerance")

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

    @property
    @pulumi.getter(name="rowIndexStride")
    def row_index_stride(self) -> Optional[pulumi.Input[int]]:
        """
        The number of rows between index entries. The default is `10000` and the minimum is `1000`.
        """
        return pulumi.get(self, "row_index_stride")

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

    @property
    @pulumi.getter(name="stripeSizeBytes")
    def stripe_size_bytes(self) -> Optional[pulumi.Input[int]]:
        """
        The number of bytes in each stripe. The default is 64 MiB and the minimum is 8 MiB.
        """
        return pulumi.get(self, "stripe_size_bytes")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationOutputFormatConfigurationSerializerParquetSerDeArgs:
    def __init__(__self__, *,
                 block_size_bytes: Optional[pulumi.Input[int]] = None,
                 compression: Optional[pulumi.Input[str]] = None,
                 enable_dictionary_compression: Optional[pulumi.Input[bool]] = None,
                 max_padding_bytes: Optional[pulumi.Input[int]] = None,
                 page_size_bytes: Optional[pulumi.Input[int]] = None,
                 writer_version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] block_size_bytes: The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
        :param pulumi.Input[str] compression: The compression code to use over data blocks. The possible values are `UNCOMPRESSED`, `SNAPPY`, and `GZIP`, with the default being `SNAPPY`. Use `SNAPPY` for higher decompression speed. Use `GZIP` if the compression ratio is more important than speed.
        :param pulumi.Input[bool] enable_dictionary_compression: Indicates whether to enable dictionary compression.
        :param pulumi.Input[int] max_padding_bytes: The maximum amount of padding to apply. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is `0`.
        :param pulumi.Input[int] page_size_bytes: The Parquet page size. Column chunks are divided into pages. A page is conceptually an indivisible unit (in terms of compression and encoding). The minimum value is 64 KiB and the default is 1 MiB.
        :param pulumi.Input[str] writer_version: Indicates the version of row format to output. The possible values are `V1` and `V2`. The default is `V1`.
        """
        if block_size_bytes is not None:
            pulumi.set(__self__, "block_size_bytes", block_size_bytes)
        if compression is not None:
            pulumi.set(__self__, "compression", compression)
        if enable_dictionary_compression is not None:
            pulumi.set(__self__, "enable_dictionary_compression", enable_dictionary_compression)
        if max_padding_bytes is not None:
            pulumi.set(__self__, "max_padding_bytes", max_padding_bytes)
        if page_size_bytes is not None:
            pulumi.set(__self__, "page_size_bytes", page_size_bytes)
        if writer_version is not None:
            pulumi.set(__self__, "writer_version", writer_version)

    @property
    @pulumi.getter(name="blockSizeBytes")
    def block_size_bytes(self) -> Optional[pulumi.Input[int]]:
        """
        The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Kinesis Data Firehose uses this value for padding calculations.
        """
        return pulumi.get(self, "block_size_bytes")

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

    @property
    @pulumi.getter
    def compression(self) -> Optional[pulumi.Input[str]]:
        """
        The compression code to use over data blocks. The possible values are `UNCOMPRESSED`, `SNAPPY`, and `GZIP`, with the default being `SNAPPY`. Use `SNAPPY` for higher decompression speed. Use `GZIP` if the compression ratio is more important than speed.
        """
        return pulumi.get(self, "compression")

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

    @property
    @pulumi.getter(name="enableDictionaryCompression")
    def enable_dictionary_compression(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether to enable dictionary compression.
        """
        return pulumi.get(self, "enable_dictionary_compression")

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

    @property
    @pulumi.getter(name="maxPaddingBytes")
    def max_padding_bytes(self) -> Optional[pulumi.Input[int]]:
        """
        The maximum amount of padding to apply. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is `0`.
        """
        return pulumi.get(self, "max_padding_bytes")

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

    @property
    @pulumi.getter(name="pageSizeBytes")
    def page_size_bytes(self) -> Optional[pulumi.Input[int]]:
        """
        The Parquet page size. Column chunks are divided into pages. A page is conceptually an indivisible unit (in terms of compression and encoding). The minimum value is 64 KiB and the default is 1 MiB.
        """
        return pulumi.get(self, "page_size_bytes")

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

    @property
    @pulumi.getter(name="writerVersion")
    def writer_version(self) -> Optional[pulumi.Input[str]]:
        """
        Indicates the version of row format to output. The possible values are `V1` and `V2`. The default is `V1`.
        """
        return pulumi.get(self, "writer_version")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationDataFormatConversionConfigurationSchemaConfigurationArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 table_name: pulumi.Input[str],
                 catalog_id: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 version_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] database_name: Specifies the name of the AWS Glue database that contains the schema for the output data.
        :param pulumi.Input[str] role_arn: The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        :param pulumi.Input[str] table_name: Specifies the AWS Glue table that contains the column information that constitutes your data schema.
        :param pulumi.Input[str] catalog_id: The ID of the AWS Glue Data Catalog. If you don't supply this, the AWS account ID is used by default.
        :param pulumi.Input[str] region: If you don't specify an AWS Region, the default is the current region.
        :param pulumi.Input[str] version_id: Specifies the table version for the output data schema. Defaults to `LATEST`.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "table_name", table_name)
        if catalog_id is not None:
            pulumi.set(__self__, "catalog_id", catalog_id)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if version_id is not None:
            pulumi.set(__self__, "version_id", version_id)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the AWS Glue database that contains the schema for the output data.
        """
        return pulumi.get(self, "database_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        """
        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="tableName")
    def table_name(self) -> pulumi.Input[str]:
        """
        Specifies the AWS Glue table that contains the column information that constitutes your data schema.
        """
        return pulumi.get(self, "table_name")

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

    @property
    @pulumi.getter(name="catalogId")
    def catalog_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the AWS Glue Data Catalog. If you don't supply this, the AWS account ID is used by default.
        """
        return pulumi.get(self, "catalog_id")

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

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        If you don't specify an AWS Region, the default is the current region.
        """
        return pulumi.get(self, "region")

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

    @property
    @pulumi.getter(name="versionId")
    def version_id(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the table version for the output data schema. Defaults to `LATEST`.
        """
        return pulumi.get(self, "version_id")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 processors: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorArgs']]]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables data processing.
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorArgs']]] processors: Array of data processors. More details are given below
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if processors is not None:
            pulumi.set(__self__, "processors", processors)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables data processing.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter
    def processors(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorArgs']]]]:
        """
        Array of data processors. More details are given below
        """
        return pulumi.get(self, "processors")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorParameterArgs']]]] = None):
        """
        :param pulumi.Input[str] type: The type of processor. Valid Values: `Lambda`
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorParameterArgs']]] parameters: Array of processor parameters. More details are given below
        """
        pulumi.set(__self__, "type", type)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of processor. Valid Values: `Lambda`
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorParameterArgs']]]]:
        """
        Array of processor parameters. More details are given below
        """
        return pulumi.get(self, "parameters")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationProcessingConfigurationProcessorParameterArgs:
    def __init__(__self__, *,
                 parameter_name: pulumi.Input[str],
                 parameter_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] parameter_name: Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        :param pulumi.Input[str] parameter_value: Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        pulumi.set(__self__, "parameter_name", parameter_name)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterName")
    def parameter_name(self) -> pulumi.Input[str]:
        """
        Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        """
        return pulumi.get(self, "parameter_name")

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

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> pulumi.Input[str]:
        """
        Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        return pulumi.get(self, "parameter_value")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationArgs:
    def __init__(__self__, *,
                 bucket_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 buffer_interval: Optional[pulumi.Input[int]] = None,
                 buffer_size: Optional[pulumi.Input[int]] = None,
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 compression_format: Optional[pulumi.Input[str]] = None,
                 kms_key_arn: Optional[pulumi.Input[str]] = None,
                 prefix: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket_arn: The ARN of the S3 bucket
        :param pulumi.Input[str] role_arn: The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        :param pulumi.Input[int] buffer_interval: Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        :param pulumi.Input[int] buffer_size: Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
               We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        :param pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below
        :param pulumi.Input[str] compression_format: The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        :param pulumi.Input[str] kms_key_arn: Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
               be used.
        :param pulumi.Input[str] prefix: The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        """
        pulumi.set(__self__, "bucket_arn", bucket_arn)
        pulumi.set(__self__, "role_arn", role_arn)
        if buffer_interval is not None:
            pulumi.set(__self__, "buffer_interval", buffer_interval)
        if buffer_size is not None:
            pulumi.set(__self__, "buffer_size", buffer_size)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if compression_format is not None:
            pulumi.set(__self__, "compression_format", compression_format)
        if kms_key_arn is not None:
            pulumi.set(__self__, "kms_key_arn", kms_key_arn)
        if prefix is not None:
            pulumi.set(__self__, "prefix", prefix)

    @property
    @pulumi.getter(name="bucketArn")
    def bucket_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the S3 bucket
        """
        return pulumi.get(self, "bucket_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        """
        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="bufferInterval")
    def buffer_interval(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        """
        return pulumi.get(self, "buffer_interval")

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

    @property
    @pulumi.getter(name="bufferSize")
    def buffer_size(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
        We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        """
        return pulumi.get(self, "buffer_size")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

    @property
    @pulumi.getter(name="compressionFormat")
    def compression_format(self) -> Optional[pulumi.Input[str]]:
        """
        The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        """
        return pulumi.get(self, "compression_format")

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

    @property
    @pulumi.getter(name="kmsKeyArn")
    def kms_key_arn(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
        be used.
        """
        return pulumi.get(self, "kms_key_arn")

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

    @property
    @pulumi.getter
    def prefix(self) -> Optional[pulumi.Input[str]]:
        """
        The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        """
        return pulumi.get(self, "prefix")

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


@pulumi.input_type
class FirehoseDeliveryStreamExtendedS3ConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamHttpEndpointConfigurationArgs:
    def __init__(__self__, *,
                 url: pulumi.Input[str],
                 access_key: Optional[pulumi.Input[str]] = None,
                 buffering_interval: Optional[pulumi.Input[int]] = None,
                 buffering_size: Optional[pulumi.Input[int]] = None,
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 processing_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationArgs']] = None,
                 request_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationArgs']] = None,
                 retry_duration: Optional[pulumi.Input[int]] = None,
                 role_arn: Optional[pulumi.Input[str]] = None,
                 s3_backup_mode: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] url: The HTTP endpoint URL to which Kinesis Firehose sends your data.
        :param pulumi.Input[str] access_key: The access key required for Kinesis Firehose to authenticate with the HTTP endpoint selected as the destination.
        :param pulumi.Input[int] buffering_interval: Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300 (5 minutes).
        :param pulumi.Input[int] buffering_size: Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
        :param pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below.
        :param pulumi.Input[str] name: The HTTP endpoint name.
        :param pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationArgs'] processing_configuration: The data processing configuration.  More details are given below.
        :param pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationArgs'] request_configuration: The request configuration.  More details are given below.
        :param pulumi.Input[int] retry_duration: Total amount of seconds Firehose spends on retries. This duration starts after the initial attempt fails, It does not include the time periods during which Firehose waits for acknowledgment from the specified destination after each attempt. Valid values between `0` and `7200`. Default is `300`.
        :param pulumi.Input[str] role_arn: Kinesis Data Firehose uses this IAM role for all the permissions that the delivery stream needs. The pattern needs to be `arn:.*`.
        :param pulumi.Input[str] s3_backup_mode: Defines how documents should be delivered to Amazon S3.  Valid values are `FailedEventsOnly` and `AllEvents`.  Default value is `FailedEventsOnly`.
        """
        pulumi.set(__self__, "url", url)
        if access_key is not None:
            pulumi.set(__self__, "access_key", access_key)
        if buffering_interval is not None:
            pulumi.set(__self__, "buffering_interval", buffering_interval)
        if buffering_size is not None:
            pulumi.set(__self__, "buffering_size", buffering_size)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if processing_configuration is not None:
            pulumi.set(__self__, "processing_configuration", processing_configuration)
        if request_configuration is not None:
            pulumi.set(__self__, "request_configuration", request_configuration)
        if retry_duration is not None:
            pulumi.set(__self__, "retry_duration", retry_duration)
        if role_arn is not None:
            pulumi.set(__self__, "role_arn", role_arn)
        if s3_backup_mode is not None:
            pulumi.set(__self__, "s3_backup_mode", s3_backup_mode)

    @property
    @pulumi.getter
    def url(self) -> pulumi.Input[str]:
        """
        The HTTP endpoint URL to which Kinesis Firehose sends your data.
        """
        return pulumi.get(self, "url")

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

    @property
    @pulumi.getter(name="accessKey")
    def access_key(self) -> Optional[pulumi.Input[str]]:
        """
        The access key required for Kinesis Firehose to authenticate with the HTTP endpoint selected as the destination.
        """
        return pulumi.get(self, "access_key")

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

    @property
    @pulumi.getter(name="bufferingInterval")
    def buffering_interval(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300 (5 minutes).
        """
        return pulumi.get(self, "buffering_interval")

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

    @property
    @pulumi.getter(name="bufferingSize")
    def buffering_size(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
        """
        return pulumi.get(self, "buffering_size")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below.
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

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

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

    @property
    @pulumi.getter(name="processingConfiguration")
    def processing_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationArgs']]:
        """
        The data processing configuration.  More details are given below.
        """
        return pulumi.get(self, "processing_configuration")

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

    @property
    @pulumi.getter(name="requestConfiguration")
    def request_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationArgs']]:
        """
        The request configuration.  More details are given below.
        """
        return pulumi.get(self, "request_configuration")

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

    @property
    @pulumi.getter(name="retryDuration")
    def retry_duration(self) -> Optional[pulumi.Input[int]]:
        """
        Total amount of seconds Firehose spends on retries. This duration starts after the initial attempt fails, It does not include the time periods during which Firehose waits for acknowledgment from the specified destination after each attempt. Valid values between `0` and `7200`. Default is `300`.
        """
        return pulumi.get(self, "retry_duration")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> Optional[pulumi.Input[str]]:
        """
        Kinesis Data Firehose uses this IAM role for all the permissions that the delivery stream needs. The pattern needs to be `arn:.*`.
        """
        return pulumi.get(self, "role_arn")

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

    @property
    @pulumi.getter(name="s3BackupMode")
    def s3_backup_mode(self) -> Optional[pulumi.Input[str]]:
        """
        Defines how documents should be delivered to Amazon S3.  Valid values are `FailedEventsOnly` and `AllEvents`.  Default value is `FailedEventsOnly`.
        """
        return pulumi.get(self, "s3_backup_mode")

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


@pulumi.input_type
class FirehoseDeliveryStreamHttpEndpointConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 processors: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorArgs']]]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables data processing.
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorArgs']]] processors: Array of data processors. More details are given below
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if processors is not None:
            pulumi.set(__self__, "processors", processors)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables data processing.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter
    def processors(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorArgs']]]]:
        """
        Array of data processors. More details are given below
        """
        return pulumi.get(self, "processors")

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


@pulumi.input_type
class FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorParameterArgs']]]] = None):
        """
        :param pulumi.Input[str] type: The type of processor. Valid Values: `Lambda`
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorParameterArgs']]] parameters: Array of processor parameters. More details are given below
        """
        pulumi.set(__self__, "type", type)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of processor. Valid Values: `Lambda`
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorParameterArgs']]]]:
        """
        Array of processor parameters. More details are given below
        """
        return pulumi.get(self, "parameters")

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


@pulumi.input_type
class FirehoseDeliveryStreamHttpEndpointConfigurationProcessingConfigurationProcessorParameterArgs:
    def __init__(__self__, *,
                 parameter_name: pulumi.Input[str],
                 parameter_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] parameter_name: Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        :param pulumi.Input[str] parameter_value: Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        pulumi.set(__self__, "parameter_name", parameter_name)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterName")
    def parameter_name(self) -> pulumi.Input[str]:
        """
        Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        """
        return pulumi.get(self, "parameter_name")

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

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> pulumi.Input[str]:
        """
        Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        return pulumi.get(self, "parameter_value")

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


@pulumi.input_type
class FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationArgs:
    def __init__(__self__, *,
                 common_attributes: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationCommonAttributeArgs']]]] = None,
                 content_encoding: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationCommonAttributeArgs']]] common_attributes: Describes the metadata sent to the HTTP endpoint destination. More details are given below
        :param pulumi.Input[str] content_encoding: Kinesis Data Firehose uses the content encoding to compress the body of a request before sending the request to the destination. Valid values are `NONE` and `GZIP`.  Default value is `NONE`.
        """
        if common_attributes is not None:
            pulumi.set(__self__, "common_attributes", common_attributes)
        if content_encoding is not None:
            pulumi.set(__self__, "content_encoding", content_encoding)

    @property
    @pulumi.getter(name="commonAttributes")
    def common_attributes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationCommonAttributeArgs']]]]:
        """
        Describes the metadata sent to the HTTP endpoint destination. More details are given below
        """
        return pulumi.get(self, "common_attributes")

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

    @property
    @pulumi.getter(name="contentEncoding")
    def content_encoding(self) -> Optional[pulumi.Input[str]]:
        """
        Kinesis Data Firehose uses the content encoding to compress the body of a request before sending the request to the destination. Valid values are `NONE` and `GZIP`.  Default value is `NONE`.
        """
        return pulumi.get(self, "content_encoding")

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


@pulumi.input_type
class FirehoseDeliveryStreamHttpEndpointConfigurationRequestConfigurationCommonAttributeArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the HTTP endpoint common attribute.
        :param pulumi.Input[str] value: The value of the HTTP endpoint common attribute.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

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

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of the HTTP endpoint common attribute.
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class FirehoseDeliveryStreamKinesisSourceConfigurationArgs:
    def __init__(__self__, *,
                 kinesis_stream_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] kinesis_stream_arn: The kinesis stream used as the source of the firehose delivery stream.
        :param pulumi.Input[str] role_arn: The ARN of the role that provides access to the source Kinesis stream.
        """
        pulumi.set(__self__, "kinesis_stream_arn", kinesis_stream_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="kinesisStreamArn")
    def kinesis_stream_arn(self) -> pulumi.Input[str]:
        """
        The kinesis stream used as the source of the firehose delivery stream.
        """
        return pulumi.get(self, "kinesis_stream_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the role that provides access to the source Kinesis stream.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.input_type
class FirehoseDeliveryStreamRedshiftConfigurationArgs:
    def __init__(__self__, *,
                 cluster_jdbcurl: pulumi.Input[str],
                 data_table_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 username: pulumi.Input[str],
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 copy_options: Optional[pulumi.Input[str]] = None,
                 data_table_columns: Optional[pulumi.Input[str]] = None,
                 processing_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationArgs']] = None,
                 retry_duration: Optional[pulumi.Input[int]] = None,
                 s3_backup_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationArgs']] = None,
                 s3_backup_mode: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] cluster_jdbcurl: The jdbcurl of the redshift cluster.
        :param pulumi.Input[str] data_table_name: The name of the table in the redshift cluster that the s3 bucket will copy to.
        :param pulumi.Input[str] password: The password for the username above.
        :param pulumi.Input[str] role_arn: The arn of the role the stream assumes.
        :param pulumi.Input[str] username: The username that the firehose delivery stream will assume. It is strongly recommended that the username and password provided is used exclusively for Amazon Kinesis Firehose purposes, and that the permissions for the account are restricted for Amazon Redshift INSERT permissions.
        :param pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below
        :param pulumi.Input[str] copy_options: Copy options for copying the data from the s3 intermediate bucket into redshift, for example to change the default delimiter. For valid values, see the [AWS documentation](http://docs.aws.amazon.com/firehose/latest/APIReference/API_CopyCommand.html)
        :param pulumi.Input[str] data_table_columns: The data table columns that will be targeted by the copy command.
        :param pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationArgs'] processing_configuration: The data processing configuration.  More details are given below.
        :param pulumi.Input[int] retry_duration: The length of time during which Firehose retries delivery after a failure, starting from the initial request and including the first attempt. The default value is 3600 seconds (60 minutes). Firehose does not retry if the value of DurationInSeconds is 0 (zero) or if the first delivery attempt takes longer than the current value.
        :param pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationArgs'] s3_backup_configuration: The configuration for backup in Amazon S3. Required if `s3_backup_mode` is `Enabled`. Supports the same fields as `s3_configuration` object.
        :param pulumi.Input[str] s3_backup_mode: The Amazon S3 backup mode.  Valid values are `Disabled` and `Enabled`.  Default value is `Disabled`.
        """
        pulumi.set(__self__, "cluster_jdbcurl", cluster_jdbcurl)
        pulumi.set(__self__, "data_table_name", data_table_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "username", username)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if copy_options is not None:
            pulumi.set(__self__, "copy_options", copy_options)
        if data_table_columns is not None:
            pulumi.set(__self__, "data_table_columns", data_table_columns)
        if processing_configuration is not None:
            pulumi.set(__self__, "processing_configuration", processing_configuration)
        if retry_duration is not None:
            pulumi.set(__self__, "retry_duration", retry_duration)
        if s3_backup_configuration is not None:
            pulumi.set(__self__, "s3_backup_configuration", s3_backup_configuration)
        if s3_backup_mode is not None:
            pulumi.set(__self__, "s3_backup_mode", s3_backup_mode)

    @property
    @pulumi.getter(name="clusterJdbcurl")
    def cluster_jdbcurl(self) -> pulumi.Input[str]:
        """
        The jdbcurl of the redshift cluster.
        """
        return pulumi.get(self, "cluster_jdbcurl")

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

    @property
    @pulumi.getter(name="dataTableName")
    def data_table_name(self) -> pulumi.Input[str]:
        """
        The name of the table in the redshift cluster that the s3 bucket will copy to.
        """
        return pulumi.get(self, "data_table_name")

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

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password for the username above.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The arn of the role the stream assumes.
        """
        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
    def username(self) -> pulumi.Input[str]:
        """
        The username that the firehose delivery stream will assume. It is strongly recommended that the username and password provided is used exclusively for Amazon Kinesis Firehose purposes, and that the permissions for the account are restricted for Amazon Redshift INSERT permissions.
        """
        return pulumi.get(self, "username")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

    @property
    @pulumi.getter(name="copyOptions")
    def copy_options(self) -> Optional[pulumi.Input[str]]:
        """
        Copy options for copying the data from the s3 intermediate bucket into redshift, for example to change the default delimiter. For valid values, see the [AWS documentation](http://docs.aws.amazon.com/firehose/latest/APIReference/API_CopyCommand.html)
        """
        return pulumi.get(self, "copy_options")

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

    @property
    @pulumi.getter(name="dataTableColumns")
    def data_table_columns(self) -> Optional[pulumi.Input[str]]:
        """
        The data table columns that will be targeted by the copy command.
        """
        return pulumi.get(self, "data_table_columns")

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

    @property
    @pulumi.getter(name="processingConfiguration")
    def processing_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationArgs']]:
        """
        The data processing configuration.  More details are given below.
        """
        return pulumi.get(self, "processing_configuration")

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

    @property
    @pulumi.getter(name="retryDuration")
    def retry_duration(self) -> Optional[pulumi.Input[int]]:
        """
        The length of time during which Firehose retries delivery after a failure, starting from the initial request and including the first attempt. The default value is 3600 seconds (60 minutes). Firehose does not retry if the value of DurationInSeconds is 0 (zero) or if the first delivery attempt takes longer than the current value.
        """
        return pulumi.get(self, "retry_duration")

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

    @property
    @pulumi.getter(name="s3BackupConfiguration")
    def s3_backup_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationArgs']]:
        """
        The configuration for backup in Amazon S3. Required if `s3_backup_mode` is `Enabled`. Supports the same fields as `s3_configuration` object.
        """
        return pulumi.get(self, "s3_backup_configuration")

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

    @property
    @pulumi.getter(name="s3BackupMode")
    def s3_backup_mode(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 backup mode.  Valid values are `Disabled` and `Enabled`.  Default value is `Disabled`.
        """
        return pulumi.get(self, "s3_backup_mode")

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


@pulumi.input_type
class FirehoseDeliveryStreamRedshiftConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 processors: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorArgs']]]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables data processing.
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorArgs']]] processors: Array of data processors. More details are given below
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if processors is not None:
            pulumi.set(__self__, "processors", processors)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables data processing.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter
    def processors(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorArgs']]]]:
        """
        Array of data processors. More details are given below
        """
        return pulumi.get(self, "processors")

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


@pulumi.input_type
class FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorParameterArgs']]]] = None):
        """
        :param pulumi.Input[str] type: The type of processor. Valid Values: `Lambda`
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorParameterArgs']]] parameters: Array of processor parameters. More details are given below
        """
        pulumi.set(__self__, "type", type)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of processor. Valid Values: `Lambda`
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorParameterArgs']]]]:
        """
        Array of processor parameters. More details are given below
        """
        return pulumi.get(self, "parameters")

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


@pulumi.input_type
class FirehoseDeliveryStreamRedshiftConfigurationProcessingConfigurationProcessorParameterArgs:
    def __init__(__self__, *,
                 parameter_name: pulumi.Input[str],
                 parameter_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] parameter_name: Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        :param pulumi.Input[str] parameter_value: Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        pulumi.set(__self__, "parameter_name", parameter_name)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterName")
    def parameter_name(self) -> pulumi.Input[str]:
        """
        Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        """
        return pulumi.get(self, "parameter_name")

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

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> pulumi.Input[str]:
        """
        Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        return pulumi.get(self, "parameter_value")

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


@pulumi.input_type
class FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationArgs:
    def __init__(__self__, *,
                 bucket_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 buffer_interval: Optional[pulumi.Input[int]] = None,
                 buffer_size: Optional[pulumi.Input[int]] = None,
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 compression_format: Optional[pulumi.Input[str]] = None,
                 kms_key_arn: Optional[pulumi.Input[str]] = None,
                 prefix: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket_arn: The ARN of the S3 bucket
        :param pulumi.Input[str] role_arn: The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        :param pulumi.Input[int] buffer_interval: Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        :param pulumi.Input[int] buffer_size: Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
               We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        :param pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below
        :param pulumi.Input[str] compression_format: The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        :param pulumi.Input[str] kms_key_arn: Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
               be used.
        :param pulumi.Input[str] prefix: The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        """
        pulumi.set(__self__, "bucket_arn", bucket_arn)
        pulumi.set(__self__, "role_arn", role_arn)
        if buffer_interval is not None:
            pulumi.set(__self__, "buffer_interval", buffer_interval)
        if buffer_size is not None:
            pulumi.set(__self__, "buffer_size", buffer_size)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if compression_format is not None:
            pulumi.set(__self__, "compression_format", compression_format)
        if kms_key_arn is not None:
            pulumi.set(__self__, "kms_key_arn", kms_key_arn)
        if prefix is not None:
            pulumi.set(__self__, "prefix", prefix)

    @property
    @pulumi.getter(name="bucketArn")
    def bucket_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the S3 bucket
        """
        return pulumi.get(self, "bucket_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        """
        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="bufferInterval")
    def buffer_interval(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        """
        return pulumi.get(self, "buffer_interval")

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

    @property
    @pulumi.getter(name="bufferSize")
    def buffer_size(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
        We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        """
        return pulumi.get(self, "buffer_size")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

    @property
    @pulumi.getter(name="compressionFormat")
    def compression_format(self) -> Optional[pulumi.Input[str]]:
        """
        The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        """
        return pulumi.get(self, "compression_format")

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

    @property
    @pulumi.getter(name="kmsKeyArn")
    def kms_key_arn(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
        be used.
        """
        return pulumi.get(self, "kms_key_arn")

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

    @property
    @pulumi.getter
    def prefix(self) -> Optional[pulumi.Input[str]]:
        """
        The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        """
        return pulumi.get(self, "prefix")

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


@pulumi.input_type
class FirehoseDeliveryStreamRedshiftConfigurationS3BackupConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamS3ConfigurationArgs:
    def __init__(__self__, *,
                 bucket_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 buffer_interval: Optional[pulumi.Input[int]] = None,
                 buffer_size: Optional[pulumi.Input[int]] = None,
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamS3ConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 compression_format: Optional[pulumi.Input[str]] = None,
                 kms_key_arn: Optional[pulumi.Input[str]] = None,
                 prefix: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket_arn: The ARN of the S3 bucket
        :param pulumi.Input[str] role_arn: The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        :param pulumi.Input[int] buffer_interval: Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        :param pulumi.Input[int] buffer_size: Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
               We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        :param pulumi.Input['FirehoseDeliveryStreamS3ConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below
        :param pulumi.Input[str] compression_format: The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        :param pulumi.Input[str] kms_key_arn: Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
               be used.
        :param pulumi.Input[str] prefix: The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        """
        pulumi.set(__self__, "bucket_arn", bucket_arn)
        pulumi.set(__self__, "role_arn", role_arn)
        if buffer_interval is not None:
            pulumi.set(__self__, "buffer_interval", buffer_interval)
        if buffer_size is not None:
            pulumi.set(__self__, "buffer_size", buffer_size)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if compression_format is not None:
            pulumi.set(__self__, "compression_format", compression_format)
        if kms_key_arn is not None:
            pulumi.set(__self__, "kms_key_arn", kms_key_arn)
        if prefix is not None:
            pulumi.set(__self__, "prefix", prefix)

    @property
    @pulumi.getter(name="bucketArn")
    def bucket_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the S3 bucket
        """
        return pulumi.get(self, "bucket_arn")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The role that Kinesis Data Firehose can use to access AWS Glue. This role must be in the same account you use for Kinesis Data Firehose. Cross-account roles aren't allowed.
        """
        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="bufferInterval")
    def buffer_interval(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data for the specified period of time, in seconds, before delivering it to the destination. The default value is 300.
        """
        return pulumi.get(self, "buffer_interval")

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

    @property
    @pulumi.getter(name="bufferSize")
    def buffer_size(self) -> Optional[pulumi.Input[int]]:
        """
        Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.
        We recommend setting SizeInMBs to a value greater than the amount of data you typically ingest into the delivery stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec set SizeInMBs to be 10 MB or higher.
        """
        return pulumi.get(self, "buffer_size")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamS3ConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

    @property
    @pulumi.getter(name="compressionFormat")
    def compression_format(self) -> Optional[pulumi.Input[str]]:
        """
        The compression format. If no value is specified, the default is UNCOMPRESSED. Other supported values are GZIP, ZIP & Snappy. If the destination is redshift you cannot use ZIP or Snappy.
        """
        return pulumi.get(self, "compression_format")

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

    @property
    @pulumi.getter(name="kmsKeyArn")
    def kms_key_arn(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the KMS key ARN the stream will use to encrypt data. If not set, no encryption will
        be used.
        """
        return pulumi.get(self, "kms_key_arn")

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

    @property
    @pulumi.getter
    def prefix(self) -> Optional[pulumi.Input[str]]:
        """
        The "YYYY/MM/DD/HH" time format prefix is automatically used for delivered S3 files. You can specify an extra prefix to be added in front of the time format prefix. Note that if the prefix ends with a slash, it appears as a folder in the S3 bucket
        """
        return pulumi.get(self, "prefix")

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


@pulumi.input_type
class FirehoseDeliveryStreamS3ConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamServerSideEncryptionArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 key_arn: Optional[pulumi.Input[str]] = None,
                 key_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Whether to enable encryption at rest. Default is `false`.
        :param pulumi.Input[str] key_arn: Amazon Resource Name (ARN) of the encryption key. Required when `key_type` is `CUSTOMER_MANAGED_CMK`.
        :param pulumi.Input[str] key_type: Type of encryption key. Default is `AWS_OWNED_CMK`. Valid values are `AWS_OWNED_CMK` and `CUSTOMER_MANAGED_CMK`
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if key_arn is not None:
            pulumi.set(__self__, "key_arn", key_arn)
        if key_type is not None:
            pulumi.set(__self__, "key_type", key_type)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to enable encryption at rest. Default is `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="keyArn")
    def key_arn(self) -> Optional[pulumi.Input[str]]:
        """
        Amazon Resource Name (ARN) of the encryption key. Required when `key_type` is `CUSTOMER_MANAGED_CMK`.
        """
        return pulumi.get(self, "key_arn")

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

    @property
    @pulumi.getter(name="keyType")
    def key_type(self) -> Optional[pulumi.Input[str]]:
        """
        Type of encryption key. Default is `AWS_OWNED_CMK`. Valid values are `AWS_OWNED_CMK` and `CUSTOMER_MANAGED_CMK`
        """
        return pulumi.get(self, "key_type")

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


@pulumi.input_type
class FirehoseDeliveryStreamSplunkConfigurationArgs:
    def __init__(__self__, *,
                 hec_endpoint: pulumi.Input[str],
                 hec_token: pulumi.Input[str],
                 cloudwatch_logging_options: Optional[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationCloudwatchLoggingOptionsArgs']] = None,
                 hec_acknowledgment_timeout: Optional[pulumi.Input[int]] = None,
                 hec_endpoint_type: Optional[pulumi.Input[str]] = None,
                 processing_configuration: Optional[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationArgs']] = None,
                 retry_duration: Optional[pulumi.Input[int]] = None,
                 s3_backup_mode: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] hec_endpoint: The HTTP Event Collector (HEC) endpoint to which Kinesis Firehose sends your data.
        :param pulumi.Input[str] hec_token: The GUID that you obtain from your Splunk cluster when you create a new HEC endpoint.
        :param pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationCloudwatchLoggingOptionsArgs'] cloudwatch_logging_options: The CloudWatch Logging Options for the delivery stream. More details are given below.
        :param pulumi.Input[int] hec_acknowledgment_timeout: The amount of time, in seconds between 180 and 600, that Kinesis Firehose waits to receive an acknowledgment from Splunk after it sends it data.
        :param pulumi.Input[str] hec_endpoint_type: The HEC endpoint type. Valid values are `Raw` or `Event`. The default value is `Raw`.
        :param pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationArgs'] processing_configuration: The data processing configuration.  More details are given below.
        :param pulumi.Input[int] retry_duration: After an initial failure to deliver to Splunk, the total amount of time, in seconds between 0 to 7200, during which Firehose re-attempts delivery (including the first attempt).  After this time has elapsed, the failed documents are written to Amazon S3.  The default value is 300s.  There will be no retry if the value is 0.
        :param pulumi.Input[str] s3_backup_mode: Defines how documents should be delivered to Amazon S3.  Valid values are `FailedEventsOnly` and `AllEvents`.  Default value is `FailedEventsOnly`.
        """
        pulumi.set(__self__, "hec_endpoint", hec_endpoint)
        pulumi.set(__self__, "hec_token", hec_token)
        if cloudwatch_logging_options is not None:
            pulumi.set(__self__, "cloudwatch_logging_options", cloudwatch_logging_options)
        if hec_acknowledgment_timeout is not None:
            pulumi.set(__self__, "hec_acknowledgment_timeout", hec_acknowledgment_timeout)
        if hec_endpoint_type is not None:
            pulumi.set(__self__, "hec_endpoint_type", hec_endpoint_type)
        if processing_configuration is not None:
            pulumi.set(__self__, "processing_configuration", processing_configuration)
        if retry_duration is not None:
            pulumi.set(__self__, "retry_duration", retry_duration)
        if s3_backup_mode is not None:
            pulumi.set(__self__, "s3_backup_mode", s3_backup_mode)

    @property
    @pulumi.getter(name="hecEndpoint")
    def hec_endpoint(self) -> pulumi.Input[str]:
        """
        The HTTP Event Collector (HEC) endpoint to which Kinesis Firehose sends your data.
        """
        return pulumi.get(self, "hec_endpoint")

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

    @property
    @pulumi.getter(name="hecToken")
    def hec_token(self) -> pulumi.Input[str]:
        """
        The GUID that you obtain from your Splunk cluster when you create a new HEC endpoint.
        """
        return pulumi.get(self, "hec_token")

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

    @property
    @pulumi.getter(name="cloudwatchLoggingOptions")
    def cloudwatch_logging_options(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationCloudwatchLoggingOptionsArgs']]:
        """
        The CloudWatch Logging Options for the delivery stream. More details are given below.
        """
        return pulumi.get(self, "cloudwatch_logging_options")

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

    @property
    @pulumi.getter(name="hecAcknowledgmentTimeout")
    def hec_acknowledgment_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time, in seconds between 180 and 600, that Kinesis Firehose waits to receive an acknowledgment from Splunk after it sends it data.
        """
        return pulumi.get(self, "hec_acknowledgment_timeout")

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

    @property
    @pulumi.getter(name="hecEndpointType")
    def hec_endpoint_type(self) -> Optional[pulumi.Input[str]]:
        """
        The HEC endpoint type. Valid values are `Raw` or `Event`. The default value is `Raw`.
        """
        return pulumi.get(self, "hec_endpoint_type")

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

    @property
    @pulumi.getter(name="processingConfiguration")
    def processing_configuration(self) -> Optional[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationArgs']]:
        """
        The data processing configuration.  More details are given below.
        """
        return pulumi.get(self, "processing_configuration")

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

    @property
    @pulumi.getter(name="retryDuration")
    def retry_duration(self) -> Optional[pulumi.Input[int]]:
        """
        After an initial failure to deliver to Splunk, the total amount of time, in seconds between 0 to 7200, during which Firehose re-attempts delivery (including the first attempt).  After this time has elapsed, the failed documents are written to Amazon S3.  The default value is 300s.  There will be no retry if the value is 0.
        """
        return pulumi.get(self, "retry_duration")

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

    @property
    @pulumi.getter(name="s3BackupMode")
    def s3_backup_mode(self) -> Optional[pulumi.Input[str]]:
        """
        Defines how documents should be delivered to Amazon S3.  Valid values are `FailedEventsOnly` and `AllEvents`.  Default value is `FailedEventsOnly`.
        """
        return pulumi.get(self, "s3_backup_mode")

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


@pulumi.input_type
class FirehoseDeliveryStreamSplunkConfigurationCloudwatchLoggingOptionsArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 log_group_name: Optional[pulumi.Input[str]] = None,
                 log_stream_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables the logging. Defaults to `false`.
        :param pulumi.Input[str] log_group_name: The CloudWatch group name for logging. This value is required if `enabled` is true.
        :param pulumi.Input[str] log_stream_name: The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if log_group_name is not None:
            pulumi.set(__self__, "log_group_name", log_group_name)
        if log_stream_name is not None:
            pulumi.set(__self__, "log_stream_name", log_stream_name)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables the logging. Defaults to `false`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch group name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="logStreamName")
    def log_stream_name(self) -> Optional[pulumi.Input[str]]:
        """
        The CloudWatch log stream name for logging. This value is required if `enabled` is true.
        """
        return pulumi.get(self, "log_stream_name")

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


@pulumi.input_type
class FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 processors: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorArgs']]]] = None):
        """
        :param pulumi.Input[bool] enabled: Enables or disables data processing.
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorArgs']]] processors: Array of data processors. More details are given below
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if processors is not None:
            pulumi.set(__self__, "processors", processors)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enables or disables data processing.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter
    def processors(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorArgs']]]]:
        """
        Array of data processors. More details are given below
        """
        return pulumi.get(self, "processors")

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


@pulumi.input_type
class FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorParameterArgs']]]] = None):
        """
        :param pulumi.Input[str] type: The type of processor. Valid Values: `Lambda`
        :param pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorParameterArgs']]] parameters: Array of processor parameters. More details are given below
        """
        pulumi.set(__self__, "type", type)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of processor. Valid Values: `Lambda`
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorParameterArgs']]]]:
        """
        Array of processor parameters. More details are given below
        """
        return pulumi.get(self, "parameters")

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


@pulumi.input_type
class FirehoseDeliveryStreamSplunkConfigurationProcessingConfigurationProcessorParameterArgs:
    def __init__(__self__, *,
                 parameter_name: pulumi.Input[str],
                 parameter_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] parameter_name: Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        :param pulumi.Input[str] parameter_value: Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        pulumi.set(__self__, "parameter_name", parameter_name)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterName")
    def parameter_name(self) -> pulumi.Input[str]:
        """
        Parameter name. Valid Values: `LambdaArn`, `NumberOfRetries`, `RoleArn`, `BufferSizeInMBs`, `BufferIntervalInSeconds`
        """
        return pulumi.get(self, "parameter_name")

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

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> pulumi.Input[str]:
        """
        Parameter value. Must be between 1 and 512 length (inclusive). When providing a Lambda ARN, you should specify the resource version as well.
        """
        return pulumi.get(self, "parameter_value")

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


