【问题标题】:one AWS CloudWatch event to control multiple things一个 AWS CloudWatch 事件来控制多件事
【发布时间】:2019-04-19 23:42:21
【问题描述】:

我有多个 cloudwatch 事件。它们中的每一个同时触发具有不同输入的同一个 Lambda 调用应用程序:即 event1 使用输入按计划触发 lambda app:app_name=app1 event2 使用输入:app_name=app2 以相同的时间表触发 lambda app。 event3 使用输入:app_name=app3 以相同的时间表触发 lambda 应用程序。

如您所见,所有活动都有相同的时间表。我真的不需要那么多重复的事件。

有什么方法可以使用一个 CloudWatch 事件来触发一个具有多个输入的 Lambda?即一次,相同的事件将触发输入 app1 的 lambda app;它还使用输入 app2 触发相同的 lambda,它还使用输入 app3 触发相同的 lambda?

它将使我的结构整洁。一个事件,一个 lambda(具有不同的输入)用于多个应用程序。

【问题讨论】:

  • 你能澄清为什么你需要多个输入,你在你的 lambda 中做什么?您的输入不应该是 Lambda 中的常量/环境变量吗?
  • 慢跑:例如我想让 CloudWatch 安排 event1=每天晚上 10 点触发 lambda 启动 EC2_1; event2=每天晚上10点(同一时间)触发lambda启动EC2_2; event3=每天晚上10点触发lambda启动EC2_3;如您所见,事件是相同的。我使用 event1、event2、event 3 的唯一原因是我无法向 lambda 输入不同的输入(即 ec2_1、ec2_2、ec2_3)。我希望有一个事件时间表来触发具有不同输入甚至不同 lambda 的相同 lambda。谢谢,

标签: aws-lambda amazon-cloudwatch


【解决方案1】:

您可以拥有一个带有 Schedule 事件源和一个 Lambda 函数目标的 CloudWatch 规则。您需要将输入配置为使用带有数据数组的常量(JSON 文本),如下所示:

然后在您的 Lambda 函数中,event 将是您的常量。使用 Node.js 8.10 启动 EC2 实例的示例:

const AWS = require('aws-sdk');
const ec2 = new AWS.EC2();

exports.handler = async (event) => {
  console.log('Starting instances: %j', event);
  const data = await ec2.startInstances({ InstanceIds: event }).promise();
  console.log(data);
};

【讨论】:

  • 谢谢jogold。该输入会触发一个带有输入[instance1,instance2]的lambda,其中lambda将启动instance1然后启动实例2(使用for循环等)还是您的意思是输入将触发带有[instance1]的lambda并且使用 [instance 2] 触发相同的 lambda?
  • 它将触发 one lambda 输入 [instance1, instance2]。您不需要在 lambda 中使用 for 循环,因为 StartInstances 采用实例 ID 数组。见docs.aws.amazon.com/AWSEC2/latest/APIReference/…
猜你喜欢
  • 1970-01-01
  • 2020-05-08
  • 2019-07-15
  • 2018-08-28
  • 2020-01-21
  • 2018-09-07
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多