Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Aktualisiere ein goldenes AMI mithilfe von Automatisierung AWS Lambda, und Parameter Store
Im folgenden Beispiel wird das Modell verwendet, bei dem eine Organisation ihre eigenen, firmeneigenen Produkte verwaltet und regelmäßig Patches aktualisiert AMIs anstatt auf Amazon Elastic Compute Cloud (Amazon EC2) zu bauen AMIs.
Das folgende Verfahren zeigt, wie Betriebssystem-Patches (OS) automatisch auf ein AMI das wird bereits als das neueste up-to-date oder aktuellste angesehen AMI. In dem Beispiel SourceAmiId
ist der Standardwert des Parameters definiert durch AWS Systems Manager Parameter Store Parameter aufgerufenlatestAmi
. Der Wert von latestAmi
wird durch eine AWS Lambda Funktion aktualisiert, die am Ende der Automatisierung aufgerufen wird. Als Ergebnis dieses Automatisierungsprozesses wurde der Zeit- und Arbeitsaufwand für das Patchen aufgewendet AMIs wird minimiert, da das Patchen immer auf die meisten angewendet wird up-to-date AMI. Parameter Store und Automatisierung sind Werkzeuge von. AWS Systems Manager
Bevor Sie beginnen
Konfigurieren Sie Automatisierungsrollen und optional Amazon EventBridge for Automation. Weitere Informationen finden Sie unter Einrichten der Automatisierung.
Inhalt
Aufgabe 1: Einen Parameter im Systems Manager erstellen Parameter Store
Erstellen Sie einen Zeichenkettenparameter in Parameter Store der die folgenden Informationen verwendet:
-
Name:
latestAmi
. -
Wert: Ein AMI ID. Zum Beispiel:
ami-188d6e0e
.
Für Informationen zum Erstellen eines Parameter Store Zeichenkettenparameter finden Sie unterErstellen Parameter Store Parameter im Systems Manager.
Aufgabe 2: Erstellen einer IAM-Rolle für AWS Lambda
Gehen Sie wie folgt vor, um eine IAM-Dienstrolle für AWS Lambda zu erstellen. Diese Richtlinien erteilen Lambda die Berechtigung zum Aktualisieren des Werts des latestAmi
-Parameters mithilfe einer Lambda-Funktion und von Systems Manager.
So erstellen Sie eine IAM-Service-Rolle für Lambda
Melden Sie sich bei der an AWS Management Console und öffnen Sie die IAM-Konsole unter. https://console.aws.amazon.com/iam/
-
Wählen Sie im Navigationsbereich Richtlinien und dann Richtlinie erstellen.
-
Wählen Sie den Tab JSON.
-
Ersetzen Sie den Standardinhalt durch die folgende Richtlinie. Ersetzen Sie jeden
example resource placeholder
durch Ihre Informationen.{ "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
:*" ] } ] } -
Wählen Sie Weiter: Tags aus.
-
(Optional) Fügen Sie ein oder mehrere Tag-Schlüssel-Wert-Paare hinzu, um den Zugriff für diese Richtlinie zu organisieren, zu verfolgen oder zu steuern.
-
Wählen Sie Weiter: Prüfen aus.
-
Geben Sie auf der Seite Richtlinie prüfen im Feld Name einen Namen für die Inline-Richtlinie ein, z. B.
amiLambda
. -
Wählen Sie Create Policy (Richtlinie erstellen) aus.
-
Wiederholen Sie die Schritte 2 und 3.
-
Fügen Sie die folgende Richtlinie ein. Ersetzen Sie jeden
example resource placeholder
durch Ihre Informationen.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ssm:PutParameter", "Resource": "arn:aws:ssm:
region
:123456789012
:parameter/latestAmi" }, { "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "*" } ] } -
Wählen Sie Weiter: Tags aus.
-
(Optional) Fügen Sie ein oder mehrere Tag-Schlüssel-Wert-Paare hinzu, um den Zugriff für diese Richtlinie zu organisieren, zu verfolgen oder zu steuern.
-
Wählen Sie Weiter: Prüfen aus.
-
Geben Sie auf der Seite Richtlinie prüfen im Feld Name einen Namen für die Inline-Richtlinie ein, z. B.
amiParameter
. -
Wählen Sie Create Policy (Richtlinie erstellen) aus.
-
Wählen Sie im Navigationsbereich Rollen und dann Rolle erstellen.
-
Wählen Sie direkt unter Anwendungsfall die Option Lambda und dann Weiter aus.
-
Suchen Sie auf der Seite Berechtigungsrichtlinien anfügen im Feld Suche die beiden Richtlinien, die Sie zuvor erstellt haben.
-
Aktivieren Sie das Kontrollkästchen neben den Richtlinien und wählen Sie anschließend Weiter aus.
-
Geben Sie unter Role name (Rollenname) einen Namen für Ihre neue Rolle, wie z. B.
lambda-ssm-role
, oder einen anderen von Ihnen bevorzugten Namen ein.Anmerkung
Da möglicherweise verschiedene Entitäten auf die Rolle verweisen, kann der Rollenname nach der Erstellung nicht geändert werden.
-
(Optional) Fügen Sie ein oder mehrere Tag-Schlüssel-Wert-Paare hinzu, um den Zugriff für diese Rolle zu organisieren, nachzuverfolgen oder zu steuern, und wählen Sie dann Rolle erstellen aus.
Aufgabe 3: Erstellen einer AWS Lambda -Funktion
Führen Sie die folgenden Schritte zum Erstellen einer Lambda-Funktion aus, die den Wert des latestAmi
-Parameters automatisch aktualisiert.
Eine Lambda-Funktion erstellen
Melden Sie sich bei der an AWS Management Console und öffnen Sie die AWS Lambda Konsole unter https://console.aws.amazon.com/lambda/
. -
Wählen Sie Funktion erstellen aus.
-
Wählen Sie auf der Seite Create function die Option Author from scratch.
-
Geben Sie für Function name (Funktionsname)
Automation-UpdateSsmParam
ein. -
Wählen Sie für Runtime (Laufzeit) die Option Python 3.8 aus.
-
Wählen Sie unter Architektur den Computerprozessortyp aus, den Lambda zum Ausführen der Funktion verwenden soll, x86_64 oder arm64,
-
Erweitern Sie im Abschnitt Berechtigungen die Option Standardausführungsrolle ändern.
-
Wählen Sie Use an existing role (Vorhandene Rolle verwenden) aus und wählen Sie dann die Servicerolle für Lambda aus, die Sie in Aufgabe 2 erstellt haben.
-
Wählen Sie Funktion erstellen aus.
-
Löschen Sie im Bereich Code-Quelle in der Registerkarte lambda_function den vorab ausgefüllten Code im Feld und fügen Sie das folgende Codebeispiel ein.
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
-
Klicken Sie auf Datei, Speichern.
-
Um die Lambda-Funktion zu testen, wählen Sie im Menü Test die Option Testereignis konfigurieren aus.
-
Geben Sie für Event name (Ereignisname) einen Namen für das Testereignis ein, z. B.
MyTestEvent
. -
Ersetzen Sie den vorhandenen Text durch folgendes JSON-Objekt.
AMI ID
Ersetzen Sie es durch Ihre eigenen Informationen, um IhrenlatestAmi
Parameterwert festzulegen.{ "parameterName":"latestAmi", "parameterValue":"
AMI ID
" } -
Wählen Sie Save (Speichern) aus.
-
Wählen Sie Test aus, um die Funktion zu testen. Auf der Registerkarte Ausführungsergebnis sollte der Status als Erfolgreich gemeldet werden, zusammen mit anderen Details zur Aktualisierung.
Aufgabe 4: Erstellen eines Runbooks und Patchen des AMI
Gehen Sie wie folgt vor, um ein Runbook zu erstellen und auszuführen, das Patches für AMI Sie haben für den LatestAMi-Parameter angegeben. Nach Abschluss der Automatisierung wird der Wert von latestAmi mit der ID der neu gepatchten Datei aktualisiert AMI. Nachfolgende Automatisierungen verwenden die AMI erstellt durch die vorherige Ausführung.
Erstellen und Ausführen des Runbooks
Öffnen Sie die AWS Systems Manager Konsole unter https://console.aws.amazon.com/systems-manager/
. Wählen Sie im Navigationsbereich die Option Dokumente aus.
-
Wählen Sie für Dokument erstellen die Option Automatisierung aus.
-
Geben Sie unter Name
UpdateMyLatestWindowsAmi
ein. -
Wählen Sie die Registerkarte Editor und wählen Sie Edit (Bearbeiten) aus.
-
Wählen Sie bei Aufforderung OK aus.
-
Ersetzen Sie im Feld Dokument-Editor den Standardinhalt durch den folgenden Inhalt des YAML-Beispiel-Runbooks.
--- 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
-
Wählen Sie Create automation (Automation erstellen).
-
Wählen Sie im Navigationsbereich Automatisierung und Automatisierung ausführen aus.
-
Wählen Sie auf der Seite Choose document (Dokument wählen), die Registerkarte Owned by me (In meinem Besitz).
-
Suchen Sie nach dem UpdateMyLatestWindowsAmiRunbook und wählen Sie die Schaltfläche auf der UpdateMyLatestWindowsAmiKarte aus.
-
Wählen Sie Weiter.
-
Wählen Sie Simple execution (Einfache Ausführung) aus.
-
Geben Sie Werte für die Eingabeparameter an.
-
Wählen Sie Ausführen.
-
Nachdem die Automatisierung abgeschlossen ist, wählen Sie Parameter Storeklicken Sie im Navigationsbereich und vergewissern Sie sich, dass der neue Wert für
latestAmi
mit dem von der Automatisierung zurückgegebenen Wert übereinstimmt. Sie können den neuen auch überprüfen AMI Die ID entspricht der Automation-Ausgabe im AMIsAbschnitt der EC2 Amazon-Konsole.