diff --git a/terraform/ec-1-primaries-v8-m7g.large-tls/common.tf b/terraform/ec-1-primaries-v8-m7g.large-tls/common.tf new file mode 100644 index 0000000..7f7e0c9 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large-tls/common.tf @@ -0,0 +1,12 @@ + +################################################################################ +# This is the bucket holding this specific setup tfstate +################################################################################ +terraform { + backend "s3" { + bucket = "performance-cto-group" + region = "us-east-1" + key = "ec-1-primaries-v8-r7g.large-tls" + } +} + diff --git a/terraform/ec-1-primaries-v8-m7g.large-tls/ec.tf b/terraform/ec-1-primaries-v8-m7g.large-tls/ec.tf new file mode 100644 index 0000000..f78dd60 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large-tls/ec.tf @@ -0,0 +1,33 @@ +# resource "aws_elasticache_cluster" "ec" { +# cluster_id = "ec-1-primaries-v8-r7g-xlarge" +# node_type = "cache.m7g.xlarge" +# port = 6379 +# apply_immediately = true +# parameter_group_name = "default.valkey8" +# engine = "valkey" +# num_cache_nodes = 1 +# security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] +# subnet_group_name = "ec-subnet" +# availability_zone = "us-east-2a" +# } + +resource "aws_elasticache_replication_group" "ec" { + automatic_failover_enabled = false + preferred_cache_cluster_azs = ["us-east-2a"] + replication_group_id = "ec-1-primaries-v8-r7g-large-tls" + description = "xlarge cache" + node_type = "cache.m7g.large" + num_cache_clusters = 1 + parameter_group_name = "default.valkey8" + engine = "valkey" + port = 6379 + security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] + subnet_group_name = "ec-subnet" + at_rest_encryption_enabled = false + data_tiering_enabled = false + transit_encryption_enabled = true + + + +} + diff --git a/terraform/ec-1-primaries-v8-m7g.large-tls/output.tf b/terraform/ec-1-primaries-v8-m7g.large-tls/output.tf new file mode 100644 index 0000000..ecaffce --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large-tls/output.tf @@ -0,0 +1,5 @@ + +output "ec_members" { + value = ["${aws_elasticache_replication_group.ec}"] +} + diff --git a/terraform/ec-1-primaries-v8-m7g.large-tls/shared_resources.tf b/terraform/ec-1-primaries-v8-m7g.large-tls/shared_resources.tf new file mode 100644 index 0000000..824e6b9 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large-tls/shared_resources.tf @@ -0,0 +1,17 @@ +# provider +provider "aws" { + region = var.region +} + +################################################################################ +# This is the shared resources bucket key -- you will need it across environments like security rules,etc... +# !! do not change this !! +################################################################################ +data "terraform_remote_state" "shared_resources" { + backend = "s3" + config = { + bucket = "performance-cto-group" + key = "benchmarks/infrastructure/shared_resources.tfstate" + region = "us-east-1" + } +} diff --git a/terraform/ec-1-primaries-v8-m7g.large-tls/variables.tf b/terraform/ec-1-primaries-v8-m7g.large-tls/variables.tf new file mode 100644 index 0000000..0a84a53 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large-tls/variables.tf @@ -0,0 +1,5 @@ + + +variable "region" { + default = "us-east-2" +} diff --git a/terraform/ec-1-primaries-v8-m7g.large/common.tf b/terraform/ec-1-primaries-v8-m7g.large/common.tf new file mode 100644 index 0000000..cf6f7ef --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large/common.tf @@ -0,0 +1,12 @@ + +################################################################################ +# This is the bucket holding this specific setup tfstate +################################################################################ +terraform { + backend "s3" { + bucket = "performance-cto-group" + region = "us-east-1" + key = "ec-1-primaries-v8-r7g.large" + } +} + diff --git a/terraform/ec-1-primaries-v8-m7g.large/ec.tf b/terraform/ec-1-primaries-v8-m7g.large/ec.tf new file mode 100644 index 0000000..67ff7a4 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large/ec.tf @@ -0,0 +1,30 @@ +# resource "aws_elasticache_cluster" "ec" { +# cluster_id = "ec-1-primaries-v8-r7g-xlarge" +# node_type = "cache.m7g.xlarge" +# port = 6379 +# apply_immediately = true +# parameter_group_name = "default.valkey8" +# engine = "valkey" +# num_cache_nodes = 1 +# security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] +# subnet_group_name = "ec-subnet" +# availability_zone = "us-east-2a" +# } + +resource "aws_elasticache_replication_group" "ec" { + automatic_failover_enabled = false + preferred_cache_cluster_azs = ["us-east-2a"] + replication_group_id = "ec-1-primaries-v8-r7g-large" + description = "xlarge cache" + node_type = "cache.m7g.large" + num_cache_clusters = 1 + parameter_group_name = "default.valkey8" + engine = "valkey" + port = 6379 + security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] + subnet_group_name = "ec-subnet" + at_rest_encryption_enabled = false + data_tiering_enabled = false +} + + diff --git a/terraform/ec-1-primaries-v8-m7g.large/output.tf b/terraform/ec-1-primaries-v8-m7g.large/output.tf new file mode 100644 index 0000000..ecaffce --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large/output.tf @@ -0,0 +1,5 @@ + +output "ec_members" { + value = ["${aws_elasticache_replication_group.ec}"] +} + diff --git a/terraform/ec-1-primaries-v8-m7g.large/shared_resources.tf b/terraform/ec-1-primaries-v8-m7g.large/shared_resources.tf new file mode 100644 index 0000000..824e6b9 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large/shared_resources.tf @@ -0,0 +1,17 @@ +# provider +provider "aws" { + region = var.region +} + +################################################################################ +# This is the shared resources bucket key -- you will need it across environments like security rules,etc... +# !! do not change this !! +################################################################################ +data "terraform_remote_state" "shared_resources" { + backend = "s3" + config = { + bucket = "performance-cto-group" + key = "benchmarks/infrastructure/shared_resources.tfstate" + region = "us-east-1" + } +} diff --git a/terraform/ec-1-primaries-v8-m7g.large/variables.tf b/terraform/ec-1-primaries-v8-m7g.large/variables.tf new file mode 100644 index 0000000..0a84a53 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.large/variables.tf @@ -0,0 +1,5 @@ + + +variable "region" { + default = "us-east-2" +} diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge-tls/common.tf b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/common.tf new file mode 100644 index 0000000..8919e37 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/common.tf @@ -0,0 +1,12 @@ + +################################################################################ +# This is the bucket holding this specific setup tfstate +################################################################################ +terraform { + backend "s3" { + bucket = "performance-cto-group" + region = "us-east-1" + key = "ec-1-primaries-v8-r7g.xlarge-tls" + } +} + diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge-tls/ec.tf b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/ec.tf new file mode 100644 index 0000000..74ef05e --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/ec.tf @@ -0,0 +1,31 @@ +# resource "aws_elasticache_cluster" "ec" { +# cluster_id = "ec-1-primaries-v8-r7g-xlarge" +# node_type = "cache.m7g.xlarge" +# port = 6379 +# apply_immediately = true +# parameter_group_name = "default.valkey8" +# engine = "valkey" +# num_cache_nodes = 1 +# security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] +# subnet_group_name = "ec-subnet" +# availability_zone = "us-east-2a" +# } + +resource "aws_elasticache_replication_group" "ec" { + automatic_failover_enabled = false + preferred_cache_cluster_azs = ["us-east-2a"] + replication_group_id = "ec-1-primaries-v8-r7g-xlarge-tls" + description = "xlarge cache" + node_type = "cache.m7g.xlarge" + num_cache_clusters = 1 + parameter_group_name = "default.valkey8" + engine = "valkey" + port = 6379 + security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] + subnet_group_name = "ec-subnet" + at_rest_encryption_enabled = false + data_tiering_enabled = false + transit_encryption_enabled = true +} + + diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge-tls/output.tf b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/output.tf new file mode 100644 index 0000000..ecaffce --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/output.tf @@ -0,0 +1,5 @@ + +output "ec_members" { + value = ["${aws_elasticache_replication_group.ec}"] +} + diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge-tls/shared_resources.tf b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/shared_resources.tf new file mode 100644 index 0000000..824e6b9 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/shared_resources.tf @@ -0,0 +1,17 @@ +# provider +provider "aws" { + region = var.region +} + +################################################################################ +# This is the shared resources bucket key -- you will need it across environments like security rules,etc... +# !! do not change this !! +################################################################################ +data "terraform_remote_state" "shared_resources" { + backend = "s3" + config = { + bucket = "performance-cto-group" + key = "benchmarks/infrastructure/shared_resources.tfstate" + region = "us-east-1" + } +} diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge-tls/variables.tf b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/variables.tf new file mode 100644 index 0000000..0a84a53 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge-tls/variables.tf @@ -0,0 +1,5 @@ + + +variable "region" { + default = "us-east-2" +} diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge/common.tf b/terraform/ec-1-primaries-v8-m7g.xlarge/common.tf new file mode 100644 index 0000000..b406466 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge/common.tf @@ -0,0 +1,12 @@ + +################################################################################ +# This is the bucket holding this specific setup tfstate +################################################################################ +terraform { + backend "s3" { + bucket = "performance-cto-group" + region = "us-east-1" + key = "ec-1-primaries-v8-r7g.xlarge" + } +} + diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge/ec.tf b/terraform/ec-1-primaries-v8-m7g.xlarge/ec.tf new file mode 100644 index 0000000..2b160a3 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge/ec.tf @@ -0,0 +1,30 @@ +# resource "aws_elasticache_cluster" "ec" { +# cluster_id = "ec-1-primaries-v8-r7g-xlarge" +# node_type = "cache.m7g.xlarge" +# port = 6379 +# apply_immediately = true +# parameter_group_name = "default.valkey8" +# engine = "valkey" +# num_cache_nodes = 1 +# security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] +# subnet_group_name = "ec-subnet" +# availability_zone = "us-east-2a" +# } + +resource "aws_elasticache_replication_group" "ec" { + automatic_failover_enabled = false + preferred_cache_cluster_azs = ["us-east-2a"] + replication_group_id = "ec-1-primaries-v8-r7g-xlarge" + description = "xlarge cache" + node_type = "cache.m7g.xlarge" + num_cache_clusters = 1 + parameter_group_name = "default.valkey8" + engine = "valkey" + port = 6379 + security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] + subnet_group_name = "ec-subnet" + at_rest_encryption_enabled = false + data_tiering_enabled = false +} + + diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge/output.tf b/terraform/ec-1-primaries-v8-m7g.xlarge/output.tf new file mode 100644 index 0000000..ecaffce --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge/output.tf @@ -0,0 +1,5 @@ + +output "ec_members" { + value = ["${aws_elasticache_replication_group.ec}"] +} + diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge/shared_resources.tf b/terraform/ec-1-primaries-v8-m7g.xlarge/shared_resources.tf new file mode 100644 index 0000000..824e6b9 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge/shared_resources.tf @@ -0,0 +1,17 @@ +# provider +provider "aws" { + region = var.region +} + +################################################################################ +# This is the shared resources bucket key -- you will need it across environments like security rules,etc... +# !! do not change this !! +################################################################################ +data "terraform_remote_state" "shared_resources" { + backend = "s3" + config = { + bucket = "performance-cto-group" + key = "benchmarks/infrastructure/shared_resources.tfstate" + region = "us-east-1" + } +} diff --git a/terraform/ec-1-primaries-v8-m7g.xlarge/variables.tf b/terraform/ec-1-primaries-v8-m7g.xlarge/variables.tf new file mode 100644 index 0000000..0a84a53 --- /dev/null +++ b/terraform/ec-1-primaries-v8-m7g.xlarge/variables.tf @@ -0,0 +1,5 @@ + + +variable "region" { + default = "us-east-2" +} diff --git a/terraform/oss-redisearch-m5-spot-instances/variables.tf b/terraform/oss-redisearch-m5-spot-instances/variables.tf index 5f73121..a8cfac4 100644 --- a/terraform/oss-redisearch-m5-spot-instances/variables.tf +++ b/terraform/oss-redisearch-m5-spot-instances/variables.tf @@ -56,23 +56,32 @@ variable "public_key" { default = "~/.ssh/perf-ci.pub" } + variable "key_name" { description = "key name" - default = "perf-ci" + default = "perf-cto-us-east-2" } variable "region" { default = "us-east-2" } -# (Ubuntu 20.04) -# ubuntu-bionic-20.04-amd64-server with redis 7.4.0 and memtier 2.1.1 -# https://us-east-2.console.aws.amazon.com/ec2/home?region=us-east-2#ImageDetails:imageId=ami-0cfbc88a79665b192 +# (Ubuntu 22.04, memtier 2.1.4 and redis unstable from March 6th 2025) +# ubuntu@ip-10-3-0-162:~$ memtier_benchmark --version +# memtier_benchmark 2.1.4 +# Copyright (C) 2011-2024 Redis Ltd. +# This is free software. You may redistribute copies of it under the terms of +# the GNU General Public License . +# There is NO WARRANTY, to the extent permitted by law. +# ubuntu@ip-10-3-0-162:~$ redis-server --version +# Redis server v=255.255.255 sha=f364dcca:0 malloc=jemalloc-5.3.0 bits=64 build=502a999850b32fd8 +# https://us-east-2.console.aws.amazon.com/ec2/home?region=us-east-2#ImageDetails:imageId=ami-0cda50c2e20879afb variable "instance_ami" { - description = "AMI for aws EC2 instance - us-east-2 Ubuntu 20.04 - perf-cto-base-image-ubuntu20.04-redis-7.4.0-tuned-latency" - default = "ami-0cfbc88a79665b192" + description = "AMI for aws EC2 instance - us-east-2 Ubuntu 22.04 - perf-base-image-ubuntu22.04-m6i.8xlarge-20250306-0220" + default = "ami-0cda50c2e20879afb" } + variable "instance_device_name" { description = "EC2 instance device name" default = "/dev/sda1" diff --git a/terraform/oss-standalone-redisearch-m5-spot-instances/variables.tf b/terraform/oss-standalone-redisearch-m5-spot-instances/variables.tf index 90c5820..506a4a4 100644 --- a/terraform/oss-standalone-redisearch-m5-spot-instances/variables.tf +++ b/terraform/oss-standalone-redisearch-m5-spot-instances/variables.tf @@ -53,20 +53,29 @@ variable "private_key" { variable "key_name" { description = "key name" - default = "perf-ci" + default = "perf-cto-us-east-2" } variable "region" { default = "us-east-2" } -# (Ubuntu 20.04) -# ubuntu-bionic-20.04-amd64-server +# (Ubuntu 22.04, memtier 2.1.4 and redis unstable from March 6th 2025) +# ubuntu@ip-10-3-0-162:~$ memtier_benchmark --version +# memtier_benchmark 2.1.4 +# Copyright (C) 2011-2024 Redis Ltd. +# This is free software. You may redistribute copies of it under the terms of +# the GNU General Public License . +# There is NO WARRANTY, to the extent permitted by law. +# ubuntu@ip-10-3-0-162:~$ redis-server --version +# Redis server v=255.255.255 sha=f364dcca:0 malloc=jemalloc-5.3.0 bits=64 build=502a999850b32fd8 +# https://us-east-2.console.aws.amazon.com/ec2/home?region=us-east-2#ImageDetails:imageId=ami-0cda50c2e20879afb variable "instance_ami" { - description = "AMI for aws EC2 instance - us-east-2 Ubuntu 20.04 - perf-cto-base-image-ubuntu20.04-redis-7.1.241-tuned-latency" - default = "ami-0e64e0b751414b32e" + description = "AMI for aws EC2 instance - us-east-2 Ubuntu 22.04 - perf-base-image-ubuntu22.04-m6i.8xlarge-20250306-0220" + default = "ami-0cda50c2e20879afb" } + variable "instance_device_name" { description = "EC2 instance device name" default = "/dev/sda1" diff --git a/terraform/oss-standalone-redisearch-m5/variables.tf b/terraform/oss-standalone-redisearch-m5/variables.tf index 7e912e9..63d72e5 100644 --- a/terraform/oss-standalone-redisearch-m5/variables.tf +++ b/terraform/oss-standalone-redisearch-m5/variables.tf @@ -53,19 +53,26 @@ variable "private_key" { variable "key_name" { description = "key name" - default = "perf-ci" + default = "perf-cto-us-east-2" } variable "region" { default = "us-east-2" } -# (Ubuntu 20.04) -# ubuntu-bionic-20.04-amd64-server with redis 7.4.0 and memtier 2.1.1 -# https://us-east-2.console.aws.amazon.com/ec2/home?region=us-east-2#ImageDetails:imageId=ami-0cfbc88a79665b192 +# (Ubuntu 22.04, memtier 2.1.4 and redis unstable from March 6th 2025) +# ubuntu@ip-10-3-0-162:~$ memtier_benchmark --version +# memtier_benchmark 2.1.4 +# Copyright (C) 2011-2024 Redis Ltd. +# This is free software. You may redistribute copies of it under the terms of +# the GNU General Public License . +# There is NO WARRANTY, to the extent permitted by law. +# ubuntu@ip-10-3-0-162:~$ redis-server --version +# Redis server v=255.255.255 sha=f364dcca:0 malloc=jemalloc-5.3.0 bits=64 build=502a999850b32fd8 +# https://us-east-2.console.aws.amazon.com/ec2/home?region=us-east-2#ImageDetails:imageId=ami-0cda50c2e20879afb variable "instance_ami" { - description = "AMI for aws EC2 instance - us-east-2 Ubuntu 20.04 - perf-cto-base-image-ubuntu20.04-redis-7.4.0-tuned-latency" - default = "ami-0cfbc88a79665b192" + description = "AMI for aws EC2 instance - us-east-2 Ubuntu 22.04 - perf-base-image-ubuntu22.04-m6i.8xlarge-20250306-0220" + default = "ami-0cda50c2e20879afb" } variable "instance_device_name" { diff --git a/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/common.tf b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/common.tf new file mode 100644 index 0000000..1b9973e --- /dev/null +++ b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/common.tf @@ -0,0 +1,13 @@ + +################################################################################ +# This is the bucket holding this specific setup tfstate +################################################################################ +terraform { + backend "s3" { + bucket = "performance-cto-group" + region = "us-east-1" + key = "benchmarks/infrastructure/perf-base-image-ubuntu22.04-m6i.8xlarge.tfstate" + + } +} + diff --git a/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/install_memtier.sh b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/install_memtier.sh new file mode 100644 index 0000000..d2ee41d --- /dev/null +++ b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/install_memtier.sh @@ -0,0 +1,14 @@ +#!/bin/bash +export DEBIAN_FRONTEND=noninteractive +sudo DEBIAN_FRONTEND=noninteractive apt update -y +sudo DEBIAN_FRONTEND=noninteractive apt install lsb-release curl gpg -y + +curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg + +echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list + +sudo apt-get update -y + +sudo apt-get install memtier-benchmark -y + + diff --git a/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/install_redis.sh b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/install_redis.sh new file mode 100644 index 0000000..92b46bd --- /dev/null +++ b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/install_redis.sh @@ -0,0 +1,9 @@ +#!/bin/bash +export DEBIAN_FRONTEND=noninteractive +sudo DEBIAN_FRONTEND=noninteractive apt update -y +sudo DEBIAN_FRONTEND=noninteractive apt install zip git libssl-dev make gcc pkg-config python3-pip -y +sudo git clone https://github.com/redis/redis --depth 1 +sudo bash -c "cd redis && sudo make BUILD_TLS=yes -j && sudo make BUILD_TLS=yes install" +# check +echo "Printing redis-server info" +redis-server --version diff --git a/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/output.tf b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/output.tf new file mode 100644 index 0000000..7602306 --- /dev/null +++ b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/output.tf @@ -0,0 +1,16 @@ +output "server_public_ip" { + value = aws_instance.server_2a[*].public_ip +} + +output "server_private_ip" { + value = aws_instance.server_2a[*].private_ip +} + +output "server_instance_type" { + value = var.server_instance_type +} + + +output "ami_id" { + value = aws_ami_from_instance.perf_ami.id +} diff --git a/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/resources.tf b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/resources.tf new file mode 100644 index 0000000..6ee6af4 --- /dev/null +++ b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/resources.tf @@ -0,0 +1,102 @@ + +resource "aws_instance" "server_2a" { + count = var.server_instance_count + ami = var.instance_ami + instance_type = var.server_instance_type + subnet_id = data.terraform_remote_state.shared_resources.outputs.subnet_public_id + vpc_security_group_ids = ["${data.terraform_remote_state.shared_resources.outputs.performance_cto_sg_id}"] + key_name = var.key_name + availability_zone = "us-east-2a" + + root_block_device { + volume_size = var.instance_volume_size + volume_type = var.instance_volume_type + encrypted = var.instance_volume_encrypted + delete_on_termination = true + } + + volume_tags = { + Environment = "${var.environment}" + Project = "${var.environment}" + Name = "ebs_block_device-${var.setup_name}-${count.index + 1}" + setup = "${var.setup_name}" + triggering_env = "${var.triggering_env}" + github_actor = "${var.github_actor}" + github_org = "${var.github_org}" + github_repo = "${var.github_repo}" + github_sha = "${var.github_sha}" + } + + tags = { + Environment = "${var.environment}" + Project = "${var.environment}" + Name = "${var.setup_name}-${count.index + 1}" + setup = "${var.setup_name}" + triggering_env = "${var.triggering_env}" + github_actor = "${var.github_actor}" + github_org = "${var.github_org}" + github_repo = "${var.github_repo}" + github_sha = "${var.github_sha}" + } + + ################################################################################ + # This will ensure we wait here until the instance is ready to receive the ssh connection + ################################################################################ + provisioner "remote-exec" { + script = "./../scripts/wait_for_instance.sh" + connection { + host = self.public_ip # The `self` variable is like `this` in many programming languages + type = "ssh" # in this case, `self` is the resource (the server). + user = var.ssh_user + private_key = file(var.private_key) + #need to increase timeout to larger then 5m for metal instances + timeout = "5m" + agent = "false" + } + } + + + ################################################################################ + # Deployment related + ################################################################################ + + ################################################################################ + # Install memtier + ################################################################################ + provisioner "remote-exec" { + script = "./install_redis.sh" + connection { + host = self.public_ip # The `self` variable is like `this` in many programming languages + type = "ssh" # in this case, `self` is the resource (the server). + user = var.ssh_user + private_key = file(var.private_key) + #need to increase timeout to larger then 5m for metal instances + timeout = "5m" + agent = "false" + } + } + + + ################################################################################ + # Install redis + ################################################################################ + provisioner "remote-exec" { + script = "./install_redis.sh" + connection { + host = self.public_ip # The `self` variable is like `this` in many programming languages + type = "ssh" # in this case, `self` is the resource (the server). + user = var.ssh_user + private_key = file(var.private_key) + #need to increase timeout to larger then 5m for metal instances + timeout = "5m" + agent = "false" + } + } + +} + + +resource "aws_ami_from_instance" "perf_ami" { + name = "${var.setup_name}-${formatdate("YYYYMMDD-HHmm", timestamp())}" + source_instance_id = aws_instance.server_2a[0].id +} \ No newline at end of file diff --git a/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/shared_resources.tf b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/shared_resources.tf new file mode 100644 index 0000000..824e6b9 --- /dev/null +++ b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/shared_resources.tf @@ -0,0 +1,17 @@ +# provider +provider "aws" { + region = var.region +} + +################################################################################ +# This is the shared resources bucket key -- you will need it across environments like security rules,etc... +# !! do not change this !! +################################################################################ +data "terraform_remote_state" "shared_resources" { + backend = "s3" + config = { + bucket = "performance-cto-group" + key = "benchmarks/infrastructure/shared_resources.tfstate" + region = "us-east-1" + } +} diff --git a/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/variables.tf b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/variables.tf new file mode 100644 index 0000000..9e34d39 --- /dev/null +++ b/terraform/perf-base-image-ubuntu22.04-m6i.8xlarge/variables.tf @@ -0,0 +1,160 @@ +################################################################################ +# Variables used for deployment tag +################################################################################ + +variable "setup_name" { + description = "setup name" + default = "perf-base-image-ubuntu22.04-m6i.8xlarge" +} + +variable "github_actor" { + description = "The name of the person or app that initiated the deployment." + default = "N/A" +} + +variable "github_repo" { + description = " The owner and repository name. For example, testing-infrastructure." + default = "N/A" +} + +variable "triggering_env" { + description = " The triggering environment. For example circleci." + default = "N/A" +} + +variable "environment" { + description = " The cost tag." + default = "CI-BASE-IMAGE" +} + +variable "github_org" { + description = " The owner name. For example, RedisModules." + default = "N/A" +} + +variable "github_sha" { + description = "The commit SHA that triggered the deployment." + default = "N/A" +} + +variable "timeout_secs" { + description = "The maximum time to wait prior destroying the VM via the watchdog." + default = "3600" +} + + + +################################################################################ +# Access keys +################################################################################ +variable "private_key" { + description = "private key" + default = "/tmp/benchmarks.redislabs.pem" +} + +variable "key_name" { + description = "key name" + default = "perf-cto-us-east-2" +} + +variable "region" { + default = "us-east-2" +} + +# (Ubuntu 22.04) +# Jammy Jellyfish 22.04 LTS amd64 hvm:ebs-ssd 20250305 ami-0c3b809fcf2445b6a hvm +variable "instance_ami" { + description = "AMI for aws EC2 instance - us-east-2 Ubuntu 22.04 LTS 20250305" + default = "ami-0c3b809fcf2445b6a" +} + + +variable "instance_device_name" { + description = "EC2 instance device name" + default = "/dev/sda1" +} + +variable "redis_module" { + description = "redis_module" + default = "N/A" +} + +variable "instance_volume_size" { + description = "EC2 instance volume_size" + default = "256" +} + +variable "instance_volume_type" { + description = "EC2 instance volume_type" + default = "gp3" +} + + +variable "instance_volume_iops" { + description = "EC2 instance volume_iops" + default = "512" +} + +variable "client_instance_volume_size" { + description = "EC2 instance volume_size" + default = "128" +} + +variable "client_instance_volume_type" { + description = "EC2 instance volume_type" + default = "gp3" +} + + +variable "instance_volume_encrypted" { + description = "EC2 instance instance_volume_encrypted" + default = "false" +} + +variable "instance_root_block_device_encrypted" { + description = "EC2 instance instance_root_block_device_encrypted" + default = "false" +} + +variable "instance_cpu_threads_per_core" { + description = "CPU threads per core for aws EC2 instance" + default = 1 +} + +variable "instance_cpu_threads_per_core_hyperthreading" { + description = "CPU threads per core when hyperthreading is enabled for aws EC2 instance" + default = 2 +} + +variable "instance_network_interface_plus_count" { + description = "number of additional network interfaces to add to aws EC2 instance" + default = 0 +} + +variable "os" { + description = "os" + default = "ubuntu22.04" +} + +variable "ssh_user" { + description = "ssh_user" + default = "ubuntu" +} + +################################################################################ +# Specific DB machine variables +################################################################################ +variable "server_instance_type" { + description = "type for aws EC2 instance" + default = "m6i.8xlarge" +} + +variable "server_instance_count" { + description = "count of aws EC2 instances" + default = 1 +} + +variable "server_instance_cpu_core_count" { + description = "CPU core count for aws EC2 instance" + default = 16 +}