https://github.com/smoketurner/sam-cdn
AWS project to deploy a CDN for hosting static assets in private S3 buckets
https://github.com/smoketurner/sam-cdn
aws cloudfront lambda-edge route53 s3 sam serverless
Last synced: about 1 year ago
JSON representation
AWS project to deploy a CDN for hosting static assets in private S3 buckets
- Host: GitHub
- URL: https://github.com/smoketurner/sam-cdn
- Owner: smoketurner
- License: mit
- Created: 2019-12-17T20:49:28.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-12-11T12:08:28.000Z (over 2 years ago)
- Last Synced: 2025-03-27T14:01:40.898Z (about 1 year ago)
- Topics: aws, cloudfront, lambda-edge, route53, s3, sam, serverless
- Homepage: https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:860114833029:applications~cloudfront-cdn
- Size: 502 KB
- Stars: 20
- Watchers: 2
- Forks: 7
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
[](https://raw.githubusercontent.com/smoketurner/sam-cdn/master/LICENSE)
[](https://github.com/smoketurner/sam-cdn/actions?query=workflow%3A%22Node+CI%22)
[](https://console.aws.amazon.com/lambda/home?#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:860114833029:applications/cloudfront-cdn)
A project that deploys a content delivery network (CDN) using AWS CloudFront for static assets hosted in a private S3 bucket.
This project creates the following resources:
- `AWS::CertificateManager::Certificate` - `*.` SSL certificate
- `AWS::CloudFront::Distribution` - `[http|https]://` distribution
- `AWS::CloudFront::Distribution` - `[http|https]://www.` redirect distribution
- `AWS::CloudFront::CloudFrontOriginAccessIdentity`
- `AWS::Route53::RecordSet` - `` IPv4 DNS entry
- `AWS::Route53::RecordSet` - `` IPv6 DNS entry
- `AWS::Route53::RecordSet` - `www.` IPv4 DNS entry
- `AWS::Route53::RecordSet` - `www.` IPv6 DNS entry
- `AWS::S3::Bucket` - private access log bucket
- `AWS::S3::Bucket` - private static asset bucket
- `AWS::S3::Bucket` - private bucket to redirect requests to `https://`
- `AWS::S3::BucketPolicy` - only allow CloudFront to access static asset bucket
- `AWS::CloudFront::Function` - CloudFront Function for single page applications to redirect requests to `/index.html`
- `AWS::CloudFront::Function` - CloudFront Function to add various web security HTTP response headers
## Installation
```
git clone https://github.com/smoketurner/sam-cdn.git
cd sam-cdn
npm install
```
## Deploy
```
npm run build
npm run deploy
```
You can upload your static assets into the S3 bucket and Route53 and CloudFront will take care of any redirections and content serving for you.
## References
- https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/example-function-add-index.html
- https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/example-function-add-security-headers.html
- https://www.awsadvent.com/2018/12/03/vanquishing-cors-with-cloudfront-and-lambdaedge/
- https://medium.com/faun/hardening-the-http-security-headers-with-aws-lambda-edge-and-cloudfront-2e2da1ae4d83