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

步骤 3 创建生命周期挂钩 Lambda 功能

在本节中,您实施一个 Lambda 功能 Amazon ECS 部署 AfterAllowTestTraffic 钩。TheThethe Lambda 功能在更新之前运行验证测试 Amazon ECS 应用程序已安装。对于本教程, Lambda 功能返回 Succeeded...在实际部署期间,验证测试返回 SucceededFailed,取决于验证测试的结果。在真实的世界部署期间,您可能会实施 Lambda 一个或多个其他一个或多个测试功能 Amazon ECS DeploymentLifecycleEventHook(BeforeInstallAfterInstallBeforeAllowTraffic,和 AfterAllowTraffic)。有关更多信息,请参阅 部署的生命周期事件挂钩的列表Amazon ECS.

一个 IAM 创建您的 Lambda 功能。角色授予 Lambda 函数的写入权限 CloudWatch Logs 并设置 CodeDeploy 生命周期挂钩。

创建 IAM 角色

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

  2. 从“Naviation”窗格中,选择 角色,然后选择 创建角色.

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

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

    • Permissions: AWSLambdaBasicExecutionRole. 这将授予 Lambda 函数的写入权限 CloudWatch Logs.

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

    有关详细信息,请参阅 创建 AWS Lambda 执行角色.

  4. 将权限 codedeploy:PutLifecycleEventHookExecutionStatus 附加到您创建的角色。这将授予 Lambda 功能允许设置 CodeDeploy 部署期间生命周期挂钩。有关详细信息,请参阅 添加iam身份权限AWS Identity and Access Management 用户指南百分比生命周期类似状态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 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 命令创建 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 功能ARN在 create-function 响应。您在更新您的 CodeDeploy 部署 AppSpec file 在下一步中。