

• Le AWS Systems Manager CloudWatch tableau de bord ne sera plus disponible après le 30 avril 2026. Les clients peuvent continuer à utiliser CloudWatch la console Amazon pour consulter, créer et gérer leurs CloudWatch tableaux de bord Amazon, comme ils le font aujourd'hui. Pour plus d'informations, consultez la [documentation Amazon CloudWatch Dashboard](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Mise à jour d'AMIs pour des groupes Auto Scaling
<a name="automation-tutorial-update-patch-windows-ami-autoscaling"></a>

L'exemple suivant met à jour un groupe Auto Scaling avec l'AMI nouvellement corrigée. Cette approche permet de s'assurer que des nouvelles images sont automatiquement mises à disposition dans différents environnements de calcul qui utilisent des groupes Auto Scaling.

L'étape finale de l'automatisation dans cet exemple utilise une fonction Python pour créer un nouveau modèle de lancement qui utilise l'AMI nouvellement corrigée. Ensuite, le groupe Auto Scaling est mis à jour pour utiliser le nouveau modèle de lancement. Dans ce type de scénario Auto Scaling, les utilisateurs peuvent mettre hors fonction des instances existantes dans le groupe Auto Scaling pour forcer une nouvelle instance utilisant la nouvelle image à se lancer. Ou les utilisateurs peuvent attendre et permettre aux événements de mise à l'échelle vers le haut ou vers le bas de lancer naturellement des instances plus récentes.

**Avant de commencer**  
Exécutez les tâches suivantes avant de commencer cet exemple.
+ Configurez les rôles IAM pour Automation, un outil dans AWS Systems Manager. Systems Manager nécessite un rôle de profil d'instance et un ARN de rôle de service pour traiter les automatisations. Pour de plus amples informations, veuillez consulter [Configuration d'Automation](automation-setup.md).

## Création du **PatchAMIAndUpdateASG**runbook
<a name="create-autoscaling-update-runbook"></a>

Utilisez la procédure suivante pour créer le **PatchAMIAndUpdateASG**runbook qui corrige le paramètre que AMI vous spécifiez pour le paramètre **SourceAMI**. Le runbook met également à jour un groupe Auto Scaling afin d'utiliser la dernière AMI corrigée.

**Pour créer et exécuter le runbook**

1. Ouvrez la AWS Systems Manager console à l'adresse [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. Dans le panneau de navigation, cliquez sur **Documents**.

1. Dans le menu déroulant **Create document (Créer un document)**, sélectionnez **Automation**.

1. Dans le champ **Nom**, saisissez **PatchAMIAndUpdateASG**.

1. Sélectionnez l'onglet **Editor** (Éditeur), puis cliquez sur le bouton **Edit** (Modifier).

1. Sélectionnez **OK** à l'invite et supprimez le contenu dans le champ **Document editor** (Éditeur de document).

1. Dans le champ **Document editor** (Éditeur de document), collez l'exemple de contenu de runbook YAML suivant.

   ```
   ---
   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. Sélectionnez **Create automation (Créer une automatisation)**.

1. Dans le panneau de navigation, sélectionnez **Automation** (Automatisation), puis **Execute automation** (Exécuter l'automatisation).

1. Dans la page **Choose document** (Choisir un document), choisissez l'onglet **Owned by me** (Possédé par moi).

1. Recherchez le **PatchAMIAndUpdateASG**runbook, puis sélectionnez le bouton sur la **PatchAMIAndUpdateASG**carte.

1. Choisissez **Suivant**.

1. Sélectionnez **Exécution simple**.

1. Spécifiez les valeurs des paramètres d'entrée. Assurez-vous que le `SubnetId` et les `SecurityGroupIds` que vous spécifiez autorisent l'accès aux points de terminaison publics de Systems Manager ou à vos points de terminaison d'interface pour Systems Manager.

1. Sélectionnez **Execute (Exécuter)**.

1. Une fois l'automatisation terminée, dans la console Amazon EC2, choisissez **Auto Scaling**, puis **Launch Templates** (Modèles de lancement). Vérifiez que vous voyez le nouveau modèle de lancement et qu'il utilise la nouvelle AMI.

1. Sélectionnez **Auto Scaling**, puis **Auto Scaling Groups (Groupes Auto Scaling)**. Vérifiez que le groupe Auto Scaling utilise le nouveau modèle de lancement.

1. Mettez hors fonction une ou plusieurs instances dans votre groupe Auto Scaling. Des instances de remplacement seront lancées en utilisant la nouvelle AMI.