This is a demo project that accompanies a blog post I wrote. It shows how to use various tools from the Hashicorp stack to achieve rolling deployments on AWS with zero downtime.
The post is here: https://robmorgan.id.au/posts/rolling-deploys-on-aws-using-terraform/
It is based on a concept from Paul Hinze: https://groups.google.com/forum/#!msg/terraform-tool/7Gdhv1OAc80/iNQ93riiLwAJ
You should have the following tools installed:
- Git
- Packer (v1.2.3)
- Terraform (v0.11.7)
Additionally you will need the following environment variables set:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- Copy your public SSH key to the
ssh_keys
directory and update the path inkey-pairs.tf
. - Before we create the AWS infrastructure we must first bake a new AMI using Packer.
Using the supplied
Makefile
, simply run:
$ make bake
When Packer finishes running it will output an AMI ID we need for the next step.
- Now we can use Terraform to create the AWS resources:
$ make plan AMI="ami-XXXYYYZZ"
$ make apply AMI="ami-XXXYYYZZ"
- Deployment is a case of baking a fresh AMI then re-running Terraform:
$ make bake
$ make plan AMI="ami-XXXYYYZZ"
$ make apply AMI="ami-XXXYYYZZ"
You can run the included tests using Terratest
:
$ make test