Skip to content

A cluster spread over availability zones, with a load balancer on top.

Notifications You must be signed in to change notification settings

robertdebock/terraform-aws-cluster

Repository files navigation

Terraform

This code spins up a cluster spread over availability zones, with a load balancer and a bastion host, based on a couple of variables:

  • name - default: "unset".
  • key_location - default: ../keys/example_id_rsa.pub.
  • region - default: "eu-central-1".
  • size - default: "small".
  • amount - default: 3.
  • services - default: [{port = 80, protocol = "HTTP"},{port=443, protocol="HTTPS"}].
  • user_data - default: user_data.sh.

There are some more variables in variables.tf.

amount

If amount is changed, the load balancer is also replaced, because new subnets need to be mapped. (And a new load balancer will require a new listener.)

TL;DR changing the amount gives you a load balancer address.

Please set your preferences in terraform.tfvars.

These settings:

name = "my_cluster"
region = "eu-central-1"
size = "large"
amount = 5
services = [{
  port     = 443
  protocol = "TCP"
}]

Would create this infrastructure.

 \o/      +--- loadbalaner ----+
  |  ---> | listen on: 443/tcp | ---+
 / \      +--------------------+    |
        +-------------------+-------+-----------+
        |                   |                   |
        V                   V                   V
+--- az: a -----+   +--- az: b -----+   +--- az: c -----+
| - instance: 1 |   | - instance: 2 |   | - instance: 3 |
| - instance: 4 |   | - instance: 5 |   |               |
+---------------+   +---------------+   +---------------+

+--- az: randrom ---+
| - bastion         |
+-------------------+

To understand the cost for this service, you can use cost.modules.tf:

terraform apply
terraform state pull | curl -s -X POST -H "Content-Type: application/json" -d @- https://cost.modules.tf/

About

A cluster spread over availability zones, with a load balancer on top.

Resources

Stars

Watchers

Forks

Packages