Skip to content
← module.projects

Static site delivery pipeline

S3, CloudFront and a deploy that takes forty seconds.

Year
2025
Discipline
Delivery
Stack
Terraform · S3 · CloudFront · Route 53 · GitHub Actions

40s

Deploy time, from push to live

0

Long-lived access keys in CI

1 cmd

Rollback to any previous release

the problem

Placeholder. A marketing site was deployed by hand over FTP, with no rollback and no cache invalidation. Releases were avoided because they were frightening.

what I built

  1. 01

    Defined the bucket, distribution, certificate and DNS records as a reusable Terraform module.

  2. 02

    Moved releases to GitHub Actions with an OIDC role, so no long-lived AWS keys exist anywhere.

  3. 03

    Added targeted CloudFront invalidation on deploy instead of blanket cache clears.

architecture

Resources, by tier

Edge

+aws_cloudfront_distribution

+aws_acm_certificate

Origin

+aws_s3_bucket

+aws_s3_bucket_policy

DNS

+aws_route53_record

CI

+aws_iam_role.github_oidc

next project

Estate cost review