第 3 步:创建生命周期挂钩 Lambda 函数 - Amazon CodeDeploy
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

第 3 步:创建生命周期挂钩 Lambda 函数

在本部分中,您将为 Amazon ECS 部署的AfterAllowTestTraffic挂钩。Lambda 函数在安装更新的 Amazon ECS 应用程序之前运行验证测试。对于本教程,Lambda 函数返回Succeeded。在实际部署过程中,验证测试可能返回 SucceededFailed,具体取决于验证测试的结果。此外,您可能会对其他 Amazon ECS 部署生命周期事件挂钩中的一个或多个实施 Lambda 测试函数(BeforeInstallAfterInstallBeforeAllowTraffic, 和AfterAllowTraffic)。有关更多信息,请参阅Amazon 云服务器部署的生命周期事件挂钩列表

必须具有 IAM 角色才能创建 Lambda 函数。该角色授予 Lambda 函数写入 CloudWatch Logs 并设置 CodeDeploy 生命周期挂钩状态的权限。

创建 IAM 角色

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 从导航窗格中选择 Roles (角色),然后选择 Create role (创建角色)

  3. 创建具有以下属性的角色:

    • Trusted entity (可信任的实体)Amazon Lambda

    • Permissions (权限)AWSLambdaBasicExecutionRole。这将授予 Lambda 函数写入 CloudWatch Logs 的权限。

    • Role name (角色名称)lambda-cli-hook-role

    有关更多信息,请参阅 。创建Amazon Lambda执行角色

  4. 将权限 codedeploy:PutLifecycleEventHookExecutionStatus 附加到您创建的角色。这将授予 Lambda 函数在部署期间设置 CodeDeploy 生命周期挂钩状态的权限。有关更多信息,请参阅 。添加 IAM 身份权限中的Amazon Identity and Access Management用户指南PutLifecycleEventHookExecutionStatus中的CodeDeploy API 参考

创建AfterAllowTestTraffic挂钩 Lambda 函数

  1. 使用以下内容创建名为 AfterAllowTestTraffic.js 的文件。

    '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. 创建 Lambda 部署程序包。

    zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js
  3. 使用create-function命 Lambda 为AfterAllowTestTraffic挂钩。

    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. 记下 Lambda 函数 ARNcreate-function响应. 您在下一个步骤中更新 CodeDeploy 部署部署的 AppSpec 文件时,可以使用此 ARN。