Skip to content

Commit ad843c0

Browse files
chao-xianalice-carr
authored andcommitted
Add cronjob to run org list sync
1 parent fb5ff93 commit ad843c0

9 files changed

Lines changed: 256 additions & 79 deletions

File tree

infra/deployments/forms/forms-admin/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ module "forms_admin" {
2525
analytics_enabled = var.forms_admin_settings.analytics_enabled
2626
act_as_user_enabled = var.forms_admin_settings.act_as_user_enabled
2727
enable_mailchimp_sync = var.forms_admin_settings.synchronize_to_mailchimp
28+
enable_organisations_sync = var.forms_admin_settings.synchronize_orgs_from_govuk
2829
deploy_account_id = var.deploy_account_id
2930
repeatable_page_enabled = var.forms_admin_settings.repeatable_page_enabled
3031
vpc_id = data.terraform_remote_state.forms_environment.outputs.vpc_id

infra/deployments/forms/inputs.tf

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -129,19 +129,20 @@ EOF
129129
variable "forms_admin_settings" {
130130
description = "Forms Admin configuration values"
131131
type = object({
132-
cpu = number
133-
memory = number
134-
min_capacity = number
135-
max_capacity = number
136-
enable_maintenance_mode = bool
137-
auth_provider = string
138-
previous_auth_provider = string
139-
cloudwatch_metrics_enabled = bool
140-
analytics_enabled = bool
141-
act_as_user_enabled = bool
142-
govuk_app_domain = string
143-
synchronize_to_mailchimp = bool
144-
repeatable_page_enabled = bool
132+
cpu = number
133+
memory = number
134+
min_capacity = number
135+
max_capacity = number
136+
enable_maintenance_mode = bool
137+
auth_provider = string
138+
previous_auth_provider = string
139+
cloudwatch_metrics_enabled = bool
140+
analytics_enabled = bool
141+
act_as_user_enabled = bool
142+
govuk_app_domain = string
143+
synchronize_to_mailchimp = bool
144+
synchronize_orgs_from_govuk = bool
145+
repeatable_page_enabled = bool
145146
})
146147
nullable = false
147148
}

infra/deployments/forms/tfvars/dev.tfvars

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,20 @@ container_registry = "711966560482.dkr.ecr.eu-west-2.amazonaws.com"
6767
dlq_arn = "arn:aws:sqs:eu-west-2:711966560482:eventbridge-dead-letter-queue"
6868
send_logs_to_cyber = true
6969
forms_admin_settings = {
70-
cpu = 256
71-
memory = 512
72-
min_capacity = 3
73-
max_capacity = 3
74-
enable_maintenance_mode = false
75-
auth_provider = "auth0"
76-
previous_auth_provider = "gds_sso"
77-
cloudwatch_metrics_enabled = true
78-
analytics_enabled = true
79-
act_as_user_enabled = true
80-
govuk_app_domain = "integration.publishing.service.gov.uk"
81-
synchronize_to_mailchimp = false
82-
repeatable_page_enabled = true
70+
cpu = 256
71+
memory = 512
72+
min_capacity = 3
73+
max_capacity = 3
74+
enable_maintenance_mode = false
75+
auth_provider = "auth0"
76+
previous_auth_provider = "gds_sso"
77+
cloudwatch_metrics_enabled = true
78+
analytics_enabled = true
79+
act_as_user_enabled = true
80+
govuk_app_domain = "integration.publishing.service.gov.uk"
81+
synchronize_orgs_from_govuk = false
82+
synchronize_to_mailchimp = false
83+
repeatable_page_enabled = true
8384
}
8485
forms_product_page_settings = {
8586
cpu = 256

infra/deployments/forms/tfvars/production.tfvars

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -123,19 +123,20 @@ container_registry = "711966560482.dkr.ecr.eu-west-2.amazonaws.com"
123123
dlq_arn = "arn:aws:sqs:eu-west-2:711966560482:eventbridge-dead-letter-queue"
124124
send_logs_to_cyber = true
125125
forms_admin_settings = {
126-
cpu = 512
127-
memory = 1024
128-
min_capacity = 6
129-
max_capacity = 36
130-
enable_maintenance_mode = false
131-
auth_provider = "auth0"
132-
previous_auth_provider = "gds_sso"
133-
cloudwatch_metrics_enabled = true
134-
analytics_enabled = true
135-
act_as_user_enabled = false
136-
govuk_app_domain = "publishing.service.gov.uk"
137-
synchronize_to_mailchimp = true
138-
repeatable_page_enabled = true
126+
cpu = 512
127+
memory = 1024
128+
min_capacity = 6
129+
max_capacity = 36
130+
enable_maintenance_mode = false
131+
auth_provider = "auth0"
132+
previous_auth_provider = "gds_sso"
133+
cloudwatch_metrics_enabled = true
134+
analytics_enabled = true
135+
act_as_user_enabled = false
136+
govuk_app_domain = "publishing.service.gov.uk"
137+
synchronize_to_mailchimp = true
138+
synchronize_orgs_from_govuk = true
139+
repeatable_page_enabled = true
139140
}
140141
forms_product_page_settings = {
141142
cpu = 256

infra/deployments/forms/tfvars/staging.tfvars

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,20 @@ container_registry = "711966560482.dkr.ecr.eu-west-2.amazonaws.com"
3232
dlq_arn = "arn:aws:sqs:eu-west-2:711966560482:eventbridge-dead-letter-queue"
3333
send_logs_to_cyber = true
3434
forms_admin_settings = {
35-
cpu = 256
36-
memory = 512
37-
min_capacity = 3
38-
max_capacity = 3
39-
enable_maintenance_mode = false
40-
auth_provider = "auth0"
41-
previous_auth_provider = "gds_sso"
42-
cloudwatch_metrics_enabled = true
43-
analytics_enabled = true
44-
act_as_user_enabled = true
45-
govuk_app_domain = "staging.publishing.service.gov.uk"
46-
synchronize_to_mailchimp = false
47-
repeatable_page_enabled = true
35+
cpu = 256
36+
memory = 512
37+
min_capacity = 3
38+
max_capacity = 3
39+
enable_maintenance_mode = false
40+
auth_provider = "auth0"
41+
previous_auth_provider = "gds_sso"
42+
cloudwatch_metrics_enabled = true
43+
analytics_enabled = true
44+
act_as_user_enabled = true
45+
govuk_app_domain = "staging.publishing.service.gov.uk"
46+
synchronize_orgs_from_govuk = false
47+
synchronize_to_mailchimp = false
48+
repeatable_page_enabled = true
4849
}
4950
forms_product_page_settings = {
5051
cpu = 256

infra/deployments/forms/tfvars/user-research.tfvars

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,20 @@ container_registry = "711966560482.dkr.ecr.eu-west-2.amazonaws.com"
3030
dlq_arn = "arn:aws:sqs:eu-west-2:711966560482:eventbridge-dead-letter-queue"
3131
send_logs_to_cyber = true
3232
forms_admin_settings = {
33-
cpu = 256
34-
memory = 512
35-
min_capacity = 3
36-
max_capacity = 3
37-
enable_maintenance_mode = false
38-
auth_provider = "user_research"
39-
previous_auth_provider = null
40-
cloudwatch_metrics_enabled = false
41-
analytics_enabled = false
42-
act_as_user_enabled = false
43-
govuk_app_domain = ""
44-
synchronize_to_mailchimp = false
45-
repeatable_page_enabled = true
33+
cpu = 256
34+
memory = 512
35+
min_capacity = 3
36+
max_capacity = 3
37+
enable_maintenance_mode = false
38+
auth_provider = "user_research"
39+
previous_auth_provider = null
40+
cloudwatch_metrics_enabled = false
41+
analytics_enabled = false
42+
act_as_user_enabled = false
43+
govuk_app_domain = ""
44+
synchronize_orgs_from_govuk = false
45+
synchronize_to_mailchimp = false
46+
repeatable_page_enabled = true
4647
}
4748
forms_product_page_settings = {
4849
cpu = 256

infra/modules/forms-admin/mailchimp-sync.tf

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ locals {
2121
)
2222
}
2323

24-
resource "aws_ecs_task_definition" "cron_job" {
24+
resource "aws_ecs_task_definition" "mailchimp_cron_job" {
2525
count = var.enable_mailchimp_sync ? 1 : 0
2626

2727
family = "${var.env_name}_forms-admin_mailchimp_sync"
@@ -46,27 +46,27 @@ resource "aws_ecs_task_definition" "cron_job" {
4646
##
4747
# EventBridge
4848
##
49-
resource "aws_cloudwatch_event_rule" "sync_cron_job" {
49+
resource "aws_cloudwatch_event_rule" "sync_mailchimp_cron_job" {
5050
count = var.enable_mailchimp_sync ? 1 : 0
5151

52-
name = "${var.env_name}-forms-admin-sync-cron"
52+
name = "${var.env_name}-forms-admin-mailchimp-sync-cron"
5353
description = "Trigger the forms-admin MailChimp synchronisation on a schedule"
5454
schedule_expression = "cron(30 10 * * ? *)" # 10:30AM daily. In office hours so that we can respond to failures
5555
}
5656

57-
resource "aws_cloudwatch_event_target" "ecs_sync_job" {
57+
resource "aws_cloudwatch_event_target" "ecs_mailchimp_sync_job" {
5858
count = var.enable_mailchimp_sync ? 1 : 0
5959

6060
arn = var.ecs_cluster_arn
61-
rule = aws_cloudwatch_event_rule.sync_cron_job[0].name
62-
role_arn = aws_iam_role.ecs_cron_scheduler[0].arn
61+
rule = aws_cloudwatch_event_rule.sync_mailchimp_cron_job[0].name
62+
role_arn = aws_iam_role.ecs_mailchimp_cron_scheduler[0].arn
6363

6464
ecs_target {
6565
# Construct ARN without revision number to always use the latest revision
6666
# Format: arn:aws:ecs:region:account:task-definition/family
6767
# This ensures the EventBridge rule always uses the latest revision
6868
# which is updated by the forms-admin deployment pipeline
69-
task_definition_arn = "arn:aws:ecs:eu-west-2:${data.aws_caller_identity.current.account_id}:task-definition/${aws_ecs_task_definition.cron_job[0].family}"
69+
task_definition_arn = "arn:aws:ecs:eu-west-2:${data.aws_caller_identity.current.account_id}:task-definition/${aws_ecs_task_definition.mailchimp_cron_job[0].family}"
7070
launch_type = "FARGATE"
7171
platform_version = "1.4.0"
7272

@@ -83,8 +83,8 @@ resource "aws_cloudwatch_event_target" "ecs_sync_job" {
8383
}
8484

8585
## Monitor for failure
86-
resource "aws_cloudwatch_event_rule" "sync_cron_job_failed" {
87-
name = "${var.env_name}-forms-admin-sync-failed"
86+
resource "aws_cloudwatch_event_rule" "sync_mailchimp_cron_job_failed" {
87+
name = "${var.env_name}-forms-admin-mailchimp-sync-failed"
8888
description = "Trigger when the MailChimp sync job has exited with a non-zero exit code"
8989

9090
event_pattern = jsonencode({
@@ -106,8 +106,8 @@ resource "aws_cloudwatch_event_rule" "sync_cron_job_failed" {
106106
})
107107
}
108108

109-
resource "aws_cloudwatch_event_target" "sync_cron_job_alert_message" {
110-
rule = aws_cloudwatch_event_rule.sync_cron_job_failed.name
109+
resource "aws_cloudwatch_event_target" "sync_mailchimp_cron_job_alert_message" {
110+
rule = aws_cloudwatch_event_rule.sync_mailchimp_cron_job_failed.name
111111

112112
# defined in 'environment' module. Sends alarms/errors via ZenDesk
113113
arn = var.zendesk_sns_topic_arn
@@ -134,7 +134,7 @@ resource "aws_cloudwatch_event_target" "sync_cron_job_alert_message" {
134134
##
135135
# IAM
136136
##
137-
resource "aws_iam_role" "ecs_cron_scheduler" {
137+
resource "aws_iam_role" "ecs_mailchimp_cron_scheduler" {
138138
count = var.enable_mailchimp_sync ? 1 : 0
139139

140140
name = "${var.env_name}-forms-admin-ecs-cron-scheduler"
@@ -153,9 +153,19 @@ resource "aws_iam_role" "ecs_cron_scheduler" {
153153
})
154154
}
155155

156-
resource "aws_iam_role_policy_attachment" "ecs_events_policy" {
156+
resource "aws_iam_role_policy_attachment" "ecs_mailchimp_events_policy" {
157157
count = var.enable_mailchimp_sync ? 1 : 0
158158

159159
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceEventsRole"
160-
role = aws_iam_role.ecs_cron_scheduler[0].name
160+
role = aws_iam_role.ecs_mailchimp_cron_scheduler[0].name
161+
}
162+
163+
moved {
164+
from = aws_cloudwatch_event_rule.sync_cron_job_failed
165+
to = aws_cloudwatch_event_rule.sync_mailchimp_cron_job_failed
166+
}
167+
168+
moved {
169+
from = aws_cloudwatch_event_target.sync_cron_job_alert_message
170+
to = aws_cloudwatch_event_target.sync_mailchimp_cron_job_alert_message
161171
}

0 commit comments

Comments
 (0)