From a416d1e04dd0a0b53bb562a2f4f5cfc371b3a04d Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Wed, 28 Jan 2026 19:32:36 +0000 Subject: [PATCH 01/27] chore: rm watch-lambda-autoscale --- justfile | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/justfile b/justfile index 87c7bbb1..719bbebe 100644 --- a/justfile +++ b/justfile @@ -372,37 +372,3 @@ lambda-prune: aws lambda delete-function --function-name "$FUNCTION_NAME" --qualifier "$v" --region "$AWS_REGION" done -watch-lambda-autoscale: - #!/usr/bin/env bash - set -euo pipefail - DURATION=180 - CONCURRENCY=20 - URL=https://slt6v1u8n4.execute-api.eu-west-2.amazonaws.com - - END_TIME=$(( $(date +%s) + $DURATION )) - - echo "🚀 Lambda autoscaling test" - echo " URL: $URL" - echo " Duration: $DURATION seconds" - echo " Concurrency: $CONCURRENCY" - echo - - while [[ $(date +%s) -lt "$END_TIME" ]]; do - seq 1 $CONCURRENCY \ - | xargs -n1 -P $CONCURRENCY -I{} \ - curl -s "$URL/" \ - | jq -r '.env_id' - done \ - | sort \ - | uniq -c - - echo - echo "🧊 Distinct Lambda environments:" - while [[ $(date +%s) -lt "$END_TIME" ]]; do - seq 1 $CONCURRENCY \ - | xargs -n1 -P $CONCURRENCY -I{} \ - curl -s "$URL/" \ - | jq -r '.env_id' - done \ - | sort \ - | uniq From a85d0193d1ef9053c812046e325022822798a5e8 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Wed, 28 Jan 2026 19:36:19 +0000 Subject: [PATCH 02/27] debug: make the deployment fail --- justfile | 18 ++++++++++++++++++ lambdas/api/lambda_handler.py | 20 +++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index 719bbebe..e04c6c7d 100644 --- a/justfile +++ b/justfile @@ -372,3 +372,21 @@ lambda-prune: aws lambda delete-function --function-name "$FUNCTION_NAME" --qualifier "$v" --region "$AWS_REGION" done +test-api-deploy-500s: + #!/usr/bin/env bash + set -euo pipefail + + if [[ -z "$API_URL" ]]; then + echo "❌ API_URL environment variable is not set." + exit 1 + fi + + echo "Sending requests to $API_URL to trigger 500 errors..." + + for i in {1..90}; do + RESPONSE_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$API_URL/trigger-500") + echo "Request $i: Received HTTP status code $RESPONSE_CODE" + sleep 1 + done + + echo "Finished sending requests." \ No newline at end of file diff --git a/lambdas/api/lambda_handler.py b/lambdas/api/lambda_handler.py index 65528d54..ba6b54e5 100644 --- a/lambdas/api/lambda_handler.py +++ b/lambdas/api/lambda_handler.py @@ -3,12 +3,12 @@ import uuid import time -# Runs once per execution environment (cold start) ENV_ID = str(uuid.uuid4())[:8] BOOT_TIME_MS = int(time.time() * 1000) DEBUG_DELAY_MS = int(os.getenv("DEBUG_DELAY_MS", "0")) + def lambda_handler(event, context): print("Received event:", json.dumps(event)) @@ -16,6 +16,24 @@ def lambda_handler(event, context): if DEBUG_DELAY_MS > 0: time.sleep(DEBUG_DELAY_MS / 1000.0) + # --- Error endpoint: /fail or /error returns 500 --- + path = event.get("rawPath") or event.get("path") or "" + if path in ("/fail", "/error", "/health/fail"): + error_body = { + "message": "Forced failure for testing", + "env_id": ENV_ID, + "request_id": context.aws_request_id, + } + return { + "statusCode": 500, + "headers": { + "Content-Type": "application/json", + "X-Env-Id": ENV_ID, + }, + "body": json.dumps(error_body), + } + + # Normal success response body = { "message": "Hello from Lambda!", "env_id": ENV_ID, From 90becceb0d7a77ad2ad0f289fea4b3c867866d3c Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Wed, 28 Jan 2026 19:37:07 +0000 Subject: [PATCH 03/27] feat: 500s alarm added to api --- infra/modules/aws/_shared/lambda/main.tf | 8 +++ infra/modules/aws/_shared/lambda/variables.tf | 6 +++ infra/modules/aws/api/local.tf | 4 ++ infra/modules/aws/api/main.tf | 50 ++++++++++++++++++- infra/modules/aws/consumer/local.tf | 3 ++ infra/modules/aws/consumer/main.tf | 32 +++++++++++- 6 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 infra/modules/aws/api/local.tf create mode 100644 infra/modules/aws/consumer/local.tf diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index 44d5f246..6ae1a0c0 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -148,6 +148,14 @@ resource "aws_codedeploy_deployment_group" "dg" { enabled = true events = ["DEPLOYMENT_FAILURE", "DEPLOYMENT_STOP_ON_ALARM"] } + + dynamic "alarm_configuration" { + for_each = length(var.codedeploy_alarm_names) > 0 ? [1] : [] + content { + enabled = true + alarms = var.codedeploy_alarm_names + } + } } resource "aws_appautoscaling_target" "pc_target" { diff --git a/infra/modules/aws/_shared/lambda/variables.tf b/infra/modules/aws/_shared/lambda/variables.tf index ada04226..96a2aec1 100644 --- a/infra/modules/aws/_shared/lambda/variables.tf +++ b/infra/modules/aws/_shared/lambda/variables.tf @@ -42,6 +42,12 @@ variable "additional_policy_arns" { default = [] } +variable "codedeploy_alarm_names" { + description = "Optional list of CloudWatch alarm names that trigger CodeDeploy rollback" + type = list(string) + default = [] +} + variable "deployment_config" { description = "Traffic shifting: all_at_once | canary | linear" type = object({ diff --git a/infra/modules/aws/api/local.tf b/infra/modules/aws/api/local.tf new file mode 100644 index 00000000..41647f05 --- /dev/null +++ b/infra/modules/aws/api/local.tf @@ -0,0 +1,4 @@ +locals { + lambda_name = "${var.environment}-${var.project_name}-api" + api_5xx_alarm_name = "${local.lambda_name}-api-v2-5xx-rate-critical" +} \ No newline at end of file diff --git a/infra/modules/aws/api/main.tf b/infra/modules/aws/api/main.tf index fd76eff9..09af6ecb 100644 --- a/infra/modules/aws/api/main.tf +++ b/infra/modules/aws/api/main.tf @@ -5,7 +5,7 @@ module "lambda_api" { environment = var.environment lambda_bucket = var.lambda_bucket - lambda_name = "api" + lambda_name = local.lambda_name environment_variables = { DEBUG_DELAY_MS = 500 @@ -14,6 +14,9 @@ module "lambda_api" { deployment_config = { strategy = "all_at_once" } + codedeploy_alarm_names = [ + local.api_5xx_alarm_name + ] provisioned_config = { fixed = 0 # cold starts only @@ -74,3 +77,48 @@ resource "aws_lambda_permission" "allow_invoke" { principal = "apigateway.amazonaws.com" source_arn = "${aws_apigatewayv2_api.http_api.execution_arn}/*/*" # all routes/stages } + +resource "aws_cloudwatch_metric_alarm" "api_5xx_rate" { + alarm_name = local.api_5xx_alarm_name + alarm_description = "HTTP API (v2) 5xx error rate > 0.5% for 1 minute" + comparison_operator = "GreaterThanThreshold" + threshold = 0.5 + evaluation_periods = 1 + datapoints_to_alarm = 1 + treat_missing_data = "notBreaching" + actions_enabled = true + + metric_query { + id = "e" + expression = "(m5xx / mcount) * 100" + label = "5xxErrorRate" + return_data = true + } + + metric_query { + id = "m5xx" + metric { + namespace = "AWS/ApiGateway" + metric_name = "5XXError" + period = 60 + stat = "Sum" + dimensions = { + ApiId = aws_apigatewayv2_api.http_api.id + } + } + } + + metric_query { + id = "mcount" + metric { + namespace = "AWS/ApiGateway" + metric_name = "Count" + period = 60 + stat = "Sum" + dimensions = { + ApiId = aws_apigatewayv2_api.http_api.id + } + } + } +} + diff --git a/infra/modules/aws/consumer/local.tf b/infra/modules/aws/consumer/local.tf new file mode 100644 index 00000000..06fbba58 --- /dev/null +++ b/infra/modules/aws/consumer/local.tf @@ -0,0 +1,3 @@ +locals { + lambda_name = "${var.environment}-${var.project_name}-consumer" +} \ No newline at end of file diff --git a/infra/modules/aws/consumer/main.tf b/infra/modules/aws/consumer/main.tf index 9a4fb84e..e96c686e 100644 --- a/infra/modules/aws/consumer/main.tf +++ b/infra/modules/aws/consumer/main.tf @@ -5,7 +5,7 @@ module "lambda_consumer" { environment = var.environment lambda_bucket = var.lambda_bucket - lambda_name = "consumer" + lambda_name = local.lambda_name additional_policy_arns = [ module.sqs_queue.sqs_queue_read_policy_arn @@ -36,6 +36,8 @@ module "lambda_consumer" { # } } +configure a deadletter queue (DLQ) for the SQS queue used by the Lambda consumer + module "sqs_queue" { source = "../_shared/sqs" @@ -50,4 +52,30 @@ resource "aws_lambda_event_source_mapping" "sqs" { maximum_batching_window_in_seconds = 10 function_response_types = ["ReportBatchItemFailures"] -} \ No newline at end of file +} + +resource "aws_cloudwatch_metric_alarm" "dlq_msg_count" { + alarm_name = "${local.lambda_name}-${aws_lambda_event_source_mapping.sqs.}-dlq-msg-count" + alarm_description = "Alert when DLQ ${var.dlq_queue_name} has any visible messages" + namespace = "AWS/SQS" + metric_name = "ApproximateNumberOfMessagesVisible" + statistic = "Sum" + period = 60 + evaluation_periods = 1 + datapoints_to_alarm = 1 + comparison_operator = "GreaterThanThreshold" + threshold = 0.5 + treat_missing_data = "notBreaching" + + dimensions = { + QueueName = var.dlq_queue_name + } + + # optional SNS notification + dynamic "alarm_actions" { + for_each = var.dlq_alert_sns_arn != "" ? [1] : [] + content { + alarm_actions = [var.dlq_alert_sns_arn] + } + } +} From 8661750252204de8ba43aad2d1de7a02b8fc3d29 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Wed, 28 Jan 2026 19:40:29 +0000 Subject: [PATCH 04/27] chore: note to add DLQ --- infra/modules/aws/consumer/main.tf | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/infra/modules/aws/consumer/main.tf b/infra/modules/aws/consumer/main.tf index e96c686e..6aa26b0c 100644 --- a/infra/modules/aws/consumer/main.tf +++ b/infra/modules/aws/consumer/main.tf @@ -36,7 +36,7 @@ module "lambda_consumer" { # } } -configure a deadletter queue (DLQ) for the SQS queue used by the Lambda consumer +# configure a deadletter queue (DLQ) for the SQS queue used by the Lambda consumer module "sqs_queue" { source = "../_shared/sqs" @@ -53,29 +53,3 @@ resource "aws_lambda_event_source_mapping" "sqs" { function_response_types = ["ReportBatchItemFailures"] } - -resource "aws_cloudwatch_metric_alarm" "dlq_msg_count" { - alarm_name = "${local.lambda_name}-${aws_lambda_event_source_mapping.sqs.}-dlq-msg-count" - alarm_description = "Alert when DLQ ${var.dlq_queue_name} has any visible messages" - namespace = "AWS/SQS" - metric_name = "ApproximateNumberOfMessagesVisible" - statistic = "Sum" - period = 60 - evaluation_periods = 1 - datapoints_to_alarm = 1 - comparison_operator = "GreaterThanThreshold" - threshold = 0.5 - treat_missing_data = "notBreaching" - - dimensions = { - QueueName = var.dlq_queue_name - } - - # optional SNS notification - dynamic "alarm_actions" { - for_each = var.dlq_alert_sns_arn != "" ? [1] : [] - content { - alarm_actions = [var.dlq_alert_sns_arn] - } - } -} From 49476568168ad9a4612ef0d5244f12270f211d30 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Wed, 28 Jan 2026 19:44:46 +0000 Subject: [PATCH 05/27] fix: lambda_name = var.lambda_name --- infra/modules/aws/_shared/lambda/locals.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/modules/aws/_shared/lambda/locals.tf b/infra/modules/aws/_shared/lambda/locals.tf index c7741a95..450790d9 100644 --- a/infra/modules/aws/_shared/lambda/locals.tf +++ b/infra/modules/aws/_shared/lambda/locals.tf @@ -4,7 +4,7 @@ locals { compute_platform = "Lambda" lambda_bootstrap_zip_key = "bootstrap/bootstrap-lambda.zip" - lambda_name = "${var.environment}-${var.project_name}-${var.lambda_name}" + lambda_name = var.lambda_name deploy_all_at_once_type = "AllAtOnce" deploy_canary_type = "TimeBasedCanary" From d26b61eb3845e0a9bbdcf6d10c5fa38afac62409 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Wed, 28 Jan 2026 19:51:12 +0000 Subject: [PATCH 06/27] fix: iam policy naming --- infra/modules/aws/_shared/lambda/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index 6ae1a0c0..eb5b49c9 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -4,7 +4,7 @@ resource "aws_iam_role" "iam_for_lambda" { } resource "aws_iam_policy" "lambda_cloudwatch_logs" { - name = "${var.project_name}-${var.environment}-lambda-cloudwatch-logs" + name = "${local.lambda_name}-logs" policy = data.aws_iam_policy_document.lambda_cloudwatch_logs.json } From 2663f48535ab001003d4b7d620b9267ba3af5cb5 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 09:19:23 +0000 Subject: [PATCH 07/27] chore: just lambda-disable-auto-rollback: --- justfile | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index e04c6c7d..c2034f5b 100644 --- a/justfile +++ b/justfile @@ -270,6 +270,11 @@ lambda-deploy: #!/usr/bin/env bash set -euo pipefail + if [[ -z "$FUNCTION_NAME" ]]; then + echo "❌ FUNCTION_NAME environment variable is not set." + exit 1 + fi + if [[ -z "$APP_SPEC_KEY" ]]; then echo "❌ APP_SPEC_KEY environment variable is not set." exit 1 @@ -326,6 +331,30 @@ lambda-deploy: exit 1 +lambda-disable-auto-rollback: + #!/usr/bin/env bash + set -euo pipefail + + if [[ -z "$FUNCTION_NAME" ]]; then + echo "❌ FUNCTION_NAME environment variable is not set." + exit 1 + fi + + CODE_DEPLOY_APP_NAME=$(just lambda-get-code-deploy-app) + CODE_DEPLOY_GROUP_NAME=$(just lambda-get-code-deploy-group) + + aws deploy update-deployment-group \ + --application-name "$CODE_DEPLOY_APP_NAME" \ + --current-deployment-group-name "$CODE_DEPLOY_GROUP_NAME" \ + --auto-rollback-configuration '{ + "enabled": false, + "events": [] + }' + + echo "🔒 Deployment $CODE_DEPLOY_APP_NAME completed. Auto-rollback disabled." + + + lambda-prune: #!/usr/bin/env bash set -euo pipefail @@ -389,4 +418,6 @@ test-api-deploy-500s: sleep 1 done - echo "Finished sending requests." \ No newline at end of file + echo "Finished sending requests." + + From 5f658c07fb946cebc53e1b8b9f4043f53233fe3a Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 12:03:27 +0000 Subject: [PATCH 08/27] chore: try canary deployment --- infra/modules/aws/api/local.tf | 5 +++-- infra/modules/aws/api/main.tf | 35 +++++++++++++++++++++++++--------- justfile | 8 ++++---- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/infra/modules/aws/api/local.tf b/infra/modules/aws/api/local.tf index 41647f05..aade786d 100644 --- a/infra/modules/aws/api/local.tf +++ b/infra/modules/aws/api/local.tf @@ -1,4 +1,5 @@ locals { - lambda_name = "${var.environment}-${var.project_name}-api" - api_5xx_alarm_name = "${local.lambda_name}-api-v2-5xx-rate-critical" + lambda_name = "${var.environment}-${var.project_name}-api" + apigw_http_5xx_metric = "5xx" + api_5xx_alarm_name = "${local.lambda_name}-api-v2-5xx-rate-critical" } \ No newline at end of file diff --git a/infra/modules/aws/api/main.tf b/infra/modules/aws/api/main.tf index 09af6ecb..fbf73744 100644 --- a/infra/modules/aws/api/main.tf +++ b/infra/modules/aws/api/main.tf @@ -12,8 +12,11 @@ module "lambda_api" { } deployment_config = { - strategy = "all_at_once" + strategy = "canary" + percentage = 10 + interval_minutes = 1 } + codedeploy_alarm_names = [ local.api_5xx_alarm_name ] @@ -79,46 +82,60 @@ resource "aws_lambda_permission" "allow_invoke" { } resource "aws_cloudwatch_metric_alarm" "api_5xx_rate" { - alarm_name = local.api_5xx_alarm_name - alarm_description = "HTTP API (v2) 5xx error rate > 0.5% for 1 minute" + alarm_name = local.api_5xx_alarm_name + alarm_description = "HTTP API (v2) 5xx error rate > 0.5% for 1 minute" + actions_enabled = true + comparison_operator = "GreaterThanThreshold" threshold = 0.5 evaluation_periods = 1 datapoints_to_alarm = 1 treat_missing_data = "notBreaching" - actions_enabled = true + # + # Metric math: (5xx / count) * 100 + # Guarded to avoid NaN/Inf when count is 0 or very low + # metric_query { id = "e" - expression = "(m5xx / mcount) * 100" label = "5xxErrorRate" return_data = true + expression = "IF(mcount < 1, 0, (m5xx / mcount) * 100)" } + # + # API Gateway v2 – 5XX errors + # metric_query { id = "m5xx" metric { namespace = "AWS/ApiGateway" - metric_name = "5XXError" - period = 60 + metric_name = local.apigw_http_5xx_metric stat = "Sum" + period = 60 + dimensions = { ApiId = aws_apigatewayv2_api.http_api.id + Stage = aws_apigatewayv2_stage.default.name } } } + # + # API Gateway v2 – total request count + # metric_query { id = "mcount" metric { namespace = "AWS/ApiGateway" metric_name = "Count" - period = 60 stat = "Sum" + period = 60 + dimensions = { ApiId = aws_apigatewayv2_api.http_api.id + Stage = aws_apigatewayv2_stage.default.name } } } } - diff --git a/justfile b/justfile index c2034f5b..dc9381c5 100644 --- a/justfile +++ b/justfile @@ -412,10 +412,10 @@ test-api-deploy-500s: echo "Sending requests to $API_URL to trigger 500 errors..." - for i in {1..90}; do - RESPONSE_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$API_URL/trigger-500") - echo "Request $i: Received HTTP status code $RESPONSE_CODE" - sleep 1 + END=$((SECONDS+90)) + + while [ $SECONDS -lt $END ]; do + curl -s -o /dev/null "$API_URL/error" done echo "Finished sending requests." From 8a783483b443289cdbf82f24136cda3002bf7604 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 14:08:42 +0000 Subject: [PATCH 09/27] chore: increase canary intervals --- infra/modules/aws/api/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/modules/aws/api/main.tf b/infra/modules/aws/api/main.tf index fbf73744..1c9a4183 100644 --- a/infra/modules/aws/api/main.tf +++ b/infra/modules/aws/api/main.tf @@ -14,7 +14,7 @@ module "lambda_api" { deployment_config = { strategy = "canary" percentage = 10 - interval_minutes = 1 + interval_minutes = 2 # this is > the alarm evaluation period to ensure we catch the alarm if it triggers } codedeploy_alarm_names = [ From 648ca5c9d7ef13bd53073f1f69cac0a8375c9602 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 14:31:57 +0000 Subject: [PATCH 10/27] chore: deploy_config_suffix --- infra/modules/aws/_shared/lambda/locals.tf | 13 ++++++++++++- infra/modules/aws/_shared/lambda/main.tf | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/infra/modules/aws/_shared/lambda/locals.tf b/infra/modules/aws/_shared/lambda/locals.tf index 450790d9..2c2c0cc1 100644 --- a/infra/modules/aws/_shared/lambda/locals.tf +++ b/infra/modules/aws/_shared/lambda/locals.tf @@ -15,11 +15,22 @@ locals { canary = local.deploy_canary_type linear = local.deploy_linear_type } + deploy_strategy = local.deploy_config_type_map[var.deployment_config.strategy] deploy_config = { - type = local.deploy_config_type_map[var.deployment_config.strategy] + type = local.deploy_strategy percent = var.deployment_config.percentage minutes = var.deployment_config.interval_minutes } + deploy_config_suffix = lower(( + var.deployment_config.strategy == local.deploy_all_at_once_type + ? local.deploy_strategy + : format( + "%s-%dpct-%dmin", + local.deploy_strategy, + local.deploy_config.percent, + local.deploy_config.minutes + ) + )) fixed_mode = try(var.provisioned_config.fixed != null, true) && try(var.provisioned_config.fixed > 0, false) auto_scale_mode = try(var.provisioned_config.auto_scale != null, false) diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index eb5b49c9..ded206ba 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -108,7 +108,7 @@ resource "aws_iam_role_policy" "cd_lambda" { } resource "aws_codedeploy_deployment_config" "lambda_config" { - deployment_config_name = "${local.lambda_name}-deploy-config" + deployment_config_name = "${local.lambda_name}-${local.deploy_config_suffix}" # we do this to avoid DeploymentConfigInUseException compute_platform = local.compute_platform traffic_routing_config { From a9cb8f4d3a02a0393515107ba1423947ff541f84 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 14:44:03 +0000 Subject: [PATCH 11/27] chore: prevent destroy dg configs --- infra/modules/aws/_shared/lambda/main.tf | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index ded206ba..99fb4f25 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -108,7 +108,7 @@ resource "aws_iam_role_policy" "cd_lambda" { } resource "aws_codedeploy_deployment_config" "lambda_config" { - deployment_config_name = "${local.lambda_name}-${local.deploy_config_suffix}" # we do this to avoid DeploymentConfigInUseException + deployment_config_name = "${local.lambda_name}-${local.deploy_config_suffix}" compute_platform = local.compute_platform traffic_routing_config { @@ -130,6 +130,11 @@ resource "aws_codedeploy_deployment_config" "lambda_config" { } } } + + lifecycle { + # don't try to delete old configs automatically to prevent DeploymentConfigInUseException + prevent_destroy = true + } } resource "aws_codedeploy_deployment_group" "dg" { From 46023ffe3f53d8c5eafcbc51dcffaf38001e503a Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 14:51:35 +0000 Subject: [PATCH 12/27] fix: toset([local.deployment_config_name]) --- infra/modules/aws/_shared/lambda/locals.tf | 11 ++++++----- infra/modules/aws/_shared/lambda/main.tf | 6 ++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/infra/modules/aws/_shared/lambda/locals.tf b/infra/modules/aws/_shared/lambda/locals.tf index 2c2c0cc1..5b2104aa 100644 --- a/infra/modules/aws/_shared/lambda/locals.tf +++ b/infra/modules/aws/_shared/lambda/locals.tf @@ -25,12 +25,13 @@ locals { var.deployment_config.strategy == local.deploy_all_at_once_type ? local.deploy_strategy : format( - "%s-%dpct-%dmin", - local.deploy_strategy, - local.deploy_config.percent, - local.deploy_config.minutes - ) + "%s-%dpct-%dmin", + local.deploy_strategy, + local.deploy_config.percent, + local.deploy_config.minutes + ) )) + deployment_config_name = "${local.lambda_name}-deploy-${local.deploy_config_suffix}" fixed_mode = try(var.provisioned_config.fixed != null, true) && try(var.provisioned_config.fixed > 0, false) auto_scale_mode = try(var.provisioned_config.auto_scale != null, false) diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index 99fb4f25..6eca72c3 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -108,7 +108,9 @@ resource "aws_iam_role_policy" "cd_lambda" { } resource "aws_codedeploy_deployment_config" "lambda_config" { - deployment_config_name = "${local.lambda_name}-${local.deploy_config_suffix}" + for_each = toset([local.deployment_config_name]) # to prevent DeploymentConfigInUseException + + deployment_config_name = each.value compute_platform = local.compute_platform traffic_routing_config { @@ -147,7 +149,7 @@ resource "aws_codedeploy_deployment_group" "dg" { deployment_option = "WITH_TRAFFIC_CONTROL" } - deployment_config_name = aws_codedeploy_deployment_config.lambda_config.deployment_config_name + deployment_config_name = local.deployment_config_name auto_rollback_configuration { enabled = true From 5cf666635e04ff3abe605afc4fbd36976653a77c Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 14:56:03 +0000 Subject: [PATCH 13/27] fix: format error --- infra/modules/aws/_shared/lambda/locals.tf | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/infra/modules/aws/_shared/lambda/locals.tf b/infra/modules/aws/_shared/lambda/locals.tf index 5b2104aa..ee858f80 100644 --- a/infra/modules/aws/_shared/lambda/locals.tf +++ b/infra/modules/aws/_shared/lambda/locals.tf @@ -24,12 +24,7 @@ locals { deploy_config_suffix = lower(( var.deployment_config.strategy == local.deploy_all_at_once_type ? local.deploy_strategy - : format( - "%s-%dpct-%dmin", - local.deploy_strategy, - local.deploy_config.percent, - local.deploy_config.minutes - ) + : "${local.deploy_strategy}-${local.deploy_config.percent}-${local.deploy_config.minutes}" )) deployment_config_name = "${local.lambda_name}-deploy-${local.deploy_config_suffix}" From 54e8be9acb77d1bea46251385a5ff82af693f2d3 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 14:59:07 +0000 Subject: [PATCH 14/27] fix: rm prevent destroy --- infra/modules/aws/_shared/lambda/main.tf | 5 ----- 1 file changed, 5 deletions(-) diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index 6eca72c3..5f494724 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -132,11 +132,6 @@ resource "aws_codedeploy_deployment_config" "lambda_config" { } } } - - lifecycle { - # don't try to delete old configs automatically to prevent DeploymentConfigInUseException - prevent_destroy = true - } } resource "aws_codedeploy_deployment_group" "dg" { From 9a2837abbb6b21b12aab8df23a29eb8debba2799 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 15:06:09 +0000 Subject: [PATCH 15/27] fix: var.deployment_config.strategy == "all_at_once" --- infra/modules/aws/_shared/lambda/locals.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/modules/aws/_shared/lambda/locals.tf b/infra/modules/aws/_shared/lambda/locals.tf index ee858f80..fac9ddb3 100644 --- a/infra/modules/aws/_shared/lambda/locals.tf +++ b/infra/modules/aws/_shared/lambda/locals.tf @@ -22,7 +22,7 @@ locals { minutes = var.deployment_config.interval_minutes } deploy_config_suffix = lower(( - var.deployment_config.strategy == local.deploy_all_at_once_type + var.deployment_config.strategy == "all_at_once" ? local.deploy_strategy : "${local.deploy_strategy}-${local.deploy_config.percent}-${local.deploy_config.minutes}" )) From 7356f30bb90e6f7c763b4c0065c6e7127fc2a52d Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 15:28:40 +0000 Subject: [PATCH 16/27] fix: prevent DeploymentConfigInUseException --- infra/modules/aws/_shared/lambda/main.tf | 12 ++++++++---- infra/modules/aws/api/main.tf | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index 5f494724..8193d1ad 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -108,9 +108,7 @@ resource "aws_iam_role_policy" "cd_lambda" { } resource "aws_codedeploy_deployment_config" "lambda_config" { - for_each = toset([local.deployment_config_name]) # to prevent DeploymentConfigInUseException - - deployment_config_name = each.value + deployment_config_name = local.deployment_config_name compute_platform = local.compute_platform traffic_routing_config { @@ -135,8 +133,10 @@ resource "aws_codedeploy_deployment_config" "lambda_config" { } resource "aws_codedeploy_deployment_group" "dg" { + depends_on = [aws_codedeploy_deployment_config.lambda_config] # to prevent DeploymentConfigInUseException + app_name = aws_codedeploy_app.app.name - deployment_group_name = "${local.lambda_name}-dg" + deployment_group_name = "${local.deployment_config_name}-dg" service_role_arn = aws_iam_role.code_deploy_role.arn deployment_style { @@ -158,6 +158,10 @@ resource "aws_codedeploy_deployment_group" "dg" { alarms = var.codedeploy_alarm_names } } + + lifecycle { + create_before_destroy = true # to prevent DeploymentConfigInUseException + } } resource "aws_appautoscaling_target" "pc_target" { diff --git a/infra/modules/aws/api/main.tf b/infra/modules/aws/api/main.tf index 1c9a4183..5fca9df5 100644 --- a/infra/modules/aws/api/main.tf +++ b/infra/modules/aws/api/main.tf @@ -14,7 +14,7 @@ module "lambda_api" { deployment_config = { strategy = "canary" percentage = 10 - interval_minutes = 2 # this is > the alarm evaluation period to ensure we catch the alarm if it triggers + interval_minutes = 3 # this is > the alarm evaluation period to ensure we catch the alarm if it triggers } codedeploy_alarm_names = [ From b93776027dfc84ee1e4abb80302d09d7c3e0789c Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 15:55:42 +0000 Subject: [PATCH 17/27] chore: add notes to ci + demo decouple deployments --- .../{deploy_dev.yml => deploy_dev_full.yml} | 2 +- .github/workflows/deploy_dev_lambda_only.yml | 49 +++++++++++++++++++ .../{deploy_prod.yml => deploy_prod_full.yml} | 2 +- .github/workflows/deploy_prod_lambda_only.yml | 28 +++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) rename .github/workflows/{deploy_dev.yml => deploy_dev_full.yml} (97%) create mode 100644 .github/workflows/deploy_dev_lambda_only.yml rename .github/workflows/{deploy_prod.yml => deploy_prod_full.yml} (96%) create mode 100644 .github/workflows/deploy_prod_lambda_only.yml diff --git a/.github/workflows/deploy_dev.yml b/.github/workflows/deploy_dev_full.yml similarity index 97% rename from .github/workflows/deploy_dev.yml rename to .github/workflows/deploy_dev_full.yml index 36e1a969..d9c169e0 100644 --- a/.github/workflows/deploy_dev.yml +++ b/.github/workflows/deploy_dev_full.yml @@ -1,4 +1,4 @@ -name: Dev Deploy +name: Dev Deploy Infra and Lambda on: workflow_dispatch: diff --git a/.github/workflows/deploy_dev_lambda_only.yml b/.github/workflows/deploy_dev_lambda_only.yml new file mode 100644 index 00000000..82f2470b --- /dev/null +++ b/.github/workflows/deploy_dev_lambda_only.yml @@ -0,0 +1,49 @@ +name: Dev Deploy Lambda Only +# This allows us to deploy only lambda changes to dev without touching infra. + +on: + workflow_dispatch: + +permissions: + id-token: write + contents: write + +jobs: + setup: + runs-on: ubuntu-latest + outputs: + lambdas_dirs: ${{ steps.lambdas_dirs.outputs.just_outputs }} + steps: + - uses: actions/checkout@v4 + + - name: Get lambdas Directories + id: lambdas_dirs + uses: chrispsheehan/just-aws-oidc-action@0.3.0 + with: + just_action: lambda-get-directories + + build: + uses: ./.github/workflows/build.yml + needs: + - setup + with: + environment: dev + version: ${{ github.sha }} + matrix: ${{ needs.setup.outputs.lambdas_dirs }} + + get_build: + needs: build + uses: ./.github/workflows/build_get.yml + with: + environment: dev + version: ${{ github.sha }} + + deploy: + uses: ./.github/workflows/deploy.yml + needs: + - get_build + with: + environment: dev + lambda_version: ${{ needs.get_build.outputs.lambda_version }} + lambda_bucket: ${{ needs.get_build.outputs.lambda_bucket }} + matrix: ${{ needs.get_build.outputs.lambda_version_files }} diff --git a/.github/workflows/deploy_prod.yml b/.github/workflows/deploy_prod_full.yml similarity index 96% rename from .github/workflows/deploy_prod.yml rename to .github/workflows/deploy_prod_full.yml index bd181768..70db1854 100644 --- a/.github/workflows/deploy_prod.yml +++ b/.github/workflows/deploy_prod_full.yml @@ -1,4 +1,4 @@ -name: Prod Deploy +name: Prod Deploy Infra and Lambda on: workflow_dispatch: diff --git a/.github/workflows/deploy_prod_lambda_only.yml b/.github/workflows/deploy_prod_lambda_only.yml new file mode 100644 index 00000000..fe447c52 --- /dev/null +++ b/.github/workflows/deploy_prod_lambda_only.yml @@ -0,0 +1,28 @@ +name: Prod Deploy Lambda Only +# This allows us to deploy only lambda changes to prod found in the version s3 folder (only). + +on: + workflow_dispatch: + +permissions: + id-token: write + contents: write + +jobs: + get_build: + uses: ./.github/workflows/build_get.yml + with: + environment: ci + version: 0.5.1 + + deploy: + uses: ./.github/workflows/deploy.yml + needs: + - get_build + with: + environment: prod + lambda_version: ${{ needs.get_build.outputs.lambda_version }} + lambda_bucket: ${{ needs.get_build.outputs.lambda_bucket }} + matrix: ${{ needs.get_build.outputs.lambda_version_files }} + # we can also define a lambda-only deployment here if needed, as below + # matrix: '["api"]' \ No newline at end of file From fa1bf444f48ebdaad24bda1e2bb4429ca6678023 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 16:04:01 +0000 Subject: [PATCH 18/27] chore: run 500s for longer --- justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/justfile b/justfile index dc9381c5..3c09f123 100644 --- a/justfile +++ b/justfile @@ -412,7 +412,7 @@ test-api-deploy-500s: echo "Sending requests to $API_URL to trigger 500 errors..." - END=$((SECONDS+90)) + END=$((SECONDS+180)) while [ $SECONDS -lt $END ]; do curl -s -o /dev/null "$API_URL/error" From 752b0dbc1bb60e429e378e0d8b49e0ccca831937 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 16:08:09 +0000 Subject: [PATCH 19/27] chore: pass in 5xx thresholds --- infra/live/dev/aws/api/terragrunt.hcl | 6 ++++++ infra/live/prod/aws/api/terragrunt.hcl | 6 ++++++ infra/modules/aws/_shared/lambda/main.tf | 4 ++-- infra/modules/aws/api/main.tf | 8 ++++---- infra/modules/aws/api/variables.tf | 15 +++++++++++++++ 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/infra/live/dev/aws/api/terragrunt.hcl b/infra/live/dev/aws/api/terragrunt.hcl index 4fc561db..37e4cc2f 100644 --- a/infra/live/dev/aws/api/terragrunt.hcl +++ b/infra/live/dev/aws/api/terragrunt.hcl @@ -2,6 +2,12 @@ include { path = find_in_parent_folders("root.hcl") } +inputs = { + api_5xx_alarm_threshold = 20.0 + api_5xx_alarm_evaluation_periods = 1 + api_5xx_alarm_datapoints_to_alarm = 1 +} + terraform { source = "../../../../modules//aws//api" } diff --git a/infra/live/prod/aws/api/terragrunt.hcl b/infra/live/prod/aws/api/terragrunt.hcl index 4fc561db..35f660c1 100644 --- a/infra/live/prod/aws/api/terragrunt.hcl +++ b/infra/live/prod/aws/api/terragrunt.hcl @@ -2,6 +2,12 @@ include { path = find_in_parent_folders("root.hcl") } +inputs = { + api_5xx_alarm_threshold = 5.0 + api_5xx_alarm_evaluation_periods = 1 + api_5xx_alarm_datapoints_to_alarm = 1 +} + terraform { source = "../../../../modules//aws//api" } diff --git a/infra/modules/aws/_shared/lambda/main.tf b/infra/modules/aws/_shared/lambda/main.tf index 8193d1ad..e91b01a4 100644 --- a/infra/modules/aws/_shared/lambda/main.tf +++ b/infra/modules/aws/_shared/lambda/main.tf @@ -133,7 +133,7 @@ resource "aws_codedeploy_deployment_config" "lambda_config" { } resource "aws_codedeploy_deployment_group" "dg" { - depends_on = [aws_codedeploy_deployment_config.lambda_config] # to prevent DeploymentConfigInUseException + depends_on = [aws_codedeploy_deployment_config.lambda_config] # to prevent DeploymentConfigInUseException app_name = aws_codedeploy_app.app.name deployment_group_name = "${local.deployment_config_name}-dg" @@ -160,7 +160,7 @@ resource "aws_codedeploy_deployment_group" "dg" { } lifecycle { - create_before_destroy = true # to prevent DeploymentConfigInUseException + create_before_destroy = true # to prevent DeploymentConfigInUseException } } diff --git a/infra/modules/aws/api/main.tf b/infra/modules/aws/api/main.tf index 5fca9df5..0e96555b 100644 --- a/infra/modules/aws/api/main.tf +++ b/infra/modules/aws/api/main.tf @@ -83,13 +83,13 @@ resource "aws_lambda_permission" "allow_invoke" { resource "aws_cloudwatch_metric_alarm" "api_5xx_rate" { alarm_name = local.api_5xx_alarm_name - alarm_description = "HTTP API (v2) 5xx error rate > 0.5% for 1 minute" + alarm_description = "HTTP API (v2) 5xx error rate > ${var.api_5xx_alarm_threshold}% for ${var.api_5xx_alarm_evaluation_periods} minute(s) ${var.api_5xx_alarm_datapoints_to_alarm} times" actions_enabled = true comparison_operator = "GreaterThanThreshold" - threshold = 0.5 - evaluation_periods = 1 - datapoints_to_alarm = 1 + threshold = var.api_5xx_alarm_threshold # This is the value your metric is compared against + evaluation_periods = var.api_5xx_alarm_evaluation_periods # This is how many consecutive periods CloudWatch looks at when deciding the alarm state. + datapoints_to_alarm = var.api_5xx_alarm_datapoints_to_alarm # This is how many of those evaluated periods must be breaching to trigger ALARM. treat_missing_data = "notBreaching" # diff --git a/infra/modules/aws/api/variables.tf b/infra/modules/aws/api/variables.tf index 6088d0c3..a75acdf9 100644 --- a/infra/modules/aws/api/variables.tf +++ b/infra/modules/aws/api/variables.tf @@ -14,3 +14,18 @@ variable "lambda_bucket" { description = "Lambda bucket where the code zip(s) are uploaded to" } ### end of static vars set in root.hcl ### + +variable "api_5xx_alarm_threshold" { + type = number + description = "The threshold for the API 5xx error rate alarm" +} + +variable "api_5xx_alarm_evaluation_periods" { + type = number + description = "The number of consecutive periods CloudWatch looks at when deciding the alarm state" +} + +variable "api_5xx_alarm_datapoints_to_alarm" { + type = number + description = "The number of evaluated periods that must be breaching to trigger ALARM" +} \ No newline at end of file From dfe5678268a9c1699f635d1a21c070ff327f93a4 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 16:16:47 +0000 Subject: [PATCH 20/27] docs: roll back notes --- README.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/README.md b/README.md index 8eb2bde0..61fa94d0 100644 --- a/README.md +++ b/README.md @@ -109,3 +109,37 @@ deployment_config = { percentage = 10 interval_minutes = 1 } +``` + +## đŸ”Ĩâ†Šī¸ deployment roll-back + +- use cloudwatch metrics and alarms to automatically roll-back a deployment +- create a [cloudwatch_metric_alarm](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_metric_alarm) resource and pass in as per below + +```hcl + codedeploy_alarm_names = [ + local.api_5xx_alarm_name + ] +``` +- if the alarm triggers during a deployment you will see the below in the CI + +``` +đŸ“Ļ Running: lambda-deploy +🚀 Started deployment: d-40UUQH3DF +Attempt 1: Deployment status is InProgress +Attempt 2: Deployment status is InProgress +Attempt 3: Deployment status is InProgress +Attempt 4: Deployment status is InProgress +Attempt 5: Deployment status is Stopped +❌ Deployment d-40UUQH3DF failed or was stopped. +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +| GetDeployment | ++--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ErrorCode | ALARM_ACTIVE | +| ErrorMessage| One or more alarms have been activated according to the Amazon CloudWatch metrics you selected, and the affected deployments have been stopped. Activated alarms: | +| Status | Stopped | ++--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +error: Recipe `lambda-deploy` failed with exit code 1 +Error: Process completed with exit code 1. + +``` \ No newline at end of file From fb555e42e6dfa02fd03dab328e75a7dca4f9d2cd Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 16:18:52 +0000 Subject: [PATCH 21/27] chore: rm lambda-disable-auto-rollback --- justfile | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/justfile b/justfile index 3c09f123..9e949459 100644 --- a/justfile +++ b/justfile @@ -331,30 +331,6 @@ lambda-deploy: exit 1 -lambda-disable-auto-rollback: - #!/usr/bin/env bash - set -euo pipefail - - if [[ -z "$FUNCTION_NAME" ]]; then - echo "❌ FUNCTION_NAME environment variable is not set." - exit 1 - fi - - CODE_DEPLOY_APP_NAME=$(just lambda-get-code-deploy-app) - CODE_DEPLOY_GROUP_NAME=$(just lambda-get-code-deploy-group) - - aws deploy update-deployment-group \ - --application-name "$CODE_DEPLOY_APP_NAME" \ - --current-deployment-group-name "$CODE_DEPLOY_GROUP_NAME" \ - --auto-rollback-configuration '{ - "enabled": false, - "events": [] - }' - - echo "🔒 Deployment $CODE_DEPLOY_APP_NAME completed. Auto-rollback disabled." - - - lambda-prune: #!/usr/bin/env bash set -euo pipefail From 1de3e8ee53c19215a9f2a0145d27d73460cc2f73 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Thu, 29 Jan 2026 16:20:29 +0000 Subject: [PATCH 22/27] docs: minor --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 61fa94d0..59de6a0f 100644 --- a/README.md +++ b/README.md @@ -117,9 +117,13 @@ deployment_config = { - create a [cloudwatch_metric_alarm](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_metric_alarm) resource and pass in as per below ```hcl +module "lambda_example" { + source = "../lambda" + ... codedeploy_alarm_names = [ local.api_5xx_alarm_name ] +} ``` - if the alarm triggers during a deployment you will see the below in the CI From 902c5560899f2e5147a744bd6fcc77e9c1aaac87 Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Fri, 30 Jan 2026 09:22:33 +0000 Subject: [PATCH 23/27] chore: readme update and sqs scale --- README.md | 10 ++++++---- infra/modules/aws/api/main.tf | 27 +++++++++------------------ infra/modules/aws/consumer/main.tf | 25 ++++++++----------------- infra/modules/aws/consumer/outputs.tf | 4 ++++ justfile | 1 + 5 files changed, 28 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 59de6a0f..40bd08c8 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,8 @@ module "lambda_example" { - we can handle an initial lag while lambda warms up/boots ```hcl provisioned_config = { - fixed = 0 + fixed = 0 + reserved_concurrency = 2 # only allow 2 concurrent executions THIS ALSO SERVES AS A LIMIT TO AVOID THROTTLING } ``` @@ -45,7 +46,8 @@ provisioned_config = { - we never want lag due to warm up and can predict traffic ```hcl provisioned_config = { - fixed = 1 + fixed = 10 + reserved_concurrency = 50 } ``` @@ -70,7 +72,7 @@ provisioned_config = { ```hcl module "lambda_example" { - source = "../lambda" + source = "../_shared/lambda" ... deployment_config = var.your_deployment_config } @@ -118,7 +120,7 @@ deployment_config = { ```hcl module "lambda_example" { - source = "../lambda" + source = "../_shared/lambda" ... codedeploy_alarm_names = [ local.api_5xx_alarm_name diff --git a/infra/modules/aws/api/main.tf b/infra/modules/aws/api/main.tf index 0e96555b..93c91b10 100644 --- a/infra/modules/aws/api/main.tf +++ b/infra/modules/aws/api/main.tf @@ -22,25 +22,16 @@ module "lambda_api" { ] provisioned_config = { - fixed = 0 # cold starts only - } + auto_scale = { + max = 2 + min = 1 # always have 1 lambda ready to go + trigger_percent = 20 + scale_in_cooldown_seconds = 60 + scale_out_cooldown_seconds = 60 + } - # provisioned_config = { - # fixed = 1 # always have 1 lambda ready to go - # reserved_concurrency = 2 # only allow 2 concurrent executions THIS ALSO SERVES AS A LIMIT TO AVOID THROTTLING - # } - - # provisioned_config = { - # auto_scale = { - # max = 2 - # min = 1 # always have 1 lambda ready to go - # trigger_percent = 20 - # scale_in_cooldown_seconds = 60 - # scale_out_cooldown_seconds = 60 - # } - - # reserved_concurrency = 10 # limit the amount of concurrent executions to avoid throttling, but allow some bursting - # } + reserved_concurrency = 10 # limit the amount of concurrent executions to avoid throttling, but allow some bursting + } } resource "aws_apigatewayv2_api" "http_api" { diff --git a/infra/modules/aws/consumer/main.tf b/infra/modules/aws/consumer/main.tf index 6aa26b0c..2951e458 100644 --- a/infra/modules/aws/consumer/main.tf +++ b/infra/modules/aws/consumer/main.tf @@ -16,24 +16,15 @@ module "lambda_consumer" { } provisioned_config = { - fixed = 0 # cold starts only + sqs_scale = { + min = 1 + max = 5 + visible_messages = 100 + queue_name = module.sqs_queue.sqs_queue_name + scale_in_cooldown_seconds = 60 + scale_out_cooldown_seconds = 60 + } } - - # provisioned_config = { - # fixed = 1 # always have 1 lambda ready to go - # reserved_concurrency = 2 # only allow 2 concurrent executions THIS ALSO SERVES AS A LIMIT TO AVOID THROTTLING - # } - - # provisioned_config = { - # sqs_scale = { - # min = 1 - # max = 5 - # visible_messages = 100 - # queue_name = module.sqs_queue.sqs_queue_name - # scale_in_cooldown_seconds = 60 - # scale_out_cooldown_seconds = 60 - # } - # } } # configure a deadletter queue (DLQ) for the SQS queue used by the Lambda consumer diff --git a/infra/modules/aws/consumer/outputs.tf b/infra/modules/aws/consumer/outputs.tf index 21836daf..c9514ec4 100644 --- a/infra/modules/aws/consumer/outputs.tf +++ b/infra/modules/aws/consumer/outputs.tf @@ -13,3 +13,7 @@ output "lambda_function_name" { output "lambda_alias_name" { value = module.lambda_consumer.alias_name } + +output "sqs_queue_url" { + value = module.sqs_queue.sqs_queue_url +} diff --git a/justfile b/justfile index 9e949459..c387ab19 100644 --- a/justfile +++ b/justfile @@ -377,6 +377,7 @@ lambda-prune: aws lambda delete-function --function-name "$FUNCTION_NAME" --qualifier "$v" --region "$AWS_REGION" done + test-api-deploy-500s: #!/usr/bin/env bash set -euo pipefail From 946a72e28b2950cc4ba843c4ef764a7cf0c1fd4a Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Fri, 30 Jan 2026 09:25:53 +0000 Subject: [PATCH 24/27] debug: trigger on auto-roll-back branch --- .github/workflows/deploy_dev_full.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/deploy_dev_full.yml b/.github/workflows/deploy_dev_full.yml index d9c169e0..8e0f8cc7 100644 --- a/.github/workflows/deploy_dev_full.yml +++ b/.github/workflows/deploy_dev_full.yml @@ -2,6 +2,9 @@ name: Dev Deploy Infra and Lambda on: workflow_dispatch: + push: + branches: + - auto-roll-back permissions: id-token: write From c1fbfabd527705e1e19fe794e98b049526abbb2a Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Fri, 30 Jan 2026 11:36:17 +0000 Subject: [PATCH 25/27] debug: add delay and chunk to consumer --- infra/modules/aws/consumer/main.tf | 9 +++++++-- lambdas/consumer/lambda_handler.py | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/infra/modules/aws/consumer/main.tf b/infra/modules/aws/consumer/main.tf index 2951e458..13e1458d 100644 --- a/infra/modules/aws/consumer/main.tf +++ b/infra/modules/aws/consumer/main.tf @@ -7,6 +7,11 @@ module "lambda_consumer" { lambda_name = local.lambda_name + environment_variables = { + DEBUG_DELAY_MS = 500 + CHUNK_SIZE = local.sqs_chunk_size + } + additional_policy_arns = [ module.sqs_queue.sqs_queue_read_policy_arn ] @@ -19,7 +24,7 @@ module "lambda_consumer" { sqs_scale = { min = 1 max = 5 - visible_messages = 100 + visible_messages = 10 queue_name = module.sqs_queue.sqs_queue_name scale_in_cooldown_seconds = 60 scale_out_cooldown_seconds = 60 @@ -39,7 +44,7 @@ resource "aws_lambda_event_source_mapping" "sqs" { event_source_arn = module.sqs_queue.sqs_queue_arn function_name = module.lambda_consumer.function_name - batch_size = 500 + batch_size = local.sqs_chunk_size maximum_batching_window_in_seconds = 10 function_response_types = ["ReportBatchItemFailures"] diff --git a/lambdas/consumer/lambda_handler.py b/lambdas/consumer/lambda_handler.py index 163a1c5a..6b80fcfa 100644 --- a/lambdas/consumer/lambda_handler.py +++ b/lambdas/consumer/lambda_handler.py @@ -1,8 +1,10 @@ import json +import os +from time import time from typing import List, Dict -CHUNK_SIZE = 50 - +CHUNK_SIZE = 5 +DEBUG_DELAY_MS = int(os.getenv("DEBUG_DELAY_MS", "0")) def chunk(items: List[Dict], size: int): """Yield successive chunks from a list.""" @@ -37,6 +39,9 @@ def process_chunk(records: List[Dict]) -> List[str]: for record in records: try: process_message(record) + # Optional delay to force concurrency during testing + if DEBUG_DELAY_MS > 0: + time.sleep(DEBUG_DELAY_MS / 1000.0) except Exception as exc: print(f"Failed processing message {record['messageId']}: {exc}") failed_message_ids.append(record["messageId"]) From abf59497cca19b42dd664ec7ed33a86a9337470b Mon Sep 17 00:00:00 2001 From: chrispsheehan Date: Fri, 30 Jan 2026 11:36:35 +0000 Subject: [PATCH 26/27] docs: auto-scale docs --- README.md | 7 +++++++ docs/lamba-scaling-up.png | Bin 0 -> 51763 bytes docs/lambda-config-after.png | Bin 0 -> 58292 bytes docs/lambda-config-before.png | Bin 0 -> 57135 bytes infra/modules/aws/consumer/local.tf | 3 ++- 5 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 docs/lamba-scaling-up.png create mode 100644 docs/lambda-config-after.png create mode 100644 docs/lambda-config-before.png diff --git a/README.md b/README.md index 40bd08c8..f13a8d2e 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,13 @@ provisioned_config = { } } ``` +- before scaling the lambda alias will match the minmum value +![a](docs/lambda-config-before.png) +- when the trigger percent is exceeded the lambda moves into `In progress (1/2)` state as an additional provisioned lambda is added. +![a](docs/lamba-scaling-up.png) +- after scaling the lambda alias will show an additional provisioned lambda +![a](docs/lambda-config-after.png) + ## đŸšĻ types of lambda deploy diff --git a/docs/lamba-scaling-up.png b/docs/lamba-scaling-up.png new file mode 100644 index 0000000000000000000000000000000000000000..2127020322eafd25fbc9182c0394d1e4c280ea90 GIT binary patch literal 51763 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�{)29myAoatd4-t)KLc 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 literal 0 HcmV?d00001 diff --git a/docs/lambda-config-before.png b/docs/lambda-config-before.png new file mode 100644 index 0000000000000000000000000000000000000000..6659eff9040d939fc9dc0437c6b5efbfee39ef1d GIT binary patch literal 57135 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 Date: Fri, 30 Jan 2026 11:40:11 +0000 Subject: [PATCH 27/27] debug: rm temp trigger --- .github/workflows/deploy_dev_full.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/deploy_dev_full.yml b/.github/workflows/deploy_dev_full.yml index 8e0f8cc7..d9c169e0 100644 --- a/.github/workflows/deploy_dev_full.yml +++ b/.github/workflows/deploy_dev_full.yml @@ -2,9 +2,6 @@ name: Dev Deploy Infra and Lambda on: workflow_dispatch: - push: - branches: - - auto-roll-back permissions: id-token: write