@@ -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+
2385resource "tls_private_key" "instance_key_pair" {
2486 algorithm = " RSA"
2587}
0 commit comments