本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 3:创建生命周期挂钩 Lambda 函数
在本节中,您将为亚马逊ECS部署的挂钩实现一个 Lambda 函数。AfterAllowTestTraffic
在安装更新的亚马逊ECS应用程序之前,Lambda 函数会运行验证测试。对于本教程,Lambda 函数返回 Succeeded
。在实际部署过程中,验证测试可能返回 Succeeded
或 Failed
,具体取决于验证测试的结果。此外,在现实世界的部署过程中,您可以为一个或多个其他 Amazon ECS 部署生命周期事件挂钩(BeforeInstall
、AfterInstall
BeforeAllowTraffic
、和AfterAllowTraffic
)实现 Lambda 测试函数。有关更多信息,请参阅 Amazon ECS 部署的生命周期事件挂钩列表。
创建您的 Lambda 函数需要一个IAM角色。该角色向 Lambda 函数授予写入 CloudWatch 日志和设置 CodeDeploy 生命周期挂钩状态的权限。
创建 IAM 角色
-
打开IAM控制台,网址为https://console.aws.amazon.com/iam/
。 -
从导航窗格中选择角色,然后选择创建角色。
-
创建具有以下属性的角色:
-
Trusted entity(可信任的实体):AWS Lambda。
-
权限:AWSLambdaBasicExecutionRole。这会授予您的 Lambda 函数写入日志的权限。 CloudWatch
-
Role name(角色名称):
lambda-cli-hook-role
。
有关更多信息,请参阅创建 AWS Lambda 执行角色。
-
-
将权限
codedeploy:PutLifecycleEventHookExecutionStatus
附加到您创建的角色。这会授予您的 Lambda 函数在部署期间设置 CodeDeploy 生命周期挂钩状态的权限。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》和《CodeDeploy API参考》PutLifecycleEventHookExecutionStatus中的 “添加IAM身份权限”。
创建 AfterAllowTestTraffic
挂钩 Lambda 函数
-
使用以下内容创建名为
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"); } }); }
-
创建 Lambda 部署包。
zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js
-
使用
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 -
在响应中记下您的 Lambda 函数ARN。
create-function
在下一步中更新 CodeDeploy 部署 AppSpec 文件ARN时,您将使用此功能。