Merge pull request #716 from Hestia-Homes/deploy-categorisation

Categorisation lambda handler and deployment
This commit is contained in:
Daniel Roth 2026-02-17 10:18:46 +00:00 committed by GitHub
commit 3d32234945
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 67 additions and 2 deletions

View file

@ -207,3 +207,44 @@ jobs:
AWS_SECRET_ACCESS_KEY: ${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.DEV_AWS_REGION }}
# ============================================================
# Categorisation image and Push
# ============================================================
categorisation_image:
needs: [determine_stage, shared_terraform]
uses: ./.github/workflows/_build_image.yml
with:
ecr_repo: categorisation-${{ needs.determine_stage.outputs.stage }}
dockerfile_path: backend/categorisation/handler/Dockerfile
build_context: .
build_args: |
DEV_DB_HOST=$DEV_DB_HOST
DEV_DB_PORT=$DEV_DB_PORT
DEV_DB_NAME=$DEV_DB_NAME
secrets:
AWS_ACCESS_KEY_ID: ${{ secrets.DEV_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.DEV_AWS_REGION }}
DEV_DB_HOST: ${{ secrets.DEV_DB_HOST }}
DEV_DB_PORT: ${{ secrets.DEV_DB_PORT }}
DEV_DB_NAME: ${{ secrets.DEV_DB_NAME }}
# ============================================================
# Deploy Categorisation Lambda
# ============================================================
categorisation_lambda:
needs: [categorisation_image, determine_stage]
uses: ./.github/workflows/_deploy_lambda.yml
with:
lambda_name: categorisation
lambda_path: infrastructure/terraform/lambda/categorisation
stage: ${{ needs.determine_stage.outputs.stage }}
ecr_repo: categorisation-${{ needs.determine_stage.outputs.stage }}
image_digest: ${{ needs.categorisation_image.outputs.image_digest }}
terraform_apply: ${{ needs.determine_stage.outputs.terraform_apply }}
secrets:
AWS_ACCESS_KEY_ID: ${{ secrets.DEV_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.DEV_AWS_REGION }}

View file

@ -1,4 +1,9 @@
import json
from typing import Any, Mapping
from backend.categorisation.categorisation_trigger_request import (
CategorisationTriggerRequest,
)
from backend.categorisation.processor import process_portfolio
from utils.logger import setup_logger
@ -7,4 +12,15 @@ logger = setup_logger()
def handler(event: Mapping[str, Any], context: Any) -> None:
pass
for record in event.get("Records", []):
try:
body_dict = json.loads(record["body"])
logger.debug("Validating request body")
payload = CategorisationTriggerRequest.model_validate(body_dict)
logger.debug("Successfully validated request body")
process_portfolio(payload.portfolio_id)
except Exception as e:
logger.error(f"Failed to process record: {e}")

View file

@ -1,3 +1,7 @@
data "aws_secretsmanager_secret_version" "db_credentials" {
secret_id = "${var.stage}/assessment_model/db_credentials"
}
data "terraform_remote_state" "shared" {
backend = "s3"
config = {
@ -7,6 +11,10 @@ data "terraform_remote_state" "shared" {
}
}
locals {
db_credentials = jsondecode(data.aws_secretsmanager_secret_version.db_credentials.secret_string)
}
module "lambda" {
source = "../modules/lambda_with_sqs"

View file

@ -7,7 +7,7 @@ terraform {
}
backend "s3" {
bucket = "categorisation"
bucket = "categorisation-terraform-state"
key = "terraform.tfstate"
region = "eu-west-2"
}