From ce5a9c9151017ddcc7f9da8794104797db505260 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Tue, 7 Jun 2022 15:31:02 -0400 Subject: [PATCH 01/11] feat: Support arm64 lambda functions --- main.tf | 3 +++ modules/runner-binaries-syncer/runner-binaries-syncer.tf | 1 + modules/runner-binaries-syncer/variables.tf | 6 ++++++ modules/runners/scale-down.tf | 1 + modules/runners/scale-up.tf | 1 + modules/runners/variables.tf | 6 ++++++ modules/webhook/variables.tf | 6 ++++++ modules/webhook/webhook.tf | 1 + variables.tf | 6 ++++++ 9 files changed, 31 insertions(+) diff --git a/main.tf b/main.tf index f03dd0bad4..78ddc2fc59 100644 --- a/main.tf +++ b/main.tf @@ -103,6 +103,7 @@ module "webhook" { webhook_lambda_s3_key = var.webhook_lambda_s3_key webhook_lambda_s3_object_version = var.webhook_lambda_s3_object_version lambda_runtime = var.lambda_runtime + lambda_architecture = var.lambda_architecture lambda_zip = var.webhook_lambda_zip lambda_timeout = var.webhook_lambda_timeout logging_retention_in_days = var.logging_retention_in_days @@ -169,6 +170,7 @@ module "runners" { runners_lambda_s3_key = var.runners_lambda_s3_key runners_lambda_s3_object_version = var.runners_lambda_s3_object_version lambda_runtime = var.lambda_runtime + lambda_architecture = var.lambda_architecture lambda_zip = var.runners_lambda_zip lambda_timeout_scale_up = var.runners_scale_up_lambda_timeout lambda_timeout_scale_down = var.runners_scale_down_lambda_timeout @@ -229,6 +231,7 @@ module "runner_binaries" { syncer_lambda_s3_key = var.syncer_lambda_s3_key syncer_lambda_s3_object_version = var.syncer_lambda_s3_object_version lambda_runtime = var.lambda_runtime + lambda_architecture = var.lambda_architecture lambda_zip = var.runner_binaries_syncer_lambda_zip lambda_timeout = var.runner_binaries_syncer_lambda_timeout logging_retention_in_days = var.logging_retention_in_days diff --git a/modules/runner-binaries-syncer/runner-binaries-syncer.tf b/modules/runner-binaries-syncer/runner-binaries-syncer.tf index 3ea75b0750..af82c29e2f 100644 --- a/modules/runner-binaries-syncer/runner-binaries-syncer.tf +++ b/modules/runner-binaries-syncer/runner-binaries-syncer.tf @@ -19,6 +19,7 @@ resource "aws_lambda_function" "syncer" { runtime = var.lambda_runtime timeout = var.lambda_timeout memory_size = 256 + architectures = [var.lambda_architecture] environment { variables = { diff --git a/modules/runner-binaries-syncer/variables.tf b/modules/runner-binaries-syncer/variables.tf index 42a9d28be1..62771c6aeb 100644 --- a/modules/runner-binaries-syncer/variables.tf +++ b/modules/runner-binaries-syncer/variables.tf @@ -187,3 +187,9 @@ variable "lambda_runtime" { type = string default = "nodejs14.x" } + +variable "lambda_architecture" { + description = "AWS Lambda architecture." + type = string + default = "arm64" +} \ No newline at end of file diff --git a/modules/runners/scale-down.tf b/modules/runners/scale-down.tf index 3746c45aea..08181485c8 100644 --- a/modules/runners/scale-down.tf +++ b/modules/runners/scale-down.tf @@ -18,6 +18,7 @@ resource "aws_lambda_function" "scale_down" { timeout = var.lambda_timeout_scale_down tags = local.tags memory_size = 512 + architectures = [var.lambda_architecture] environment { variables = { diff --git a/modules/runners/scale-up.tf b/modules/runners/scale-up.tf index 85528656d3..534b7daa64 100644 --- a/modules/runners/scale-up.tf +++ b/modules/runners/scale-up.tf @@ -12,6 +12,7 @@ resource "aws_lambda_function" "scale_up" { reserved_concurrent_executions = var.scale_up_reserved_concurrent_executions memory_size = 512 tags = local.tags + architectures = [var.lambda_architecture] environment { variables = { diff --git a/modules/runners/variables.tf b/modules/runners/variables.tf index 093a5e4b1d..b8b54b96b7 100644 --- a/modules/runners/variables.tf +++ b/modules/runners/variables.tf @@ -551,3 +551,9 @@ variable "lambda_runtime" { type = string default = "nodejs14.x" } + +variable "lambda_architecture" { + description = "AWS Lambda architecture." + type = string + default = "arm64" +} \ No newline at end of file diff --git a/modules/webhook/variables.tf b/modules/webhook/variables.tf index 1bb237408a..9aba886a1e 100644 --- a/modules/webhook/variables.tf +++ b/modules/webhook/variables.tf @@ -162,3 +162,9 @@ variable "lambda_runtime" { type = string default = "nodejs14.x" } + +variable "lambda_architecture" { + description = "AWS Lambda architecture." + type = string + default = "arm64" +} \ No newline at end of file diff --git a/modules/webhook/webhook.tf b/modules/webhook/webhook.tf index 003d02e455..ac9939a1f5 100644 --- a/modules/webhook/webhook.tf +++ b/modules/webhook/webhook.tf @@ -9,6 +9,7 @@ resource "aws_lambda_function" "webhook" { handler = "index.githubWebhook" runtime = var.lambda_runtime timeout = var.lambda_timeout + architectures = [var.lambda_architecture] environment { variables = { diff --git a/variables.tf b/variables.tf index 9148d0e323..dc29c01694 100644 --- a/variables.tf +++ b/variables.tf @@ -641,3 +641,9 @@ variable "lambda_runtime" { type = string default = "nodejs14.x" } + +variable "lambda_architecture" { + description = "AWS Lambda architecture." + type = string + default = "arm64" +} \ No newline at end of file From 5869432671570fc79f0526747d9de50a258870a5 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Tue, 7 Jun 2022 15:50:00 -0400 Subject: [PATCH 02/11] chore: Default to existing behavior, update readme --- README.md | 1 + modules/runner-binaries-syncer/variables.tf | 2 +- modules/runners/variables.tf | 2 +- modules/webhook/variables.tf | 2 +- variables.tf | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4faefc306f..88517937d3 100644 --- a/README.md +++ b/README.md @@ -428,6 +428,7 @@ In case the setup does not work as intended follow the trace of events: | [kms\_key\_arn](#input\_kms\_key\_arn) | Optional CMK Key ARN to be used for Parameter Store. This key must be in the current account. | `string` | `null` | no | | [lambda\_principals](#input\_lambda\_principals) | (Optional) add extra principals to the role created for execution of the lambda, e.g. for local testing. |
list(object({
type = string
identifiers = list(string)
}))
| `[]` | no | | [lambda\_runtime](#input\_lambda\_runtime) | AWS Lambda runtime. | `string` | `"nodejs14.x"` | no | +| [lambda\_architecture](#input\_lambda\_architecture) | AWS Lambda architecture. | `string` | `"x86_64"` | no | | [lambda\_s3\_bucket](#input\_lambda\_s3\_bucket) | S3 bucket from which to specify lambda functions. This is an alternative to providing local files directly. | `any` | `null` | no | | [lambda\_security\_group\_ids](#input\_lambda\_security\_group\_ids) | List of security group IDs associated with the Lambda function. | `list(string)` | `[]` | no | | [lambda\_subnet\_ids](#input\_lambda\_subnet\_ids) | List of subnets in which the action runners will be launched, the subnets needs to be subnets in the `vpc_id`. | `list(string)` | `[]` | no | diff --git a/modules/runner-binaries-syncer/variables.tf b/modules/runner-binaries-syncer/variables.tf index 62771c6aeb..7ac1177682 100644 --- a/modules/runner-binaries-syncer/variables.tf +++ b/modules/runner-binaries-syncer/variables.tf @@ -191,5 +191,5 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture." type = string - default = "arm64" + default = "x86_64" } \ No newline at end of file diff --git a/modules/runners/variables.tf b/modules/runners/variables.tf index b8b54b96b7..2833be4876 100644 --- a/modules/runners/variables.tf +++ b/modules/runners/variables.tf @@ -555,5 +555,5 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture." type = string - default = "arm64" + default = "x86_64" } \ No newline at end of file diff --git a/modules/webhook/variables.tf b/modules/webhook/variables.tf index 9aba886a1e..77c931b13e 100644 --- a/modules/webhook/variables.tf +++ b/modules/webhook/variables.tf @@ -166,5 +166,5 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture." type = string - default = "arm64" + default = "x86_64" } \ No newline at end of file diff --git a/variables.tf b/variables.tf index dc29c01694..cb6d9eb4ef 100644 --- a/variables.tf +++ b/variables.tf @@ -645,5 +645,5 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture." type = string - default = "arm64" + default = "x86_64" } \ No newline at end of file From ce2c80cb6ce3aa0196906777d80e736383351487 Mon Sep 17 00:00:00 2001 From: Dylan Taylor Date: Wed, 8 Jun 2022 08:59:14 -0400 Subject: [PATCH 03/11] chore: terraform fmt, add validation to lambda architecture, update description --- main.tf | 2 +- modules/runner-binaries-syncer/variables.tf | 8 ++++++-- modules/runners/variables.tf | 8 ++++++-- modules/webhook/variables.tf | 8 ++++++-- variables.tf | 8 ++++++-- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/main.tf b/main.tf index 78ddc2fc59..3fa6f4baa8 100644 --- a/main.tf +++ b/main.tf @@ -231,7 +231,7 @@ module "runner_binaries" { syncer_lambda_s3_key = var.syncer_lambda_s3_key syncer_lambda_s3_object_version = var.syncer_lambda_s3_object_version lambda_runtime = var.lambda_runtime - lambda_architecture = var.lambda_architecture + lambda_architecture = var.lambda_architecture lambda_zip = var.runner_binaries_syncer_lambda_zip lambda_timeout = var.runner_binaries_syncer_lambda_timeout logging_retention_in_days = var.logging_retention_in_days diff --git a/modules/runner-binaries-syncer/variables.tf b/modules/runner-binaries-syncer/variables.tf index 7ac1177682..9154978e10 100644 --- a/modules/runner-binaries-syncer/variables.tf +++ b/modules/runner-binaries-syncer/variables.tf @@ -189,7 +189,11 @@ variable "lambda_runtime" { } variable "lambda_architecture" { - description = "AWS Lambda architecture." + description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "x86_64" + default = "arm64" + validation { + condition = contains(["arm64", "x86_64"], var.lambda_architecture) + error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`." + } } \ No newline at end of file diff --git a/modules/runners/variables.tf b/modules/runners/variables.tf index 2833be4876..d44346366b 100644 --- a/modules/runners/variables.tf +++ b/modules/runners/variables.tf @@ -553,7 +553,11 @@ variable "lambda_runtime" { } variable "lambda_architecture" { - description = "AWS Lambda architecture." + description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "x86_64" + default = "arm64" + validation { + condition = contains(["arm64", "x86_64"], var.lambda_architecture) + error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`." + } } \ No newline at end of file diff --git a/modules/webhook/variables.tf b/modules/webhook/variables.tf index 77c931b13e..f4ea1401f7 100644 --- a/modules/webhook/variables.tf +++ b/modules/webhook/variables.tf @@ -164,7 +164,11 @@ variable "lambda_runtime" { } variable "lambda_architecture" { - description = "AWS Lambda architecture." + description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "x86_64" + default = "arm64" + validation { + condition = contains(["arm64", "x86_64"], var.lambda_architecture) + error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`." + } } \ No newline at end of file diff --git a/variables.tf b/variables.tf index cb6d9eb4ef..4cefe08277 100644 --- a/variables.tf +++ b/variables.tf @@ -643,7 +643,11 @@ variable "lambda_runtime" { } variable "lambda_architecture" { - description = "AWS Lambda architecture." + description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "x86_64" + default = "arm64" + validation { + condition = contains(["arm64", "x86_64"], var.lambda_architecture) + error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`." + } } \ No newline at end of file From c4a1f287527db744ff88c77cc3784f14797a0374 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Thu, 9 Jun 2022 08:05:46 -0400 Subject: [PATCH 04/11] feat: Add arm64 support to pool lambda --- modules/runners/pool.tf | 1 + modules/runners/pool/main.tf | 1 + modules/runners/pool/variables.tf | 1 + 3 files changed, 3 insertions(+) diff --git a/modules/runners/pool.tf b/modules/runners/pool.tf index 53c70491fa..5200b114e4 100644 --- a/modules/runners/pool.tf +++ b/modules/runners/pool.tf @@ -26,6 +26,7 @@ module "pool" { s3_object_version = var.runners_lambda_s3_object_version security_group_ids = var.lambda_security_group_ids subnet_ids = var.lambda_subnet_ids + architecture = var.lambda_architecture runtime = var.lambda_runtime timeout = var.pool_lambda_timeout zip = local.lambda_zip diff --git a/modules/runners/pool/main.tf b/modules/runners/pool/main.tf index be9970b200..93244eeccc 100644 --- a/modules/runners/pool/main.tf +++ b/modules/runners/pool/main.tf @@ -8,6 +8,7 @@ resource "aws_lambda_function" "pool" { function_name = "${var.config.prefix}-pool" role = aws_iam_role.pool.arn handler = "index.adjustPool" + lambda_architecture = var.config.lambda_architecture runtime = var.config.lambda.runtime timeout = var.config.lambda.timeout reserved_concurrent_executions = var.config.lambda.reserved_concurrent_executions diff --git a/modules/runners/pool/variables.tf b/modules/runners/pool/variables.tf index e6b69221d3..064da4a70c 100644 --- a/modules/runners/pool/variables.tf +++ b/modules/runners/pool/variables.tf @@ -11,6 +11,7 @@ variable "config" { s3_object_version = string security_group_ids = list(string) runtime = string + architecture = string timeout = number zip = string subnet_ids = list(string) From 91a78d9f7b4d1966be49ff2864e7b61588e6951a Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Thu, 9 Jun 2022 08:10:39 -0400 Subject: [PATCH 05/11] fix: Wrong variable name in the lambda function --- modules/runners/pool/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/runners/pool/main.tf b/modules/runners/pool/main.tf index 93244eeccc..167ce4c65f 100644 --- a/modules/runners/pool/main.tf +++ b/modules/runners/pool/main.tf @@ -8,7 +8,7 @@ resource "aws_lambda_function" "pool" { function_name = "${var.config.prefix}-pool" role = aws_iam_role.pool.arn handler = "index.adjustPool" - lambda_architecture = var.config.lambda_architecture + architectures = [var.lambda_architecture] runtime = var.config.lambda.runtime timeout = var.config.lambda.timeout reserved_concurrent_executions = var.config.lambda.reserved_concurrent_executions From cd00282a1116a8885fa202d1bcf9c556c58fc8c4 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Thu, 9 Jun 2022 08:11:31 -0400 Subject: [PATCH 06/11] fix: var.config.lambda_architecture instead of var.lambda_architecture in lambda pool --- modules/runners/pool/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/runners/pool/main.tf b/modules/runners/pool/main.tf index 167ce4c65f..fca11aacf3 100644 --- a/modules/runners/pool/main.tf +++ b/modules/runners/pool/main.tf @@ -8,7 +8,7 @@ resource "aws_lambda_function" "pool" { function_name = "${var.config.prefix}-pool" role = aws_iam_role.pool.arn handler = "index.adjustPool" - architectures = [var.lambda_architecture] + architectures = [var.config.lambda_architecture] runtime = var.config.lambda.runtime timeout = var.config.lambda.timeout reserved_concurrent_executions = var.config.lambda.reserved_concurrent_executions From 279a07126be56db23fa2603920f74b8b0058037e Mon Sep 17 00:00:00 2001 From: Dylan Taylor Date: Fri, 10 Jun 2022 08:39:02 -0400 Subject: [PATCH 07/11] fix: It should have been lambda.architecture not lambda_architecture. --- modules/runners/pool/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/runners/pool/main.tf b/modules/runners/pool/main.tf index fca11aacf3..e0d0fb9976 100644 --- a/modules/runners/pool/main.tf +++ b/modules/runners/pool/main.tf @@ -8,7 +8,7 @@ resource "aws_lambda_function" "pool" { function_name = "${var.config.prefix}-pool" role = aws_iam_role.pool.arn handler = "index.adjustPool" - architectures = [var.config.lambda_architecture] + architectures = [var.config.lambda.architecture] runtime = var.config.lambda.runtime timeout = var.config.lambda.timeout reserved_concurrent_executions = var.config.lambda.reserved_concurrent_executions From dc33fd570c7a8a6d864577896e94076b29810a33 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Fri, 10 Jun 2022 08:40:27 -0400 Subject: [PATCH 08/11] chore: Change default to x86_64 Co-authored-by: Niek Palm --- variables.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variables.tf b/variables.tf index 4cefe08277..e3d83c435b 100644 --- a/variables.tf +++ b/variables.tf @@ -645,7 +645,7 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "arm64" + default = "x86_64" validation { condition = contains(["arm64", "x86_64"], var.lambda_architecture) error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`." From ff9aeac7a5eac576d3789101003002baf29b31f1 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Fri, 10 Jun 2022 08:40:34 -0400 Subject: [PATCH 09/11] chore: Change default to x86_64 Co-authored-by: Niek Palm --- modules/webhook/variables.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/webhook/variables.tf b/modules/webhook/variables.tf index f4ea1401f7..4fbb825c1a 100644 --- a/modules/webhook/variables.tf +++ b/modules/webhook/variables.tf @@ -166,7 +166,7 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "arm64" + default = "x86_64" validation { condition = contains(["arm64", "x86_64"], var.lambda_architecture) error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`." From abdd682e0e97200aa3fd388f247e7854a22d9a0e Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Fri, 10 Jun 2022 08:40:41 -0400 Subject: [PATCH 10/11] chore: Change default to x86_64 Co-authored-by: Niek Palm --- modules/runners/variables.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/runners/variables.tf b/modules/runners/variables.tf index d44346366b..1b7d264610 100644 --- a/modules/runners/variables.tf +++ b/modules/runners/variables.tf @@ -555,7 +555,7 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "arm64" + default = "x86_64" validation { condition = contains(["arm64", "x86_64"], var.lambda_architecture) error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`." From fdcaa53213eae9b77a4a0088233a4008e841d5f5 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Fri, 10 Jun 2022 08:40:47 -0400 Subject: [PATCH 11/11] chore: Change default to x86_64 Co-authored-by: Niek Palm --- modules/runner-binaries-syncer/variables.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/runner-binaries-syncer/variables.tf b/modules/runner-binaries-syncer/variables.tf index 9154978e10..05841a43bf 100644 --- a/modules/runner-binaries-syncer/variables.tf +++ b/modules/runner-binaries-syncer/variables.tf @@ -191,7 +191,7 @@ variable "lambda_runtime" { variable "lambda_architecture" { description = "AWS Lambda architecture. Lambda functions using Graviton processors ('arm64') tend to have better price/performance than 'x86_64' functions. " type = string - default = "arm64" + default = "x86_64" validation { condition = contains(["arm64", "x86_64"], var.lambda_architecture) error_message = "`lambda_architecture` value is not valid, valid values are: `arm64` and `x86_64`."