gpt4 book ai didi

amazon-web-services - 使用 Lambda 的自定义触发器更新 AWS CloudFormation

转载 作者:行者123 更新时间:2023-12-04 15:08:00 24 4
gpt4 key购买 nike

我和一名团队成员拥有一个 CloudFormation 堆栈,其中包含 Nodejs Lambda 支持的自定义资源。

更新 lambda/parameters/trigger 后,我们希望 Lambda 首先删除其创建的第 3 方资源,然后根据新参数创建新资源。

这是我们的 lambda 导出处理程序。

if (event.RequestType == "Delete") {
console.log("Request type == Delete")
var successCallback = function(event, context) {
sendResponse(event, context, "SUCCESS");
}
doDeleteThings(event, context, successCallback);
} else if (event.RequestType == "Create") {
console.log("request type == create")
doCreateThings(event, context);
} else if (event.RequestType == "Update") {
console.log("request type == update")
var successCallback = function(event, context) {
doCreateThings(event, context);
}
doDeleteThings(event, context, successCallback);
} else {
sendResponse(event, context, "SUCCESS");
}

我们已经测试了代码,它适用于在 CloudFormation 中创建和删除,以及在无堆栈模式下创建、删除和更新(我们设置: event.RequestType = process.env.RequestType 和 sendResponse 不会执行通常的 CloudFormation 响应 POSTing,但只是执行 context.done()),但我们似乎无法使其在 CloudFormation 中的更新时工作。我开始认为我们误解了 Lambda 上的“更新”应该做什么。

我们以前从未能够查看由 CloudFormation 创建的 Lambda 函数的 CloudWatch 日志,这也于事无补。

以下是 CloudFormation 模板的相关部分:

   "ManageThirdPartyResources": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": "<bucketname>",
"S3Key": "<zipname>.zip"
},
"Description": { "Fn::Join": ["", ["Use cloudformation to automatically create third party resources for the ", { "Ref": "ENV" }, "-", { "Ref": "AWS::StackName" }, " environment"]] },
"Environment": {
"Variables": {
<environment variables that will probably be the things changing.>
}
},
"FunctionName": {
"Fn::Join": ["_", [{ "Ref": "AWS::StackName" }, "ManageThirdPartyResources"]]
},
"Handler": "index.handler",
"Role": "<role>",
"Runtime": "nodejs4.3",
"Timeout": 30
}
},
"ThirdPartyResourcesTrigger": {
"Type": "Custom::ThirdPartyResourcesTrigger",
"Properties": {
"ServiceToken": { "Fn::GetAtt": ["ManageThirdPartyResources", "Arn"] }
}
},

谢谢!

最佳答案

如果您的Custom::ThirdPartyResourcesTrigger属性之一发生更改,则会触发更新。如果 Lambda 函数上的属性发生更改,它将不会触发 Custom::ThirdPartyResourcesTrigger 上的更新。

因此,如果您想触发 Custom::ThirdPartyResourcesTrigger 的更新,则必须修改其属性。例如,您可以向 ThirdPartyResourcesTrigger 添加一个名为 ThingName 的属性,每当您更改 ThingName 的值时,您的 Lambda 将被调用更新请求类型:

"ThirdPartyResourcesTrigger": {
"Type": "Custom::ThirdPartyResourcesTrigger",
"Properties": {
"ServiceToken": { "Fn::GetAtt": ["ManageThirdPartyResources", "Arn"] },
"ThingName": "some value"
}
},

对于日志记录,请确保 Lambda 函数承担的 IAM 角色具有 CloudWatch 日志所需的权限:

"Effect": "Allow"
"Action": "logs:*"
"Resource": "arn:aws:logs:*:*:*"

关于amazon-web-services - 使用 Lambda 的自定义触发器更新 AWS CloudFormation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43001959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com