Skip to content
Draft
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
8 changes: 6 additions & 2 deletions terraform/oss-standalone-redisearch-m7-aarch64/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,17 @@ variable "redis_module" {

variable "instance_volume_size" {
description = "EC2 instance volume_size"
default = "128"
# The aarch64 perf base image AMI (ami-07b2bd887269522a3) has a root
# snapshot >= 256GB, so requesting anything smaller makes RunInstances
# fail with InvalidBlockDeviceMapping. Keep >= 256 until we rebuild a
# smaller AMI.
default = "256"
}


variable "client_instance_volume_size" {
description = "EC2 instance volume_size"
default = "64"
default = "256"
}

variable "client_instance_volume_type" {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@

resource "aws_instance" "client" {
count = var.client_instance_count
ami = var.instance_ami
instance_type = var.client_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
associate_public_ip_address = "true"
#placement_group = data.terraform_remote_state.shared_resources.outputs.perf_cto_pg_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}-CLIENT-${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}"
team = "performance a&o"
timeout_secs = "${var.timeout_secs}"
}

tags = {
Environment = "${var.environment}"
Project = "${var.environment}"
Name = "${var.setup_name}-CLIENT-${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}"
team = "performance a&o"
timeout_secs = "${var.timeout_secs}"
}

################################################################################
# This will ensure we wait here until the instance is ready to receive the ssh connection
################################################################################
# user_data = <<-EOF
# #!/bin/bash
# echo "Instance is ready" > /var/log/instance_ready.log
# EOF

################################################################################
# Deployment related
################################################################################
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#cloud-config

# Server-side relabel config for parca-agent, mirrored from the
# /etc/parca-agent.yml convention used on the Redis OSS benchmark runners:
# * drop every sample whose executable is not redis-server so Polar
# Signals storage/quota is spent on the module we actually profile
# (RediSearch code runs inside the redis-server process)
# * promote __meta_thread_id / thread_comm / process_pid to first-class
# labels so queries can filter by thread or pid
# * default role=primary, override to replica when `replicaof` is in the
# process cmdline
write_files:
- path: /etc/parca-agent.yml
permissions: '0644'
owner: root:root
content: |
relabel_configs:
- source_labels: [__meta_thread_id]
target_label: thread_id

- source_labels: [__meta_thread_comm]
target_label: thread_name

- source_labels: [__meta_process_pid]
target_label: pid

# Drop everything that is NOT redis-server.
- source_labels: [__meta_process_executable_name]
regex: "^redis-server$"
action: keep

# Default: mark as primary.
- target_label: role
replacement: primary
action: replace

# Override: mark as replica if "replicaof" appears in cmdline.
- source_labels: [__meta_process_cmdline]
regex: '.*replicaof.*'
target_label: role
replacement: replica
action: replace

# Parca agent install + wire the config.
#
# Channel:
# `stable` -> v0.46.0, works with JWT tokens that embed `projectId`.
# `edge` -> v0.47.1+, required when the token is `psc_v1_<secret>_<id>`
# (no project binding in the token -- v0.46.0 does not honor
# the projectID gRPC header in that case).
#
# GRPC headers:
# When `parca_agent_project_id` is set, parca-agent is told to route writes
# to that project via `--remote-store-grpc-headers=projectID=<id>` (this is
# exactly how Polar Signals' own k8s `manifests.yaml` wires the DaemonSet).
# Leave the project id empty when using a JWT token that already carries
# the project id in its claims.
snap:
commands:
- [install, parca-agent, --classic, --channel=${parca_agent_snap_channel}]
- [set, parca-agent, config-path=/etc/parca-agent.yml]
- [
set,
parca-agent,
remote-store-bearer-token=${parca_agent_token},
]
- [
set,
parca-agent,
remote-store-grpc-headers=projectID=${parca_agent_project_id},
]
- [start, --enable, parca-agent]
11 changes: 11 additions & 0 deletions terraform/oss-standalone-redisearch-m7i-metal/common.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

################################################################################
# This is the bucket holding this specific setup tfstate
################################################################################
terraform {
backend "s3" {
bucket = "performance-cto-group"
region = "us-east-1"
}
}

60 changes: 60 additions & 0 deletions terraform/oss-standalone-redisearch-m7i-metal/db-resources.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
resource "aws_instance" "server" {
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
associate_public_ip_address = "true"
#placement_group = data.terraform_remote_state.shared_resources.outputs.perf_cto_pg_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}-DB-${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}"
team = "performance a&o"
timeout_secs = "${var.timeout_secs}"
}

tags = {
Environment = "${var.environment}"
Project = "${var.environment}"
Name = "${var.setup_name}-DB-${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}"
team = "performance a&o"
timeout_secs = "${var.timeout_secs}"
}

################################################################################
# Polar Signals Parca agent configuration (optional)
################################################################################
user_data = var.enable_parca_agent ? templatefile("${path.module}/cloud-init-parca-agent.yaml", {
parca_agent_token = var.parca_agent_token
parca_agent_project_id = var.parca_agent_project_id
parca_agent_snap_channel = var.parca_agent_snap_channel
}) : null

################################################################################
# Deployment related
################################################################################
}
15 changes: 15 additions & 0 deletions terraform/oss-standalone-redisearch-m7i-metal/output.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
output "server_public_ip" {
value = ["${aws_instance.server[0].public_ip}"]
}

output "server_private_ip" {
value = ["${aws_instance.server[0].private_ip}"]
}

output "client_public_ip" {
value = ["${aws_instance.client[0].public_ip}"]
}

output "client_private_ip" {
value = ["${aws_instance.client[0].private_ip}"]
}
26 changes: 26 additions & 0 deletions terraform/oss-standalone-redisearch-m7i-metal/shared_resources.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# provider
provider "aws" {
region = var.region
}

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "5.94.1"
}
}
}

################################################################################
# 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"
}
}
Loading