Skip to content

Upgrades to Terraform 0.12 and fixes variables #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 68 additions & 51 deletions aws_alb/main.tf
Original file line number Diff line number Diff line change
@@ -1,61 +1,62 @@
provider "aws" {
region = "${var.aws_region}"
region = var.aws_region
}

data "aws_availability_zones" "all" {}
data "aws_availability_zones" "all" {
}

resource "aws_vpc" "default" {
cidr_block = "20.0.0.0/16"
enable_dns_hostnames = true

tags {
tags = {
Name = "hapee_test_vpc"
}
}

resource "aws_subnet" "tf_test_subnet" {
count = "${var.aws_az_count}"
vpc_id = "${aws_vpc.default.id}"
cidr_block = "${cidrsubnet(aws_vpc.default.cidr_block, 8, count.index)}"
availability_zone = "${data.aws_availability_zones.all.names[count.index]}"
count = var.aws_az_count
vpc_id = aws_vpc.default.id
cidr_block = cidrsubnet(aws_vpc.default.cidr_block, 8, count.index)
availability_zone = data.aws_availability_zones.all.names[count.index]
map_public_ip_on_launch = true

tags {
tags = {
Name = "hapee_test_subnet"
}
}

resource "aws_internet_gateway" "gw" {
vpc_id = "${aws_vpc.default.id}"
vpc_id = aws_vpc.default.id

tags {
tags = {
Name = "hapee_test_ig"
}
}

resource "aws_route_table" "r" {
vpc_id = "${aws_vpc.default.id}"
vpc_id = aws_vpc.default.id

route {
cidr_block = "0.0.0.0/0"
gateway_id = "${aws_internet_gateway.gw.id}"
gateway_id = aws_internet_gateway.gw.id
}

tags {
tags = {
Name = "aws_route_table"
}
}

resource "aws_route_table_association" "a" {
count = "${var.aws_az_count}"
subnet_id = "${element(aws_subnet.tf_test_subnet.*.id, count.index)}"
route_table_id = "${aws_route_table.r.id}"
count = var.aws_az_count
subnet_id = element(aws_subnet.tf_test_subnet.*.id, count.index)
route_table_id = aws_route_table.r.id
}

resource "aws_security_group" "instance_sg1" {
name = "instance_sg1"
description = "Instance (HAPEE/Web node) SG to pass tcp/22 by default"
vpc_id = "${aws_vpc.default.id}"
vpc_id = aws_vpc.default.id

ingress {
from_port = 22
Expand All @@ -77,28 +78,28 @@ resource "aws_security_group" "instance_sg1" {
resource "aws_security_group" "instance_sg2" {
name = "instance_sg2"
description = "Instance (HAPEE/Web node) SG to pass ELB traffic by default"
vpc_id = "${aws_vpc.default.id}"
vpc_id = aws_vpc.default.id

ingress {
from_port = 80
to_port = 80
protocol = "tcp"
security_groups = ["${aws_security_group.instance_sg1.id}", "${aws_security_group.alb.id}"]
security_groups = [aws_security_group.instance_sg1.id, aws_security_group.alb.id]
}

ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
security_groups = ["${aws_security_group.instance_sg1.id}", "${aws_security_group.alb.id}"]
security_groups = [aws_security_group.instance_sg1.id, aws_security_group.alb.id]
}
}

resource "aws_security_group" "alb" {
name = "alb_sg"
description = "Used in the terraform"

vpc_id = "${aws_vpc.default.id}"
vpc_id = aws_vpc.default.id

ingress {
from_port = 80
Expand All @@ -114,26 +115,26 @@ resource "aws_security_group" "alb" {
cidr_blocks = ["0.0.0.0/0"]
}

depends_on = ["aws_internet_gateway.gw"]
depends_on = [aws_internet_gateway.gw]
}

resource "aws_lb" "hapee_alb" {
name = "hapee-test-alb"

internal = false

subnets = ["${aws_subnet.tf_test_subnet.*.id}"]
security_groups = ["${aws_security_group.alb.id}"]
subnets = aws_subnet.tf_test_subnet.*.id
security_groups = [aws_security_group.alb.id]

tags {
tags = {
Name = "hapee_alb"
}
}

resource "aws_lb_target_group" "hapee_alb_target" {
name = "hapee-test-alb-tg"

vpc_id = "${aws_vpc.default.id}"
vpc_id = aws_vpc.default.id

port = 80
protocol = "HTTP"
Expand All @@ -149,72 +150,88 @@ resource "aws_lb_target_group" "hapee_alb_target" {
matcher = "200,202"
}

tags {
tags = {
Name = "hapee_alb_tg"
}
}

resource "aws_lb_listener" "hapee_alb_listener" {
load_balancer_arn = "${aws_lb.hapee_alb.arn}"
load_balancer_arn = aws_lb.hapee_alb.arn

port = 80
protocol = "HTTP"

default_action {
target_group_arn = "${aws_lb_target_group.hapee_alb_target.arn}"
target_group_arn = aws_lb_target_group.hapee_alb_target.arn
type = "forward"
}
}

resource "aws_lb_target_group_attachment" "hapee_alb_target_att" {
count = "${var.hapee_cluster_size * var.aws_az_count}"
count = var.hapee_cluster_size * var.aws_az_count

target_group_arn = "${aws_lb_target_group.hapee_alb_target.arn}"
target_id = "${element(aws_instance.hapee_node.*.id, count.index)}"
target_group_arn = aws_lb_target_group.hapee_alb_target.arn
target_id = element(aws_instance.hapee_node.*.id, count.index)

port = 80
}

resource "aws_instance" "web_node" {
count = "${var.web_cluster_size * var.aws_az_count}"
count = var.web_cluster_size * var.aws_az_count

instance_type = "${var.aws_web_instance_type}"
instance_type = var.aws_web_instance_type

ami = "${lookup(var.ubuntu_aws_amis, var.aws_region)}"
ami = var.ubuntu_aws_amis[var.aws_region]

key_name = "${var.key_name}"
key_name = var.key_name

vpc_security_group_ids = ["${aws_security_group.instance_sg1.id}", "${aws_security_group.instance_sg2.id}"]
subnet_id = "${element(aws_subnet.tf_test_subnet.*.id, count.index / var.web_cluster_size)}"
user_data = "${file("web-userdata.sh")}"
vpc_security_group_ids = [aws_security_group.instance_sg1.id, aws_security_group.instance_sg2.id]
subnet_id = element(
aws_subnet.tf_test_subnet.*.id,
// count.index / var.web_cluster_size,
count.index
)
user_data = file("web-userdata.sh")

tags {
tags = {
Name = "web_node_${count.index}"
}
}

data "template_file" "hapee-userdata" {
template = "${file("hapee-userdata.sh.tpl")}"
template = file("hapee-userdata.sh.tpl")

vars {
serverlist = "${join("\n", formatlist(" server app-%v %v:80 cookie app-%v check", aws_instance.web_node.*.id, aws_instance.web_node.*.private_ip, aws_instance.web_node.*.id))}"
vars = {
serverlist = join(
"\n",
formatlist(
" server app-%v %v:80 cookie app-%v check",
aws_instance.web_node.*.id,
aws_instance.web_node.*.private_ip,
aws_instance.web_node.*.id,
),
)
}
}

resource "aws_instance" "hapee_node" {
count = "${var.hapee_cluster_size * var.aws_az_count}"
count = var.hapee_cluster_size * var.aws_az_count

instance_type = "${var.aws_hapee_instance_type}"
instance_type = var.aws_hapee_instance_type

ami = "${lookup(var.hapee_aws_amis, var.aws_region)}"
ami = var.hapee_aws_amis[var.aws_region]

key_name = "${var.key_name}"
key_name = var.key_name

vpc_security_group_ids = ["${aws_security_group.instance_sg1.id}", "${aws_security_group.instance_sg2.id}"]
subnet_id = "${element(aws_subnet.tf_test_subnet.*.id, count.index / var.hapee_cluster_size)}"
user_data = "${data.template_file.hapee-userdata.rendered}"
vpc_security_group_ids = [aws_security_group.instance_sg1.id, aws_security_group.instance_sg2.id]
subnet_id = element(
aws_subnet.tf_test_subnet.*.id,
// count.index / var.hapee_cluster_size,
count.index,
)
user_data = data.template_file.hapee-userdata.rendered

tags {
tags = {
Name = "hapee_node_${count.index}"
}
}
50 changes: 38 additions & 12 deletions aws_alb/outputs.tf
Original file line number Diff line number Diff line change
@@ -1,23 +1,49 @@
output "AWS availability zones in use" {
value = "${aws_subnet.tf_test_subnet.*.availability_zone}"
output "aws_availability_zones_in_use" {
description = "AWS availability zones in use"
value = aws_subnet.tf_test_subnet.*.availability_zone
}

output "HAPEE nodes" {
value = "${formatlist("%s, private IP: %s, public IP: %s, AZ: %s", aws_instance.hapee_node.*.id, aws_instance.hapee_node.*.private_ip, aws_instance.hapee_node.*.public_ip, aws_instance.hapee_node.*.availability_zone)}"
output "hapee_nodes" {
description = "HAPEE nodes"
value = formatlist(
"%s, private IP: %s, public IP: %s, AZ: %s",
aws_instance.hapee_node.*.id,
aws_instance.hapee_node.*.private_ip,
aws_instance.hapee_node.*.public_ip,
aws_instance.hapee_node.*.availability_zone,
)
}

output "Web node private IPs" {
value = "${formatlist("%s, private IP: %s, public IP: %s, AZ: %s", aws_instance.web_node.*.id, aws_instance.web_node.*.private_ip, aws_instance.web_node.*.public_ip, aws_instance.web_node.*.availability_zone)}"
output "web_node_private_ips" {
description = "Web node private IPs"
value = formatlist(
"%s, private IP: %s, public IP: %s, AZ: %s",
aws_instance.web_node.*.id,
aws_instance.web_node.*.private_ip,
aws_instance.web_node.*.public_ip,
aws_instance.web_node.*.availability_zone,
)
}

output "ALB DNS address" {
value = "${aws_lb.hapee_alb.dns_name}"
output "alb_dns_address" {
description = "ALB DNS address"
value = aws_lb.hapee_alb.dns_name
}

output "ALB target group" {
value = "${aws_instance.hapee_node.*.id}"
output "alb_target_group" {
description = "ALB target group"
value = aws_instance.hapee_node.*.id
}

output "HAPEE backend server list" {
value = "${join("\n", formatlist(" server app-%v %v:80 cookie app-%v check", aws_instance.web_node.*.id, aws_instance.web_node.*.private_ip, aws_instance.web_node.*.id))}"
output "hapee_backend_server_list" {
description = "HAPEE backend server list"
value = join(
"\n",
formatlist(
" server app-%v %v:80 cookie app-%v check",
aws_instance.web_node.*.id,
aws_instance.web_node.*.private_ip,
aws_instance.web_node.*.id,
),
)
}
9 changes: 8 additions & 1 deletion aws_alb/variables.tf
Original file line number Diff line number Diff line change
@@ -1,35 +1,42 @@
variable "aws_region" {
description = "Home AWS region"
type = string
default = "us-east-1"
}

variable "aws_az_count" {
description = "Number of AZs to cover in a given AWS region"
default = "2"
type = number
default = 2
}

variable "aws_hapee_instance_type" {
description = "Default AWS instance type for HAPEE nodes"
type = string
default = "t3.small"
}

variable "aws_web_instance_type" {
description = "Default AWS instance type for Web nodes"
type = string
default = "t3.small"
}

variable "key_name" {
description = "SSH key pair to use in AWS"
type = string
default = "hapee-test"
}

variable "hapee_cluster_size" {
description = "Size of HAPEE nodes cluster"
type = number
default = 2
}

variable "web_cluster_size" {
description = "Size of Web nodes cluster"
type = number
default = 3
}

Expand Down
3 changes: 3 additions & 0 deletions aws_alb/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
terraform {
required_version = ">= 0.12"
}
Loading