AWS CodeDeploy
用户指南 (API 版本 2014-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

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

创建 IAM 角色

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

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

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

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

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

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

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

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

创建 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 AWS 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 命令为 AfterAllowTestTraffic 挂钩创建 Lambda 函数。

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