Skip to content

Commit 534ec93

Browse files
Merge pull request #19 from depot/subnets
Support multiple subnets
2 parents fb19245 + dcf3519 commit 534ec93

File tree

2 files changed

+18
-26
lines changed

2 files changed

+18
-26
lines changed

Diff for: main.tf

+12-20
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ locals {
1414

1515
resource "aws_vpc" "vpc" {
1616
count = var.create ? 1 : 0
17-
cidr_block = "${var.vpc-cidr-prefix}.0.0/16"
17+
cidr_block = var.cidr-block
1818
tags = merge(var.tags, { Name = "depot-connection-${var.connection-id}" })
1919
}
2020

@@ -38,17 +38,17 @@ resource "aws_route" "public-internet-gateway" {
3838
}
3939

4040
resource "aws_subnet" "public" {
41-
count = var.create ? 1 : 0
41+
count = var.create ? length(var.subnets) : 0
4242
vpc_id = aws_vpc.vpc[0].id
43-
availability_zone = var.availability-zone
44-
cidr_block = "${var.vpc-cidr-prefix}.0.0/16"
43+
availability_zone = var.subnets[count.index].availability-zone
44+
cidr_block = var.subnets[count.index].cidr-block
4545
map_public_ip_on_launch = true
46-
tags = merge(var.tags, { "Name" = "depot-connection-${var.connection-id}" })
46+
tags = merge(var.tags, { "Name" = "depot-${var.connection-id}-${var.subnets[count.index].availability-zone}" })
4747
}
4848

4949
resource "aws_route_table_association" "public" {
50-
count = var.create ? 1 : 0
51-
subnet_id = aws_subnet.public[0].id
50+
count = var.create ? length(var.subnets) : 0
51+
subnet_id = aws_subnet.public[count.index].id
5252
route_table_id = aws_route_table.public[0].id
5353
}
5454

@@ -170,10 +170,6 @@ resource "aws_launch_template" "x86" {
170170
subnet_id = aws_subnet.public[0].id
171171
}
172172

173-
placement {
174-
availability_zone = var.availability-zone
175-
}
176-
177173
tag_specifications {
178174
resource_type = "instance"
179175
tags = merge(var.tags, { "depot-connection" = var.connection-id })
@@ -211,10 +207,6 @@ resource "aws_launch_template" "arm" {
211207
subnet_id = aws_subnet.public[0].id
212208
}
213209

214-
placement {
215-
availability_zone = var.availability-zone
216-
}
217-
218210
tag_specifications {
219211
resource_type = "instance"
220212
tags = merge(var.tags, { "depot-connection" = var.connection-id })
@@ -311,16 +303,15 @@ resource "aws_iam_role" "cloud-agent" {
311303
{
312304
Action = ["ec2:RunInstances"]
313305
Effect = "Allow"
314-
Resource = [
306+
Resource = concat([
315307
aws_launch_template.arm[0].arn,
316308
aws_launch_template.x86[0].arn,
317309
aws_security_group.instance-buildkit[0].arn,
318310
aws_security_group.instance-default[0].arn,
319-
aws_subnet.public[0].arn,
320311
"arn:aws:ec2:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:network-interface/*",
321312
"arn:aws:ec2:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:volume/*",
322313
"arn:aws:ec2:${data.aws_region.current.name}::image/*",
323-
]
314+
], [for s in aws_subnet.public : s.arn])
324315
},
325316

326317
{
@@ -413,12 +404,13 @@ resource "aws_ecs_task_definition" "cloud-agent" {
413404
essential = true
414405
environment = concat(
415406
[
416-
{ name = "CLOUD_AGENT_AWS_AVAILABILITY_ZONE", value = var.availability-zone },
407+
{ name = "CLOUD_AGENT_AWS_AVAILABILITY_ZONE", value = var.subnets[0].availability-zone },
417408
{ name = "CLOUD_AGENT_AWS_LAUNCH_TEMPLATE_ARM", value = aws_launch_template.arm[0].id },
418409
{ name = "CLOUD_AGENT_AWS_LAUNCH_TEMPLATE_X86", value = aws_launch_template.x86[0].id },
419410
{ name = "CLOUD_AGENT_AWS_SG_BUILDKIT", value = aws_security_group.instance-buildkit[0].id },
420411
{ name = "CLOUD_AGENT_AWS_SG_DEFAULT", value = aws_security_group.instance-default[0].id },
421412
{ name = "CLOUD_AGENT_AWS_SUBNET_ID", value = aws_subnet.public[0].id },
413+
{ name = "CLOUD_AGENT_AWS_SUBNETS", value = jsonencode(aws_subnet.public) },
422414
{ name = "CLOUD_AGENT_CLUSTER_ARN", value = aws_ecs_cluster.cloud-agent[0].arn },
423415
{ name = "CLOUD_AGENT_CONNECTION_ID", value = var.connection-id },
424416
{ name = "CLOUD_AGENT_SERVICE_NAME", value = local.service-name },
@@ -456,7 +448,7 @@ resource "aws_ecs_service" "cloud-agent" {
456448

457449
network_configuration {
458450
security_groups = [aws_security_group.cloud-agent[0].id]
459-
subnets = [aws_subnet.public[0].id]
451+
subnets = [for s in aws_subnet.public : s.id]
460452
assign_public_ip = true
461453
}
462454

Diff for: variables.tf

+6-6
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ variable "connection-token" {
1111
sensitive = true
1212
}
1313

14-
variable "availability-zone" {
15-
type = string
16-
description = "Availability zone to use for the builder instances"
14+
variable "subnets" {
15+
type = list(object({ availability-zone = string, cidr-block = string }))
16+
description = "Subnets to use for the VPC"
1717
}
1818

1919
// Optional
@@ -48,10 +48,10 @@ variable "instance-types" {
4848
default = { x86 = "c6i.xlarge", arm = "c6g.xlarge" }
4949
}
5050

51-
variable "vpc-cidr-prefix" {
51+
variable "cidr-block" {
5252
type = string
53-
description = "VPC CIDR prefix"
54-
default = "10.0"
53+
description = "VPC CIDR block"
54+
default = "10.0.0.0/16"
5555
}
5656

5757
variable "allow-ssm-access" {

0 commit comments

Comments
 (0)