Schritt 3: Erstellen Sie eine Lifecycle-Hook-Lambda-Funktion - AWS CodeDeploy

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.

Schritt 3: Erstellen Sie eine Lifecycle-Hook-Lambda-Funktion

In diesem Abschnitt implementieren Sie eine Lambda-Funktion für den AfterAllowTestTraffic Hook Ihrer Amazon ECS-Bereitstellung. Die Lambda-Funktion führt einen Validierungstest durch, bevor die aktualisierte Amazon ECS-Anwendung installiert wird. Für dieses Tutorial kehrt die Lambda-Funktion zurückSucceeded. Während einer realen Bereitstellung geben Validierungstests Succeeded oder Failed zurück, abhängig vom Ergebnis des Validierungstests. Während einer realen Bereitstellung können Sie auch eine Lambda-Testfunktion für einen oder mehrere der anderen Event-Hooks (BeforeInstall, AfterInstallBeforeAllowTraffic, undAfterAllowTraffic) des Amazon ECS-Bereitstellungslebenszyklus implementieren. Weitere Informationen finden Sie unter Liste der Lifecycle-Event-Hooks für eine Amazon ECS-Bereitstellung.

Eine IAM-Rolle ist erforderlich, um Ihre Lambda-Funktion zu erstellen. Die Rolle gewährt der Lambda-Funktion die Berechtigung, in CloudWatch Logs zu schreiben und den Status eines CodeDeploy Lifecycle-Hooks festzulegen.

So erstellen Sie eine IAM-Rolle
  1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie im Navigationsbereich Roles (Rollen) und dann Create role (Rolle erstellen) aus.

  3. Erstellen Sie eine Rolle mit den folgenden Eigenschaften:

    • Trusted entity (Vertrauenswürdige Entität): AWS Lambda.

    • Berechtigungen: AWSLambdaBasicExecutionRole. Dadurch wird Ihrer Lambda-Funktion die Berechtigung erteilt, in CloudWatch Logs zu schreiben.

    • Role name (Name der Rolle): lambda-cli-hook-role.

    Weitere Informationen finden Sie unter Eine AWS Lambda Ausführungsrolle erstellen.

  4. Fügen Sie die Berechtigung codedeploy:PutLifecycleEventHookExecutionStatus an die Rolle an, die Sie erstellt haben. Dadurch erhalten Ihre Lambda-Funktionen die Berechtigung, den Status eines CodeDeploy Lifecycle-Hooks während einer Bereitstellung festzulegen. Weitere Informationen finden Sie unter Hinzufügen von IAM-Identitätsberechtigungen im AWS Identity and Access Management Benutzerhandbuch und PutLifecycleEventHookExecutionStatusin der CodeDeploy API-Referenz.

Um eine AfterAllowTestTraffic Hook-Lambda-Funktion zu erstellen
  1. Erstellen Sie eine Datei mit dem Namen AfterAllowTestTraffic.js und dem folgenden Inhalt.

    'use strict'; const AWS = require('aws-sdk'); const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'}); exports.handler = (event, context, callback) => { console.log("Entering AfterAllowTestTraffic hook."); // Read the DeploymentId and LifecycleEventHookExecutionId from the event payload var deploymentId = event.DeploymentId; var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId; var validationTestResult = "Failed"; // Perform AfterAllowTestTraffic validation tests here. Set the test result // to "Succeeded" for this tutorial. console.log("This is where AfterAllowTestTraffic validation tests happen.") validationTestResult = "Succeeded"; // Complete the AfterAllowTestTraffic hook by sending CodeDeploy the validation status var params = { deploymentId: deploymentId, lifecycleEventHookExecutionId: lifecycleEventHookExecutionId, status: validationTestResult // status can be 'Succeeded' or 'Failed' }; // Pass CodeDeploy the prepared validation test results. codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) { if (err) { // Validation failed. console.log('AfterAllowTestTraffic validation tests failed'); console.log(err, err.stack); callback("CodeDeploy Status update failed"); } else { // Validation succeeded. console.log("AfterAllowTestTraffic validation tests succeeded"); callback(null, "AfterAllowTestTraffic validation tests succeeded"); } }); }
  2. Erstellen Sie ein Lambda-Bereitstellungspaket.

    zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js
  3. Verwenden Sie den create-function Befehl, um eine Lambda-Funktion für Ihren AfterAllowTestTraffic Hook zu erstellen.

    aws lambda create-function --function-name AfterAllowTestTraffic \ --zip-file fileb://AfterAllowTestTraffic.zip \ --handler AfterAllowTestTraffic.handler \ --runtime nodejs10.x \ --role arn:aws:iam::aws-account-id:role/lambda-cli-hook-role
  4. Notieren Sie sich den ARN Ihrer Lambda-Funktion in der create-function Antwort. Sie verwenden diesen ARN, wenn Sie die AppSpec Datei Ihres CodeDeploy Deployments im nächsten Schritt aktualisieren.