a19f7dbda5
The previous strategy for provisioning infrastructure targets was to use the cheapest instances that could reliably perform as Vault cluster nodes. With this change we introduce a new model for target node infrastructure. We've replaced on-demand instances for a spot fleet. While the spot price fluctuates based on dynamic pricing, capacity, region, instance type, and platform, cost savings for our most common combinations range between 20-70%. This change only includes spot fleet targets for Vault clusters. We'll be updating our Consul backend bidding in another PR. * Create a new `vault_cluster` module that handles installation, configuration, initializing, and unsealing Vault clusters. * Create a `target_ec2_instances` module that can provision a group of instances on-demand. * Create a `target_ec2_spot_fleet` module that can bid on a fleet of spot instances. * Extend every Enos scenario to utilize the spot fleet target acquisition strategy and the `vault_cluster` module. * Update our Enos CI modules to handle both the `aws-nuke` permissions and also the privileges to provision spot fleets. * Only use us-east-1 and us-west-2 in our scenario matrices as costs are lower than us-west-1. Signed-off-by: Ryan Cragun <me@ryan.ec>
66 lines
2 KiB
HCL
66 lines
2 KiB
HCL
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
locals {
|
|
// This is the code of the service quota to request a change for. Each adjustable limit has a
|
|
// unique code. See, https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/servicequotas_service_quota#quota_code
|
|
subnets_per_vpcs_quota = "L-F678F1CE"
|
|
standard_spot_instance_requests_quota = "L-34B43A08"
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "vpcs_per_region_us_east_1" {
|
|
provider = aws.us_east_2
|
|
quota_code = local.subnets_per_vpcs_quota
|
|
service_code = "vpc"
|
|
value = 50
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "vpcs_per_region_us_east_2" {
|
|
provider = aws.us_east_2
|
|
quota_code = local.subnets_per_vpcs_quota
|
|
service_code = "vpc"
|
|
value = 50
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "vpcs_per_region_us_west_1" {
|
|
provider = aws.us_west_1
|
|
quota_code = local.subnets_per_vpcs_quota
|
|
service_code = "vpc"
|
|
value = 50
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "vpcs_per_region_us_west_2" {
|
|
provider = aws.us_west_2
|
|
quota_code = local.subnets_per_vpcs_quota
|
|
service_code = "vpc"
|
|
value = 50
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "spot_requests_per_region_us_east_1" {
|
|
provider = aws.us_east_2
|
|
quota_code = local.standard_spot_instance_requests_quota
|
|
service_code = "ec2"
|
|
value = 640
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "spot_requests_per_region_us_east_2" {
|
|
provider = aws.us_east_2
|
|
quota_code = local.standard_spot_instance_requests_quota
|
|
service_code = "ec2"
|
|
value = 640
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "spot_requests_per_region_us_west_1" {
|
|
provider = aws.us_west_1
|
|
quota_code = local.standard_spot_instance_requests_quota
|
|
service_code = "ec2"
|
|
value = 640
|
|
}
|
|
|
|
resource "aws_servicequotas_service_quota" "spot_requests_per_region_us_west_2" {
|
|
provider = aws.us_west_2
|
|
quota_code = local.standard_spot_instance_requests_quota
|
|
service_code = "ec2"
|
|
value = 640
|
|
}
|