The fastest way to go live with infrastructure you actually understand
What if you could deploy a secure, fast, fully serverless website on AWS using just a JSON config file — and know exactly how it works under the hood?
That’s the idea behind Adage: A Configuration-Driven AWS Deployment Framework that separates your infrastructure, your config, and your application code into distinct, composable layers.
In this guide, you’ll see how to go from zero to live in a few minutes using the serverless-site
component — and how this approach gives you clarity, repeatability, and control without locking you into someone else’s boilerplate.
What You’ll Deploy
- Amazon S3 for hosting your static content
- CloudFront for global CDN distribution
- ACM and Route 53 for HTTPS and DNS
- SSM Parameter Store as the configuration backbone
No Terraform editing. No AWS Console clicking. Just a config file and a deploy script.
Step 1 – Define Your Config
Create a JSON file in the aws-config
repo:
{
"content_bucket_prefix": "mydemo.strall.com",
"site_name": "mydemo.strall.com",
"route53_zone_name": "strall.com",
"domain_aliases": ["www.mydemo.strall.com"],
"enable_custom_domain": true,
"cloudfront_comment": "Public demo site",
"tags": {
"project": "adage",
"environment": "dev"
}
}
Give it a nickname (e.g., mydemo
) and deploy the config to AWS Parameter Store:
cd aws-config/
AWS_PROFILE=dev-iac ./scripts/deploy.sh serverless-site mydemo
Step 2 – Deploy Infrastructure
From the aws-iac
repo, deploy the infrastructure:
cd aws-iac/
AWS_PROFILE=dev-iac ./scripts/deploy.sh serverless-site mydemo
Terraform reads the config from Parameter Store and provisions everything: S3, CloudFront, DNS, and ACM.
Step 3 – Publish Your Site
Once deployed, publish your static content:
cd strall.com/
AWS_PROFILE=dev-iac ./scripts/deploy.sh serverless-site mydemo
The script builds your Hugo site, syncs it to S3, and triggers a CloudFront invalidation. If a custom domain was configured, it will print the live URL.
What This Pattern Enables
This approach provides:
- Reusable Terraform components across environments
- Git-controlled JSON configs to drive all deployments
- Dynamic dependency resolution using AWS Parameter Store
- Clean separation of concerns: infrastructure, config, and code
- Fast teardown and rebuild cycles with consistent state
Teardown is Simple Too
You can destroy the infrastructure without removing the config:
cd aws-iac/
AWS_PROFILE=dev-iac ./deploy.sh serverless-site mydemo --destroy
Your config remains in Git and Parameter Store for future use.
Try It Yourself
- Fork the Adage repos
- Create a config for your project
- Deploy your first live component
- Build from there
To see the full quickstart and details, visit: