terraform/stress/main.tf (122 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT
module "common" {
source = "../common"
}
module "basic_components" {
source = "../basic_components"
region = var.region
}
locals {
ami_family = var.ami_family[var.family]
login_user = local.ami_family["login_user"]
install_package = local.ami_family["install_package"]
install_validator = local.ami_family["install_validator"]
temp_directory = local.ami_family["temp_folder"]
connection_type = local.ami_family["connection_type"]
start_command = format(local.ami_family["start_command"], module.validator.instance_agent_config)
}
#####################################################################
# Prepare Parameters Tests
#####################################################################
module "validator" {
source = "../validator"
arc = var.arc
family = var.family
action = "upload"
s3_bucket = var.s3_bucket
test_dir = var.test_dir
temp_directory = local.temp_directory
cwa_github_sha = var.cwa_github_sha
cwa_github_sha_date = var.cwa_github_sha_date
values_per_minute = var.values_per_minute
}
#####################################################################
# Generate EC2 Instance and execute test commands
#####################################################################
resource "aws_instance" "cwagent" {
ami = data.aws_ami.latest.id
instance_type = var.ec2_instance_type
key_name = local.ssh_key_name
iam_instance_profile = module.basic_components.instance_profile
vpc_security_group_ids = [module.basic_components.security_group]
get_password_data = local.connection_type == "winrm" ? true : false
associate_public_ip_address = true
instance_initiated_shutdown_behavior = "terminate"
metadata_options {
http_endpoint = "enabled"
http_tokens = "required"
}
tags = {
Name = "cwagent-stress-${var.family}-${module.common.testing_id}"
}
}
resource "null_resource" "install_binaries" {
depends_on = [aws_instance.cwagent, module.validator]
connection {
type = local.connection_type
user = local.login_user
private_key = local.connection_type == "ssh" ? local.private_key_content : null
password = local.connection_type == "winrm" ? rsadecrypt(aws_instance.cwagent.password_data, local.private_key_content) : null
host = aws_instance.cwagent.public_dns
}
provisioner "file" {
source = module.validator.agent_config
destination = module.validator.instance_agent_config
}
provisioner "file" {
source = module.validator.validator_config
destination = module.validator.instance_validator_config
}
provisioner "remote-exec" {
inline = [
local.ami_family["wait_cloud_init"],
"aws s3 cp --no-progress s3://${var.s3_bucket}/integration-test/packaging/${var.cwa_github_sha}/${local.install_package} .",
"aws s3 cp --no-progress s3://${var.s3_bucket}/integration-test/binary/${var.cwa_github_sha}/${var.family}/${var.arc}/${local.install_package} .",
"aws s3 cp --no-progress s3://${var.s3_bucket}/integration-test/validator/${var.cwa_github_sha}/${var.family}/${var.arc}/${local.install_validator} .",
local.ami_family["install_command"],
]
}
}
resource "null_resource" "validator_linux" {
count = var.family != "windows" ? 1 : 0
depends_on = [null_resource.install_binaries]
connection {
type = local.connection_type
user = local.login_user
private_key = local.connection_type == "ssh" ? local.private_key_content : null
password = local.connection_type == "winrm" ? rsadecrypt(aws_instance.cwagent.password_data, local.private_key_content) : null
host = aws_instance.cwagent.public_dns
}
provisioner "remote-exec" {
inline = [
"export AWS_REGION=${var.region}",
"sudo chmod +x ./${local.install_validator}",
"./${local.install_validator} --validator-config=${module.validator.instance_validator_config} --preparation-mode=true",
local.start_command,
"./${local.install_validator} --validator-config=${module.validator.instance_validator_config} --preparation-mode=false",
]
}
}
resource "null_resource" "validator_windows" {
count = var.family == "windows" ? 1 : 0
depends_on = [null_resource.install_binaries]
connection {
type = local.connection_type
user = local.login_user
private_key = local.connection_type == "ssh" ? local.private_key_content : null
password = local.connection_type == "winrm" ? rsadecrypt(aws_instance.cwagent.password_data, local.private_key_content) : null
host = aws_instance.cwagent.public_dns
timeout = "10m"
}
provisioner "remote-exec" {
inline = [
"set AWS_REGION=${var.region}",
"${local.install_validator} --validator-config=${module.validator.instance_validator_config}--preparation-mode=true",
local.start_command,
"${local.install_validator} --validator-config=${module.validator.instance_validator_config} --preparation-mode=false",
]
}
}
data "aws_ami" "latest" {
most_recent = true
owners = ["self", "amazon"]
filter {
name = "name"
values = [var.ami]
}
}