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.
Mettez à jour un golden AMI à l'aide de l'automatisation AWS Lambda, et Parameter Store
L'exemple suivant utilise le modèle dans lequel une organisation gère et corrige périodiquement son propre système propriétaire AMIs plutôt que de le créer à partir d'Amazon Elastic Compute Cloud (AmazonEC2)AMIs.
La procédure suivante montre comment appliquer automatiquement des correctifs de système d'exploitation (OS) à un correctif AMI qui est déjà considéré comme le plus récent up-to-date ou le plus récentAMI. Dans l'exemple, la valeur par défaut du paramètre SourceAmiId
est définie par un AWS Systems Manager Parameter Store paramètre appelélatestAmi
. La valeur de latestAmi
est mise à jour par une AWS Lambda fonction invoquée à la fin de l'automatisation. Grâce à ce processus d'automatisation, le temps et les efforts consacrés à l'application des correctifs AMIs sont réduits au minimum, car les correctifs sont toujours appliqués au maximum. up-to-date AMI Parameter Storeet l'automatisation sont des capacités de AWS Systems Manager.
Avant de commencer
Configurez les rôles d'automatisation et, éventuellement, Amazon EventBridge for Automation. Pour de plus amples informations, veuillez consulter Configuration d'Automation.
Table des matières
Tâche 1 : créer un paramètre dans Systems Manager Parameter Store
Créez un paramètre dans Parameter Store qui utilise les informations suivantes :
-
Nom :
latestAmi
. -
Valeur : Un ID d'AMI. Par exemple :
ami-188d6e0e
.
Pour de plus amples informations sur la création d'un paramètre de chaîne Parameter Store, consultez Création Parameter Store paramètres dans Systems Manager.
Tâche 2 : créer un IAM rôle pour AWS Lambda
Utilisez la procédure suivante pour créer un rôle IAM de service pour AWS Lambda. Ces politiques autorisent Lambda à mettre à jour la valeur du paramètre latestAmi
à l'aide d'une fonction Lambda et Systems Manager.
Pour créer un rôle IAM de service pour Lambda
Connectez-vous à la IAM console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/iam/
. -
Dans le volet de navigation, sélectionnez Politiques, puis Créer une politique.
-
Choisissez l'JSONonglet.
-
Remplacez les contenus par défaut par la politique suivante. Remplacez chacun
example resource placeholder
avec vos propres informations.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "arn:aws:logs:
region
:123456789012
:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region
:123456789012
:log-group:/aws/lambda/function name
:*" ] } ] } -
Choisissez Suivant : Balises.
-
(Facultatif) Ajoutez une ou plusieurs paires clé-valeur d'identification afin d'organiser, de suivre ou de contrôler l'accès pour cette politique.
-
Choisissez Suivant : vérification.
-
Sur la page Examiner une politique, dans le champ Nom, saisissez un nom pour la politique en ligne, tel que
amiLambda
. -
Sélectionnez Créer une politique.
-
Répétez les étapes 2 et 3.
-
Collez la politique suivante. Remplacez chacun
example resource placeholder
avec vos propres informations.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ssm:PutParameter", "Resource": "arn:aws:ssm:
region
:123456789012
:parameter/latestAmi" }, { "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "*" } ] } -
Choisissez Suivant : Balises.
-
(Facultatif) Ajoutez une ou plusieurs paires clé-valeur d'identification afin d'organiser, de suivre ou de contrôler l'accès pour cette politique.
-
Choisissez Suivant : vérification.
-
Sur la page Examiner une politique, dans le champ Nom, saisissez un nom pour la politique en ligne, tel que
amiParameter
. -
Sélectionnez Créer une politique.
-
Dans le volet de navigation, sélectionnez Rôles, puis Créer un rôle.
-
Directement sous Cas d'utilisation, choisissez Lambda, puis Suivant.
-
Sur la page Ajouter des autorisations utilisez le champ Recherche pour localiser les deux politiques que vous avez créées précédemment.
-
Cochez la case à côté des politiques, puis sélectionnez Suivant.
-
Pour Role name (Nom du rôle), entrez un nom pour votre nouveau rôle, par exemple
lambda-ssm-role
ou autre, en fonction de vos préférences.Note
Différentes entités peuvent référencer le rôle et il n'est donc pas possible de modifier son nom après sa création.
-
(Facultatif) Ajoutez une ou plusieurs paires clé-valeur de balise afin d'organiser, de suivre ou de contrôler l'accès pour ce rôle, puis sélectionnez Créer le rôle.
Tâche 3 : Création d'une fonction AWS Lambda
Utilisez la procédure suivante pour créer une fonction Lambda qui met à jour automatiquement la valeur du paramètre latestAmi
.
Pour créer une fonction Lambda
Connectez-vous à la AWS Lambda console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/lambda/
. -
Sélectionnez Create function (Créer une fonction).
-
Sur la page Create function, sélectionnez Author from scratch.
-
Sous Nom de la fonction, saisissez
Automation-UpdateSsmParam
. -
Pour l'environnement d'exécution, choisissez Python 3.8.
-
Dans Architecture, sélectionnez le type de processeur informatique que Lambda doit utiliser pour exécuter la fonction, x86_64 ou arm64,
-
Sous Autorisations, développez Modifier le rôle d'exécution par défaut.
-
Sélectionnez Use an existing role (Utiliser un rôle existant), puis le rôle de service Lambda que vous avez créé lors de la tâche 2.
-
Sélectionnez Create function (Créer une fonction).
-
Dans la section Code source, dans l'onglet lambda_function, supprimez le code prérempli dans le champ, puis collez l'exemple de code suivant.
from __future__ import print_function import json import boto3 print('Loading function') #Updates an SSM parameter #Expects parameterName, parameterValue def lambda_handler(event, context): print("Received event: " + json.dumps(event, indent=2)) # get SSM client client = boto3.client('ssm') #confirm parameter exists before updating it response = client.describe_parameters( Filters=[ { 'Key': 'Name', 'Values': [ event['parameterName'] ] }, ] ) if not response['Parameters']: print('No such parameter') return 'SSM parameter not found.' #if parameter has a Description field, update it PLUS the Value if 'Description' in response['Parameters'][0]: description = response['Parameters'][0]['Description'] response = client.put_parameter( Name=event['parameterName'], Value=event['parameterValue'], Description=description, Type='String', Overwrite=True ) #otherwise just update Value else: response = client.put_parameter( Name=event['parameterName'], Value=event['parameterValue'], Type='String', Overwrite=True ) responseString = 'Updated parameter %s with value %s.' % (event['parameterName'], event['parameterValue']) return responseString
-
Choisissez Fichier, Enregistrer.
-
Pour tester la fonction Lambda, dans le menu Test, sélectionnez Configurer des événements de test.
-
Pour Event name (Nom d'événement), saisissez un nom pour l'événement de test, tel que
MyTestEvent
. -
Remplacez le texte existant par le texte suivantJSON. Remplacez
AMI ID
avec vos propres informations pour définir la valeur de votrelatestAmi
paramètre.{ "parameterName":"latestAmi", "parameterValue":"
AMI ID
" } -
Choisissez Save (Enregistrer).
-
Sélectionnez Test pour tester la fonction. Dans l'onglet Résultat de l'exécution, le statut doit être indiqué comme Réussi, avec d'autres détails concernant la mise à jour.
Tâche 4 : créer un runbook et patcher le AMI
Utilisez la procédure suivante pour créer et exécuter un runbook qui corrige le latestAmiparamètre que AMI vous avez spécifié. Une fois l'automatisation terminée, la valeur de latestAmiest mise à jour avec l'ID du nouveau correctif. AMI Les automatisations suivantes utilisent l'AMI créée par la précédente exécution.
Pour créer et exécuter le runbook
Ouvrez la AWS Systems Manager console à l'adresse https://console.aws.amazon.com/systems-manager/
. Dans le panneau de navigation, cliquez sur Documents.
-
Pour Créer un document, choisissez Automation.
-
Pour Name (Nom), saisissez
UpdateMyLatestWindowsAmi
. -
Sélectionnez l'onglet Éditeur, puis Modifier.
-
Choisissez OK lorsque vous y êtes invité.
-
Dans le champ Éditeur de documents, remplacez le contenu par défaut par l'YAMLexemple de contenu du runbook 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: The ID of the AMI you want to patch. default: '{{ ssm:latestAmi }}' SubnetId: type: String description: The ID of the subnet where the instance from the SourceAMI parameter is launched. SecurityGroupIds: type: StringList description: The IDs of the security groups to associate with the instance that's launched from the SourceAMI parameter. NewAMI: type: String description: The name of of newly patched AMI. default: 'patchedAMI-{{global:DATE_TIME}}' InstanceProfile: type: String description: 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: updateSsmParam action: aws:invokeLambdaFunction timeoutSeconds: 1200 maxAttempts: 1 onFailure: Abort inputs: FunctionName: Automation-UpdateSsmParam Payload: '{"parameterName":"latestAmi", "parameterValue":"{{createImage.ImageId}}"}' outputs: - createImage.ImageId
-
Sélectionnez Create automation (Créer une automatisation).
-
Dans le panneau de navigation, sélectionnez Automation (Automatisation), puis Execute automation (Exécuter l'automatisation).
-
Dans la page Choose document (Choisir un document), choisissez l'onglet Owned by me (Possédé par moi).
-
Recherchez le UpdateMyLatestWindowsAmirunbook, puis sélectionnez le bouton sur la UpdateMyLatestWindowsAmicarte.
-
Choisissez Suivant.
-
Sélectionnez Exécution simple.
-
Spécifiez les valeurs des paramètres d'entrée.
-
Sélectionnez Execute (Exécuter).
-
Une fois l'automatisation terminée, sélectionnez Parameter Store dans le panneau de navigation et vérifiez que la nouvelle valeur de
latestAmi
correspond à celle renvoyée par l'automatisation. Vous pouvez également vérifier que le nouvel AMI identifiant correspond à la sortie Automation dans la AMIssection de la EC2 console Amazon.