@@ -15,11 +15,71 @@ 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 ? * SUN *)" # Sunday 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+ service_role_arn = aws_iam_role. maintenance_window_role . arn
47+
48+ targets {
49+ key = " WindowTargetIds"
50+ values = [aws_ssm_maintenance_window_target . windows_instances . id ]
51+ }
52+
53+ task_invocation_parameters {
54+ run_command_parameters {
55+ parameter {
56+ name = " Operation"
57+ values = [" Install" ]
58+ }
59+ }
60+ }
61+ }
62+
63+ resource "aws_iam_role" "maintenance_window_role" {
64+ name = " maintenance-window-role"
65+
66+ assume_role_policy = jsonencode ({
67+ Version = " 2012-10-17"
68+ Statement = [{
69+ Action = " sts:AssumeRole"
70+ Effect = " Allow"
71+ Principal = {
72+ Service = " ssm.amazonaws.com"
73+ }
74+ }]
75+ })
76+ }
77+
78+ resource "aws_iam_role_policy_attachment" "maintenance_window_policy" {
79+ role = aws_iam_role. maintenance_window_role . name
80+ policy_arn = " arn:aws:iam::aws:policy/service-role/AmazonSSMMaintenanceWindowRole"
81+ }
82+
2383resource "tls_private_key" "instance_key_pair" {
2484 algorithm = " RSA"
2585}
0 commit comments