{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Metadata": {},
  "Parameters": {},
  "Rules": {},
  "Mappings": {},
  "Conditions": {},
  "Resources": {
    "MyKinesisFirehose": {
      "Type": "AWS::KinesisFirehose::DeliveryStream",
      "Properties": {
        "DeliveryStreamName": {
          "Fn::Sub": "${AWS::StackName}-MyKinesisFirehose"
        },
        "DeliveryStreamType": "DirectPut",
        "S3DestinationConfiguration": {
          "BucketARN": {
            "Fn::Sub": "arn:${AWS::Partition}:s3:::mah-bukkit"
          },
          "Prefix": {
            "Fn::Join": [
              "",
              [
                "raw/",
                "MyKinesisFirehose",
                "/"
              ]
            ]
          },
          "BufferingHints": {
            "IntervalInSeconds": 900,
            "SizeInMBs": 128
          },
          "CloudWatchLoggingOptions": {
            "Enabled": true,
            "LogGroupName": {
              "Ref": "MyKinesisFirehoseLogGroup"
            },
            "LogStreamName": "firehose"
          },
          "CompressionFormat": "GZIP",
          "RoleARN": {
            "Fn::GetAtt": [
              "MyKinesisFirehoseRole",
              "Arn"
            ]
          }
        }
      }
    },
    "MyKinesisFirehoseLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": {
          "Fn::Sub": [
            "/aws/kinesisfirehose/${name}",
            {
              "name": {
                "Fn::Sub": "${AWS::StackName}-KinesisFirehose"
              }
            }
          ]
        },
        "RetentionInDays": 14
      }
    },
    "MyKinesisFirehoseLogStream": {
      "Type": "AWS::Logs::LogStream",
      "Properties": {
        "LogGroupName": {
          "Ref": "MyKinesisFirehoseLogGroup"
        },
        "LogStreamName": "firehose"
      }
    },
    "MyKinesisFirehoseRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "firehose.amazonaws.com"
                ]
              },
              "Action": [
                "sts:AssumeRole"
              ]
            }
          ]
        },
        "Path": "/",
        "Policies": [
          {
            "PolicyName": "main",
            "PolicyDocument": {
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": [
                    "logs:*"
                  ],
                  "Resource": {
                    "Fn::GetAtt": [
                      "MyKinesisFirehoseLogGroup",
                      "Arn"
                    ]
                  }
                }
              ]
            }
          },
          {
            "PolicyName": "s3-destination",
            "PolicyDocument": {
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": [
                    "s3:PutObject",
                    "s3:GetObject"
                  ],
                  "Resource": {
                    "Fn::Join": [
                      "/",
                      [
                        {
                          "Fn::Sub": "arn:${AWS::Partition}:s3:::mah-bukkit"
                        },
                        {
                          "Fn::Join": [
                            "",
                            [
                              "raw/",
                              "MyKinesisFirehose",
                              "/"
                            ]
                          ]
                        },
                        "*"
                      ]
                    ]
                  }
                },
                {
                  "Effect": "Allow",
                  "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:GetBucketLocation",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads"
                  ],
                  "Resource": {
                    "Fn::Sub": "arn:${AWS::Partition}:s3:::mah-bukkit"
                  }
                }
              ]
            }
          }
        ]
      }
    },
    "MyKinesisFirehoseErrorAlarm": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmName": {
          "Fn::Sub": "${AWS::StackName}-MyKinesisFirehose-Freshness-${AWS::Region}"
        },
        "AlarmDescription": {
          "Fn::Sub": [
            "Freshness alarm for ${AWS::StackName}-${name} kinesis firehose in ${AWS::StackName} stack",
            {
              "name": "MyKinesisFirehose"
            }
          ]
        },
        "AlarmActions": [],
        "Period": 60,
        "EvaluationPeriods": 1,
        "Statistic": "Maximum",
        "Threshold": 1800,
        "ComparisonOperator": "GreaterThanThreshold",
        "TreatMissingData": "notBreaching",
        "Namespace": "AWS/Firehose",
        "Dimensions": [
          {
            "Name": "FirehoseName",
            "Value": {
              "Ref": "MyKinesisFirehose"
            }
          }
        ],
        "MetricName": "DeliveryToS3.DataFreshness"
      }
    }
  },
  "Outputs": {}
}