Minimal Terraform configuration for Single Page Applications
- Configure
terraform.tfvars
aws_region = "eu-west-1"
domain_name = "app.example.com"
name = "test-app"
zone_name = "example.com."
- Apply Terraform
terraform init
terraform apply
- Add a version
yarn build # build the SPA, put the results in ./dist
aws s3 sync ./dist s3://YOUR-BUCKET-NAME/v1-2-3
# You can now access https://v1-2-3.app.example.com
- Deploy a version publicly (or revert)
aws lambda update-function-configuration --function-name YOUR-FUNCTION-NAME --environment '{"Variables": {"S3_BUCKET": "YOUR-BUCKET-NAME", "latest": "v1-2-3"}}'
aws cloudfront create-invalidation --distribution-id YOUR-DISTRIBUTION-ID --paths '/*'
# invalidation might take up to 5 minutes, then you can access v1-2-3 at https://app.example.com
For real production use you should add:
- Lifecycle policy and/or Lambda to remove old versions from the bucket
- Manage retention for the Lambda CloudWatch log group
- Proper tagging
- Least privilege IAM policies