20270: Splits hosts into public & private, saving on public IPs requirements.
authorLucas Di Pentima <lucas.dipentima@curii.com>
Mon, 27 Mar 2023 17:15:02 +0000 (14:15 -0300)
committerLucas Di Pentima <lucas.dipentima@curii.com>
Mon, 27 Mar 2023 17:15:02 +0000 (14:15 -0300)
Also, asks for less number of instances: there's no need to multiple keepstore
nodes, and keep-web can be run on the same node as workbench.
This makes the basic default cluster to go from 6 to 4 nodes.

Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas.dipentima@curii.com>

tools/salt-install/terraform/aws/services/locals.tf
tools/salt-install/terraform/aws/services/main.tf
tools/salt-install/terraform/aws/vpc/locals.tf
tools/salt-install/terraform/aws/vpc/main.tf
tools/salt-install/terraform/aws/vpc/outputs.tf

index 6a81967cf1eb5c1174c2ba623f4e82af7537ea1e..523954ce3a53d75d42f8586998cdc600b2e3068e 100644 (file)
@@ -10,6 +10,7 @@ locals {
   private_ip = data.terraform_remote_state.vpc.outputs.private_ip
   pubkey_path = pathexpand(var.pubkey_path)
   pubkey_name = "arvados-deployer-key"
-  hostnames = [ for hostname, eip_id in data.terraform_remote_state.vpc.outputs.eip_id: hostname ]
+  public_hosts = data.terraform_remote_state.vpc.outputs.public_hosts
+  private_hosts = data.terraform_remote_state.vpc.outputs.private_hosts
   ssl_password_secret_name = "${local.cluster_name}-${var.ssl_password_secret_name_suffix}"
 }
index 9c27b9726cc7507b4827fc5646f3a746564be710..457aabc314f56b09e6afce27ffec15da52652ef1 100644 (file)
@@ -44,7 +44,7 @@ resource "aws_iam_instance_profile" "default_instance_profile" {
 }
 
 resource "aws_instance" "arvados_service" {
-  for_each = toset(local.hostnames)
+  for_each = toset(concat(local.public_hosts, local.private_hosts))
   ami = data.aws_ami.debian-11.image_id
   instance_type = var.default_instance_type
   key_name = local.pubkey_name
@@ -107,7 +107,7 @@ resource "aws_iam_policy_attachment" "cloud_dispatcher_ec2_access_attachment" {
 }
 
 resource "aws_eip_association" "eip_assoc" {
-  for_each = toset(local.hostnames)
+  for_each = toset(local.public_hosts)
   instance_id = aws_instance.arvados_service[each.value].id
   allocation_id = data.terraform_remote_state.vpc.outputs.eip_id[each.value]
 }
index 8338aec7ca2adcf77d52290f7a0788d061fe29b5..ed02fb85a75a03fcdf51ad79be5f2b624915bd47 100644 (file)
@@ -9,21 +9,19 @@ locals {
     ssh: "22",
   }
   availability_zone = data.aws_availability_zones.available.names[0]
-  hostnames = [ "controller", "workbench", "keep0", "keep1", "keepproxy", "shell" ]
+  public_hosts = [ "controller", "workbench" ]
+  private_hosts = [ "keep0", "shell" ]
   arvados_dns_zone = "${var.cluster_name}.${var.domain_name}"
   public_ip = { for k, v in aws_eip.arvados_eip: k => v.public_ip }
   private_ip = {
     "controller": "10.1.1.11",
     "workbench": "10.1.1.15",
-    "keepproxy": "10.1.1.12",
     "shell": "10.1.1.17",
     "keep0": "10.1.1.13",
-    "keep1": "10.1.1.14"
   }
   aliases = {
     controller: ["ws"]
-    workbench: ["workbench2", "webshell"]
-    keepproxy: ["keep", "download", "*.collections"]
+    workbench: ["workbench2", "webshell", "keep", "download", "*.collections"]
   }
   cname_by_host = flatten([
     for host, aliases in local.aliases : [
index 6e21139241ab5c78f9a2b617bccbadc5c2a05902..94d245c3d618254154b985744d0e30fb0c2e7563 100644 (file)
@@ -58,7 +58,7 @@ resource "aws_internet_gateway" "arvados_gw" {
   vpc_id = aws_vpc.arvados_vpc.id
 }
 resource "aws_eip" "arvados_eip" {
-  for_each = toset(local.hostnames)
+  for_each = toset(local.public_hosts)
   depends_on = [
     aws_internet_gateway.arvados_gw
   ]
index dd58ca70083eff88db2e2a5ef997844eae7480ee..9fe16358bea09c3a39a93c1abcacb41e401c25bd 100644 (file)
@@ -29,10 +29,18 @@ output "public_ip" {
   value = local.public_ip
 }
 
+output "public_hosts" {
+  value = local.public_hosts
+}
+
 output "private_ip" {
   value = local.private_ip
 }
 
+output "private_hosts" {
+  value = local.private_hosts
+}
+
 output "route53_dns_ns" {
   value = aws_route53_zone.public_zone.name_servers
 }