Merge branch 'main' into deploy-backend-with-terraform

This commit is contained in:
Daniel Roth 2026-03-09 09:27:41 +00:00
commit e32b783b35
7 changed files with 61 additions and 10 deletions

View file

@ -364,5 +364,5 @@ Here's what you should do:
function.
By following these steps, you should have your custom domain properly configured and pointing to your AWS Lambda
function via the CloudFront distribution.
function via the CloudFront distribution

View file

@ -24,6 +24,8 @@ module "lambda" {
maximum_concurrency = var.maximum_concurrency
batch_size = var.batch_size
timeout = 120
environment = merge(
{
STAGE = var.stage

View file

@ -24,8 +24,10 @@ module "lambda" {
image_uri = local.image_uri
# Optional: Set maximum_concurrency to limit concurrent SQS-triggered invocations (2-1000)
maximum_concurrency = var.maximum_concurrency
batch_size = var.batch_size
timeout = var.timeout
memory_size = var.memory_size
environment = merge(
{

View file

@ -23,6 +23,23 @@ variable "maximum_concurrency" {
description = "Maximum number of concurrent Lambda invocations from SQS (2-1000). null = no limit."
}
variable "batch_size" {
type = number
default = 1
}
variable "timeout" {
type = number
default = 900
description = "Lambda timeout in seconds"
}
variable "memory_size" {
type = number
default = 3008
description = "Lambda memory size in MB"
}
variable "db_host" {
type = string
sensitive = true

View file

@ -12,6 +12,35 @@ resource "aws_iam_user" "ses_user" {
name = "${var.stage}-ses-user"
}
# SES configuration set for tracking events
resource "aws_ses_configuration_set" "this" {
name = "${var.stage}-ses-config"
}
# SNS topic for SES event notifications
resource "aws_sns_topic" "ses_events" {
name = "${var.stage}-ses-events"
}
# SES event destination for debugging
resource "aws_ses_event_destination" "sns" {
name = "ses-event-destination"
configuration_set_name = aws_ses_configuration_set.this.name
enabled = true
matching_types = [
"send",
"bounce",
"reject",
"complaint",
"delivery"
]
sns_destination {
topic_arn = aws_sns_topic.ses_events.arn
}
}
resource "aws_iam_user_policy" "ses_send_policy" {
name = "AllowSESSendEmail"
user = aws_iam_user.ses_user.name
@ -20,8 +49,8 @@ resource "aws_iam_user_policy" "ses_send_policy" {
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = [
Effect = "Allow"
Action = [
"ses:SendEmail",
"ses:SendRawEmail"
]
@ -42,9 +71,9 @@ resource "aws_secretsmanager_secret" "ses_smtp" {
}
resource "aws_secretsmanager_secret_version" "ses_smtp" {
secret_id = aws_secretsmanager_secret.ses_smtp.id
secret_id = aws_secretsmanager_secret.ses_smtp.id
secret_string = jsonencode({
username = aws_iam_access_key.ses_user.id
password = aws_iam_access_key.ses_user.ses_smtp_password_v4
})
}
}

View file

@ -7,3 +7,4 @@ variable "stage" {
description = "Deployment stage (e.g. dev, prod)"
type = string
}

View file

@ -28,15 +28,15 @@ from sqlalchemy import func
# PORTFOLIO_ID = 206
# SCENARIOS = [389]
PORTFOLIO_ID = 597
PORTFOLIO_ID = 581
SCENARIOS = [
1099
1124
]
scenario_names = {
1099: "£10k cost capped - no solid wall or floor",
1124: "EPC C - Solar Focused",
}
project_name = "Livespace Rentals"
project_name = "WCHG EPC D rated properties"
def get_data(portfolio_id, scenario_ids):