Skip to content
Open
Show file tree
Hide file tree
Changes from 146 commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
2562437
CCM-12616: Added py-mock-mesh module
gareth-allan Nov 5, 2025
0da3abd
CCM-12616: Replaced mesh-poll Lambda with a skeleton Python version
gareth-allan Nov 5, 2025
b141b21
CCM-12616: test
lapenna-bjss Nov 11, 2025
9876b1d
CCM-12616: add false positive to .gitleaksignore
lapenna-bjss Nov 11, 2025
331d6c4
CCM-12616: fix sonarcloud issues
lapenna-bjss Nov 12, 2025
2ed8cf1
CCM-12616: fix sonarcloud issues
lapenna-bjss Nov 12, 2025
73fbd53
CCM-12616: Exclude mesh poll lambda from SonarCloud coverage temporarily
lapenna-bjss Nov 12, 2025
ce9e182
CCM-12616: add poetry install to pre.sh
lapenna-bjss Nov 13, 2025
cc83432
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Nov 17, 2025
e02647d
CCM-12616: update .gitignore
lapenna-bjss Nov 18, 2025
dc0f7cf
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Nov 18, 2025
19b16de
CCM-12616: mesh-poll lambda
lapenna-bjss Nov 20, 2025
29fa28c
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Nov 20, 2025
092fd3f
CCM-12616: terraform code
lapenna-bjss Nov 21, 2025
94a2f08
CCM-12616: metric publisher
lapenna-bjss Nov 21, 2025
8631401
CCM-12616: mock mesh only when enabled
lapenna-bjss Nov 26, 2025
bc10540
CCM-12616: add senderId to CloudEvent data
lapenna-bjss Nov 26, 2025
d1c9cd7
CCM-12616: mesh-download lambda
lapenna-bjss Nov 27, 2025
51181ca
CCM-12616: add document_store tests
lapenna-bjss Nov 27, 2025
c045cc1
CCM-12616: update mesh download tests
lapenna-bjss Nov 28, 2025
0e51120
CCM-12616: add S3 putObject statement for storing messages when mock …
lapenna-bjss Nov 28, 2025
1054505
CCM-12616: add messageReference to the event data
lapenna-bjss Nov 28, 2025
d6dc913
CCM-12616: rename client to sender
lapenna-bjss Nov 28, 2025
f068287
CCM-12616: fix sonar issue
lapenna-bjss Nov 28, 2025
3059592
CCM-12616: move docs dependencies to a separate make command
lapenna-bjss Nov 28, 2025
b43fed5
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Nov 28, 2025
0624e52
CCM-12616: update python runtime
lapenna-bjss Dec 1, 2025
92ce87f
CCM-12616: update ssm prefixes with the correct paths
lapenna-bjss Dec 1, 2025
904756a
CCM-12616: add shared MESH config
lapenna-bjss Dec 1, 2025
e024971
CCM-12616: update pipeline
lapenna-bjss Dec 2, 2025
9a401da
CCM-12616: update config and tests
lapenna-bjss Dec 2, 2025
7691746
CCM-12616: resolve comments
lapenna-bjss Dec 3, 2025
0498402
CCM-12616: resolve comments
lapenna-bjss Dec 5, 2025
b0cf0c8
CCM-12616: fix pipeline issues
lapenna-bjss Dec 5, 2025
360cdfb
CCM-12616: fix pipeline issues
lapenna-bjss Dec 5, 2025
3589952
CCM-12616: test
lapenna-bjss Dec 5, 2025
ae8b458
CCM-12616: test
lapenna-bjss Dec 5, 2025
4fd7343
CCM-12616: test
lapenna-bjss Dec 5, 2025
a912dae
CCM-12616: test
lapenna-bjss Dec 8, 2025
0ace208
CCM-12616: test
lapenna-bjss Dec 8, 2025
36b94ec
CCM-12616: revert changes
lapenna-bjss Dec 8, 2025
ff2e5b7
CCM-12616: test
lapenna-bjss Dec 8, 2025
eae4795
CCM-12616: test
lapenna-bjss Dec 8, 2025
e07f431
CCM-12616: test
lapenna-bjss Dec 8, 2025
1ed06b2
CCM-12616: fix sonarcloud coverage issues
lapenna-bjss Dec 8, 2025
aa80734
CCM-12616: fix sonarcloud coverage issues
lapenna-bjss Dec 8, 2025
e8d06a0
CCM-12616: convert poetry to pip
lapenna-bjss Dec 9, 2025
62035fb
CCM-12616: test
lapenna-bjss Dec 9, 2025
8baf979
CCM-12616: test
lapenna-bjss Dec 9, 2025
21e3c2e
CCM-12616: test
lapenna-bjss Dec 9, 2025
d312464
CCM-12616: add setup.py files
lapenna-bjss Dec 11, 2025
abcee60
CCM-12616: update coverage.xml paths
lapenna-bjss Dec 11, 2025
5f559b8
CCM-12616: update coverage.xml paths
lapenna-bjss Dec 11, 2025
9000b50
CCM-12616: update sonar-scanner.properties
lapenna-bjss Dec 11, 2025
b79e3d4
CCM-12616: update sonar-scanner.properties
lapenna-bjss Dec 11, 2025
9c8741c
CCM-12616: remove poetry from pre.sh
lapenna-bjss Dec 11, 2025
4656623
CCM-12616: fix Unsupported attribute error
lapenna-bjss Dec 11, 2025
f2061ab
CCM-12616: fix lambda env vars
lapenna-bjss Dec 11, 2025
8a0b984
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Dec 11, 2025
590d3df
CCM-12616: skip build docs step
lapenna-bjss Dec 11, 2025
ff76bbc
CCM-12616: test deployment
lapenna-bjss Dec 15, 2025
bb0454e
CCM-12616: test deployment
lapenna-bjss Dec 15, 2025
367c5e9
CCM-12616: Restore previously disabled pipeline steps
lapenna-bjss Dec 16, 2025
e3cfa1d
CCM-12616: Update Readme
lapenna-bjss Dec 17, 2025
bd975fb
CCM-12616: Update Makefile
lapenna-bjss Dec 17, 2025
73278ca
CCM-12616: Update sonar properties
lapenna-bjss Dec 17, 2025
ca56d6e
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Dec 17, 2025
295dfe8
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
gareth-allan Dec 18, 2025
e2a1485
CCM-12616: Remove mesh-poll lambda from workspace Jest folders
gareth-allan Dec 18, 2025
5b7ea7a
CCM-12616: Update events published to match latest schemas
gareth-allan Dec 18, 2025
b066e55
CCM-12616: Updated base CloudEvent model to match latest schemas
gareth-allan Dec 18, 2025
c7076d1
CCM-12616: Attempt to fix mesh-poll lambda's packaging
gareth-allan Dec 19, 2025
ebfb170
CCM-12616: Attempt to fix mesh-poll lambda entrypoint
gareth-allan Dec 19, 2025
02e1566
CCM-12616: Another mesh-poll packaging tweak
gareth-allan Dec 19, 2025
242e7c0
CCM-12616: Fix mesh-poll SSM parameters
gareth-allan Dec 19, 2025
a39f0f7
CCM-12616: Fix import module error
lapenna-bjss Dec 29, 2025
ee8fc7d
Merge branch 'feature/CCM-12616_mesh_poll_retrieve' of https://github…
lapenna-bjss Dec 29, 2025
7bcdbb6
CCM-12616: Update runtime version
lapenna-bjss Dec 31, 2025
fe52cd2
CCM-12616: Test
lapenna-bjss Dec 31, 2025
309c771
CCM-12616: Test
lapenna-bjss Jan 2, 2026
e666aca
CCM-12616: Don't zip Python lambda output when packaging
gareth-allan Jan 5, 2026
d991073
CCM-12616: Allow mesh_poll lambda to call ssm:GetParameter
gareth-allan Jan 5, 2026
6dbd587
CCM-12616: Fix SSM parameter format in mesh_poll IAM policy
gareth-allan Jan 5, 2026
e317569
CCM-12616: Update mesh download package script
lapenna-bjss Jan 5, 2026
0ec4b00
CCM-12616: Add setup file to mesh download
lapenna-bjss Jan 6, 2026
9a3afe3
CCM-12616: Fix mesh download tests
lapenna-bjss Jan 6, 2026
e26a815
CCM-12616: Add SSM statement to mesh download
lapenna-bjss Jan 6, 2026
f0eebf1
CCM-12616: Add MESH SSM parameter configuration
lapenna-bjss Jan 7, 2026
857a9b8
CCM-12616: Add false positive to .gitleaksignore
lapenna-bjss Jan 7, 2026
9c6663b
CCM-12616: Increase mesh poll timeout
lapenna-bjss Jan 8, 2026
da8ad2c
CCM-12616: Update mesh poll S3 terraform statement
lapenna-bjss Jan 8, 2026
cf5b80e
CCM-12616: Fix pydantic model
lapenna-bjss Jan 9, 2026
cb465f3
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Jan 12, 2026
662ee02
CCM-12616: Update the Eventbridge rule
lapenna-bjss Jan 12, 2026
8e68276
CCM-12616: Update package-lock file
lapenna-bjss Jan 12, 2026
779ba5b
CCM-12616: Fix linting error
lapenna-bjss Jan 12, 2026
0941047
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve
lapenna-bjss Jan 12, 2026
4b55ec4
CCM-12616: Fix linting error
lapenna-bjss Jan 12, 2026
dc9058b
CCM-12616: Add a retrieve_message method
lapenna-bjss Jan 12, 2026
80e2506
CCM-12616: 100
lapenna-bjss Jan 12, 2026
eff74d0
CCM-13278: Create skeleton mesh-acknowledge lambda
gareth-allan Jan 5, 2026
4bc5589
CCM-12616: Component tests
lapenna-bjss Jan 13, 2026
7bd4a78
CCM-12616: Fix linting errors
lapenna-bjss Jan 13, 2026
f507c23
CCM-13278: Add Terraform for mesh-acknowledge lambda
gareth-allan Jan 5, 2026
2c856d1
CCM-13278: Add data.meshMessageId field to MESHInboxMessageDownloaded
gareth-allan Jan 6, 2026
5d72645
CCM-13278: Add component tests for MESH acknowledger
gareth-allan Jan 6, 2026
b66f602
CCM-13278: Update VSCode workspace config
gareth-allan Jan 7, 2026
471f603
CCM-13278: Add Python utilities
gareth-allan Jan 8, 2026
92f86cc
CCM-13278: Add Python sender lookup utility
gareth-allan Jan 8, 2026
b1a6b60
CCM-13278: Implement mesh-acknowledge lambda
gareth-allan Jan 9, 2026
d43848e
CCM-12616: Update tests
lapenna-bjss Jan 14, 2026
68847d3
CCM-12616: Update ssm prefix path
lapenna-bjss Jan 14, 2026
832f32e
Merge branch 'feature/CCM-12616_mesh_poll_retrieve' into feature/CCM-…
lapenna-bjss Jan 14, 2026
d1b6379
Merge branch 'main' into feature/CCM-13278_mesh_acknowledge
simonlabarere Jan 16, 2026
4c7c531
Merge branch 'main' into feature/CCM-13278_mesh_acknowledge
simonlabarere Jan 16, 2026
588d8a6
CCM-13278: Fix code duplication
simonlabarere Jan 16, 2026
a25b591
CCM-13278: Fix code duplication
simonlabarere Jan 16, 2026
8d97642
CCM-13278: Fix TF
simonlabarere Jan 16, 2026
57cb594
CCM-13278: Fix TF
simonlabarere Jan 16, 2026
790876a
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve_compone…
simonlabarere Jan 19, 2026
5b224e4
CCM-12616: Split MESH/Senders config
simonlabarere Jan 20, 2026
c137d99
CCM-12616: Split MESH/Senders config
simonlabarere Jan 20, 2026
ec89ccd
CCM-12616: Split MESH/Senders config
simonlabarere Jan 20, 2026
bf613ce
CCM-12616: Split MESH/Senders config
simonlabarere Jan 20, 2026
709cab7
CCM-12616: Adjust component test
simonlabarere Jan 20, 2026
44f3682
CCM-12616: Adjust component test
simonlabarere Jan 20, 2026
2117067
CCM-13278: Updated TF config
simonlabarere Jan 21, 2026
99ceb79
CCM-12616: Remove mesh cert expiry metric from MESH Download
simonlabarere Jan 21, 2026
c8dfd68
CCM-13278: Remove MESH cert expiry metric from MESH Acknowledge
simonlabarere Jan 21, 2026
c2008de
CCM-13278: Address review comments
simonlabarere Jan 21, 2026
c78c8ae
CCM-12616: Fix event subject + fix component tests
simonlabarere Jan 21, 2026
775291f
CCM-12616: More test fixing
simonlabarere Jan 21, 2026
3f47a03
Merge branch 'main' into feature/CCM-12616_mesh_poll_retrieve_compone…
simonlabarere Jan 21, 2026
98792ed
CCM-13278: Create Python Utility library
simonlabarere Jan 22, 2026
b4edb2b
CCM-13278: Improve test coverage
simonlabarere Jan 22, 2026
1148cb7
CCM-13278: Improve test coverage
simonlabarere Jan 22, 2026
2b0fb1d
Merge branch 'main' into feature/CCM-13278_mesh_acknowledge
simonlabarere Jan 22, 2026
bf08827
Merge branch 'feature/CCM-13278_mesh_acknowledge' into feature/CCM-12…
simonlabarere Jan 22, 2026
e033336
CCM-13278: Merge libraries into utility library
simonlabarere Jan 22, 2026
6c3043e
CCM-13278: Fix py-utils dependencies
simonlabarere Jan 22, 2026
a71f655
CCM-12616: Fix MESH lamdbas
simonlabarere Jan 22, 2026
c53a07c
CCM-12616: Fix MESH lamdbas
simonlabarere Jan 22, 2026
b1f1ec2
Merge branch 'main' into feature/CCM-12616_CCM-13278
simonlabarere Jan 22, 2026
6d9206f
CCM-12616: Fix wheel vulnerability
simonlabarere Jan 23, 2026
83c17f4
CCM-13278: Update dev dependencies
simonlabarere Jan 23, 2026
bcd23e8
CCM-12616: Remove console.log from tests
simonlabarere Jan 23, 2026
55ca418
CCM-12616: fix MESH lambda publishing events with null fields
simonlabarere Jan 26, 2026
63ad676
CCM-12616: fix MESH lambda publishing events with null fields
simonlabarere Jan 26, 2026
2d76693
CCM-12616: fix MESH lambda publishing events with null fields
simonlabarere Jan 26, 2026
b520be7
CCM-12616: fix MESH lambda publishing events with null fields
simonlabarere Jan 26, 2026
47825f7
CCM-12616: Allow PDM uploader to read from pii-data bucket
simonlabarere Jan 26, 2026
b711319
Merge branch 'main' into feature/CCM-12616_CCM-13278
simonlabarere Jan 26, 2026
ea5d05d
CCM-12616: Add test for InvalidMeshEndpointError
simonlabarere Jan 27, 2026
2cc6ab6
Merge branch 'main' into feature/CCM-12616_CCM-13278
simonlabarere Jan 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ quick-start: config clean build serve-docs # Quick start target to setup, build
dependencies:: # Install dependencies needed to build and test the project @Pipeline
$(MAKE) -C src/cloudevents install
$(MAKE) -C src/eventcatalogasyncapiimporter install
$(MAKE) -C lambdas/mesh-acknowledge install
$(MAKE) -C utils/py-utils install
$(MAKE) -C lambdas/mesh-poll install
$(MAKE) -C lambdas/mesh-download install
$(MAKE) -C utils/metric-publishers install
$(MAKE) -C utils/event-publisher-py install
$(MAKE) -C utils/py-mock-mesh install
./scripts/set-github-token.sh
npm install --workspaces
Expand Down Expand Up @@ -44,10 +44,10 @@ clean:: # Clean-up project resources (main) @Operations
$(MAKE) -C src/cloudevents clean && \
$(MAKE) -C src/eventcatalogasyncapiimporter clean && \
$(MAKE) -C src/eventcatalogasyncapiimporter clean-output && \
$(MAKE) -C lambdas/mesh-acknowledge clean && \
$(MAKE) -C utils/py-utils clean && \
$(MAKE) -C lambdas/mesh-poll clean && \
$(MAKE) -C lambdas/mesh-download clean && \
$(MAKE) -C utils/metric-publishers clean && \
$(MAKE) -C utils/event-publisher-py clean && \
$(MAKE) -C utils/py-mock-mesh clean && \
$(MAKE) -C src/python-schema-generator clean && \
rm -f .version
Expand Down
2 changes: 2 additions & 0 deletions infrastructure/terraform/components/dl/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ No requirements.
| <a name="module_kms"></a> [kms](#module\_kms) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-kms.zip | n/a |
| <a name="module_lambda_apim_key_generation"></a> [lambda\_apim\_key\_generation](#module\_lambda\_apim\_key\_generation) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
| <a name="module_lambda_lambda_apim_refresh_token"></a> [lambda\_lambda\_apim\_refresh\_token](#module\_lambda\_lambda\_apim\_refresh\_token) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
| <a name="module_mesh_acknowledge"></a> [mesh\_acknowledge](#module\_mesh\_acknowledge) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
| <a name="module_mesh_download"></a> [mesh\_download](#module\_mesh\_download) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
| <a name="module_mesh_poll"></a> [mesh\_poll](#module\_mesh\_poll) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
| <a name="module_pdm_mock"></a> [pdm\_mock](#module\_pdm\_mock) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
Expand All @@ -58,6 +59,7 @@ No requirements.
| <a name="module_s3bucket_static_assets"></a> [s3bucket\_static\_assets](#module\_s3bucket\_static\_assets) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-s3bucket.zip | n/a |
| <a name="module_sqs_core_notifier"></a> [sqs\_core\_notifier](#module\_sqs\_core\_notifier) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
| <a name="module_sqs_event_publisher_errors"></a> [sqs\_event\_publisher\_errors](#module\_sqs\_event\_publisher\_errors) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
| <a name="module_sqs_mesh_acknowledge"></a> [sqs\_mesh\_acknowledge](#module\_sqs\_mesh\_acknowledge) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-sqs.zip | n/a |
| <a name="module_sqs_mesh_download"></a> [sqs\_mesh\_download](#module\_sqs\_mesh\_download) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
| <a name="module_sqs_pdm_poll"></a> [sqs\_pdm\_poll](#module\_sqs\_pdm\_poll) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
| <a name="module_sqs_pdm_uploader"></a> [sqs\_pdm\_uploader](#module\_sqs\_pdm\_uploader) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,10 @@ resource "aws_cloudwatch_event_target" "pdm-uploader-target" {
target_id = "pdm-uploader-target"
event_bus_name = aws_cloudwatch_event_bus.main.name
}

resource "aws_cloudwatch_event_target" "mesh-acknowledge-target" {
rule = aws_cloudwatch_event_rule.mesh_inbox_message_downloaded.name
arn = module.sqs_mesh_acknowledge.sqs_queue_arn
target_id = "mesh-acknowledge-target"
event_bus_name = aws_cloudwatch_event_bus.main.name
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
resource "aws_lambda_event_source_mapping" "sqs_mesh_acknowledge_lambda" {
event_source_arn = module.sqs_mesh_acknowledge.sqs_queue_arn
function_name = module.mesh_acknowledge.function_name
batch_size = var.queue_batch_size
maximum_batching_window_in_seconds = var.queue_batch_window_seconds

function_response_types = [
"ReportBatchItemFailures"
]
}
4 changes: 3 additions & 1 deletion infrastructure/terraform/components/dl/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ locals {
apim_api_key_ssm_parameter_name = "/${var.component}/${var.environment}/apim/api_key"
apim_private_key_ssm_parameter_name = "/${var.component}/${var.environment}/apim/private_key"
apim_keystore_s3_bucket = "nhs-${var.aws_account_id}-${var.region}-${var.environment}-${var.component}-static-assets"
ssm_mesh_prefix = "/${var.component}/${var.environment}/mesh"
ssm_prefix = "/${var.component}/${var.environment}"
ssm_mesh_prefix = "${local.ssm_prefix}/mesh"
ssm_senders_prefix = "${local.ssm_prefix}/senders"
mock_mesh_endpoint = "s3://${module.s3bucket_non_pii_data.bucket}/mock-mesh"
root_domain_name = "${var.environment}.${local.acct.route53_zone_names["digital-letters"]}"
root_domain_id = local.acct.route53_zone_ids["digital-letters"]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
module "mesh_acknowledge" {
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip"

function_name = "mesh-acknowledge"
description = "A lambda function for acknowledging MESH messages"
aws_account_id = var.aws_account_id
component = local.component
environment = var.environment
project = var.project
region = var.region
group = var.group

log_retention_in_days = var.log_retention_in_days
kms_key_arn = module.kms.key_arn

iam_policy_document = {
body = data.aws_iam_policy_document.mesh_acknowledge_lambda.json
}

function_s3_bucket = local.acct.s3_buckets["lambda_function_artefacts"]["id"]
function_code_base_path = local.aws_lambda_functions_dir_path
function_code_dir = "mesh-acknowledge/target/dist"
function_include_common = true
function_module_name = "mesh_acknowledge"
handler_function_name = "handler.handler"
runtime = "python3.14"
memory = 128
timeout = 5
log_level = var.log_level

force_lambda_code_deploy = var.force_lambda_code_deploy
enable_lambda_insights = false

log_destination_arn = local.log_destination_arn
log_subscription_role_arn = local.acct.log_subscription_role_arn

lambda_env_vars = {
DLQ_URL = module.sqs_mesh_acknowledge.sqs_dlq_url
ENVIRONMENT = var.environment
EVENT_PUBLISHER_DLQ_URL = module.sqs_event_publisher_errors.sqs_queue_url
EVENT_PUBLISHER_EVENT_BUS_ARN = aws_cloudwatch_event_bus.main.arn
MOCK_MESH_BUCKET = module.s3bucket_non_pii_data.bucket
SSM_MESH_PREFIX = "${local.ssm_mesh_prefix}"
SSM_SENDERS_PREFIX = "${local.ssm_senders_prefix}"
USE_MESH_MOCK = var.enable_mock_mesh ? "true" : "false"
}

}

data "aws_iam_policy_document" "mesh_acknowledge_lambda" {
statement {
sid = "KMSPermissions"
effect = "Allow"

actions = [
"kms:Decrypt",
"kms:GenerateDataKey",
]

resources = [
module.kms.key_arn,
]
}

statement {
sid = "SQSPermissions"
effect = "Allow"

actions = [
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes",
]

resources = [
module.sqs_mesh_acknowledge.sqs_queue_arn,
]
}

statement {
sid = "SQSDLQPermissions"
effect = "Allow"

actions = [
"sqs:SendMessage",
]

resources = [
module.sqs_mesh_acknowledge.sqs_dlq_arn,
]
}

statement {
sid = "EventBridgePermissions"
effect = "Allow"

actions = [
"events:PutEvents",
]

resources = [
aws_cloudwatch_event_bus.main.arn,
]
}

statement {
sid = "DLQPermissions"
effect = "Allow"

actions = [
"sqs:SendMessage",
"sqs:SendMessageBatch",
]

resources = [
module.sqs_event_publisher_errors.sqs_queue_arn,
]
}

statement {
sid = "SSMPermissions"
effect = "Allow"

actions = [
"ssm:GetParameter",
"ssm:GetParametersByPath",
]

resources = [
"arn:aws:ssm:${var.region}:${var.aws_account_id}:parameter${local.ssm_prefix}/*"
]
}

# Grant S3 PutObject permissions for the mock-mesh directory only when the mock is enabled
dynamic "statement" {
for_each = var.enable_mock_mesh ? [1] : []
content {
sid = "MockMeshPutObject"
effect = "Allow"

actions = [
"s3:PutObject",
]

resources = [
"${module.s3bucket_non_pii_data.arn}/mock-mesh/*"
]
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,14 @@ module "mesh_download" {
log_subscription_role_arn = local.acct.log_subscription_role_arn

lambda_env_vars = {
CERTIFICATE_EXPIRY_METRIC_NAME = "mesh-download-client-certificate-near-expiry"
CERTIFICATE_EXPIRY_METRIC_NAMESPACE = "dl-mesh-download"
DOWNLOAD_METRIC_NAME = "mesh-download-successful-downloads"
DOWNLOAD_METRIC_NAMESPACE = "dl-mesh-download"
ENVIRONMENT = var.environment
EVENT_PUBLISHER_DLQ_URL = module.sqs_event_publisher_errors.sqs_queue_url
EVENT_PUBLISHER_EVENT_BUS_ARN = aws_cloudwatch_event_bus.main.arn
PII_BUCKET = module.s3bucket_pii_data.bucket
SSM_PREFIX = "${local.ssm_mesh_prefix}"
SSM_MESH_PREFIX = "${local.ssm_mesh_prefix}"
SSM_SENDERS_PREFIX = "${local.ssm_senders_prefix}"
USE_MESH_MOCK = var.enable_mock_mesh ? "true" : "false"
}

Expand Down Expand Up @@ -172,7 +171,8 @@ data "aws_iam_policy_document" "mesh_download_lambda" {
]

resources = [
"arn:aws:ssm:${var.region}:${var.aws_account_id}:parameter${local.ssm_mesh_prefix}/*"
"arn:aws:ssm:${var.region}:${var.aws_account_id}:parameter${local.ssm_mesh_prefix}/*",
"arn:aws:ssm:${var.region}:${var.aws_account_id}:parameter${local.ssm_senders_prefix}/*"
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ module "mesh_poll" {
MAXIMUM_RUNTIME_MILLISECONDS = "240000" # 4 minutes (Lambda has 5 min timeout)
POLLING_METRIC_NAME = "mesh-poll-successful-polls"
POLLING_METRIC_NAMESPACE = "dl-mesh-poll"
SSM_PREFIX = "${local.ssm_mesh_prefix}"
SSM_MESH_PREFIX = "${local.ssm_mesh_prefix}"
SSM_SENDERS_PREFIX = "${local.ssm_senders_prefix}"
USE_MESH_MOCK = var.enable_mock_mesh ? "true" : "false"
}

Expand Down Expand Up @@ -144,7 +145,8 @@ data "aws_iam_policy_document" "mesh_poll_lambda" {
]

resources = [
"arn:aws:ssm:${var.region}:${var.aws_account_id}:parameter${local.ssm_mesh_prefix}/*"
"arn:aws:ssm:${var.region}:${var.aws_account_id}:parameter${local.ssm_mesh_prefix}/*",
"arn:aws:ssm:${var.region}:${var.aws_account_id}:parameter${local.ssm_senders_prefix}/*"
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
module "sqs_mesh_acknowledge" {
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-sqs.zip"

aws_account_id = var.aws_account_id
component = local.component
environment = var.environment
project = var.project
region = var.region
name = "mesh-acknowledge"

sqs_kms_key_arn = module.kms.key_arn

visibility_timeout_seconds = 60

create_dlq = true

sqs_policy_overload = data.aws_iam_policy_document.sqs_mesh_acknowledge.json
}

data "aws_iam_policy_document" "sqs_mesh_acknowledge" {
statement {
sid = "AllowEventBridgeToSendMessage"
effect = "Allow"

principals {
type = "Service"
identifiers = ["events.amazonaws.com"]
}

actions = [
"sqs:SendMessage"
]

resources = [
"arn:aws:sqs:${var.region}:${var.aws_account_id}:${local.csi}-mesh-acknowledge-queue"
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ data "aws_iam_policy_document" "sqs_mesh_download" {
]

resources = [
"arn:aws:sqs:${var.region}:${var.aws_account_id}:${var.project}-${var.environment}-${local.component}-mesh-download-queue"
"arn:aws:sqs:${var.region}:${var.aws_account_id}:${local.csi}-mesh-download-queue"
]
}
}
1 change: 1 addition & 0 deletions infrastructure/terraform/components/dl/pre.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@ npm run lambda-build --workspaces --if-present
# Build Python lambdas
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)"

make -C "$ROOT/lambdas/mesh-acknowledge" package
make -C "$ROOT/lambdas/mesh-poll" package
make -C "$ROOT/lambdas/mesh-download" package
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ resource "aws_ssm_parameter" "mesh_config" {
value = var.enable_mock_mesh ? jsonencode({
mesh_endpoint = local.mock_mesh_endpoint
mesh_mailbox = "mock-mailbox"
mesh_mailbox_password = "mock-password"
mesh_mailbox_password = "UNSET"
mesh_shared_key = "mock-shared-key"
}) : jsonencode({
mesh_endpoint = "UNSET"
Expand Down
2 changes: 2 additions & 0 deletions lambdas/mesh-acknowledge/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
__pycache__
.venv
34 changes: 34 additions & 0 deletions lambdas/mesh-acknowledge/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
PACKAGE=mesh_acknowledge
VERSION=0.1.0

install:
pip install -r requirements.txt

install-dev:
pip install -r requirements-dev.txt

test:
cd ../.. && PYTHONPATH=lambdas/mesh-acknowledge:$$PYTHONPATH pytest lambdas/mesh-acknowledge/mesh_acknowledge/__tests__/ -v

coverage:
cd ../.. && PYTHONPATH=lambdas/mesh-acknowledge:$$PYTHONPATH pytest lambdas/mesh-acknowledge/mesh_acknowledge/__tests__/ \
--cov=lambdas/mesh-acknowledge/mesh_acknowledge \
--cov-config=lambdas/mesh-acknowledge/pytest.ini \
--cov-report=html:lambdas/mesh-acknowledge/htmlcov \
--cov-report=term-missing \
--cov-report=xml:lambdas/mesh-acknowledge/coverage.xml \
--cov-branch

lint:
pylint mesh_acknowledge

format:
autopep8 -ri .

package:
../../utils/package_python_lambda.sh meshacknowledgelambda

clean:
rm -rf target

.PHONY: install install-dev test coverage lint format package clean
9 changes: 9 additions & 0 deletions lambdas/mesh-acknowledge/mesh_acknowledge/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
"""
MESH Acknowledge Lambda

This lambda handles acknowledging received MESH files, by sending a message to the MESH inbox of
their sender.
"""

__version__ = '0.1.0'
from .handler import *
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Test package init
Loading
Loading