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

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

__all__ = [
    'ThingTypeProperties',
    'TopicRuleCloudwatchAlarm',
    'TopicRuleCloudwatchMetric',
    'TopicRuleDynamodb',
    'TopicRuleDynamodbv2',
    'TopicRuleDynamodbv2PutItem',
    'TopicRuleElasticsearch',
    'TopicRuleErrorAction',
    'TopicRuleErrorActionCloudwatchAlarm',
    'TopicRuleErrorActionCloudwatchMetric',
    'TopicRuleErrorActionDynamodb',
    'TopicRuleErrorActionDynamodbv2',
    'TopicRuleErrorActionDynamodbv2PutItem',
    'TopicRuleErrorActionElasticsearch',
    'TopicRuleErrorActionFirehose',
    'TopicRuleErrorActionIotAnalytics',
    'TopicRuleErrorActionIotEvents',
    'TopicRuleErrorActionKinesis',
    'TopicRuleErrorActionLambda',
    'TopicRuleErrorActionRepublish',
    'TopicRuleErrorActionS3',
    'TopicRuleErrorActionSns',
    'TopicRuleErrorActionSqs',
    'TopicRuleErrorActionStepFunctions',
    'TopicRuleFirehose',
    'TopicRuleIotAnalytic',
    'TopicRuleIotEvent',
    'TopicRuleKinesis',
    'TopicRuleLambda',
    'TopicRuleRepublish',
    'TopicRuleS3',
    'TopicRuleSns',
    'TopicRuleSqs',
    'TopicRuleStepFunction',
]

@pulumi.output_type
class ThingTypeProperties(dict):
    def __init__(__self__, *,
                 description: Optional[str] = None,
                 searchable_attributes: Optional[Sequence[str]] = None):
        """
        :param str description: The description of the thing type.
        :param Sequence[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[str]:
        """
        The description of the thing type.
        """
        return pulumi.get(self, "description")

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

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


@pulumi.output_type
class TopicRuleCloudwatchAlarm(dict):
    def __init__(__self__, *,
                 alarm_name: str,
                 role_arn: str,
                 state_reason: str,
                 state_value: str):
        """
        :param str alarm_name: The CloudWatch alarm name.
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param str state_reason: The reason for the alarm change.
        :param 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) -> str:
        """
        The CloudWatch alarm name.
        """
        return pulumi.get(self, "alarm_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="stateReason")
    def state_reason(self) -> str:
        """
        The reason for the alarm change.
        """
        return pulumi.get(self, "state_reason")

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

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


@pulumi.output_type
class TopicRuleCloudwatchMetric(dict):
    def __init__(__self__, *,
                 metric_name: str,
                 metric_namespace: str,
                 metric_unit: str,
                 metric_value: str,
                 role_arn: str,
                 metric_timestamp: Optional[str] = None):
        """
        :param str metric_name: The CloudWatch metric name.
        :param str metric_namespace: The CloudWatch metric namespace name.
        :param 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 str metric_value: The CloudWatch metric value.
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch metric.
        :param 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) -> str:
        """
        The CloudWatch metric name.
        """
        return pulumi.get(self, "metric_name")

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

    @property
    @pulumi.getter(name="metricUnit")
    def metric_unit(self) -> 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")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch metric.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="metricTimestamp")
    def metric_timestamp(self) -> Optional[str]:
        """
        An optional Unix timestamp (http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp).
        """
        return pulumi.get(self, "metric_timestamp")

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


@pulumi.output_type
class TopicRuleDynamodb(dict):
    def __init__(__self__, *,
                 hash_key_field: str,
                 hash_key_value: str,
                 role_arn: str,
                 table_name: str,
                 hash_key_type: Optional[str] = None,
                 operation: Optional[str] = None,
                 payload_field: Optional[str] = None,
                 range_key_field: Optional[str] = None,
                 range_key_type: Optional[str] = None,
                 range_key_value: Optional[str] = None):
        """
        :param str hash_key_field: The hash key name.
        :param str hash_key_value: The hash key value.
        :param str role_arn: The ARN of the IAM role that grants access to the DynamoDB table.
        :param str table_name: The name of the DynamoDB table.
        :param str hash_key_type: The hash key type. Valid values are "STRING" or "NUMBER".
        :param str operation: The operation. Valid values are "INSERT", "UPDATE", or "DELETE".
        :param str payload_field: The action payload.
        :param str range_key_field: The range key name.
        :param str range_key_type: The range key type. Valid values are "STRING" or "NUMBER".
        :param 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) -> str:
        """
        The hash key name.
        """
        return pulumi.get(self, "hash_key_field")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access to the DynamoDB table.
        """
        return pulumi.get(self, "role_arn")

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

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

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

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

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

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

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

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


@pulumi.output_type
class TopicRuleDynamodbv2(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 put_item: Optional['outputs.TopicRuleDynamodbv2PutItem'] = None):
        """
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param '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) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="putItem")
    def put_item(self) -> Optional['outputs.TopicRuleDynamodbv2PutItem']:
        """
        Configuration block with DynamoDB Table to which the message will be written. Nested arguments below.
        """
        return pulumi.get(self, "put_item")

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


@pulumi.output_type
class TopicRuleDynamodbv2PutItem(dict):
    def __init__(__self__, *,
                 table_name: str):
        """
        :param 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) -> str:
        """
        The name of the DynamoDB table.
        """
        return pulumi.get(self, "table_name")

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


@pulumi.output_type
class TopicRuleElasticsearch(dict):
    def __init__(__self__, *,
                 endpoint: str,
                 id: str,
                 index: str,
                 role_arn: str,
                 type: str):
        """
        :param str endpoint: The endpoint of your Elasticsearch domain.
        :param str id: The unique identifier for the document you are storing.
        :param str index: The Elasticsearch index where you want to store your data.
        :param str role_arn: The IAM role ARN that has access to Elasticsearch.
        :param 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) -> str:
        """
        The endpoint of your Elasticsearch domain.
        """
        return pulumi.get(self, "endpoint")

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

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that has access to Elasticsearch.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of document you are storing.
        """
        return pulumi.get(self, "type")

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


@pulumi.output_type
class TopicRuleErrorAction(dict):
    def __init__(__self__, *,
                 cloudwatch_alarm: Optional['outputs.TopicRuleErrorActionCloudwatchAlarm'] = None,
                 cloudwatch_metric: Optional['outputs.TopicRuleErrorActionCloudwatchMetric'] = None,
                 dynamodb: Optional['outputs.TopicRuleErrorActionDynamodb'] = None,
                 dynamodbv2: Optional['outputs.TopicRuleErrorActionDynamodbv2'] = None,
                 elasticsearch: Optional['outputs.TopicRuleErrorActionElasticsearch'] = None,
                 firehose: Optional['outputs.TopicRuleErrorActionFirehose'] = None,
                 iot_analytics: Optional['outputs.TopicRuleErrorActionIotAnalytics'] = None,
                 iot_events: Optional['outputs.TopicRuleErrorActionIotEvents'] = None,
                 kinesis: Optional['outputs.TopicRuleErrorActionKinesis'] = None,
                 lambda_: Optional['outputs.TopicRuleErrorActionLambda'] = None,
                 republish: Optional['outputs.TopicRuleErrorActionRepublish'] = None,
                 s3: Optional['outputs.TopicRuleErrorActionS3'] = None,
                 sns: Optional['outputs.TopicRuleErrorActionSns'] = None,
                 sqs: Optional['outputs.TopicRuleErrorActionSqs'] = None,
                 step_functions: Optional['outputs.TopicRuleErrorActionStepFunctions'] = None):
        if cloudwatch_alarm is not None:
            pulumi.set(__self__, "cloudwatch_alarm", cloudwatch_alarm)
        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 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 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.output_type
class TopicRuleErrorActionCloudwatchAlarm(dict):
    def __init__(__self__, *,
                 alarm_name: str,
                 role_arn: str,
                 state_reason: str,
                 state_value: str):
        """
        :param str alarm_name: The CloudWatch alarm name.
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param str state_reason: The reason for the alarm change.
        :param 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) -> str:
        """
        The CloudWatch alarm name.
        """
        return pulumi.get(self, "alarm_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="stateReason")
    def state_reason(self) -> str:
        """
        The reason for the alarm change.
        """
        return pulumi.get(self, "state_reason")

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

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


@pulumi.output_type
class TopicRuleErrorActionCloudwatchMetric(dict):
    def __init__(__self__, *,
                 metric_name: str,
                 metric_namespace: str,
                 metric_unit: str,
                 metric_value: str,
                 role_arn: str,
                 metric_timestamp: Optional[str] = None):
        """
        :param str metric_name: The CloudWatch metric name.
        :param str metric_namespace: The CloudWatch metric namespace name.
        :param 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 str metric_value: The CloudWatch metric value.
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch metric.
        :param 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) -> str:
        """
        The CloudWatch metric name.
        """
        return pulumi.get(self, "metric_name")

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

    @property
    @pulumi.getter(name="metricUnit")
    def metric_unit(self) -> 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")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch metric.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="metricTimestamp")
    def metric_timestamp(self) -> Optional[str]:
        """
        An optional Unix timestamp (http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp).
        """
        return pulumi.get(self, "metric_timestamp")

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


@pulumi.output_type
class TopicRuleErrorActionDynamodb(dict):
    def __init__(__self__, *,
                 hash_key_field: str,
                 hash_key_value: str,
                 role_arn: str,
                 table_name: str,
                 hash_key_type: Optional[str] = None,
                 operation: Optional[str] = None,
                 payload_field: Optional[str] = None,
                 range_key_field: Optional[str] = None,
                 range_key_type: Optional[str] = None,
                 range_key_value: Optional[str] = None):
        """
        :param str hash_key_field: The hash key name.
        :param str hash_key_value: The hash key value.
        :param str role_arn: The ARN of the IAM role that grants access to the DynamoDB table.
        :param str table_name: The name of the DynamoDB table.
        :param str hash_key_type: The hash key type. Valid values are "STRING" or "NUMBER".
        :param str operation: The operation. Valid values are "INSERT", "UPDATE", or "DELETE".
        :param str payload_field: The action payload.
        :param str range_key_field: The range key name.
        :param str range_key_type: The range key type. Valid values are "STRING" or "NUMBER".
        :param 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) -> str:
        """
        The hash key name.
        """
        return pulumi.get(self, "hash_key_field")

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access to the DynamoDB table.
        """
        return pulumi.get(self, "role_arn")

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

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

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

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

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

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

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

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


@pulumi.output_type
class TopicRuleErrorActionDynamodbv2(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 put_item: Optional['outputs.TopicRuleErrorActionDynamodbv2PutItem'] = None):
        """
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        :param '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) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="putItem")
    def put_item(self) -> Optional['outputs.TopicRuleErrorActionDynamodbv2PutItem']:
        """
        Configuration block with DynamoDB Table to which the message will be written. Nested arguments below.
        """
        return pulumi.get(self, "put_item")

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


@pulumi.output_type
class TopicRuleErrorActionDynamodbv2PutItem(dict):
    def __init__(__self__, *,
                 table_name: str):
        """
        :param 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) -> str:
        """
        The name of the DynamoDB table.
        """
        return pulumi.get(self, "table_name")

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


@pulumi.output_type
class TopicRuleErrorActionElasticsearch(dict):
    def __init__(__self__, *,
                 endpoint: str,
                 id: str,
                 index: str,
                 role_arn: str,
                 type: str):
        """
        :param str endpoint: The endpoint of your Elasticsearch domain.
        :param str id: The unique identifier for the document you are storing.
        :param str index: The Elasticsearch index where you want to store your data.
        :param str role_arn: The IAM role ARN that has access to Elasticsearch.
        :param 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) -> str:
        """
        The endpoint of your Elasticsearch domain.
        """
        return pulumi.get(self, "endpoint")

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

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

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that has access to Elasticsearch.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of document you are storing.
        """
        return pulumi.get(self, "type")

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


@pulumi.output_type
class TopicRuleErrorActionFirehose(dict):
    def __init__(__self__, *,
                 delivery_stream_name: str,
                 role_arn: str,
                 separator: Optional[str] = None):
        """
        :param str delivery_stream_name: The delivery stream name.
        :param str role_arn: The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        :param 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) -> str:
        """
        The delivery stream name.
        """
        return pulumi.get(self, "delivery_stream_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter
    def separator(self) -> Optional[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")

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


@pulumi.output_type
class TopicRuleErrorActionIotAnalytics(dict):
    def __init__(__self__, *,
                 channel_name: str,
                 role_arn: str):
        """
        :param str channel_name: Name of AWS IOT Analytics channel.
        :param 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) -> str:
        """
        Name of AWS IOT Analytics channel.
        """
        return pulumi.get(self, "channel_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.output_type
class TopicRuleErrorActionIotEvents(dict):
    def __init__(__self__, *,
                 input_name: str,
                 role_arn: str,
                 message_id: Optional[str] = None):
        """
        :param str input_name: The name of the AWS IoT Events input.
        :param str role_arn: The ARN of the IAM role that grants access.
        :param 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) -> str:
        """
        The name of the AWS IoT Events input.
        """
        return pulumi.get(self, "input_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="messageId")
    def message_id(self) -> Optional[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")

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


@pulumi.output_type
class TopicRuleErrorActionKinesis(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 stream_name: str,
                 partition_key: Optional[str] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access to the Amazon Kinesis stream.
        :param str stream_name: The name of the Amazon Kinesis stream.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access to the Amazon Kinesis stream.
        """
        return pulumi.get(self, "role_arn")

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

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

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


@pulumi.output_type
class TopicRuleErrorActionLambda(dict):
    def __init__(__self__, *,
                 function_arn: str):
        """
        :param 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) -> str:
        """
        The ARN of the Lambda function.
        """
        return pulumi.get(self, "function_arn")

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


@pulumi.output_type
class TopicRuleErrorActionRepublish(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 topic: str,
                 qos: Optional[int] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access.
        :param str topic: The name of the MQTT topic the message should be republished to.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter
    def topic(self) -> str:
        """
        The name of the MQTT topic the message should be republished to.
        """
        return pulumi.get(self, "topic")

    @property
    @pulumi.getter
    def qos(self) -> Optional[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")

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


@pulumi.output_type
class TopicRuleErrorActionS3(dict):
    def __init__(__self__, *,
                 bucket_name: str,
                 key: str,
                 role_arn: str):
        """
        :param str bucket_name: The Amazon S3 bucket name.
        :param str key: The object key.
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        """
        pulumi.set(__self__, "bucket_name", bucket_name)
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "role_arn", role_arn)

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

    @property
    @pulumi.getter
    def key(self) -> str:
        """
        The object key.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.output_type
class TopicRuleErrorActionSns(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 target_arn: str,
                 message_format: Optional[str] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access.
        :param str target_arn: The ARN of the SNS topic.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="targetArn")
    def target_arn(self) -> str:
        """
        The ARN of the SNS topic.
        """
        return pulumi.get(self, "target_arn")

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

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


@pulumi.output_type
class TopicRuleErrorActionSqs(dict):
    def __init__(__self__, *,
                 queue_url: str,
                 role_arn: str,
                 use_base64: bool):
        """
        :param str queue_url: The URL of the Amazon SQS queue.
        :param str role_arn: The ARN of the IAM role that grants access.
        :param 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) -> str:
        """
        The URL of the Amazon SQS queue.
        """
        return pulumi.get(self, "queue_url")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="useBase64")
    def use_base64(self) -> bool:
        """
        Specifies whether to use Base64 encoding.
        """
        return pulumi.get(self, "use_base64")

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


@pulumi.output_type
class TopicRuleErrorActionStepFunctions(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 state_machine_name: str,
                 execution_name_prefix: Optional[str] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access to start execution of the state machine.
        :param str state_machine_name: The name of the Step Functions state machine whose execution will be started.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access to start execution of the state machine.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="stateMachineName")
    def state_machine_name(self) -> str:
        """
        The name of the Step Functions state machine whose execution will be started.
        """
        return pulumi.get(self, "state_machine_name")

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

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


@pulumi.output_type
class TopicRuleFirehose(dict):
    def __init__(__self__, *,
                 delivery_stream_name: str,
                 role_arn: str,
                 separator: Optional[str] = None):
        """
        :param str delivery_stream_name: The delivery stream name.
        :param str role_arn: The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        :param 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) -> str:
        """
        The delivery stream name.
        """
        return pulumi.get(self, "delivery_stream_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that grants access to the Amazon Kinesis Firehose stream.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter
    def separator(self) -> Optional[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")

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


@pulumi.output_type
class TopicRuleIotAnalytic(dict):
    def __init__(__self__, *,
                 channel_name: str,
                 role_arn: str):
        """
        :param str channel_name: Name of AWS IOT Analytics channel.
        :param 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) -> str:
        """
        Name of AWS IOT Analytics channel.
        """
        return pulumi.get(self, "channel_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.output_type
class TopicRuleIotEvent(dict):
    def __init__(__self__, *,
                 input_name: str,
                 role_arn: str,
                 message_id: Optional[str] = None):
        """
        :param str input_name: The name of the AWS IoT Events input.
        :param str role_arn: The ARN of the IAM role that grants access.
        :param 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) -> str:
        """
        The name of the AWS IoT Events input.
        """
        return pulumi.get(self, "input_name")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="messageId")
    def message_id(self) -> Optional[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")

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


@pulumi.output_type
class TopicRuleKinesis(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 stream_name: str,
                 partition_key: Optional[str] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access to the Amazon Kinesis stream.
        :param str stream_name: The name of the Amazon Kinesis stream.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access to the Amazon Kinesis stream.
        """
        return pulumi.get(self, "role_arn")

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

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

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


@pulumi.output_type
class TopicRuleLambda(dict):
    def __init__(__self__, *,
                 function_arn: str):
        """
        :param 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) -> str:
        """
        The ARN of the Lambda function.
        """
        return pulumi.get(self, "function_arn")

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


@pulumi.output_type
class TopicRuleRepublish(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 topic: str,
                 qos: Optional[int] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access.
        :param str topic: The name of the MQTT topic the message should be republished to.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter
    def topic(self) -> str:
        """
        The name of the MQTT topic the message should be republished to.
        """
        return pulumi.get(self, "topic")

    @property
    @pulumi.getter
    def qos(self) -> Optional[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")

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


@pulumi.output_type
class TopicRuleS3(dict):
    def __init__(__self__, *,
                 bucket_name: str,
                 key: str,
                 role_arn: str):
        """
        :param str bucket_name: The Amazon S3 bucket name.
        :param str key: The object key.
        :param str role_arn: The IAM role ARN that allows access to the CloudWatch alarm.
        """
        pulumi.set(__self__, "bucket_name", bucket_name)
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "role_arn", role_arn)

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

    @property
    @pulumi.getter
    def key(self) -> str:
        """
        The object key.
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The IAM role ARN that allows access to the CloudWatch alarm.
        """
        return pulumi.get(self, "role_arn")

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


@pulumi.output_type
class TopicRuleSns(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 target_arn: str,
                 message_format: Optional[str] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access.
        :param str target_arn: The ARN of the SNS topic.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="targetArn")
    def target_arn(self) -> str:
        """
        The ARN of the SNS topic.
        """
        return pulumi.get(self, "target_arn")

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

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


@pulumi.output_type
class TopicRuleSqs(dict):
    def __init__(__self__, *,
                 queue_url: str,
                 role_arn: str,
                 use_base64: bool):
        """
        :param str queue_url: The URL of the Amazon SQS queue.
        :param str role_arn: The ARN of the IAM role that grants access.
        :param 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) -> str:
        """
        The URL of the Amazon SQS queue.
        """
        return pulumi.get(self, "queue_url")

    @property
    @pulumi.getter(name="roleArn")
    def role_arn(self) -> str:
        """
        The ARN of the IAM role that grants access.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="useBase64")
    def use_base64(self) -> bool:
        """
        Specifies whether to use Base64 encoding.
        """
        return pulumi.get(self, "use_base64")

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


@pulumi.output_type
class TopicRuleStepFunction(dict):
    def __init__(__self__, *,
                 role_arn: str,
                 state_machine_name: str,
                 execution_name_prefix: Optional[str] = None):
        """
        :param str role_arn: The ARN of the IAM role that grants access to start execution of the state machine.
        :param str state_machine_name: The name of the Step Functions state machine whose execution will be started.
        :param 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) -> str:
        """
        The ARN of the IAM role that grants access to start execution of the state machine.
        """
        return pulumi.get(self, "role_arn")

    @property
    @pulumi.getter(name="stateMachineName")
    def state_machine_name(self) -> str:
        """
        The name of the Step Functions state machine whose execution will be started.
        """
        return pulumi.get(self, "state_machine_name")

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

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


