Max Inden e5b7e0e16e
fix(perf): use $Default launch template (#257)
Our perf terraform setup differentiates in long lived and short lived resources.
On CI, our long lived resources are spun up once and our short lived resources
are spun up on each CI run. From time to time we have to adjust the long lived
resources. End result is a new launch template that needs to be referenced in
the short lived resources by version.

Next to our CI, the perf terraform setup can as well be used on personal AWS
accounts. Their long lived launch template version likely doesn't match the
configured launch template version of the short lived aws_instance.

Instead of specifying a specific version, instruct terraform to use the default,
thus supporting both our CI and personal AWS account use-case.
2023-08-17 15:02:23 +02:00

123 lines
2.4 KiB
HCL

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.67.0"
}
}
}
variable "region" {
description = "The AWS region of the provider"
}
variable "ami" {
description = "The Amazon Machine Image to use"
}
locals {
availability_zone = "${var.region}a"
}
resource "aws_vpc" "perf" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "perf" {
vpc_id = aws_vpc.perf.id
cidr_block = "10.0.0.0/16"
availability_zone = local.availability_zone
map_public_ip_on_launch = true
}
resource "aws_internet_gateway" "perf" {
vpc_id = aws_vpc.perf.id
}
resource "aws_route_table" "perf" {
vpc_id = aws_vpc.perf.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.perf.id
}
}
resource "aws_route_table_association" "perf" {
subnet_id = aws_subnet.perf.id
route_table_id = aws_route_table.perf.id
}
resource "aws_security_group" "restricted_inbound" {
name = "restricted_inbound"
description = "Allow SSH and port 4001 inbound traffic (TCP and UDP), allow all outbound traffic"
vpc_id = aws_vpc.perf.id
# ICMP
ingress {
from_port = -1
to_port = -1
protocol = "icmp"
cidr_blocks = ["0.0.0.0/0"]
}
# SSH (TCP)
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 1
to_port = 65535
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 1
to_port = 65535
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_launch_template" "perf" {
name = "perf-node"
image_id = var.ami
instance_type = "m5n.8xlarge"
# Debug via:
# - /var/log/cloud-init.log and
# - /var/log/cloud-init-output.log
user_data = filebase64("${path.module}/files/user-data.sh")
instance_initiated_shutdown_behavior = "terminate"
network_interfaces {
subnet_id = aws_subnet.perf.id
security_groups = [aws_security_group.restricted_inbound.id]
delete_on_termination = true
}
block_device_mappings {
device_name = "/dev/xvda"
ebs {
volume_size = 100 # New root volume size in GiB
volume_type = "gp2"
delete_on_termination = true
}
}
update_default_version = true
}