testing/tf-modules/artillery_deployment/main.tf (132 lines of code) (raw):

resource "tls_private_key" "artillery" { algorithm = "RSA" rsa_bits = "4096" } data "tls_public_key" "artillery" { private_key_openssh = tls_private_key.artillery.private_key_openssh } data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"] } filter { name = "virtualization-type" values = ["hvm"] } owners = ["099720109477"] # Canonical } resource "aws_vpc" "artillery" { cidr_block = "172.16.0.0/28" tags = { Name = "${var.resource_prefix}_apm_aws_lambda_artillery" } } resource "aws_subnet" "artillery" { vpc_id = aws_vpc.artillery.id cidr_block = "172.16.0.0/28" map_public_ip_on_launch = true tags = { Name = "${var.resource_prefix}_apm_aws_lambda_artillery" } } resource "aws_internet_gateway" "artillery" { vpc_id = aws_vpc.artillery.id tags = { Name = "${var.resource_prefix}_apm_aws_lambda_artillery" } } resource "aws_route" "artillery" { destination_cidr_block = "0.0.0.0/0" route_table_id = aws_vpc.artillery.default_route_table_id gateway_id = aws_internet_gateway.artillery.id } resource "aws_security_group" "artillery" { name = "${var.resource_prefix}_apm_aws_lambda_artillery" vpc_id = aws_vpc.artillery.id egress = [ { description = "Allow all egress traffic" cidr_blocks = ["0.0.0.0/0"] ipv6_cidr_blocks = [] prefix_list_ids = [] security_groups = [] from_port = 0 to_port = 0 protocol = "-1" self = false } ] ingress = [ { description = "Allow SSH from all sources" cidr_blocks = ["0.0.0.0/0"] ipv6_cidr_blocks = [] prefix_list_ids = [] security_groups = [] from_port = 22 to_port = 22 protocol = "tcp" self = false }, ] } resource "aws_key_pair" "artillery" { key_name = "${var.resource_prefix}_apm_aws_lambda_artillery" public_key = data.tls_public_key.artillery.public_key_openssh } resource "aws_instance" "artillery" { ami = data.aws_ami.ubuntu.id instance_type = var.machine_type key_name = aws_key_pair.artillery.key_name subnet_id = aws_subnet.artillery.id vpc_security_group_ids = [aws_security_group.artillery.id] lifecycle { ignore_changes = [ami] } connection { type = "ssh" host = self.public_ip user = "ubuntu" private_key = tls_private_key.artillery.private_key_openssh timeout = "1m" } provisioner "remote-exec" { script = "${path.module}/files/install_artillery.sh" } } resource "null_resource" "run_artillery" { triggers = { always_run = "${timestamp()}" } depends_on = [ aws_instance.artillery ] connection { type = "ssh" host = aws_instance.artillery.public_ip user = "ubuntu" private_key = tls_private_key.artillery.private_key_openssh timeout = "1m" } provisioner "file" { content = templatefile( "${path.module}/files/config.yml.tpl", { load_base_url = var.load_base_url load_req_path = var.load_req_path load_duration = var.load_duration load_arrival_rate = var.load_arrival_rate } ) destination = "config.yml" } provisioner "file" { source = "${path.module}/files/coldstart-metrics.js" destination = "coldstart-metrics.js" } provisioner "remote-exec" { script = "${path.module}/files/run_artillery.sh" } }