Skip to content

Commit d8f8fb5

Browse files
committed
Updated shared lambda endpoints
1 parent 3b9ed3b commit d8f8fb5

5 files changed

Lines changed: 53 additions & 93 deletions

File tree

infrastructure/instance/endpoints.tf

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ module "get_status" {
1212
prefix = local.prefix
1313
short_prefix = local.short_prefix
1414
function_name = "get_status"
15-
image_uri = module.docker_image.image_uri
15+
lambda_source_dir = local.lambda_dir
16+
shared_source_dir = "${local.shared_dir}/src/common"
17+
source_hash = "${local.lambda_dir_sha}-${local.shared_dir_sha}"
18+
artifact_s3_bucket = aws_s3_bucket.batch_data_source_bucket.bucket
1619
policy_json = data.aws_iam_policy_document.logs_policy_document.json
1720
error_alarm_notifications_enabled = var.error_alarm_notifications_enabled
1821
environment = var.environment
@@ -65,7 +68,10 @@ module "imms_event_endpoint_lambdas" {
6568
prefix = local.prefix
6669
short_prefix = local.short_prefix
6770
function_name = local.imms_endpoints[count.index]
68-
image_uri = module.docker_image.image_uri
71+
lambda_source_dir = local.lambda_dir
72+
shared_source_dir = "${local.shared_dir}/src/common"
73+
source_hash = "${local.lambda_dir_sha}-${local.shared_dir_sha}"
74+
artifact_s3_bucket = aws_s3_bucket.batch_data_source_bucket.bucket
6975
policy_json = data.aws_iam_policy_document.imms_policy_document.json
7076
environment_variables = local.imms_lambda_env_vars
7177
vpc_subnet_ids = local.private_subnet_ids

infrastructure/instance/lambda.tf

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -4,83 +4,3 @@ locals {
44
lambda_files = fileset(local.lambda_dir, "**")
55
lambda_dir_sha = sha1(join("", [for f in local.lambda_files : filesha1("${local.lambda_dir}/${f}")]))
66
}
7-
8-
resource "aws_ecr_repository" "operation_lambda_repository" {
9-
image_scanning_configuration {
10-
scan_on_push = true
11-
}
12-
name = "${local.prefix}-operation-lambda-repo"
13-
force_delete = local.is_temp
14-
}
15-
16-
# Module for building and pushing Docker image to ECR
17-
module "docker_image" {
18-
source = "terraform-aws-modules/lambda/aws//modules/docker-build"
19-
version = "8.7.0"
20-
21-
create_ecr_repo = false
22-
ecr_repo = "${local.prefix}-operation-lambda-repo"
23-
docker_file_path = "./backend/Dockerfile"
24-
ecr_repo_lifecycle_policy = jsonencode({
25-
"rules" : [
26-
{
27-
"rulePriority" : 1,
28-
"description" : "Keep only the last 2 images",
29-
"selection" : {
30-
"tagStatus" : "any",
31-
"countType" : "imageCountMoreThan",
32-
"countNumber" : 2
33-
},
34-
"action" : {
35-
"type" : "expire"
36-
}
37-
}
38-
]
39-
})
40-
41-
platform = "linux/amd64"
42-
use_image_tag = false
43-
source_path = abspath("${path.root}/../../lambdas")
44-
triggers = {
45-
dir_sha = local.lambda_dir_sha
46-
shared_dir_sha = local.shared_dir_sha
47-
}
48-
}
49-
50-
# Define the lambdaECRImageRetreival policy
51-
resource "aws_ecr_repository_policy" "operation_lambda_ECRImageRetreival_policy" {
52-
repository = aws_ecr_repository.operation_lambda_repository.name
53-
54-
policy = jsonencode({
55-
Version = "2012-10-17"
56-
Statement = [
57-
{
58-
"Sid" : "LambdaECRImageRetrievalPolicy",
59-
"Effect" : "Allow",
60-
"Principal" : {
61-
"Service" : "lambda.amazonaws.com"
62-
},
63-
"Action" : [
64-
"ecr:BatchGetImage",
65-
"ecr:DeleteRepositoryPolicy",
66-
"ecr:GetDownloadUrlForLayer",
67-
"ecr:GetRepositoryPolicy",
68-
"ecr:SetRepositoryPolicy"
69-
],
70-
"Condition" : {
71-
"StringLike" : {
72-
"aws:sourceArn" : [
73-
"arn:aws:lambda:${var.aws_region}:${var.immunisation_account_id}:function:${local.short_prefix}_get_status",
74-
"arn:aws:lambda:${var.aws_region}:${var.immunisation_account_id}:function:${local.short_prefix}_not_found",
75-
"arn:aws:lambda:${var.aws_region}:${var.immunisation_account_id}:function:${local.short_prefix}_search_imms",
76-
"arn:aws:lambda:${var.aws_region}:${var.immunisation_account_id}:function:${local.short_prefix}_get_imms",
77-
"arn:aws:lambda:${var.aws_region}:${var.immunisation_account_id}:function:${local.short_prefix}_delete_imms",
78-
"arn:aws:lambda:${var.aws_region}:${var.immunisation_account_id}:function:${local.short_prefix}_create_imms",
79-
"arn:aws:lambda:${var.aws_region}:${var.immunisation_account_id}:function:${local.short_prefix}_update_imms"
80-
]
81-
}
82-
}
83-
}
84-
]
85-
})
86-
}

infrastructure/instance/modules/lambda/lambda.tf

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,40 @@
1-
module "lambda_function_container_image" {
1+
module "lambda_function_zip" {
22
source = "terraform-aws-modules/lambda/aws"
33
version = "8.0.1"
44

55
create_role = false
66
lambda_role = aws_iam_role.lambda_role.arn
77
function_name = "${var.short_prefix}_${var.function_name}"
88
handler = "${var.function_name}_handler.${var.function_name}_handler"
9+
runtime = "python3.11"
910
cloudwatch_logs_retention_in_days = 30
10-
create_package = false
11-
image_uri = var.image_uri
12-
package_type = "Image"
11+
package_type = "Zip"
1312
architectures = ["x86_64"]
1413
timeout = 6
14+
store_on_s3 = true
15+
s3_bucket = var.artifact_s3_bucket
16+
s3_prefix = "lambda-artifacts/${var.short_prefix}_${var.function_name}"
17+
build_in_docker = true
18+
hash_extra = var.source_hash
19+
trigger_on_package_timestamp = false
20+
21+
source_path = [
22+
{
23+
path = "${var.lambda_source_dir}/src"
24+
},
25+
{
26+
path = var.shared_source_dir
27+
prefix_in_zip = "common"
28+
},
29+
{
30+
path = var.lambda_source_dir
31+
poetry_install = true
32+
patterns = [
33+
"pyproject.toml",
34+
"poetry.lock"
35+
]
36+
}
37+
]
1538

1639
vpc_subnet_ids = var.vpc_subnet_ids
1740
vpc_security_group_ids = var.vpc_security_group_ids
@@ -21,7 +44,6 @@ module "lambda_function_container_image" {
2144
memory_size = 1024
2245

2346
environment_variables = var.environment_variables
24-
image_config_command = ["${var.function_name}_handler.${var.function_name}_handler"]
2547
}
2648

2749
resource "aws_cloudwatch_metric_alarm" "memory_alarm" {
@@ -42,7 +64,7 @@ resource "aws_cloudwatch_log_metric_filter" "max_memory_used_metric" {
4264
name = "${var.short_prefix}_${var.function_name} max memory used"
4365
pattern = "[type=REPORT, ...]"
4466

45-
log_group_name = module.lambda_function_container_image.lambda_cloudwatch_log_group_name
67+
log_group_name = module.lambda_function_zip.lambda_cloudwatch_log_group_name
4668

4769
metric_transformation {
4870
name = "max-memory-used"
@@ -56,7 +78,7 @@ resource "aws_cloudwatch_log_metric_filter" "fhir_api_error_logs" {
5678

5779
name = "${var.short_prefix}_${var.function_name}-ErrorLogsFilter"
5880
pattern = "{ $.operation_outcome.status = \"500\" || $.operation_outcome.status = \"403\" }"
59-
log_group_name = module.lambda_function_container_image.lambda_cloudwatch_log_group_name
81+
log_group_name = module.lambda_function_zip.lambda_cloudwatch_log_group_name
6082

6183
metric_transformation {
6284
name = "${var.short_prefix}_${var.function_name}-ApiErrorLogs"
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
output "function_name" {
2-
value = module.lambda_function_container_image.lambda_function_name
2+
value = module.lambda_function_zip.lambda_function_name
33
}
44
output "lambda_arn" {
5-
value = module.lambda_function_container_image.lambda_function_arn
5+
value = module.lambda_function_zip.lambda_function_arn
66
}
77
output "invoke_arn" {
8-
value = module.lambda_function_container_image.lambda_function_invoke_arn
8+
value = module.lambda_function_zip.lambda_function_invoke_arn
99
}

infrastructure/instance/modules/lambda/variables.tf

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,19 @@ variable "error_alarm_notifications_enabled" {
1515
type = string
1616
}
1717

18-
variable "image_uri" {
18+
variable "lambda_source_dir" {
19+
type = string
20+
}
21+
22+
variable "shared_source_dir" {
23+
type = string
24+
}
25+
26+
variable "source_hash" {
27+
type = string
28+
}
29+
30+
variable "artifact_s3_bucket" {
1931
type = string
2032
}
2133

0 commit comments

Comments
 (0)