【发布时间】:2020-12-02 20:42:50
【问题描述】:
我正在尝试在 Lambda 本身内禁用触发 Lambda 的 Cloudwatch 事件规则,以便在不需要时它不会继续运行。
我有一个单独的 Lambda 调用 enableRule 来启用规则,这似乎工作正常。该规则与执行 enableRule 的函数无关。编辑:原来 EnableRule 在 Lambda 中也不起作用。
但是,这个应该禁用它的 Lambda 不起作用。
这两个函数的角色已经拥有 Cloudwatch 和 CloudwatchEvent 完全访问权限。
var cloudwatchEvents = new AWS.CloudWatchEvents();
var params = {
Name: cloudwatchEventRuleName
}
console.log("this message will show up");
cloudwatchEvents.disableRule(params, function (err, data) {
console.log("but this message never appears when it runs via Lambda for some reason!")
if (err)
console.log(err,err.stack);
else
console.log(data);
});
console.log("and this message will also show up");
如果我通过 Lambda 运行,它应该调用中间 console.log 的那一行根本不起作用。但是,它在我的本地运行良好。
我什至打印了 cloudwatchEventRuleName 来检查是否有任何拼写错误,但函数名称似乎正确。就好像该函数出于某种原因完全跳过了 disableRule 函数。
【问题讨论】:
-
你应该做一个 try-catch 而不是 console.log。你有这个执行的错误日志吗?您的 IAM 是否为此正确配置?也许如果你的 Lambda 没有权限,那么函数会立即失败。
-
“这两个函数的角色已经拥有 Cloudwatch 和 CloudwatchEvent 完全访问权限。”我实际上有点希望它只是权限,因为至少会出现错误。即使我尝试捕捉也没有什么不同。就好像它出于某种原因跳过了整个命令。 console.log 是 AWS JS SDK 文档中给出的示例,我确实向它传递了错误的参数,它返回了一个错误(本地运行),所以我知道至少我可以用它来跟踪它。只是特别是当它在 Lambda 中运行时它不起作用。
标签: node.js aws-lambda amazon-cloudwatch