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.
Mettre à 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 ses propres produits propriétaires AMIs plutôt que de créer à partir d'Amazon Elastic Compute Cloud (Amazon EC2) AMIs.
La procédure suivante montre comment appliquer automatiquement des correctifs de système d'exploitation (OS) à un AMI qui est déjà considéré comme le plus récent up-to-date ou le plus récent AMI. Dans l'exemple, la valeur par défaut du paramètre SourceAmiId
est définie par 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 est minimisé car les correctifs sont toujours appliqués au maximum up-to-date AMI. Parameter Store et l'automatisation sont des outils 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 de chaîne dans Parameter Store qui utilise les informations suivantes :
-
Nom :
latestAmi
. -
Valeur : An AMI IDENTIFIANT. Par exemple :
ami-188d6e0e
.
Pour plus d'informations sur la création d'un Parameter Store paramètre de chaîne, voirCréation Parameter Store paramètres dans Systems Manager.
Tâche 2 : Créer un rôle IAM pour AWS Lambda
Utilisez la procédure suivante pour créer un rôle de service IAM 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 de service IAM pour Lambda
Connectez-vous à la console IAM AWS Management Console et ouvrez-la à https://console.aws.amazon.com/iam/
l'adresse. -
Dans le volet de navigation, sélectionnez Politiques, puis Créer une politique.
-
Sélectionnez l'onglet JSON.
-
Remplacez les contenus par défaut par la politique suivante. Remplacez chaque
example resource placeholder
par 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 chaque
example resource placeholder
par 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 code JSON suivant.
AMI ID
Remplacez-le par 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 corriger l'AMI
Utilisez la procédure suivante pour créer et exécuter un runbook qui corrige le AMI que vous avez spécifié pour le paramètre LateStami. Une fois l'automatisation terminée, la valeur de LateStami est mise à jour avec l'ID du nouveau correctif AMI. Les automatisations ultérieures utilisent le AMI créé par l'exécution précédente.
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 Nom, saisissez
UpdateMyLatestWindowsAmi
. -
Sélectionnez l'onglet Éditeur, puis Modifier.
-
Choisissez OK lorsque vous y êtes invité.
-
Remplacez le contenu par défaut dans le champ Éditeur de document avec l'exemple 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: 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, choisissez Parameter Storedans le volet de navigation et vérifiez que la nouvelle valeur pour
latestAmi
correspond à la valeur renvoyée par l'automatisation. Vous pouvez également vérifier le nouveau AMI L'ID correspond à la sortie Automation dans la AMIssection de la EC2 console Amazon.