{
  "typeName": "AWS::KinesisFirehose::DeliveryStream",
  "description": "Resource Type definition for AWS::KinesisFirehose::DeliveryStream",
  "additionalProperties": false,
  "properties": {
    "Arn": {
      "type": "string"
    },
    "DeliveryStreamName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "DeliveryStreamType": {
      "type": "string"
    },
    "ElasticsearchDestinationConfiguration": {
      "$ref": "#/definitions/ElasticsearchDestinationConfiguration"
    },
    "ExtendedS3DestinationConfiguration": {
      "$ref": "#/definitions/ExtendedS3DestinationConfiguration"
    },
    "KinesisStreamSourceConfiguration": {
      "$ref": "#/definitions/KinesisStreamSourceConfiguration"
    },
    "RedshiftDestinationConfiguration": {
      "$ref": "#/definitions/RedshiftDestinationConfiguration"
    },
    "S3DestinationConfiguration": {
      "$ref": "#/definitions/S3DestinationConfiguration"
    },
    "SplunkDestinationConfiguration": {
      "$ref": "#/definitions/SplunkDestinationConfiguration"
    },
    "HttpEndpointDestinationConfiguration": {
      "$ref": "#/definitions/HttpEndpointDestinationConfiguration"
    }
  },
  "definitions": {
    "SplunkDestinationConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "CloudWatchLoggingOptions": {
          "$ref": "#/definitions/CloudWatchLoggingOptions"
        },
        "HECAcknowledgmentTimeoutInSeconds": {
          "type": "integer",
          "minimum": 180,
          "maximum": 600
        },
        "HECEndpoint": {
          "type": "string",
          "minLength": 0,
          "maxLength": 2048
        },
        "HECEndpointType": {
          "type": "string"
        },
        "HECToken": {
          "type": "string",
          "minLength": 0,
          "maxLength": 2048
        },
        "ProcessingConfiguration": {
          "$ref": "#/definitions/ProcessingConfiguration"
        },
        "RetryOptions": {
          "$ref": "#/definitions/SplunkRetryOptions"
        },
        "S3BackupMode": {
          "type": "string"
        },
        "S3Configuration": {
          "$ref": "#/definitions/S3DestinationConfiguration"
        }
      },
      "required": [
        "HECEndpoint",
        "S3Configuration",
        "HECToken",
        "HECEndpointType"
      ]
    },
    "HttpEndpointDestinationConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "EndpointConfiguration": {
          "$ref": "#/definitions/HttpEndpointConfiguration"
        },
        "RequestConfiguration": {
          "$ref": "#/definitions/HttpEndpointRequestConfiguration"
        },
        "BufferingHints": {
          "$ref": "#/definitions/BufferingHints"
        },
        "CloudWatchLoggingOptions": {
          "$ref": "#/definitions/CloudWatchLoggingOptions"
        },
        "ProcessingConfiguration": {
          "$ref": "#/definitions/ProcessingConfiguration"
        },
        "RetryOptions": {
          "$ref": "#/definitions/RetryOptions"
        },
        "S3BackupMode": {
          "type": "string"
        },
        "S3Configuration": {
          "$ref": "#/definitions/S3DestinationConfiguration"
        }
      },
      "required": ["EndpointConfiguration", "S3Configuration"]
    },
    "KinesisStreamSourceConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "KinesisStreamARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        }
      },
      "required": ["RoleARN", "KinesisStreamARN"]
    },
    "VpcConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "SubnetIds": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1024
          },
          "minItems": 1,
          "maxItems": 16
        },
        "SecurityGroupIds": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1024
          },
          "minItems": 1,
          "maxItems": 5
        }
      },
      "required": ["RoleARN", "SubnetIds", "SecurityGroupIds"]
    },
    "ExtendedS3DestinationConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "BucketARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048
        },
        "BufferingHints": {
          "$ref": "#/definitions/BufferingHints"
        },
        "CloudWatchLoggingOptions": {
          "$ref": "#/definitions/CloudWatchLoggingOptions"
        },
        "CompressionFormat": {
          "type": "string"
        },
        "DataFormatConversionConfiguration": {
          "$ref": "#/definitions/DataFormatConversionConfiguration"
        },
        "EncryptionConfiguration": {
          "$ref": "#/definitions/EncryptionConfiguration"
        },
        "ErrorOutputPrefix": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "Prefix": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "ProcessingConfiguration": {
          "$ref": "#/definitions/ProcessingConfiguration"
        },
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "S3BackupConfiguration": {
          "$ref": "#/definitions/S3DestinationConfiguration"
        },
        "S3BackupMode": {
          "type": "string"
        }
      },
      "required": ["BucketARN", "RoleARN"]
    },
    "S3DestinationConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "BucketARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048
        },
        "BufferingHints": {
          "$ref": "#/definitions/BufferingHints"
        },
        "CloudWatchLoggingOptions": {
          "$ref": "#/definitions/CloudWatchLoggingOptions"
        },
        "CompressionFormat": {
          "type": "string"
        },
        "EncryptionConfiguration": {
          "$ref": "#/definitions/EncryptionConfiguration"
        },
        "ErrorOutputPrefix": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "Prefix": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        }
      },
      "required": ["BucketARN", "RoleARN"]
    },
    "RedshiftDestinationConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "CloudWatchLoggingOptions": {
          "$ref": "#/definitions/CloudWatchLoggingOptions"
        },
        "ClusterJDBCURL": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "CopyCommand": {
          "$ref": "#/definitions/CopyCommand"
        },
        "Password": {
          "type": "string",
          "minLength": 6,
          "maxLength": 512
        },
        "ProcessingConfiguration": {
          "$ref": "#/definitions/ProcessingConfiguration"
        },
        "RetryOptions": {
          "$ref": "#/definitions/RedshiftRetryOptions"
        },
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "S3BackupConfiguration": {
          "$ref": "#/definitions/S3DestinationConfiguration"
        },
        "S3BackupMode": {
          "type": "string"
        },
        "S3Configuration": {
          "$ref": "#/definitions/S3DestinationConfiguration"
        },
        "Username": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        }
      },
      "required": [
        "S3Configuration",
        "Username",
        "ClusterJDBCURL",
        "CopyCommand",
        "RoleARN",
        "Password"
      ]
    },
    "ElasticsearchDestinationConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "BufferingHints": {
          "$ref": "#/definitions/ElasticsearchBufferingHints"
        },
        "CloudWatchLoggingOptions": {
          "$ref": "#/definitions/CloudWatchLoggingOptions"
        },
        "DomainARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "IndexName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "IndexRotationPeriod": {
          "type": "string"
        },
        "ProcessingConfiguration": {
          "$ref": "#/definitions/ProcessingConfiguration"
        },
        "RetryOptions": {
          "$ref": "#/definitions/ElasticsearchRetryOptions"
        },
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "S3BackupMode": {
          "type": "string"
        },
        "S3Configuration": {
          "$ref": "#/definitions/S3DestinationConfiguration"
        },
        "ClusterEndpoint": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "TypeName": {
          "type": "string",
          "minLength": 0,
          "maxLength": 100
        },
        "VpcConfiguration": {
          "$ref": "#/definitions/VpcConfiguration"
        }
      },
      "required": ["IndexName", "S3Configuration", "RoleARN"]
    },
    "BufferingHints": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "IntervalInSeconds": {
          "type": "integer"
        },
        "SizeInMBs": {
          "type": "integer"
        }
      }
    },
    "ProcessingConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Enabled": {
          "type": "boolean"
        },
        "Processors": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Processor"
          }
        }
      }
    },
    "SplunkRetryOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "DurationInSeconds": {
          "type": "integer"
        }
      }
    },
    "ElasticsearchRetryOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "DurationInSeconds": {
          "type": "integer"
        }
      }
    },
    "RedshiftRetryOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "DurationInSeconds": {
          "type": "integer"
        }
      }
    },
    "RetryOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "DurationInSeconds": {
          "type": "integer"
        }
      }
    },
    "DataFormatConversionConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Enabled": {
          "type": "boolean"
        },
        "InputFormatConfiguration": {
          "$ref": "#/definitions/InputFormatConfiguration"
        },
        "OutputFormatConfiguration": {
          "$ref": "#/definitions/OutputFormatConfiguration"
        },
        "SchemaConfiguration": {
          "$ref": "#/definitions/SchemaConfiguration"
        }
      }
    },
    "CopyCommand": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "CopyOptions": {
          "type": "string",
          "minLength": 0,
          "maxLength": 204800
        },
        "DataTableColumns": {
          "type": "string",
          "minLength": 0,
          "maxLength": 204800
        },
        "DataTableName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        }
      },
      "required": ["DataTableName"]
    },
    "EncryptionConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "KMSEncryptionConfig": {
          "$ref": "#/definitions/KMSEncryptionConfig"
        },
        "NoEncryptionConfig": {
          "type": "string"
        }
      }
    },
    "ElasticsearchBufferingHints": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "IntervalInSeconds": {
          "type": "integer"
        },
        "SizeInMBs": {
          "type": "integer"
        }
      }
    },
    "CloudWatchLoggingOptions": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Enabled": {
          "type": "boolean"
        },
        "LogGroupName": {
          "type": "string"
        },
        "LogStreamName": {
          "type": "string"
        }
      }
    },
    "OutputFormatConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Serializer": {
          "$ref": "#/definitions/Serializer"
        }
      }
    },
    "Processor": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Parameters": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ProcessorParameter"
          }
        },
        "Type": {
          "type": "string"
        }
      },
      "required": ["Type"]
    },
    "KMSEncryptionConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "AWSKMSKeyARN": {
          "type": "string"
        }
      },
      "required": ["AWSKMSKeyARN"]
    },
    "InputFormatConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Deserializer": {
          "$ref": "#/definitions/Deserializer"
        }
      }
    },
    "SchemaConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "CatalogId": {
          "type": "string"
        },
        "DatabaseName": {
          "type": "string"
        },
        "Region": {
          "type": "string"
        },
        "RoleARN": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        },
        "TableName": {
          "type": "string"
        },
        "VersionId": {
          "type": "string"
        }
      }
    },
    "Serializer": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "OrcSerDe": {
          "$ref": "#/definitions/OrcSerDe"
        },
        "ParquetSerDe": {
          "$ref": "#/definitions/ParquetSerDe"
        }
      }
    },
    "ProcessorParameter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "ParameterName": {
          "type": "string"
        },
        "ParameterValue": {
          "type": "string"
        }
      },
      "required": ["ParameterValue", "ParameterName"]
    },
    "Deserializer": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "HiveJsonSerDe": {
          "$ref": "#/definitions/HiveJsonSerDe"
        },
        "OpenXJsonSerDe": {
          "$ref": "#/definitions/OpenXJsonSerDe"
        }
      }
    },
    "HiveJsonSerDe": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "TimestampFormats": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "OrcSerDe": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "BlockSizeBytes": {
          "type": "integer"
        },
        "BloomFilterColumns": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "BloomFilterFalsePositiveProbability": {
          "type": "number"
        },
        "Compression": {
          "type": "string"
        },
        "DictionaryKeyThreshold": {
          "type": "number"
        },
        "EnablePadding": {
          "type": "boolean"
        },
        "FormatVersion": {
          "type": "string"
        },
        "PaddingTolerance": {
          "type": "number"
        },
        "RowIndexStride": {
          "type": "integer"
        },
        "StripeSizeBytes": {
          "type": "integer"
        }
      }
    },
    "ParquetSerDe": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "BlockSizeBytes": {
          "type": "integer"
        },
        "Compression": {
          "type": "string"
        },
        "EnableDictionaryCompression": {
          "type": "boolean"
        },
        "MaxPaddingBytes": {
          "type": "integer"
        },
        "PageSizeBytes": {
          "type": "integer"
        },
        "WriterVersion": {
          "type": "string"
        }
      }
    },
    "OpenXJsonSerDe": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "CaseInsensitive": {
          "type": "boolean"
        },
        "ColumnToJsonKeyMappings": {
          "type": "object"
        },
        "ConvertDotsInJsonKeysToUnderscores": {
          "type": "boolean"
        }
      }
    },
    "HttpEndpointRequestConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "ContentEncoding": {
          "type": "string"
        },
        "CommonAttributes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/HttpEndpointCommonAttribute"
          },
          "minItems": 0,
          "maxItems": 50
        }
      }
    },
    "HttpEndpointCommonAttribute": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "AttributeName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 256
        },
        "AttributeValue": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        }
      },
      "required": ["AttributeName", "AttributeValue"]
    },
    "HttpEndpointConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "Url": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000
        },
        "AccessKey": {
          "type": "string",
          "minLength": 0,
          "maxLength": 4096
        },
        "Name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 256
        }
      },
      "required": ["Url"]
    }
  }
}
