This template was built to provide a simple delivery workflow to be used in combination with the S3Bubble desktop app.
This template does the following.
1. Creates an S3 bucket
2. Adds a policy that will allow Cloudfront to acccess it
3. Adds streaming cors
4. Create a Cloudfront distribution
Template Code
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "This template was built by the S3Bubble team to focus on media delivery", "Metadata": {}, "Parameters": { "DeliveryBucket": { "Description": "Delivery Bucket Name", "Type": "String", "Default": "s3bubble-ott-delivery-{random id}", "AllowedPattern": ".+" } }, "Mappings": {}, "Conditions": {}, "Resources": { "CreateDeliveryBucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": { "Ref": "DeliveryBucket" }, "CorsConfiguration": { "CorsRules": [{ "AllowedHeaders": ["*"], "AllowedMethods": ["GET"], "AllowedOrigins": ["*"], "MaxAge": "3600" }] } } }, "CreateDeliveryBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "DeliveryBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Action": ["s3:GetObject"], "Effect": "Allow", "Resource": { "Fn::Sub": "arn:aws:s3:::${DeliveryBucket}/*" }, "Principal": "*" }] } } }, "CreateWebsiteCloudFront": { "Type": "AWS::CloudFront::Distribution", "DependsOn": ["CreateDeliveryBucket"], "Properties": { "DistributionConfig": { "Comment": "Create With Cloudformation", "Origins": [{ "DomainName": { "Fn::GetAtt": ["CreateDeliveryBucket", "RegionalDomainName"] }, "Id": { "Ref": "CreateDeliveryBucket" }, "CustomOriginConfig": { "HTTPPort": "80", "HTTPSPort": "443", "OriginProtocolPolicy": "http-only" } }], "Enabled": "true", "DefaultCacheBehavior": { "TargetOriginId": { "Ref": "CreateDeliveryBucket" }, "ViewerProtocolPolicy": "redirect-to-https", "AllowedMethods": ["GET", "HEAD", "OPTIONS"], "CachedMethods": ["GET", "HEAD", "OPTIONS"], "Compress": false, "ForwardedValues": { "QueryString": "true", "Cookies": { "Forward": "none" }, "Headers": ["Access-Control-Request-Headers", "Access-Control-Request-Method", "Origin"] } }, "PriceClass": "PriceClass_All", "ViewerCertificate": { "CloudFrontDefaultCertificate": "true" } } } } }, "Outputs": { "DeliveryBucket": { "Description": "Output Bucket Name", "Value": { "Ref": "DeliveryBucket" } }, "CloudfrontUrl": { "Description": "Cloudfront Url", "Value": { "Fn::GetAtt": ["CreateWebsiteCloudFront", "DomainName"] } } } }