diff --git a/.github/workflows/manual-proxy-environment-deploy.yaml b/.github/workflows/manual-proxy-environment-deploy.yaml
index d5e502309..63f65ccf4 100644
--- a/.github/workflows/manual-proxy-environment-deploy.yaml
+++ b/.github/workflows/manual-proxy-environment-deploy.yaml
@@ -18,6 +18,10 @@ on:
required: false
default: false
type: boolean
+ nodejs_version:
+ description: "Node.js version, set by the CI/CD pipeline workflow"
+ required: true
+ type: string
permissions:
contents: read
@@ -36,11 +40,10 @@ jobs:
node-version: 22
- name: Npm install
- working-directory: .
- env:
- NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: npm ci
- shell: bash
+ uses: ./.github/actions/node-install
+ with:
+ node-version: ${{ inputs.nodejs_version }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: "Check if pull request exists for this branch and set ENVIRONMENT/APIM_ENV"
id: pr_exists
diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md
index e2eac9acd..4661f17fa 100644
--- a/infrastructure/terraform/components/api/README.md
+++ b/infrastructure/terraform/components/api/README.md
@@ -17,6 +17,7 @@ No requirements.
| [core\_environment](#input\_core\_environment) | Environment of Core | `string` | `"prod"` | no |
| [default\_tags](#input\_default\_tags) | A map of default tags to apply to all taggable resources within the component | `map(string)` | `{}` | no |
| [disable\_gateway\_execute\_endpoint](#input\_disable\_gateway\_execute\_endpoint) | Disable the execution endpoint for the API Gateway | `bool` | `true` | no |
+| [enable\_backups](#input\_enable\_backups) | Enable backups | `bool` | `false` | no |
| [environment](#input\_environment) | The name of the tfscaffold environment | `string` | n/a | yes |
| [eventpub\_control\_plane\_bus\_arn](#input\_eventpub\_control\_plane\_bus\_arn) | ARN of the EventBridge control plane bus for eventpub | `string` | `""` | no |
| [eventpub\_data\_plane\_bus\_arn](#input\_eventpub\_data\_plane\_bus\_arn) | ARN of the EventBridge data plane bus for eventpub | `string` | `""` | no |
diff --git a/infrastructure/terraform/components/api/glue_catalog_database_supplier.tf b/infrastructure/terraform/components/api/glue_catalog_database_supplier.tf
new file mode 100644
index 000000000..ae64cab23
--- /dev/null
+++ b/infrastructure/terraform/components/api/glue_catalog_database_supplier.tf
@@ -0,0 +1,4 @@
+resource "aws_glue_catalog_database" "supplier" {
+ name = "${local.csi}-supplier"
+ description = "Glue catalog database for Suppliers API"
+}
diff --git a/infrastructure/terraform/components/api/glue_catalog_table_events.tf b/infrastructure/terraform/components/api/glue_catalog_table_events.tf
new file mode 100644
index 000000000..f50b4a121
--- /dev/null
+++ b/infrastructure/terraform/components/api/glue_catalog_table_events.tf
@@ -0,0 +1,86 @@
+resource "aws_glue_catalog_table" "events" {
+ name = "events_history"
+ database_name = aws_glue_catalog_database.supplier.name
+
+ table_type = "EXTERNAL_TABLE"
+
+ parameters = {
+ classification = "json"
+ }
+
+ storage_descriptor {
+ location = "s3://${aws_s3_bucket.event_reporting.bucket}/events/"
+ input_format = "org.apache.hadoop.mapred.TextInputFormat"
+ output_format = "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
+
+ columns {
+ name = "type"
+ type = "string"
+ }
+
+ columns {
+ name = "messageid"
+ type = "string"
+ }
+
+ columns {
+ name = "topicarn"
+ type = "string"
+ }
+
+ columns {
+ name = "message"
+ type = "string"
+ }
+
+ columns {
+ name = "timestamp"
+ type = "string"
+ }
+
+ columns {
+ name = "unsubscribeurl"
+ type = "string"
+ }
+
+ columns {
+ name = "change"
+ type = "double"
+ }
+
+ columns {
+ name = "price"
+ type = "double"
+ }
+
+ columns {
+ name = "ticker_symbol"
+ type = "string"
+ }
+
+ columns {
+ name = "sector"
+ type = "string"
+ }
+
+ columns {
+ name = "partition_0"
+ type = "string"
+ }
+
+ columns {
+ name = "partition_1"
+ type = "string"
+ }
+
+ columns {
+ name = "partition_2"
+ type = "string"
+ }
+
+ columns {
+ name = "partition_3"
+ type = "string"
+ }
+ }
+}
diff --git a/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf b/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf
index 59393bd29..bd953b76f 100644
--- a/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf
+++ b/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf
@@ -82,4 +82,17 @@ data "aws_iam_policy_document" "letter_status_update" {
module.letter_status_updates_queue.sqs_queue_arn
]
}
+
+ statement {
+ sid = "AllowSNSPublish"
+ effect = "Allow"
+
+ actions = [
+ "sns:Publish"
+ ]
+
+ resources = [
+ module.eventsub.sns_topic.arn
+ ]
+ }
}
diff --git a/infrastructure/terraform/components/api/s3_event_reporting.tf b/infrastructure/terraform/components/api/s3_event_reporting.tf
new file mode 100644
index 000000000..e61602d0c
--- /dev/null
+++ b/infrastructure/terraform/components/api/s3_event_reporting.tf
@@ -0,0 +1,19 @@
+resource "aws_s3_bucket" "event_reporting" {
+ bucket = "${local.csi_global}-event-reporting"
+
+ tags = merge(local.default_tags, { "Enable-Backup" = var.enable_backups }, { "Enable-S3-Continuous-Backup" = var.enable_backups })
+}
+resource "aws_s3_bucket_ownership_controls" "event_reporting" {
+ bucket = aws_s3_bucket.event_reporting.id
+
+ rule {
+ object_ownership = "BucketOwnerPreferred"
+ }
+}
+resource "aws_s3_bucket_versioning" "event_reporting" {
+ bucket = aws_s3_bucket.event_reporting.id
+
+ versioning_configuration {
+ status = "Enabled"
+ }
+}
diff --git a/infrastructure/terraform/components/api/variables.tf b/infrastructure/terraform/components/api/variables.tf
index 9ba8849f8..24d99ef91 100644
--- a/infrastructure/terraform/components/api/variables.tf
+++ b/infrastructure/terraform/components/api/variables.tf
@@ -162,3 +162,9 @@ variable "core_environment" {
default = "prod"
}
+
+variable "enable_backups" {
+ type = bool
+ description = "Enable backups"
+ default = false
+}
diff --git a/infrastructure/terraform/modules/eventsub/README.md b/infrastructure/terraform/modules/eventsub/README.md
index a5653fda3..946bafabf 100644
--- a/infrastructure/terraform/modules/eventsub/README.md
+++ b/infrastructure/terraform/modules/eventsub/README.md
@@ -14,9 +14,9 @@
| [aws\_account\_id](#input\_aws\_account\_id) | The AWS Account ID (numeric) | `string` | n/a | yes |
| [component](#input\_component) | The name of the terraformscaffold component calling this module | `string` | n/a | yes |
| [default\_tags](#input\_default\_tags) | Default tag map for application to all taggable resources in the module | `map(string)` | `{}` | no |
-| [enable\_event\_cache](#input\_enable\_event\_cache) | Enable caching of events to an S3 bucket | `bool` | `false` | no |
-| [enable\_firehose\_raw\_message\_delivery](#input\_enable\_firehose\_raw\_message\_delivery) | Enables raw message delivery on firehose subscription | `bool` | `false` | no |
-| [enable\_sns\_delivery\_logging](#input\_enable\_sns\_delivery\_logging) | Enable SNS Delivery Failure Notifications | `bool` | `false` | no |
+| [enable\_event\_cache](#input\_enable\_event\_cache) | Enable caching of events to an S3 bucket | `bool` | `true` | no |
+| [enable\_firehose\_raw\_message\_delivery](#input\_enable\_firehose\_raw\_message\_delivery) | Enables raw message delivery on firehose subscription | `bool` | `true` | no |
+| [enable\_sns\_delivery\_logging](#input\_enable\_sns\_delivery\_logging) | Enable SNS Delivery Failure Notifications | `bool` | `true` | no |
| [environment](#input\_environment) | The name of the terraformscaffold environment the module is called for | `string` | n/a | yes |
| [event\_cache\_buffer\_interval](#input\_event\_cache\_buffer\_interval) | The buffer interval for data firehose | `number` | `500` | no |
| [event\_cache\_expiry\_days](#input\_event\_cache\_expiry\_days) | s3 archiving expiry in days | `number` | `30` | no |
diff --git a/infrastructure/terraform/modules/eventsub/variables.tf b/infrastructure/terraform/modules/eventsub/variables.tf
index 4b73d4523..79a1114c6 100644
--- a/infrastructure/terraform/modules/eventsub/variables.tf
+++ b/infrastructure/terraform/modules/eventsub/variables.tf
@@ -70,7 +70,7 @@ variable "event_cache_buffer_interval" {
variable "enable_sns_delivery_logging" {
type = bool
description = "Enable SNS Delivery Failure Notifications"
- default = false
+ default = true
}
variable "sns_success_logging_sample_percent" {
@@ -94,13 +94,13 @@ variable "event_cache_expiry_days" {
variable "enable_event_cache" {
type = bool
description = "Enable caching of events to an S3 bucket"
- default = false
+ default = true
}
variable "enable_firehose_raw_message_delivery" {
type = bool
description = "Enables raw message delivery on firehose subscription"
- default = false
+ default = true
}
variable "force_destroy" {