# 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, overload
from .. import _utilities

__all__ = [
    'IndexingConfigurationThingGroupIndexingConfigurationArgs',
    'IndexingConfigurationThingGroupIndexingConfigurationCustomFieldArgs',
    'IndexingConfigurationThingGroupIndexingConfigurationManagedFieldArgs',
    'IndexingConfigurationThingIndexingConfigurationArgs',
    'IndexingConfigurationThingIndexingConfigurationCustomFieldArgs',
    'IndexingConfigurationThingIndexingConfigurationManagedFieldArgs',
    'ProvisioningTemplatePreProvisioningHookArgs',
    'ThingGroupMetadataArgs',
    'ThingGroupMetadataRootToParentGroupArgs',
    'ThingGroupPropertiesArgs',
    'ThingGroupPropertiesAttributePayloadArgs',
    'ThingTypePropertiesArgs',
    'TopicRuleCloudwatchAlarmArgs',
    'TopicRuleCloudwatchLogArgs',
    'TopicRuleCloudwatchMetricArgs',
    'TopicRuleDestinationVpcConfigurationArgs',
    'TopicRuleDynamodbArgs',
    'TopicRuleDynamodbv2Args',
    'TopicRuleDynamodbv2PutItemArgs',
    'TopicRuleElasticsearchArgs',
    'TopicRuleErrorActionArgs',
    'TopicRuleErrorActionCloudwatchAlarmArgs',
    'TopicRuleErrorActionCloudwatchLogsArgs',
    'TopicRuleErrorActionCloudwatchMetricArgs',
    'TopicRuleErrorActionDynamodbArgs',
    'TopicRuleErrorActionDynamodbv2Args',
    'TopicRuleErrorActionDynamodbv2PutItemArgs',
    'TopicRuleErrorActionElasticsearchArgs',
    'TopicRuleErrorActionFirehoseArgs',
    'TopicRuleErrorActionHttpArgs',
    'TopicRuleErrorActionHttpHttpHeaderArgs',
    'TopicRuleErrorActionIotAnalyticsArgs',
    'TopicRuleErrorActionIotEventsArgs',
    'TopicRuleErrorActionKafkaArgs',
    'TopicRuleErrorActionKinesisArgs',
    'TopicRuleErrorActionLambdaArgs',
    'TopicRuleErrorActionRepublishArgs',
    'TopicRuleErrorActionS3Args',
    'TopicRuleErrorActionSnsArgs',
    'TopicRuleErrorActionSqsArgs',
    'TopicRuleErrorActionStepFunctionsArgs',
    'TopicRuleErrorActionTimestreamArgs',
    'TopicRuleErrorActionTimestreamDimensionArgs',
    'TopicRuleErrorActionTimestreamTimestampArgs',
    'TopicRuleFirehoseArgs',
    'TopicRuleHttpArgs',
    'TopicRuleHttpHttpHeaderArgs',
    'TopicRuleIotAnalyticArgs',
    'TopicRuleIotEventArgs',
    'TopicRuleKafkaArgs',
    'TopicRuleKinesisArgs',
    'TopicRuleLambdaArgs',
    'TopicRuleRepublishArgs',
    'TopicRuleS3Args',
    'TopicRuleSnsArgs',
    'TopicRuleSqsArgs',
    'TopicRuleStepFunctionArgs',
    'TopicRuleTimestreamArgs',
    'TopicRuleTimestreamDimensionArgs',
    'TopicRuleTimestreamTimestampArgs',
]

@pulumi.input_type
class IndexingConfigurationThingGroupIndexingConfigurationArgs:
    def __init__(__self__, *,
                 thing_group_indexing_mode: pulumi.Input[str],
                 custom_fields: Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingGroupIndexingConfigurationCustomFieldArgs']]]] = None,
                 managed_fields: Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingGroupIndexingConfigurationManagedFieldArgs']]]] = None):
        """
        :param pulumi.Input[str] thing_group_indexing_mode: Thing group indexing mode. Valid values: `OFF`, `ON`.
        :param pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingGroupIndexingConfigurationCustomFieldArgs']]] custom_fields: A list of thing group fields to index. This list cannot contain any managed fields. See below.
        :param pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingGroupIndexingConfigurationManagedFieldArgs']]] managed_fields: Contains fields that are indexed and whose types are already known by the Fleet Indexing service. See below.
        """
        pulumi.set(__self__, "thing_group_indexing_mode", thing_group_indexing_mode)
        if custom_fields is not None:
            pulumi.set(__self__, "custom_fields", custom_fields)
        if managed_fields is not None:
            pulumi.set(__self__, "managed_fields", managed_fields)

    @property
    @pulumi.getter(name="thingGroupIndexingMode")
    def thing_group_indexing_mode(self) -> pulumi.Input[str]:
        """
        Thing group indexing mode. Valid values: `OFF`, `ON`.
        """
        return pulumi.get(self, "thing_group_indexing_mode")

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

    @property
    @pulumi.getter(name="customFields")
    def custom_fields(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingGroupIndexingConfigurationCustomFieldArgs']]]]:
        """
        A list of thing group fields to index. This list cannot contain any managed fields. See below.
        """
        return pulumi.get(self, "custom_fields")

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

    @property
    @pulumi.getter(name="managedFields")
    def managed_fields(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingGroupIndexingConfigurationManagedFieldArgs']]]]:
        """
        Contains fields that are indexed and whose types are already known by the Fleet Indexing service. See below.
        """
        return pulumi.get(self, "managed_fields")

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


@pulumi.input_type
class IndexingConfigurationThingGroupIndexingConfigurationCustomFieldArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the field.
        :param pulumi.Input[str] type: The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        if name is not None:
            pulumi.set(__self__, "name", name)
        if type is not None:
            pulumi.set(__self__, "type", type)

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

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class IndexingConfigurationThingGroupIndexingConfigurationManagedFieldArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the field.
        :param pulumi.Input[str] type: The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        if name is not None:
            pulumi.set(__self__, "name", name)
        if type is not None:
            pulumi.set(__self__, "type", type)

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

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class IndexingConfigurationThingIndexingConfigurationArgs:
    def __init__(__self__, *,
                 thing_indexing_mode: pulumi.Input[str],
                 custom_fields: Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingIndexingConfigurationCustomFieldArgs']]]] = None,
                 device_defender_indexing_mode: Optional[pulumi.Input[str]] = None,
                 managed_fields: Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingIndexingConfigurationManagedFieldArgs']]]] = None,
                 named_shadow_indexing_mode: Optional[pulumi.Input[str]] = None,
                 thing_connectivity_indexing_mode: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] thing_indexing_mode: Thing indexing mode. Valid values: `REGISTRY`, `REGISTRY_AND_SHADOW`, `OFF`.
        :param pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingIndexingConfigurationCustomFieldArgs']]] custom_fields: Contains custom field names and their data type. See below.
        :param pulumi.Input[str] device_defender_indexing_mode: Device Defender indexing mode. Valid values: `VIOLATIONS`, `OFF`. Default: `OFF`.
        :param pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingIndexingConfigurationManagedFieldArgs']]] managed_fields: Contains fields that are indexed and whose types are already known by the Fleet Indexing service. See below.
        :param pulumi.Input[str] named_shadow_indexing_mode: [Named shadow](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) indexing mode. Valid values: `ON`, `OFF`. Default: `OFF`.
        :param pulumi.Input[str] thing_connectivity_indexing_mode: Thing connectivity indexing mode. Valid values: `STATUS`, `OFF`. Default: `OFF`.
        """
        pulumi.set(__self__, "thing_indexing_mode", thing_indexing_mode)
        if custom_fields is not None:
            pulumi.set(__self__, "custom_fields", custom_fields)
        if device_defender_indexing_mode is not None:
            pulumi.set(__self__, "device_defender_indexing_mode", device_defender_indexing_mode)
        if managed_fields is not None:
            pulumi.set(__self__, "managed_fields", managed_fields)
        if named_shadow_indexing_mode is not None:
            pulumi.set(__self__, "named_shadow_indexing_mode", named_shadow_indexing_mode)
        if thing_connectivity_indexing_mode is not None:
            pulumi.set(__self__, "thing_connectivity_indexing_mode", thing_connectivity_indexing_mode)

    @property
    @pulumi.getter(name="thingIndexingMode")
    def thing_indexing_mode(self) -> pulumi.Input[str]:
        """
        Thing indexing mode. Valid values: `REGISTRY`, `REGISTRY_AND_SHADOW`, `OFF`.
        """
        return pulumi.get(self, "thing_indexing_mode")

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

    @property
    @pulumi.getter(name="customFields")
    def custom_fields(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingIndexingConfigurationCustomFieldArgs']]]]:
        """
        Contains custom field names and their data type. See below.
        """
        return pulumi.get(self, "custom_fields")

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

    @property
    @pulumi.getter(name="deviceDefenderIndexingMode")
    def device_defender_indexing_mode(self) -> Optional[pulumi.Input[str]]:
        """
        Device Defender indexing mode. Valid values: `VIOLATIONS`, `OFF`. Default: `OFF`.
        """
        return pulumi.get(self, "device_defender_indexing_mode")

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

    @property
    @pulumi.getter(name="managedFields")
    def managed_fields(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['IndexingConfigurationThingIndexingConfigurationManagedFieldArgs']]]]:
        """
        Contains fields that are indexed and whose types are already known by the Fleet Indexing service. See below.
        """
        return pulumi.get(self, "managed_fields")

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

    @property
    @pulumi.getter(name="namedShadowIndexingMode")
    def named_shadow_indexing_mode(self) -> Optional[pulumi.Input[str]]:
        """
        [Named shadow](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) indexing mode. Valid values: `ON`, `OFF`. Default: `OFF`.
        """
        return pulumi.get(self, "named_shadow_indexing_mode")

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

    @property
    @pulumi.getter(name="thingConnectivityIndexingMode")
    def thing_connectivity_indexing_mode(self) -> Optional[pulumi.Input[str]]:
        """
        Thing connectivity indexing mode. Valid values: `STATUS`, `OFF`. Default: `OFF`.
        """
        return pulumi.get(self, "thing_connectivity_indexing_mode")

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


@pulumi.input_type
class IndexingConfigurationThingIndexingConfigurationCustomFieldArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the field.
        :param pulumi.Input[str] type: The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        if name is not None:
            pulumi.set(__self__, "name", name)
        if type is not None:
            pulumi.set(__self__, "type", type)

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

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class IndexingConfigurationThingIndexingConfigurationManagedFieldArgs:
    def __init__(__self__, *,
                 name: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the field.
        :param pulumi.Input[str] type: The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        if name is not None:
            pulumi.set(__self__, "name", name)
        if type is not None:
            pulumi.set(__self__, "type", type)

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

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The data type of the field. Valid values: `Number`, `String`, `Boolean`.
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class ProvisioningTemplatePreProvisioningHookArgs:
    def __init__(__self__, *,
                 target_arn: pulumi.Input[str],
                 payload_version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] payload_version: The version of the payload that was sent to the target function. The only valid (and the default) payload version is `"2020-04-01"`.
        """
        pulumi.set(__self__, "target_arn", target_arn)
        if payload_version is not None:
            pulumi.set(__self__, "payload_version", payload_version)

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

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

    @property
    @pulumi.getter(name="payloadVersion")
    def payload_version(self) -> Optional[pulumi.Input[str]]:
        """
        The version of the payload that was sent to the target function. The only valid (and the default) payload version is `"2020-04-01"`.
        """
        return pulumi.get(self, "payload_version")

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


@pulumi.input_type
class ThingGroupMetadataArgs:
    def __init__(__self__, *,
                 creation_date: Optional[pulumi.Input[str]] = None,
                 parent_group_name: Optional[pulumi.Input[str]] = None,
                 root_to_parent_groups: Optional[pulumi.Input[Sequence[pulumi.Input['ThingGroupMetadataRootToParentGroupArgs']]]] = None):
        """
        :param pulumi.Input[str] parent_group_name: The name of the parent Thing Group.
        """
        if creation_date is not None:
            pulumi.set(__self__, "creation_date", creation_date)
        if parent_group_name is not None:
            pulumi.set(__self__, "parent_group_name", parent_group_name)
        if root_to_parent_groups is not None:
            pulumi.set(__self__, "root_to_parent_groups", root_to_parent_groups)

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

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

    @property
    @pulumi.getter(name="parentGroupName")
    def parent_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the parent Thing Group.
        """
        return pulumi.get(self, "parent_group_name")

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

    @property
    @pulumi.getter(name="rootToParentGroups")
    def root_to_parent_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ThingGroupMetadataRootToParentGroupArgs']]]]:
        return pulumi.get(self, "root_to_parent_groups")

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


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

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

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

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

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


@pulumi.input_type
class ThingGroupPropertiesArgs:
    def __init__(__self__, *,
                 attribute_payload: Optional[pulumi.Input['ThingGroupPropertiesAttributePayloadArgs']] = None,
                 description: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['ThingGroupPropertiesAttributePayloadArgs'] attribute_payload: The Thing Group attributes. Defined below.
        :param pulumi.Input[str] description: A description of the Thing Group.
        """
        if attribute_payload is not None:
            pulumi.set(__self__, "attribute_payload", attribute_payload)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter(name="attributePayload")
    def attribute_payload(self) -> Optional[pulumi.Input['ThingGroupPropertiesAttributePayloadArgs']]:
        """
        The Thing Group attributes. Defined below.
        """
        return pulumi.get(self, "attribute_payload")

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

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

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


@pulumi.input_type
class ThingGroupPropertiesAttributePayloadArgs:
    def __init__(__self__, *,
                 attributes: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] attributes: Key-value map.
        """
        if attributes is not None:
            pulumi.set(__self__, "attributes", attributes)

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

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


@pulumi.input_type
class ThingTypePropertiesArgs:
    def __init__(__self__, *,
                 description: Optional[pulumi.Input[str]] = None,
                 searchable_attributes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] description: The description of the thing type.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] searchable_attributes: A list of searchable thing attribute names.
        """
        if description is not None:
            pulumi.set(__self__, "description", description)
        if searchable_attributes is not None:
            pulumi.set(__self__, "searchable_attributes", searchable_attributes)

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

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

    @property
    @pulumi.getter(name="searchableAttributes")
    def searchable_attributes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of searchable thing attribute names.
        """
        return pulumi.get(self, "searchable_attributes")

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


@pulumi.input_type
class TopicRuleCloudwatchAlarmArgs:
    def __init__(__self__, *,
                 alarm_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 state_reason: pulumi.Input[str],
                 state_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] alarm_name: The CloudWatch alarm name.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param pulumi.Input[str] state_reason: The reason for the alarm change.
        :param pulumi.Input[str] state_value: The value of the alarm state. Acceptable values are: OK, ALARM, INSUFFICIENT_DATA.
        """
        pulumi.set(__self__, "alarm_name", alarm_name)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "state_reason", state_reason)
        pulumi.set(__self__, "state_value", state_value)

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

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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="stateReason")
    def state_reason(self) -> pulumi.Input[str]:
        """
        The reason for the alarm change.
        """
        return pulumi.get(self, "state_reason")

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

    @property
    @pulumi.getter(name="stateValue")
    def state_value(self) -> pulumi.Input[str]:
        """
        The value of the alarm state. Acceptable values are: OK, ALARM, INSUFFICIENT_DATA.
        """
        return pulumi.get(self, "state_value")

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


@pulumi.input_type
class TopicRuleCloudwatchLogArgs:
    def __init__(__self__, *,
                 log_group_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_group_name: The CloudWatch log group name.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        """
        pulumi.set(__self__, "log_group_name", log_group_name)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> pulumi.Input[str]:
        """
        The CloudWatch log group name.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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 TopicRuleCloudwatchMetricArgs:
    def __init__(__self__, *,
                 metric_name: pulumi.Input[str],
                 metric_namespace: pulumi.Input[str],
                 metric_unit: pulumi.Input[str],
                 metric_value: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 metric_timestamp: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] metric_name: The CloudWatch metric name.
        :param pulumi.Input[str] metric_namespace: The CloudWatch metric namespace name.
        :param pulumi.Input[str] metric_unit: The metric unit (supported units can be found here: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#Unit)
        :param pulumi.Input[str] metric_value: The CloudWatch metric value.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch metric.
        :param pulumi.Input[str] metric_timestamp: An optional Unix timestamp (http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp).
        """
        pulumi.set(__self__, "metric_name", metric_name)
        pulumi.set(__self__, "metric_namespace", metric_namespace)
        pulumi.set(__self__, "metric_unit", metric_unit)
        pulumi.set(__self__, "metric_value", metric_value)
        pulumi.set(__self__, "role_arn", role_arn)
        if metric_timestamp is not None:
            pulumi.set(__self__, "metric_timestamp", metric_timestamp)

    @property
    @pulumi.getter(name="metricName")
    def metric_name(self) -> pulumi.Input[str]:
        """
        The CloudWatch metric name.
        """
        return pulumi.get(self, "metric_name")

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

    @property
    @pulumi.getter(name="metricNamespace")
    def metric_namespace(self) -> pulumi.Input[str]:
        """
        The CloudWatch metric namespace name.
        """
        return pulumi.get(self, "metric_namespace")

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

    @property
    @pulumi.getter(name="metricUnit")
    def metric_unit(self) -> pulumi.Input[str]:
        """
        The metric unit (supported units can be found here: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#Unit)
        """
        return pulumi.get(self, "metric_unit")

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

    @property
    @pulumi.getter(name="metricValue")
    def metric_value(self) -> pulumi.Input[str]:
        """
        The CloudWatch metric value.
        """
        return pulumi.get(self, "metric_value")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch metric.
        """
        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="metricTimestamp")
    def metric_timestamp(self) -> Optional[pulumi.Input[str]]:
        """
        An optional Unix timestamp (http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp).
        """
        return pulumi.get(self, "metric_timestamp")

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


@pulumi.input_type
class TopicRuleDestinationVpcConfigurationArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 subnet_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 vpc_id: pulumi.Input[str],
                 security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of a role that has permission to create and attach to elastic network interfaces (ENIs).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subnet_ids: The subnet IDs of the VPC destination.
        :param pulumi.Input[str] vpc_id: The ID of the VPC.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] security_groups: The security groups of the VPC destination.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "subnet_ids", subnet_ids)
        pulumi.set(__self__, "vpc_id", vpc_id)
        if security_groups is not None:
            pulumi.set(__self__, "security_groups", security_groups)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of a role that has permission to create and attach to elastic network interfaces (ENIs).
        """
        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="subnetIds")
    def subnet_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The subnet IDs of the VPC destination.
        """
        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) -> pulumi.Input[str]:
        """
        The ID of the VPC.
        """
        return pulumi.get(self, "vpc_id")

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

    @property
    @pulumi.getter(name="securityGroups")
    def security_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The security groups of the VPC destination.
        """
        return pulumi.get(self, "security_groups")

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


@pulumi.input_type
class TopicRuleDynamodbArgs:
    def __init__(__self__, *,
                 hash_key_field: pulumi.Input[str],
                 hash_key_value: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 table_name: pulumi.Input[str],
                 hash_key_type: Optional[pulumi.Input[str]] = None,
                 operation: Optional[pulumi.Input[str]] = None,
                 payload_field: Optional[pulumi.Input[str]] = None,
                 range_key_field: Optional[pulumi.Input[str]] = None,
                 range_key_type: Optional[pulumi.Input[str]] = None,
                 range_key_value: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] hash_key_field: The hash key name.
        :param pulumi.Input[str] hash_key_value: The hash key value.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access to the DynamoDB table.
        :param pulumi.Input[str] table_name: The name of the DynamoDB table.
        :param pulumi.Input[str] hash_key_type: The hash key type. Valid values are "STRING" or "NUMBER".
        :param pulumi.Input[str] operation: The operation. Valid values are "INSERT", "UPDATE", or "DELETE".
        :param pulumi.Input[str] payload_field: The action payload.
        :param pulumi.Input[str] range_key_field: The range key name.
        :param pulumi.Input[str] range_key_type: The range key type. Valid values are "STRING" or "NUMBER".
        :param pulumi.Input[str] range_key_value: The range key value.
        """
        pulumi.set(__self__, "hash_key_field", hash_key_field)
        pulumi.set(__self__, "hash_key_value", hash_key_value)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "table_name", table_name)
        if hash_key_type is not None:
            pulumi.set(__self__, "hash_key_type", hash_key_type)
        if operation is not None:
            pulumi.set(__self__, "operation", operation)
        if payload_field is not None:
            pulumi.set(__self__, "payload_field", payload_field)
        if range_key_field is not None:
            pulumi.set(__self__, "range_key_field", range_key_field)
        if range_key_type is not None:
            pulumi.set(__self__, "range_key_type", range_key_type)
        if range_key_value is not None:
            pulumi.set(__self__, "range_key_value", range_key_value)

    @property
    @pulumi.getter(name="hashKeyField")
    def hash_key_field(self) -> pulumi.Input[str]:
        """
        The hash key name.
        """
        return pulumi.get(self, "hash_key_field")

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

    @property
    @pulumi.getter(name="hashKeyValue")
    def hash_key_value(self) -> pulumi.Input[str]:
        """
        The hash key value.
        """
        return pulumi.get(self, "hash_key_value")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access to the DynamoDB table.
        """
        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]:
        """
        The name of the DynamoDB table.
        """
        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="hashKeyType")
    def hash_key_type(self) -> Optional[pulumi.Input[str]]:
        """
        The hash key type. Valid values are "STRING" or "NUMBER".
        """
        return pulumi.get(self, "hash_key_type")

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

    @property
    @pulumi.getter
    def operation(self) -> Optional[pulumi.Input[str]]:
        """
        The operation. Valid values are "INSERT", "UPDATE", or "DELETE".
        """
        return pulumi.get(self, "operation")

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

    @property
    @pulumi.getter(name="payloadField")
    def payload_field(self) -> Optional[pulumi.Input[str]]:
        """
        The action payload.
        """
        return pulumi.get(self, "payload_field")

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

    @property
    @pulumi.getter(name="rangeKeyField")
    def range_key_field(self) -> Optional[pulumi.Input[str]]:
        """
        The range key name.
        """
        return pulumi.get(self, "range_key_field")

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

    @property
    @pulumi.getter(name="rangeKeyType")
    def range_key_type(self) -> Optional[pulumi.Input[str]]:
        """
        The range key type. Valid values are "STRING" or "NUMBER".
        """
        return pulumi.get(self, "range_key_type")

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

    @property
    @pulumi.getter(name="rangeKeyValue")
    def range_key_value(self) -> Optional[pulumi.Input[str]]:
        """
        The range key value.
        """
        return pulumi.get(self, "range_key_value")

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


@pulumi.input_type
class TopicRuleDynamodbv2Args:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 put_item: Optional[pulumi.Input['TopicRuleDynamodbv2PutItemArgs']] = None):
        """
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param pulumi.Input['TopicRuleDynamodbv2PutItemArgs'] put_item: Configuration block with DynamoDB Table to which the message will be written. Nested arguments below.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        if put_item is not None:
            pulumi.set(__self__, "put_item", put_item)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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="putItem")
    def put_item(self) -> Optional[pulumi.Input['TopicRuleDynamodbv2PutItemArgs']]:
        """
        Configuration block with DynamoDB Table to which the message will be written. Nested arguments below.
        """
        return pulumi.get(self, "put_item")

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


@pulumi.input_type
class TopicRuleDynamodbv2PutItemArgs:
    def __init__(__self__, *,
                 table_name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] table_name: The name of the DynamoDB table.
        """
        pulumi.set(__self__, "table_name", table_name)

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

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


@pulumi.input_type
class TopicRuleElasticsearchArgs:
    def __init__(__self__, *,
                 endpoint: pulumi.Input[str],
                 id: pulumi.Input[str],
                 index: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] endpoint: The endpoint of your Elasticsearch domain.
        :param pulumi.Input[str] id: The unique identifier for the document you are storing.
        :param pulumi.Input[str] index: The Elasticsearch index where you want to store your data.
        :param pulumi.Input[str] role_arn: The IAM role ARN that has access to Elasticsearch.
        :param pulumi.Input[str] type: The type of document you are storing.
        """
        pulumi.set(__self__, "endpoint", endpoint)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "index", index)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def endpoint(self) -> pulumi.Input[str]:
        """
        The endpoint of your Elasticsearch domain.
        """
        return pulumi.get(self, "endpoint")

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

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        The unique identifier for the document you are storing.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def index(self) -> pulumi.Input[str]:
        """
        The Elasticsearch index where you want to store your data.
        """
        return pulumi.get(self, "index")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that has access to Elasticsearch.
        """
        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 type(self) -> pulumi.Input[str]:
        """
        The type of document you are storing.
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class TopicRuleErrorActionArgs:
    def __init__(__self__, *,
                 cloudwatch_alarm: Optional[pulumi.Input['TopicRuleErrorActionCloudwatchAlarmArgs']] = None,
                 cloudwatch_logs: Optional[pulumi.Input['TopicRuleErrorActionCloudwatchLogsArgs']] = None,
                 cloudwatch_metric: Optional[pulumi.Input['TopicRuleErrorActionCloudwatchMetricArgs']] = None,
                 dynamodb: Optional[pulumi.Input['TopicRuleErrorActionDynamodbArgs']] = None,
                 dynamodbv2: Optional[pulumi.Input['TopicRuleErrorActionDynamodbv2Args']] = None,
                 elasticsearch: Optional[pulumi.Input['TopicRuleErrorActionElasticsearchArgs']] = None,
                 firehose: Optional[pulumi.Input['TopicRuleErrorActionFirehoseArgs']] = None,
                 http: Optional[pulumi.Input['TopicRuleErrorActionHttpArgs']] = None,
                 iot_analytics: Optional[pulumi.Input['TopicRuleErrorActionIotAnalyticsArgs']] = None,
                 iot_events: Optional[pulumi.Input['TopicRuleErrorActionIotEventsArgs']] = None,
                 kafka: Optional[pulumi.Input['TopicRuleErrorActionKafkaArgs']] = None,
                 kinesis: Optional[pulumi.Input['TopicRuleErrorActionKinesisArgs']] = None,
                 lambda_: Optional[pulumi.Input['TopicRuleErrorActionLambdaArgs']] = None,
                 republish: Optional[pulumi.Input['TopicRuleErrorActionRepublishArgs']] = None,
                 s3: Optional[pulumi.Input['TopicRuleErrorActionS3Args']] = None,
                 sns: Optional[pulumi.Input['TopicRuleErrorActionSnsArgs']] = None,
                 sqs: Optional[pulumi.Input['TopicRuleErrorActionSqsArgs']] = None,
                 step_functions: Optional[pulumi.Input['TopicRuleErrorActionStepFunctionsArgs']] = None,
                 timestream: Optional[pulumi.Input['TopicRuleErrorActionTimestreamArgs']] = None):
        if cloudwatch_alarm is not None:
            pulumi.set(__self__, "cloudwatch_alarm", cloudwatch_alarm)
        if cloudwatch_logs is not None:
            pulumi.set(__self__, "cloudwatch_logs", cloudwatch_logs)
        if cloudwatch_metric is not None:
            pulumi.set(__self__, "cloudwatch_metric", cloudwatch_metric)
        if dynamodb is not None:
            pulumi.set(__self__, "dynamodb", dynamodb)
        if dynamodbv2 is not None:
            pulumi.set(__self__, "dynamodbv2", dynamodbv2)
        if elasticsearch is not None:
            pulumi.set(__self__, "elasticsearch", elasticsearch)
        if firehose is not None:
            pulumi.set(__self__, "firehose", firehose)
        if http is not None:
            pulumi.set(__self__, "http", http)
        if iot_analytics is not None:
            pulumi.set(__self__, "iot_analytics", iot_analytics)
        if iot_events is not None:
            pulumi.set(__self__, "iot_events", iot_events)
        if kafka is not None:
            pulumi.set(__self__, "kafka", kafka)
        if kinesis is not None:
            pulumi.set(__self__, "kinesis", kinesis)
        if lambda_ is not None:
            pulumi.set(__self__, "lambda_", lambda_)
        if republish is not None:
            pulumi.set(__self__, "republish", republish)
        if s3 is not None:
            pulumi.set(__self__, "s3", s3)
        if sns is not None:
            pulumi.set(__self__, "sns", sns)
        if sqs is not None:
            pulumi.set(__self__, "sqs", sqs)
        if step_functions is not None:
            pulumi.set(__self__, "step_functions", step_functions)
        if timestream is not None:
            pulumi.set(__self__, "timestream", timestream)

    @property
    @pulumi.getter(name="cloudwatchAlarm")
    def cloudwatch_alarm(self) -> Optional[pulumi.Input['TopicRuleErrorActionCloudwatchAlarmArgs']]:
        return pulumi.get(self, "cloudwatch_alarm")

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

    @property
    @pulumi.getter(name="cloudwatchLogs")
    def cloudwatch_logs(self) -> Optional[pulumi.Input['TopicRuleErrorActionCloudwatchLogsArgs']]:
        return pulumi.get(self, "cloudwatch_logs")

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

    @property
    @pulumi.getter(name="cloudwatchMetric")
    def cloudwatch_metric(self) -> Optional[pulumi.Input['TopicRuleErrorActionCloudwatchMetricArgs']]:
        return pulumi.get(self, "cloudwatch_metric")

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="iotAnalytics")
    def iot_analytics(self) -> Optional[pulumi.Input['TopicRuleErrorActionIotAnalyticsArgs']]:
        return pulumi.get(self, "iot_analytics")

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

    @property
    @pulumi.getter(name="iotEvents")
    def iot_events(self) -> Optional[pulumi.Input['TopicRuleErrorActionIotEventsArgs']]:
        return pulumi.get(self, "iot_events")

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

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

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

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

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

    @property
    @pulumi.getter(name="lambda")
    def lambda_(self) -> Optional[pulumi.Input['TopicRuleErrorActionLambdaArgs']]:
        return pulumi.get(self, "lambda_")

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="stepFunctions")
    def step_functions(self) -> Optional[pulumi.Input['TopicRuleErrorActionStepFunctionsArgs']]:
        return pulumi.get(self, "step_functions")

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

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

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


@pulumi.input_type
class TopicRuleErrorActionCloudwatchAlarmArgs:
    def __init__(__self__, *,
                 alarm_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 state_reason: pulumi.Input[str],
                 state_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] alarm_name: The CloudWatch alarm name.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param pulumi.Input[str] state_reason: The reason for the alarm change.
        :param pulumi.Input[str] state_value: The value of the alarm state. Acceptable values are: OK, ALARM, INSUFFICIENT_DATA.
        """
        pulumi.set(__self__, "alarm_name", alarm_name)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "state_reason", state_reason)
        pulumi.set(__self__, "state_value", state_value)

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

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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="stateReason")
    def state_reason(self) -> pulumi.Input[str]:
        """
        The reason for the alarm change.
        """
        return pulumi.get(self, "state_reason")

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

    @property
    @pulumi.getter(name="stateValue")
    def state_value(self) -> pulumi.Input[str]:
        """
        The value of the alarm state. Acceptable values are: OK, ALARM, INSUFFICIENT_DATA.
        """
        return pulumi.get(self, "state_value")

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


@pulumi.input_type
class TopicRuleErrorActionCloudwatchLogsArgs:
    def __init__(__self__, *,
                 log_group_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_group_name: The CloudWatch log group name.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        """
        pulumi.set(__self__, "log_group_name", log_group_name)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="logGroupName")
    def log_group_name(self) -> pulumi.Input[str]:
        """
        The CloudWatch log group name.
        """
        return pulumi.get(self, "log_group_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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 TopicRuleErrorActionCloudwatchMetricArgs:
    def __init__(__self__, *,
                 metric_name: pulumi.Input[str],
                 metric_namespace: pulumi.Input[str],
                 metric_unit: pulumi.Input[str],
                 metric_value: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 metric_timestamp: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] metric_name: The CloudWatch metric name.
        :param pulumi.Input[str] metric_namespace: The CloudWatch metric namespace name.
        :param pulumi.Input[str] metric_unit: The metric unit (supported units can be found here: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#Unit)
        :param pulumi.Input[str] metric_value: The CloudWatch metric value.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch metric.
        :param pulumi.Input[str] metric_timestamp: An optional Unix timestamp (http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp).
        """
        pulumi.set(__self__, "metric_name", metric_name)
        pulumi.set(__self__, "metric_namespace", metric_namespace)
        pulumi.set(__self__, "metric_unit", metric_unit)
        pulumi.set(__self__, "metric_value", metric_value)
        pulumi.set(__self__, "role_arn", role_arn)
        if metric_timestamp is not None:
            pulumi.set(__self__, "metric_timestamp", metric_timestamp)

    @property
    @pulumi.getter(name="metricName")
    def metric_name(self) -> pulumi.Input[str]:
        """
        The CloudWatch metric name.
        """
        return pulumi.get(self, "metric_name")

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

    @property
    @pulumi.getter(name="metricNamespace")
    def metric_namespace(self) -> pulumi.Input[str]:
        """
        The CloudWatch metric namespace name.
        """
        return pulumi.get(self, "metric_namespace")

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

    @property
    @pulumi.getter(name="metricUnit")
    def metric_unit(self) -> pulumi.Input[str]:
        """
        The metric unit (supported units can be found here: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#Unit)
        """
        return pulumi.get(self, "metric_unit")

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

    @property
    @pulumi.getter(name="metricValue")
    def metric_value(self) -> pulumi.Input[str]:
        """
        The CloudWatch metric value.
        """
        return pulumi.get(self, "metric_value")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch metric.
        """
        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="metricTimestamp")
    def metric_timestamp(self) -> Optional[pulumi.Input[str]]:
        """
        An optional Unix timestamp (http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp).
        """
        return pulumi.get(self, "metric_timestamp")

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


@pulumi.input_type
class TopicRuleErrorActionDynamodbArgs:
    def __init__(__self__, *,
                 hash_key_field: pulumi.Input[str],
                 hash_key_value: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 table_name: pulumi.Input[str],
                 hash_key_type: Optional[pulumi.Input[str]] = None,
                 operation: Optional[pulumi.Input[str]] = None,
                 payload_field: Optional[pulumi.Input[str]] = None,
                 range_key_field: Optional[pulumi.Input[str]] = None,
                 range_key_type: Optional[pulumi.Input[str]] = None,
                 range_key_value: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] hash_key_field: The hash key name.
        :param pulumi.Input[str] hash_key_value: The hash key value.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access to the DynamoDB table.
        :param pulumi.Input[str] table_name: The name of the DynamoDB table.
        :param pulumi.Input[str] hash_key_type: The hash key type. Valid values are "STRING" or "NUMBER".
        :param pulumi.Input[str] operation: The operation. Valid values are "INSERT", "UPDATE", or "DELETE".
        :param pulumi.Input[str] payload_field: The action payload.
        :param pulumi.Input[str] range_key_field: The range key name.
        :param pulumi.Input[str] range_key_type: The range key type. Valid values are "STRING" or "NUMBER".
        :param pulumi.Input[str] range_key_value: The range key value.
        """
        pulumi.set(__self__, "hash_key_field", hash_key_field)
        pulumi.set(__self__, "hash_key_value", hash_key_value)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "table_name", table_name)
        if hash_key_type is not None:
            pulumi.set(__self__, "hash_key_type", hash_key_type)
        if operation is not None:
            pulumi.set(__self__, "operation", operation)
        if payload_field is not None:
            pulumi.set(__self__, "payload_field", payload_field)
        if range_key_field is not None:
            pulumi.set(__self__, "range_key_field", range_key_field)
        if range_key_type is not None:
            pulumi.set(__self__, "range_key_type", range_key_type)
        if range_key_value is not None:
            pulumi.set(__self__, "range_key_value", range_key_value)

    @property
    @pulumi.getter(name="hashKeyField")
    def hash_key_field(self) -> pulumi.Input[str]:
        """
        The hash key name.
        """
        return pulumi.get(self, "hash_key_field")

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

    @property
    @pulumi.getter(name="hashKeyValue")
    def hash_key_value(self) -> pulumi.Input[str]:
        """
        The hash key value.
        """
        return pulumi.get(self, "hash_key_value")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access to the DynamoDB table.
        """
        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]:
        """
        The name of the DynamoDB table.
        """
        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="hashKeyType")
    def hash_key_type(self) -> Optional[pulumi.Input[str]]:
        """
        The hash key type. Valid values are "STRING" or "NUMBER".
        """
        return pulumi.get(self, "hash_key_type")

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

    @property
    @pulumi.getter
    def operation(self) -> Optional[pulumi.Input[str]]:
        """
        The operation. Valid values are "INSERT", "UPDATE", or "DELETE".
        """
        return pulumi.get(self, "operation")

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

    @property
    @pulumi.getter(name="payloadField")
    def payload_field(self) -> Optional[pulumi.Input[str]]:
        """
        The action payload.
        """
        return pulumi.get(self, "payload_field")

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

    @property
    @pulumi.getter(name="rangeKeyField")
    def range_key_field(self) -> Optional[pulumi.Input[str]]:
        """
        The range key name.
        """
        return pulumi.get(self, "range_key_field")

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

    @property
    @pulumi.getter(name="rangeKeyType")
    def range_key_type(self) -> Optional[pulumi.Input[str]]:
        """
        The range key type. Valid values are "STRING" or "NUMBER".
        """
        return pulumi.get(self, "range_key_type")

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

    @property
    @pulumi.getter(name="rangeKeyValue")
    def range_key_value(self) -> Optional[pulumi.Input[str]]:
        """
        The range key value.
        """
        return pulumi.get(self, "range_key_value")

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


@pulumi.input_type
class TopicRuleErrorActionDynamodbv2Args:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 put_item: Optional[pulumi.Input['TopicRuleErrorActionDynamodbv2PutItemArgs']] = None):
        """
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param pulumi.Input['TopicRuleErrorActionDynamodbv2PutItemArgs'] put_item: Configuration block with DynamoDB Table to which the message will be written. Nested arguments below.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        if put_item is not None:
            pulumi.set(__self__, "put_item", put_item)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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="putItem")
    def put_item(self) -> Optional[pulumi.Input['TopicRuleErrorActionDynamodbv2PutItemArgs']]:
        """
        Configuration block with DynamoDB Table to which the message will be written. Nested arguments below.
        """
        return pulumi.get(self, "put_item")

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


@pulumi.input_type
class TopicRuleErrorActionDynamodbv2PutItemArgs:
    def __init__(__self__, *,
                 table_name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] table_name: The name of the DynamoDB table.
        """
        pulumi.set(__self__, "table_name", table_name)

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

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


@pulumi.input_type
class TopicRuleErrorActionElasticsearchArgs:
    def __init__(__self__, *,
                 endpoint: pulumi.Input[str],
                 id: pulumi.Input[str],
                 index: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] endpoint: The endpoint of your Elasticsearch domain.
        :param pulumi.Input[str] id: The unique identifier for the document you are storing.
        :param pulumi.Input[str] index: The Elasticsearch index where you want to store your data.
        :param pulumi.Input[str] role_arn: The IAM role ARN that has access to Elasticsearch.
        :param pulumi.Input[str] type: The type of document you are storing.
        """
        pulumi.set(__self__, "endpoint", endpoint)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "index", index)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def endpoint(self) -> pulumi.Input[str]:
        """
        The endpoint of your Elasticsearch domain.
        """
        return pulumi.get(self, "endpoint")

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

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        The unique identifier for the document you are storing.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def index(self) -> pulumi.Input[str]:
        """
        The Elasticsearch index where you want to store your data.
        """
        return pulumi.get(self, "index")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that has access to Elasticsearch.
        """
        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 type(self) -> pulumi.Input[str]:
        """
        The type of document you are storing.
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class TopicRuleErrorActionFirehoseArgs:
    def __init__(__self__, *,
                 delivery_stream_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 separator: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] delivery_stream_name: The delivery stream name.
        :param pulumi.Input[str] role_arn: The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        :param pulumi.Input[str] separator: A character separator that is used to separate records written to the Firehose stream. Valid values are: '\n' (newline), '\t' (tab), '\r\n' (Windows newline), ',' (comma).
        """
        pulumi.set(__self__, "delivery_stream_name", delivery_stream_name)
        pulumi.set(__self__, "role_arn", role_arn)
        if separator is not None:
            pulumi.set(__self__, "separator", separator)

    @property
    @pulumi.getter(name="deliveryStreamName")
    def delivery_stream_name(self) -> pulumi.Input[str]:
        """
        The delivery stream name.
        """
        return pulumi.get(self, "delivery_stream_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        """
        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 separator(self) -> Optional[pulumi.Input[str]]:
        """
        A character separator that is used to separate records written to the Firehose stream. Valid values are: '\n' (newline), '\t' (tab), '\r\n' (Windows newline), ',' (comma).
        """
        return pulumi.get(self, "separator")

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


@pulumi.input_type
class TopicRuleErrorActionHttpArgs:
    def __init__(__self__, *,
                 url: pulumi.Input[str],
                 confirmation_url: Optional[pulumi.Input[str]] = None,
                 http_headers: Optional[pulumi.Input[Sequence[pulumi.Input['TopicRuleErrorActionHttpHttpHeaderArgs']]]] = None):
        """
        :param pulumi.Input[str] url: The HTTPS URL.
        :param pulumi.Input[str] confirmation_url: The HTTPS URL used to verify ownership of `url`.
        :param pulumi.Input[Sequence[pulumi.Input['TopicRuleErrorActionHttpHttpHeaderArgs']]] http_headers: Custom HTTP header IoT Core should send. It is possible to define more than one custom header.
        """
        pulumi.set(__self__, "url", url)
        if confirmation_url is not None:
            pulumi.set(__self__, "confirmation_url", confirmation_url)
        if http_headers is not None:
            pulumi.set(__self__, "http_headers", http_headers)

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

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

    @property
    @pulumi.getter(name="confirmationUrl")
    def confirmation_url(self) -> Optional[pulumi.Input[str]]:
        """
        The HTTPS URL used to verify ownership of `url`.
        """
        return pulumi.get(self, "confirmation_url")

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

    @property
    @pulumi.getter(name="httpHeaders")
    def http_headers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TopicRuleErrorActionHttpHttpHeaderArgs']]]]:
        """
        Custom HTTP header IoT Core should send. It is possible to define more than one custom header.
        """
        return pulumi.get(self, "http_headers")

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


@pulumi.input_type
class TopicRuleErrorActionHttpHttpHeaderArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] key: The name of the HTTP header.
        :param pulumi.Input[str] value: The value of the HTTP header.
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

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

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

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

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


@pulumi.input_type
class TopicRuleErrorActionIotAnalyticsArgs:
    def __init__(__self__, *,
                 channel_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] channel_name: Name of AWS IOT Analytics channel.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        """
        pulumi.set(__self__, "channel_name", channel_name)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="channelName")
    def channel_name(self) -> pulumi.Input[str]:
        """
        Name of AWS IOT Analytics channel.
        """
        return pulumi.get(self, "channel_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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 TopicRuleErrorActionIotEventsArgs:
    def __init__(__self__, *,
                 input_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 message_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] input_name: The name of the AWS IoT Events input.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[str] message_id: Use this to ensure that only one input (message) with a given messageId is processed by an AWS IoT Events detector.
        """
        pulumi.set(__self__, "input_name", input_name)
        pulumi.set(__self__, "role_arn", role_arn)
        if message_id is not None:
            pulumi.set(__self__, "message_id", message_id)

    @property
    @pulumi.getter(name="inputName")
    def input_name(self) -> pulumi.Input[str]:
        """
        The name of the AWS IoT Events input.
        """
        return pulumi.get(self, "input_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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="messageId")
    def message_id(self) -> Optional[pulumi.Input[str]]:
        """
        Use this to ensure that only one input (message) with a given messageId is processed by an AWS IoT Events detector.
        """
        return pulumi.get(self, "message_id")

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


@pulumi.input_type
class TopicRuleErrorActionKafkaArgs:
    def __init__(__self__, *,
                 client_properties: pulumi.Input[Mapping[str, pulumi.Input[str]]],
                 destination_arn: pulumi.Input[str],
                 topic: pulumi.Input[str],
                 key: Optional[pulumi.Input[str]] = None,
                 partition: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] client_properties: Properties of the Apache Kafka producer client. For more info, see the [AWS documentation](https://docs.aws.amazon.com/iot/latest/developerguide/apache-kafka-rule-action.html).
        :param pulumi.Input[str] destination_arn: The ARN of Kafka action's VPC `iot.TopicRuleDestination` .
        :param pulumi.Input[str] topic: The Kafka topic for messages to be sent to the Kafka broker.
        :param pulumi.Input[str] key: The Kafka message key.
        :param pulumi.Input[str] partition: The Kafka message partition.
        """
        pulumi.set(__self__, "client_properties", client_properties)
        pulumi.set(__self__, "destination_arn", destination_arn)
        pulumi.set(__self__, "topic", topic)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if partition is not None:
            pulumi.set(__self__, "partition", partition)

    @property
    @pulumi.getter(name="clientProperties")
    def client_properties(self) -> pulumi.Input[Mapping[str, pulumi.Input[str]]]:
        """
        Properties of the Apache Kafka producer client. For more info, see the [AWS documentation](https://docs.aws.amazon.com/iot/latest/developerguide/apache-kafka-rule-action.html).
        """
        return pulumi.get(self, "client_properties")

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

    @property
    @pulumi.getter(name="destinationArn")
    def destination_arn(self) -> pulumi.Input[str]:
        """
        The ARN of Kafka action's VPC `iot.TopicRuleDestination` .
        """
        return pulumi.get(self, "destination_arn")

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

    @property
    @pulumi.getter
    def topic(self) -> pulumi.Input[str]:
        """
        The Kafka topic for messages to be sent to the Kafka broker.
        """
        return pulumi.get(self, "topic")

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

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

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

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

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


@pulumi.input_type
class TopicRuleErrorActionKinesisArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 stream_name: pulumi.Input[str],
                 partition_key: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access to the Amazon Kinesis stream.
        :param pulumi.Input[str] stream_name: The name of the Amazon Kinesis stream.
        :param pulumi.Input[str] partition_key: The partition key.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "stream_name", stream_name)
        if partition_key is not None:
            pulumi.set(__self__, "partition_key", partition_key)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access to the Amazon 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)

    @property
    @pulumi.getter(name="streamName")
    def stream_name(self) -> pulumi.Input[str]:
        """
        The name of the Amazon Kinesis stream.
        """
        return pulumi.get(self, "stream_name")

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

    @property
    @pulumi.getter(name="partitionKey")
    def partition_key(self) -> Optional[pulumi.Input[str]]:
        """
        The partition key.
        """
        return pulumi.get(self, "partition_key")

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


@pulumi.input_type
class TopicRuleErrorActionLambdaArgs:
    def __init__(__self__, *,
                 function_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] function_arn: The ARN of the Lambda function.
        """
        pulumi.set(__self__, "function_arn", function_arn)

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

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


@pulumi.input_type
class TopicRuleErrorActionRepublishArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 topic: pulumi.Input[str],
                 qos: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[str] topic: The name of the MQTT topic the message should be republished to.
        :param pulumi.Input[int] qos: The Quality of Service (QoS) level to use when republishing messages. Valid values are 0 or 1. The default value is 0.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "topic", topic)
        if qos is not None:
            pulumi.set(__self__, "qos", qos)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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 topic(self) -> pulumi.Input[str]:
        """
        The name of the MQTT topic the message should be republished to.
        """
        return pulumi.get(self, "topic")

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

    @property
    @pulumi.getter
    def qos(self) -> Optional[pulumi.Input[int]]:
        """
        The Quality of Service (QoS) level to use when republishing messages. Valid values are 0 or 1. The default value is 0.
        """
        return pulumi.get(self, "qos")

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


@pulumi.input_type
class TopicRuleErrorActionS3Args:
    def __init__(__self__, *,
                 bucket_name: pulumi.Input[str],
                 key: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 canned_acl: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket_name: The Amazon S3 bucket name.
        :param pulumi.Input[str] key: The name of the HTTP header.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param pulumi.Input[str] canned_acl: The Amazon S3 canned ACL that controls access to the object identified by the object key. [Valid values](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).
        """
        pulumi.set(__self__, "bucket_name", bucket_name)
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "role_arn", role_arn)
        if canned_acl is not None:
            pulumi.set(__self__, "canned_acl", canned_acl)

    @property
    @pulumi.getter(name="bucketName")
    def bucket_name(self) -> pulumi.Input[str]:
        """
        The Amazon S3 bucket name.
        """
        return pulumi.get(self, "bucket_name")

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

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

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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="cannedAcl")
    def canned_acl(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 canned ACL that controls access to the object identified by the object key. [Valid values](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).
        """
        return pulumi.get(self, "canned_acl")

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


@pulumi.input_type
class TopicRuleErrorActionSnsArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 target_arn: pulumi.Input[str],
                 message_format: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[str] target_arn: The ARN of the SNS topic.
        :param pulumi.Input[str] message_format: The message format of the message to publish. Accepted values are "JSON" and "RAW".
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "target_arn", target_arn)
        if message_format is not None:
            pulumi.set(__self__, "message_format", message_format)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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="targetArn")
    def target_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the SNS topic.
        """
        return pulumi.get(self, "target_arn")

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

    @property
    @pulumi.getter(name="messageFormat")
    def message_format(self) -> Optional[pulumi.Input[str]]:
        """
        The message format of the message to publish. Accepted values are "JSON" and "RAW".
        """
        return pulumi.get(self, "message_format")

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


@pulumi.input_type
class TopicRuleErrorActionSqsArgs:
    def __init__(__self__, *,
                 queue_url: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 use_base64: pulumi.Input[bool]):
        """
        :param pulumi.Input[str] queue_url: The URL of the Amazon SQS queue.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[bool] use_base64: Specifies whether to use Base64 encoding.
        """
        pulumi.set(__self__, "queue_url", queue_url)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "use_base64", use_base64)

    @property
    @pulumi.getter(name="queueUrl")
    def queue_url(self) -> pulumi.Input[str]:
        """
        The URL of the Amazon SQS queue.
        """
        return pulumi.get(self, "queue_url")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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="useBase64")
    def use_base64(self) -> pulumi.Input[bool]:
        """
        Specifies whether to use Base64 encoding.
        """
        return pulumi.get(self, "use_base64")

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


@pulumi.input_type
class TopicRuleErrorActionStepFunctionsArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 state_machine_name: pulumi.Input[str],
                 execution_name_prefix: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access to start execution of the state machine.
        :param pulumi.Input[str] state_machine_name: The name of the Step Functions state machine whose execution will be started.
        :param pulumi.Input[str] execution_name_prefix: The prefix used to generate, along with a UUID, the unique state machine execution name.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "state_machine_name", state_machine_name)
        if execution_name_prefix is not None:
            pulumi.set(__self__, "execution_name_prefix", execution_name_prefix)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access to start execution of the state machine.
        """
        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="stateMachineName")
    def state_machine_name(self) -> pulumi.Input[str]:
        """
        The name of the Step Functions state machine whose execution will be started.
        """
        return pulumi.get(self, "state_machine_name")

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

    @property
    @pulumi.getter(name="executionNamePrefix")
    def execution_name_prefix(self) -> Optional[pulumi.Input[str]]:
        """
        The prefix used to generate, along with a UUID, the unique state machine execution name.
        """
        return pulumi.get(self, "execution_name_prefix")

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


@pulumi.input_type
class TopicRuleErrorActionTimestreamArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 dimensions: pulumi.Input[Sequence[pulumi.Input['TopicRuleErrorActionTimestreamDimensionArgs']]],
                 role_arn: pulumi.Input[str],
                 table_name: pulumi.Input[str],
                 timestamp: Optional[pulumi.Input['TopicRuleErrorActionTimestreamTimestampArgs']] = None):
        """
        :param pulumi.Input[str] database_name: The name of an Amazon Timestream database.
        :param pulumi.Input[Sequence[pulumi.Input['TopicRuleErrorActionTimestreamDimensionArgs']]] dimensions: Configuration blocks with metadata attributes of the time series that are written in each measure record. Nested arguments below.
        :param pulumi.Input[str] role_arn: The ARN of the role that grants permission to write to the Amazon Timestream database table.
        :param pulumi.Input[str] table_name: The name of the database table into which to write the measure records.
        :param pulumi.Input['TopicRuleErrorActionTimestreamTimestampArgs'] timestamp: Configuration block specifying an application-defined value to replace the default value assigned to the Timestream record's timestamp in the time column. Nested arguments below.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "dimensions", dimensions)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "table_name", table_name)
        if timestamp is not None:
            pulumi.set(__self__, "timestamp", timestamp)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The name of an Amazon Timestream database.
        """
        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
    def dimensions(self) -> pulumi.Input[Sequence[pulumi.Input['TopicRuleErrorActionTimestreamDimensionArgs']]]:
        """
        Configuration blocks with metadata attributes of the time series that are written in each measure record. Nested arguments below.
        """
        return pulumi.get(self, "dimensions")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the role that grants permission to write to the Amazon Timestream database table.
        """
        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]:
        """
        The name of the database table into which to write the measure records.
        """
        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 timestamp(self) -> Optional[pulumi.Input['TopicRuleErrorActionTimestreamTimestampArgs']]:
        """
        Configuration block specifying an application-defined value to replace the default value assigned to the Timestream record's timestamp in the time column. Nested arguments below.
        """
        return pulumi.get(self, "timestamp")

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


@pulumi.input_type
class TopicRuleErrorActionTimestreamDimensionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the rule.
        :param pulumi.Input[str] value: The value of the HTTP header.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the rule.
        """
        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 header.
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class TopicRuleErrorActionTimestreamTimestampArgs:
    def __init__(__self__, *,
                 unit: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] unit: The precision of the timestamp value that results from the expression described in value. Valid values: `SECONDS`, `MILLISECONDS`, `MICROSECONDS`, `NANOSECONDS`.
        :param pulumi.Input[str] value: The value of the HTTP header.
        """
        pulumi.set(__self__, "unit", unit)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def unit(self) -> pulumi.Input[str]:
        """
        The precision of the timestamp value that results from the expression described in value. Valid values: `SECONDS`, `MILLISECONDS`, `MICROSECONDS`, `NANOSECONDS`.
        """
        return pulumi.get(self, "unit")

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

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

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


@pulumi.input_type
class TopicRuleFirehoseArgs:
    def __init__(__self__, *,
                 delivery_stream_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 separator: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] delivery_stream_name: The delivery stream name.
        :param pulumi.Input[str] role_arn: The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        :param pulumi.Input[str] separator: A character separator that is used to separate records written to the Firehose stream. Valid values are: '\n' (newline), '\t' (tab), '\r\n' (Windows newline), ',' (comma).
        """
        pulumi.set(__self__, "delivery_stream_name", delivery_stream_name)
        pulumi.set(__self__, "role_arn", role_arn)
        if separator is not None:
            pulumi.set(__self__, "separator", separator)

    @property
    @pulumi.getter(name="deliveryStreamName")
    def delivery_stream_name(self) -> pulumi.Input[str]:
        """
        The delivery stream name.
        """
        return pulumi.get(self, "delivery_stream_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        """
        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 separator(self) -> Optional[pulumi.Input[str]]:
        """
        A character separator that is used to separate records written to the Firehose stream. Valid values are: '\n' (newline), '\t' (tab), '\r\n' (Windows newline), ',' (comma).
        """
        return pulumi.get(self, "separator")

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


@pulumi.input_type
class TopicRuleHttpArgs:
    def __init__(__self__, *,
                 url: pulumi.Input[str],
                 confirmation_url: Optional[pulumi.Input[str]] = None,
                 http_headers: Optional[pulumi.Input[Sequence[pulumi.Input['TopicRuleHttpHttpHeaderArgs']]]] = None):
        """
        :param pulumi.Input[str] url: The HTTPS URL.
        :param pulumi.Input[str] confirmation_url: The HTTPS URL used to verify ownership of `url`.
        :param pulumi.Input[Sequence[pulumi.Input['TopicRuleHttpHttpHeaderArgs']]] http_headers: Custom HTTP header IoT Core should send. It is possible to define more than one custom header.
        """
        pulumi.set(__self__, "url", url)
        if confirmation_url is not None:
            pulumi.set(__self__, "confirmation_url", confirmation_url)
        if http_headers is not None:
            pulumi.set(__self__, "http_headers", http_headers)

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

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

    @property
    @pulumi.getter(name="confirmationUrl")
    def confirmation_url(self) -> Optional[pulumi.Input[str]]:
        """
        The HTTPS URL used to verify ownership of `url`.
        """
        return pulumi.get(self, "confirmation_url")

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

    @property
    @pulumi.getter(name="httpHeaders")
    def http_headers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TopicRuleHttpHttpHeaderArgs']]]]:
        """
        Custom HTTP header IoT Core should send. It is possible to define more than one custom header.
        """
        return pulumi.get(self, "http_headers")

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


@pulumi.input_type
class TopicRuleHttpHttpHeaderArgs:
    def __init__(__self__, *,
                 key: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] key: The name of the HTTP header.
        :param pulumi.Input[str] value: The value of the HTTP header.
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

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

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

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

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


@pulumi.input_type
class TopicRuleIotAnalyticArgs:
    def __init__(__self__, *,
                 channel_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] channel_name: Name of AWS IOT Analytics channel.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        """
        pulumi.set(__self__, "channel_name", channel_name)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="channelName")
    def channel_name(self) -> pulumi.Input[str]:
        """
        Name of AWS IOT Analytics channel.
        """
        return pulumi.get(self, "channel_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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 TopicRuleIotEventArgs:
    def __init__(__self__, *,
                 input_name: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 message_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] input_name: The name of the AWS IoT Events input.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[str] message_id: Use this to ensure that only one input (message) with a given messageId is processed by an AWS IoT Events detector.
        """
        pulumi.set(__self__, "input_name", input_name)
        pulumi.set(__self__, "role_arn", role_arn)
        if message_id is not None:
            pulumi.set(__self__, "message_id", message_id)

    @property
    @pulumi.getter(name="inputName")
    def input_name(self) -> pulumi.Input[str]:
        """
        The name of the AWS IoT Events input.
        """
        return pulumi.get(self, "input_name")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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="messageId")
    def message_id(self) -> Optional[pulumi.Input[str]]:
        """
        Use this to ensure that only one input (message) with a given messageId is processed by an AWS IoT Events detector.
        """
        return pulumi.get(self, "message_id")

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


@pulumi.input_type
class TopicRuleKafkaArgs:
    def __init__(__self__, *,
                 client_properties: pulumi.Input[Mapping[str, pulumi.Input[str]]],
                 destination_arn: pulumi.Input[str],
                 topic: pulumi.Input[str],
                 key: Optional[pulumi.Input[str]] = None,
                 partition: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] client_properties: Properties of the Apache Kafka producer client. For more info, see the [AWS documentation](https://docs.aws.amazon.com/iot/latest/developerguide/apache-kafka-rule-action.html).
        :param pulumi.Input[str] destination_arn: The ARN of Kafka action's VPC `iot.TopicRuleDestination` .
        :param pulumi.Input[str] topic: The Kafka topic for messages to be sent to the Kafka broker.
        :param pulumi.Input[str] key: The Kafka message key.
        :param pulumi.Input[str] partition: The Kafka message partition.
        """
        pulumi.set(__self__, "client_properties", client_properties)
        pulumi.set(__self__, "destination_arn", destination_arn)
        pulumi.set(__self__, "topic", topic)
        if key is not None:
            pulumi.set(__self__, "key", key)
        if partition is not None:
            pulumi.set(__self__, "partition", partition)

    @property
    @pulumi.getter(name="clientProperties")
    def client_properties(self) -> pulumi.Input[Mapping[str, pulumi.Input[str]]]:
        """
        Properties of the Apache Kafka producer client. For more info, see the [AWS documentation](https://docs.aws.amazon.com/iot/latest/developerguide/apache-kafka-rule-action.html).
        """
        return pulumi.get(self, "client_properties")

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

    @property
    @pulumi.getter(name="destinationArn")
    def destination_arn(self) -> pulumi.Input[str]:
        """
        The ARN of Kafka action's VPC `iot.TopicRuleDestination` .
        """
        return pulumi.get(self, "destination_arn")

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

    @property
    @pulumi.getter
    def topic(self) -> pulumi.Input[str]:
        """
        The Kafka topic for messages to be sent to the Kafka broker.
        """
        return pulumi.get(self, "topic")

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

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

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

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

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


@pulumi.input_type
class TopicRuleKinesisArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 stream_name: pulumi.Input[str],
                 partition_key: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access to the Amazon Kinesis stream.
        :param pulumi.Input[str] stream_name: The name of the Amazon Kinesis stream.
        :param pulumi.Input[str] partition_key: The partition key.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "stream_name", stream_name)
        if partition_key is not None:
            pulumi.set(__self__, "partition_key", partition_key)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access to the Amazon 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)

    @property
    @pulumi.getter(name="streamName")
    def stream_name(self) -> pulumi.Input[str]:
        """
        The name of the Amazon Kinesis stream.
        """
        return pulumi.get(self, "stream_name")

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

    @property
    @pulumi.getter(name="partitionKey")
    def partition_key(self) -> Optional[pulumi.Input[str]]:
        """
        The partition key.
        """
        return pulumi.get(self, "partition_key")

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


@pulumi.input_type
class TopicRuleLambdaArgs:
    def __init__(__self__, *,
                 function_arn: pulumi.Input[str]):
        """
        :param pulumi.Input[str] function_arn: The ARN of the Lambda function.
        """
        pulumi.set(__self__, "function_arn", function_arn)

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

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


@pulumi.input_type
class TopicRuleRepublishArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 topic: pulumi.Input[str],
                 qos: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[str] topic: The name of the MQTT topic the message should be republished to.
        :param pulumi.Input[int] qos: The Quality of Service (QoS) level to use when republishing messages. Valid values are 0 or 1. The default value is 0.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "topic", topic)
        if qos is not None:
            pulumi.set(__self__, "qos", qos)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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 topic(self) -> pulumi.Input[str]:
        """
        The name of the MQTT topic the message should be republished to.
        """
        return pulumi.get(self, "topic")

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

    @property
    @pulumi.getter
    def qos(self) -> Optional[pulumi.Input[int]]:
        """
        The Quality of Service (QoS) level to use when republishing messages. Valid values are 0 or 1. The default value is 0.
        """
        return pulumi.get(self, "qos")

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


@pulumi.input_type
class TopicRuleS3Args:
    def __init__(__self__, *,
                 bucket_name: pulumi.Input[str],
                 key: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 canned_acl: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket_name: The Amazon S3 bucket name.
        :param pulumi.Input[str] key: The name of the HTTP header.
        :param pulumi.Input[str] role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param pulumi.Input[str] canned_acl: The Amazon S3 canned ACL that controls access to the object identified by the object key. [Valid values](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).
        """
        pulumi.set(__self__, "bucket_name", bucket_name)
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "role_arn", role_arn)
        if canned_acl is not None:
            pulumi.set(__self__, "canned_acl", canned_acl)

    @property
    @pulumi.getter(name="bucketName")
    def bucket_name(self) -> pulumi.Input[str]:
        """
        The Amazon S3 bucket name.
        """
        return pulumi.get(self, "bucket_name")

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

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

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        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="cannedAcl")
    def canned_acl(self) -> Optional[pulumi.Input[str]]:
        """
        The Amazon S3 canned ACL that controls access to the object identified by the object key. [Valid values](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl).
        """
        return pulumi.get(self, "canned_acl")

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


@pulumi.input_type
class TopicRuleSnsArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 target_arn: pulumi.Input[str],
                 message_format: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[str] target_arn: The ARN of the SNS topic.
        :param pulumi.Input[str] message_format: The message format of the message to publish. Accepted values are "JSON" and "RAW".
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "target_arn", target_arn)
        if message_format is not None:
            pulumi.set(__self__, "message_format", message_format)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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="targetArn")
    def target_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the SNS topic.
        """
        return pulumi.get(self, "target_arn")

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

    @property
    @pulumi.getter(name="messageFormat")
    def message_format(self) -> Optional[pulumi.Input[str]]:
        """
        The message format of the message to publish. Accepted values are "JSON" and "RAW".
        """
        return pulumi.get(self, "message_format")

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


@pulumi.input_type
class TopicRuleSqsArgs:
    def __init__(__self__, *,
                 queue_url: pulumi.Input[str],
                 role_arn: pulumi.Input[str],
                 use_base64: pulumi.Input[bool]):
        """
        :param pulumi.Input[str] queue_url: The URL of the Amazon SQS queue.
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access.
        :param pulumi.Input[bool] use_base64: Specifies whether to use Base64 encoding.
        """
        pulumi.set(__self__, "queue_url", queue_url)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "use_base64", use_base64)

    @property
    @pulumi.getter(name="queueUrl")
    def queue_url(self) -> pulumi.Input[str]:
        """
        The URL of the Amazon SQS queue.
        """
        return pulumi.get(self, "queue_url")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access.
        """
        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="useBase64")
    def use_base64(self) -> pulumi.Input[bool]:
        """
        Specifies whether to use Base64 encoding.
        """
        return pulumi.get(self, "use_base64")

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


@pulumi.input_type
class TopicRuleStepFunctionArgs:
    def __init__(__self__, *,
                 role_arn: pulumi.Input[str],
                 state_machine_name: pulumi.Input[str],
                 execution_name_prefix: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] role_arn: The ARN of the IAM role that grants access to start execution of the state machine.
        :param pulumi.Input[str] state_machine_name: The name of the Step Functions state machine whose execution will be started.
        :param pulumi.Input[str] execution_name_prefix: The prefix used to generate, along with a UUID, the unique state machine execution name.
        """
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "state_machine_name", state_machine_name)
        if execution_name_prefix is not None:
            pulumi.set(__self__, "execution_name_prefix", execution_name_prefix)

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the IAM role that grants access to start execution of the state machine.
        """
        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="stateMachineName")
    def state_machine_name(self) -> pulumi.Input[str]:
        """
        The name of the Step Functions state machine whose execution will be started.
        """
        return pulumi.get(self, "state_machine_name")

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

    @property
    @pulumi.getter(name="executionNamePrefix")
    def execution_name_prefix(self) -> Optional[pulumi.Input[str]]:
        """
        The prefix used to generate, along with a UUID, the unique state machine execution name.
        """
        return pulumi.get(self, "execution_name_prefix")

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


@pulumi.input_type
class TopicRuleTimestreamArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 dimensions: pulumi.Input[Sequence[pulumi.Input['TopicRuleTimestreamDimensionArgs']]],
                 role_arn: pulumi.Input[str],
                 table_name: pulumi.Input[str],
                 timestamp: Optional[pulumi.Input['TopicRuleTimestreamTimestampArgs']] = None):
        """
        :param pulumi.Input[str] database_name: The name of an Amazon Timestream database.
        :param pulumi.Input[Sequence[pulumi.Input['TopicRuleTimestreamDimensionArgs']]] dimensions: Configuration blocks with metadata attributes of the time series that are written in each measure record. Nested arguments below.
        :param pulumi.Input[str] role_arn: The ARN of the role that grants permission to write to the Amazon Timestream database table.
        :param pulumi.Input[str] table_name: The name of the database table into which to write the measure records.
        :param pulumi.Input['TopicRuleTimestreamTimestampArgs'] timestamp: Configuration block specifying an application-defined value to replace the default value assigned to the Timestream record's timestamp in the time column. Nested arguments below.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "dimensions", dimensions)
        pulumi.set(__self__, "role_arn", role_arn)
        pulumi.set(__self__, "table_name", table_name)
        if timestamp is not None:
            pulumi.set(__self__, "timestamp", timestamp)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The name of an Amazon Timestream database.
        """
        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
    def dimensions(self) -> pulumi.Input[Sequence[pulumi.Input['TopicRuleTimestreamDimensionArgs']]]:
        """
        Configuration blocks with metadata attributes of the time series that are written in each measure record. Nested arguments below.
        """
        return pulumi.get(self, "dimensions")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> pulumi.Input[str]:
        """
        The ARN of the role that grants permission to write to the Amazon Timestream database table.
        """
        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]:
        """
        The name of the database table into which to write the measure records.
        """
        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 timestamp(self) -> Optional[pulumi.Input['TopicRuleTimestreamTimestampArgs']]:
        """
        Configuration block specifying an application-defined value to replace the default value assigned to the Timestream record's timestamp in the time column. Nested arguments below.
        """
        return pulumi.get(self, "timestamp")

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


@pulumi.input_type
class TopicRuleTimestreamDimensionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the rule.
        :param pulumi.Input[str] value: The value of the HTTP header.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the rule.
        """
        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 header.
        """
        return pulumi.get(self, "value")

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


@pulumi.input_type
class TopicRuleTimestreamTimestampArgs:
    def __init__(__self__, *,
                 unit: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] unit: The precision of the timestamp value that results from the expression described in value. Valid values: `SECONDS`, `MILLISECONDS`, `MICROSECONDS`, `NANOSECONDS`.
        :param pulumi.Input[str] value: The value of the HTTP header.
        """
        pulumi.set(__self__, "unit", unit)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def unit(self) -> pulumi.Input[str]:
        """
        The precision of the timestamp value that results from the expression described in value. Valid values: `SECONDS`, `MILLISECONDS`, `MICROSECONDS`, `NANOSECONDS`.
        """
        return pulumi.get(self, "unit")

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

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

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


