Skip to content

Commit 47ba6be

Browse files
Merge pull request #1085 from NHSDigital/feature/made14-NRL-1739-schedule-powerbi-updates
[NRL-1739] Add automatic scheduled updates for Window PowerBI GW instances
2 parents 08fdf73 + 7cadb31 commit 47ba6be

File tree

2 files changed

+65
-2
lines changed
  • terraform/account-wide-infrastructure/modules/powerbi-gw-ec2

2 files changed

+65
-2
lines changed

terraform/account-wide-infrastructure/modules/powerbi-gw-ec2/ec2.tf

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,73 @@ resource "aws_instance" "powerbi_gw" {
1515
user_data = file("${path.module}/scripts/user_data.tpl")
1616

1717
tags = {
18-
Name = "${var.name_prefix}-ec2"
18+
Name = "${var.name_prefix}-ec2"
19+
PatchGroup = local.windows_patching_tag
1920
}
2021

2122
}
2223

24+
resource "aws_ssm_maintenance_window" "updates" {
25+
name = "windows-updates"
26+
schedule = "cron(0 2 ? * MON *)" # Monday 2am UTC
27+
duration = 3
28+
cutoff = 1
29+
}
30+
31+
resource "aws_ssm_maintenance_window_target" "windows_instances" {
32+
window_id = aws_ssm_maintenance_window.updates.id
33+
resource_type = "INSTANCE"
34+
35+
targets {
36+
key = "tag:PatchGroup"
37+
values = [local.windows_patching_tag]
38+
}
39+
}
40+
41+
resource "aws_ssm_maintenance_window_task" "patch_task" {
42+
window_id = aws_ssm_maintenance_window.updates.id
43+
task_type = "RUN_COMMAND"
44+
task_arn = "AWS-RunPatchBaseline"
45+
priority = 1
46+
max_concurrency = 1
47+
max_errors = 1
48+
service_role_arn = aws_iam_role.maintenance_window_role.arn
49+
50+
targets {
51+
key = "WindowTargetIds"
52+
values = [aws_ssm_maintenance_window_target.windows_instances.id]
53+
}
54+
55+
task_invocation_parameters {
56+
run_command_parameters {
57+
parameter {
58+
name = "Operation"
59+
values = ["Install"]
60+
}
61+
}
62+
}
63+
}
64+
65+
resource "aws_iam_role" "maintenance_window_role" {
66+
name = "maintenance-window-role"
67+
68+
assume_role_policy = jsonencode({
69+
Version = "2012-10-17"
70+
Statement = [{
71+
Action = "sts:AssumeRole"
72+
Effect = "Allow"
73+
Principal = {
74+
Service = "ssm.amazonaws.com"
75+
}
76+
}]
77+
})
78+
}
79+
80+
resource "aws_iam_role_policy_attachment" "maintenance_window_policy" {
81+
role = aws_iam_role.maintenance_window_role.name
82+
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonSSMMaintenanceWindowRole"
83+
}
84+
2385
resource "tls_private_key" "instance_key_pair" {
2486
algorithm = "RSA"
2587
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
locals {
2-
selected_ami_id = var.use_custom_ami ? data.aws_ami.PowerBI_Gateway[0].id : data.aws_ami.windows-2019.id
2+
selected_ami_id = var.use_custom_ami ? data.aws_ami.PowerBI_Gateway[0].id : data.aws_ami.windows-2019.id
3+
windows_patching_tag = "windows_scheduled_patching"
34
}

0 commit comments

Comments
 (0)