1+ # Only create MESH processor resources if MESH is configured for this environment
2+ locals {
3+ create_mesh_processor = local. is_mesh_enabled
4+ }
5+
16# Define the directory containing the Docker image and calculate its SHA-256 hash for triggering redeployments
27locals {
38 mesh_processor_lambda_dir = abspath (" ${ path . root } /../mesh_processor" )
49 mesh_processor_lambda_files = fileset (local. mesh_processor_lambda_dir , " **" )
510 mesh_processor_lambda_dir_sha = sha1 (join (" " , [for f in local . mesh_processor_lambda_files : filesha1 (" ${ local . mesh_processor_lambda_dir } /${ f } " )]))
611}
712
8-
913resource "aws_ecr_repository" "mesh_file_converter_lambda_repository" {
14+ count = local. create_mesh_processor ? 1 : 0
15+
1016 image_scanning_configuration {
1117 scan_on_push = true
1218 }
@@ -16,11 +22,12 @@ resource "aws_ecr_repository" "mesh_file_converter_lambda_repository" {
1622
1723# Module for building and pushing Docker image to ECR
1824module "mesh_processor_docker_image" {
25+ count = local. create_mesh_processor ? 1 : 0
1926 source = " terraform-aws-modules/lambda/aws//modules/docker-build"
2027 version = " 8.0.1"
2128
2229 create_ecr_repo = false
23- ecr_repo = aws_ecr_repository. mesh_file_converter_lambda_repository . name
30+ ecr_repo = aws_ecr_repository. mesh_file_converter_lambda_repository [ 0 ] . name
2431 ecr_repo_lifecycle_policy = jsonencode ({
2532 " rules" : [
2633 {
@@ -48,7 +55,8 @@ module "mesh_processor_docker_image" {
4855
4956# Define the lambdaECRImageRetreival policy
5057resource "aws_ecr_repository_policy" "mesh_processor_lambda_ECRImageRetreival_policy" {
51- repository = aws_ecr_repository. mesh_file_converter_lambda_repository . name
58+ count = local. create_mesh_processor ? 1 : 0
59+ repository = aws_ecr_repository. mesh_file_converter_lambda_repository [0 ]. name
5260
5361 policy = jsonencode ({
5462 Version = " 2012-10-17"
@@ -78,7 +86,8 @@ resource "aws_ecr_repository_policy" "mesh_processor_lambda_ECRImageRetreival_po
7886
7987# IAM Role for Lambda
8088resource "aws_iam_role" "mesh_processor_lambda_exec_role" {
81- name = " ${ local . short_prefix } -mesh_processor-lambda-exec-role"
89+ count = local. create_mesh_processor ? 1 : 0
90+ name = " ${ local . short_prefix } -mesh_processor-lambda-exec-role"
8291 assume_role_policy = jsonencode ({
8392 Version = " 2012-10-17" ,
8493 Statement = [{
@@ -94,7 +103,8 @@ resource "aws_iam_role" "mesh_processor_lambda_exec_role" {
94103
95104# Policy for Lambda execution role
96105resource "aws_iam_policy" "mesh_processor_lambda_exec_policy" {
97- name = " ${ local . short_prefix } -mesh_processor-lambda-exec-policy"
106+ count = local. create_mesh_processor ? 1 : 0
107+ name = " ${ local . short_prefix } -mesh_processor-lambda-exec-policy"
98108 policy = jsonencode ({
99109 Version = " 2012-10-17" ,
100110 Statement = [
@@ -140,6 +150,7 @@ resource "aws_iam_policy" "mesh_processor_lambda_exec_policy" {
140150}
141151
142152resource "aws_iam_policy" "mesh_processor_lambda_kms_access_policy" {
153+ count = local. create_mesh_processor ? 1 : 0
143154 name = " ${ local . short_prefix } -mesh_processor-lambda-kms-policy"
144155 description = " Allow Lambda to decrypt environment variables"
145156
@@ -155,7 +166,6 @@ resource "aws_iam_policy" "mesh_processor_lambda_kms_access_policy" {
155166 ]
156167 Resource = [
157168 data.aws_kms_key.mesh_s3_encryption_key.arn
158- # "arn:aws:kms:eu-west-2:345594581768:key/9b756762-bc6f-42fb-ba56-2c0c00c15289"
159169 ]
160170 }
161171 ]
@@ -164,23 +174,25 @@ resource "aws_iam_policy" "mesh_processor_lambda_kms_access_policy" {
164174
165175# Attach the execution policy to the Lambda role
166176resource "aws_iam_role_policy_attachment" "mesh_processor_lambda_exec_policy_attachment" {
167- role = aws_iam_role. mesh_processor_lambda_exec_role . name
168- policy_arn = aws_iam_policy. mesh_processor_lambda_exec_policy . arn
177+ count = local. create_mesh_processor ? 1 : 0
178+ role = aws_iam_role. mesh_processor_lambda_exec_role [0 ]. name
179+ policy_arn = aws_iam_policy. mesh_processor_lambda_exec_policy [0 ]. arn
169180}
170181
171-
172182# Attach the kms policy to the Lambda role
173183resource "aws_iam_role_policy_attachment" "mesh_processor_lambda_kms_policy_attachment" {
174- role = aws_iam_role. mesh_processor_lambda_exec_role . name
175- policy_arn = aws_iam_policy. mesh_processor_lambda_kms_access_policy . arn
184+ count = local. create_mesh_processor ? 1 : 0
185+ role = aws_iam_role. mesh_processor_lambda_exec_role [0 ]. name
186+ policy_arn = aws_iam_policy. mesh_processor_lambda_kms_access_policy [0 ]. arn
176187}
177188
178189# Lambda Function with Security Group and VPC.
179190resource "aws_lambda_function" "mesh_file_converter_lambda" {
191+ count = local. create_mesh_processor ? 1 : 0
180192 function_name = " ${ local . short_prefix } -mesh_processor_lambda"
181- role = aws_iam_role. mesh_processor_lambda_exec_role . arn
193+ role = aws_iam_role. mesh_processor_lambda_exec_role [ 0 ] . arn
182194 package_type = " Image"
183- image_uri = module. mesh_processor_docker_image . image_uri
195+ image_uri = module. mesh_processor_docker_image [ 0 ] . image_uri
184196 architectures = [" x86_64" ]
185197 timeout = 360
186198
@@ -190,33 +202,33 @@ resource "aws_lambda_function" "mesh_file_converter_lambda" {
190202 MESH_FILE_PROC_LAMBDA_NAME = " imms-${ local . env } -meshfileproc_lambda"
191203 }
192204 }
193-
194205}
195206
196207# Permission for S3 to invoke Lambda function
197208resource "aws_lambda_permission" "mesh_s3_invoke_permission" {
209+ count = local. create_mesh_processor ? 1 : 0
198210 statement_id = " AllowExecutionFromS3"
199211 action = " lambda:InvokeFunction"
200- function_name = aws_lambda_function. mesh_file_converter_lambda . function_name
212+ function_name = aws_lambda_function. mesh_file_converter_lambda [ 0 ] . function_name
201213 principal = " s3.amazonaws.com"
202- source_arn = " arn:aws:s3:::local-immunisation-mesh "
214+ source_arn = " arn:aws:s3:::${ local . mesh_s3_bucket_name } "
203215}
204216
205- # TODO - This is scoped to the bucket, so is overwritten by each deployment
206- # That might be intentional in prod, to switch between blue and green, but surely isn't in non-prod
207217# S3 Bucket notification to trigger Lambda function
208218resource "aws_s3_bucket_notification" "mesh_datasources_lambda_notification" {
209- # TODO - what is this bucket and why isn't it managed by Terraform?
210- bucket = " local-immunisation-mesh "
219+ count = local . create_mesh_processor ? 1 : 0
220+ bucket = local. mesh_s3_bucket_name
211221
212222 lambda_function {
213- lambda_function_arn = aws_lambda_function. mesh_file_converter_lambda . arn
223+ lambda_function_arn = aws_lambda_function. mesh_file_converter_lambda [ 0 ] . arn
214224 events = [" s3:ObjectCreated:*" ]
215- # filter_prefix =""
216225 }
226+
227+ depends_on = [aws_lambda_permission . mesh_s3_invoke_permission ]
217228}
218229
219230resource "aws_cloudwatch_log_group" "mesh_file_converter_log_group" {
231+ count = local. create_mesh_processor ? 1 : 0
220232 name = " /aws/lambda/${ local . short_prefix } -mesh_processor_lambda"
221233 retention_in_days = 30
222- }
234+ }
0 commit comments