【问题标题】:AWS Lambda: using CloudwatchEvent.disableRule() doesn't work within Lambda but works in localAWS Lambda:使用 CloudwatchEvent.disableRule() 在 Lambda 中不起作用,但在本地起作用
【发布时间】: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


【解决方案1】:

显然,多年后,设置 VPC 仍然困扰着我。

是的,这是一个 VPC 配置。

我可以发誓,Lambda 函数使用的子网有一个路由表,该路由表指向一个正确设置的带有 NAT 网关实例的网络接口。

出于好奇,我尝试将 0.0.0.0/0 的路由表条目指向实例 (i-#####) 而不是网络接口 (eni-######)。

在路由表中按保存后,它自动转换为 eni-######,类似于我已经设置的...

除了这一次,该功能现在实际上开始工作了。

我不知道 AWS 做了什么神奇的事情,以至于关联一个实例 =/= 关联到一个网络接口,即使前者无论如何都转换为相同的 ID,但无论如何。

所以对于遇到同样问题的任何人:请务必仔细检查您的函数是否真的可以访问互联网以使用 AWS API

编辑:另外一件事:我必须确保 enableRule 和 disableRule 都处于等待状态,因为由于某种原因,如果处理程序在请求完成之前已经返回了某些内容,则实际上无法正确发送 AWS 请求。所以我们变成了一个承诺,所以我们可以等待它:

try { await cloudwatchEvents.disableRule(params).promise().then((result) => console.log(result)) }
catch (error) { console.log("Error when disabling rule!", error); }

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 2023-03-26
    • 2019-06-19
    • 2021-08-19
    • 1970-01-01
    • 2018-11-24
    • 2018-05-05
    • 2018-12-19
    相关资源
    最近更新 更多