@mapbox/cloudfriend
Version:
Helper functions for assembling CloudFormation templates in JavaScript
234 lines • 6.24 kB
JSON
{
"AWSTemplateFormatVersion": "2010-09-09",
"Metadata": {},
"Parameters": {},
"Rules": {},
"Mappings": {},
"Conditions": {
"Always": {
"Fn::Equals": [
"1",
"1"
]
}
},
"Resources": {
"AnotherThing": {
"Type": "AWS::SNS::Topic"
},
"MyKinesisFirehose": {
"Type": "AWS::KinesisFirehose::DeliveryStream",
"Properties": {
"DeliveryStreamName": {
"Fn::Sub": "${AWS::StackName}-MyKinesisFirehose"
},
"DeliveryStreamType": "KinesisStreamAsSource",
"KinesisStreamSourceConfiguration": {
"KinesisStreamARN": "arn:aws:kinesis:us-east-1:111122223333:stream/my-stream",
"RoleARN": {
"Fn::GetAtt": [
"MyKinesisFirehoseRole",
"Arn"
]
}
},
"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": "kinesis-stream",
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Action": [
"kinesis:DescribeStream",
"kinesis:Get*"
],
"Resource": "arn:aws:kinesis:us-east-1:111122223333:stream/my-stream"
}
]
}
},
{
"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": {}
}