

• AWS Systems Manager CloudWatch Dasbor tidak akan lagi tersedia setelah 30 April 2026. Pelanggan dapat terus menggunakan CloudWatch konsol Amazon untuk melihat, membuat, dan mengelola CloudWatch dasbor Amazon mereka, seperti yang mereka lakukan hari ini. Untuk informasi selengkapnya, lihat [dokumentasi CloudWatch Dasbor Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memperbarui AMIs untuk grup Auto Scaling
<a name="automation-tutorial-update-patch-windows-ami-autoscaling"></a>

Contoh berikut memperbarui grup Auto Scaling dengan yang baru ditambal. AMI Pendekatan ini memastikan bahwa gambar baru yang dibuat secara otomatis tersedia untuk lingkungan komputasi yang berbeda yang menggunakan grup Auto Scaling.

Langkah terakhir dari otomatisasi dalam contoh ini menggunakan fungsi Python untuk membuat template peluncuran baru yang menggunakan yang baru ditambal. AMI Kemudian grup Auto Scaling diperbarui untuk menggunakan template peluncuran baru. Dalam jenis skenario Auto Scaling, pengguna dapat mengakhiri instans yang ada di grup Auto Scaling untuk memaksa instans baru memulai yang menggunakan gambar baru. Atau, pengguna dapat menunggu dan mengizinkan peristiwa scale-in atau scale-out untuk meluncurkan instans baru secara alami.

**Sebelum Anda memulai**  
Selesaikan tugas-tugas berikut sebelum Anda mulai contoh ini.
+ Konfigurasikan peran IAM untuk Otomasi, alat di AWS Systems Manager. Systems Manager memerlukan peran profil instans dan peran layanan ARN untuk memproses otomatisasi. Untuk informasi selengkapnya, lihat [Menyiapkan Otomatisasi](automation-setup.md).

## Buat **PatchAMIAndUpdateASG**runbook
<a name="create-autoscaling-update-runbook"></a>

Gunakan prosedur berikut untuk membuat **PatchAMIAndUpdateASG**runbook yang menambal yang AMI Anda tentukan untuk parameter **SourceAmi**. Runbook juga memperbarui grup Auto Scaling untuk menggunakan yang terbaru, ditambal. AMI

**Untuk membuat dan menjalankan runbook**

1. Buka AWS Systems Manager konsol di [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. Di panel navigasi, pilih **Dokumen**.

1. **Di menu tarik-turun **Buat dokumen**, pilih Otomasi.**

1. Di bidang **Nama**, masukkan **PatchAMIAndUpdateASG**.

1. Pilih tab **Editor**, dan pilih **Edit**.

1. Pilih **OK** saat diminta, dan hapus konten di bidang **Editor dokumen**.

1. Di bidang **Editor dokumen**, tempel konten runbook sampel YAMAL berikut.

   ```
   ---
   description: Systems Manager Automation Demo - Patch AMI and Update ASG
   schemaVersion: '0.3'
   assumeRole: '{{ AutomationAssumeRole }}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to execute this document.'
       default: ''
     SourceAMI:
       type: String
       description: '(Required) The ID of the AMI you want to patch.'
     SubnetId:
       type: String
       description: '(Required) The ID of the subnet where the instance from the SourceAMI parameter is launched.'
     SecurityGroupIds:
       type: StringList
       description: '(Required) The IDs of the security groups to associate with the instance launched from the SourceAMI parameter.'
     NewAMI:
       type: String
       description: '(Optional) The name of of newly patched AMI.'
       default: 'patchedAMI-{{global:DATE_TIME}}'
     TargetASG:
       type: String
       description: '(Required) The name of the Auto Scaling group you want to update.'
     InstanceProfile:
       type: String
       description: '(Required) The name of the IAM instance profile you want the source instance to use.'
     SnapshotId:
       type: String
       description: (Optional) The snapshot ID to use to retrieve a patch baseline snapshot.
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: (Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: startInstances
       action: 'aws:runInstances'
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
         ImageId: '{{ SourceAMI }}'
         InstanceType: m5.large
         MinInstanceCount: 1
         MaxInstanceCount: 1
         IamInstanceProfileName: '{{ InstanceProfile }}'
         SubnetId: '{{ SubnetId }}'
         SecurityGroupIds: '{{ SecurityGroupIds }}'
     - name: verifyInstanceManaged
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 600
       inputs:
         Service: ssm
         Api: DescribeInstanceInformation
         InstanceInformationFilterList:
           - key: InstanceIds
             valueSet:
               - '{{ startInstances.InstanceIds }}'
         PropertySelector: '$.InstanceInformationList[0].PingStatus'
         DesiredValues:
           - Online
       onFailure: 'step:terminateInstance'
     - name: installPatches
       action: 'aws:runCommand'
       timeoutSeconds: 7200
       onFailure: Abort
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
     - name: stopInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: stopped
     - name: createImage
       action: 'aws:createImage'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceId: '{{ startInstances.InstanceIds }}'
         ImageName: '{{ NewAMI }}'
         NoReboot: false
         ImageDescription: Patched AMI created by Automation
     - name: terminateInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: terminated
     - name: updateASG
       action: 'aws:executeScript'
       timeoutSeconds: 300
       maxAttempts: 1
       onFailure: Abort
       inputs:
         Runtime: python3.11
         Handler: update_asg
         InputPayload:
           TargetASG: '{{TargetASG}}'
           NewAMI: '{{createImage.ImageId}}'
         Script: |-
           from __future__ import print_function
           import datetime
           import json
           import time
           import boto3
   
           # create auto scaling and ec2 client
           asg = boto3.client('autoscaling')
           ec2 = boto3.client('ec2')
   
           def update_asg(event, context):
               print("Received event: " + json.dumps(event, indent=2))
   
               target_asg = event['TargetASG']
               new_ami = event['NewAMI']
   
               # get object for the ASG we're going to update, filter by name of target ASG
               asg_query = asg.describe_auto_scaling_groups(AutoScalingGroupNames=[target_asg])
               if 'AutoScalingGroups' not in asg_query or not asg_query['AutoScalingGroups']:
                   return 'No ASG found matching the value you specified.'
   
               # gets details of an instance from the ASG that we'll use to model the new launch template after
               source_instance_id = asg_query.get('AutoScalingGroups')[0]['Instances'][0]['InstanceId']
               instance_properties = ec2.describe_instances(
                   InstanceIds=[source_instance_id]
               )
               source_instance = instance_properties['Reservations'][0]['Instances'][0]
   
               # create list of security group IDs
               security_groups = []
               for group in source_instance['SecurityGroups']:
                   security_groups.append(group['GroupId'])
   
               # create a list of dictionary objects for block device mappings
               mappings = []
               for block in source_instance['BlockDeviceMappings']:
                   volume_query = ec2.describe_volumes(
                       VolumeIds=[block['Ebs']['VolumeId']]
                   )
                   volume_details = volume_query['Volumes']
                   device_name = block['DeviceName']
                   volume_size = volume_details[0]['Size']
                   volume_type = volume_details[0]['VolumeType']
                   device = {'DeviceName': device_name, 'Ebs': {'VolumeSize': volume_size, 'VolumeType': volume_type}}
                   mappings.append(device)
   
               # create new launch template using details returned from instance in the ASG and specify the newly patched AMI
               time_stamp = time.time()
               time_stamp_string = datetime.datetime.fromtimestamp(time_stamp).strftime('%m-%d-%Y_%H-%M-%S')
               new_template_name = f'{new_ami}_{time_stamp_string}'
               try:
                   ec2.create_launch_template(
                       LaunchTemplateName=new_template_name,
                       LaunchTemplateData={
                           'BlockDeviceMappings': mappings,
                           'ImageId': new_ami,
                           'InstanceType': source_instance['InstanceType'],
                           'IamInstanceProfile': {
                               'Arn': source_instance['IamInstanceProfile']['Arn']
                           },
                           'KeyName': source_instance['KeyName'],
                           'SecurityGroupIds': security_groups
                       }
                   )
               except Exception as e:
                   return f'Exception caught: {str(e)}'
               else:
                   # update ASG to use new launch template
                   asg.update_auto_scaling_group(
                       AutoScalingGroupName=target_asg,
                       LaunchTemplate={
                           'LaunchTemplateName': new_template_name
                       }
                   )
                   return f'Updated ASG {target_asg} with new launch template {new_template_name} which uses AMI {new_ami}.'
   outputs:
   - createImage.ImageId
   ```

1. Pilih **Buat otomatisasi**.

1. Di panel navigasi, pilih **Otomatisasi**, lalu pilih **Eksekusi otomatisasi**.

1. Di halaman **Pilih dokumen**, pilih tab **Dimiliki oleh saya**.

1. Cari **PatchAMIAndUpdateASG**runbook, dan pilih tombol di **PatchAMIAndUpdateASG**kartu.

1. Pilih **Berikutnya**.

1. Pilih **Eksekusi sederhana**.

1. Tentukan nilai untuk parameter input. Pastikan `SubnetId` dan `SecurityGroupIds` Anda menentukan mengizinkan akses ke titik akhir Systems Manager publik, atau titik akhir antarmuka Anda untuk Systems Manager.

1. Pilih **Eksekusi**.

1. **Setelah otomatisasi selesai, di konsol Amazon EC2, pilih **Auto Scaling**, lalu pilih Luncurkan Template.** Verifikasi bahwa Anda melihat template peluncuran baru, dan menggunakan yang baruAMI.

1. Pilih **Auto Scaling**, lalu pilih **Grup Auto Scaling**. Verifikasi bahwa grup Auto Scaling menggunakan template peluncuran baru.

1. Akhiri satu atau beberapa instans dalam grup Auto Scaling Anda. Instans penggantian akan diluncurkan menggunakan yang baruAMI.