A set of Terraform templates used for provisioning web application stacks on AWS ECS Fargate.
The templates are designed to be customized. The optional components can be removed by simply deleting the .tf
file.
The templates are used for managing infrastructure concerns and, as such, the templates deploy a default backend docker image. We recommend using the fargate CLI for managing application concerns like deploying your actual application images and environment variables on top of this infrastructure. The fargate CLI can be used to deploy applications from your laptop or in CI/CD pipelines.
These components are shared by all environments.
Name | Description | Optional |
---|---|---|
main.tf | AWS provider, output | |
state.tf | S3 bucket backend for storing Terraform remote state | |
ecr.tf | ECR repository for application (all environments share) |
These components are for a specific environment. There should be a corresponding directory for each environment that is needed.
Name | Description | Optional |
---|---|---|
main.tf | Terrform remote state, AWS provider, output | |
ecs.tf | ECS Cluster, Service, Task Definition, ecsTaskExecutionRole, CloudWatch Log Group | |
lb.tf | ALB, Target Group, S3 bucket for access logs | |
nsg.tf | NSG for ALB and Task | |
lb-http.tf | HTTP listener, NSG rule. Delete if HTTPS only | Yes |
lb-https.tf | HTTPS listener, NSG rule. Delete if HTTP only | Yes |
dashboard.tf | CloudWatch dashboard: CPU, memory, and HTTP-related metrics | Yes |
role.tf | Application Role for container | Yes |
cicd.tf | IAM user that can be used by CI/CD systems | Yes |
autoscale-perf.tf | Performance-based auto scaling | Yes |
autoscale-time.tf | Time-based auto scaling | Yes |
logs-logzio.tf | Ship container logs to logz.io | Yes |
Typically, the base Terraform will only need to be run once, and then should only need changes very infrequently. After the base is built, each environment can be built.
# Move into the base directory
$ cd base
# Sets up Terraform to run
$ terraform init
# Executes the Terraform run
$ terraform apply
# Now, move into the dev environment
$ cd ../env/dev
# Sets up Terraform to run
$ terraform init
# Executes the Terraform run
$ terraform apply