aws lambda 使用节点 js 从事件规则添加触发器

问题描述 投票:0回答:1

我尝试通过创建规则动态触发我的 lambda,将 lambda 添加为该规则的目标,并向规则添加调用 lambda 的权限,如下所示:

const client = new CloudWatchEventsClient({
  region: region,
  credentials: { accessKeyId, secretAccessKey } 
});

//for simplicity i make constant variables here:
   const ruleName = "sendEmail-test-1"
   const cron= "(10 10 ? * * *)"
   const event = {foo:"boo"}

const putRule = async () => {
  const command = new PutRuleCommand({
    Name: ruleName,
    ScheduleExpression: cron,
    State: 'ENABLED',
    Description: Description
  });

  return await client.send(command);

putRule
返回状态码为 200 的元数据。在用户界面中我也可以看到新规则。

然后我将目标添加到该规则中,如下所示:

const putTarget = async (ruleName: string, event: RuleObjectType['event']) => {
  const command = new PutTargetsCommand({
    Rule: ruleName,
    Targets: [
      {
        Id: ruleName,
        Arn: lambdaARN,
        Input: JSON.stringify(event)
      }
    ]
  });

  return await client.send(command);
  
};

同样,响应中的状态代码为 200 ,我可以在 UI 中看到该规则有一个新目标,即我的 lambda。

但是,如果我进入 lambda,我在中还没有看到触发新规则,因此我在 lambda 内添加对此规则的权限,如下所示:

const addLambdaPermission = async (ruleName: string) => {
  const command = new AddPermissionCommand({
    Action: 'lambda:InvokeFunction',
    FunctionName: lambdaARN,
    Principal: 'events.amazonaws.com',
    SourceArn: `arn:aws:events:${region}:${IAM_ID}:rule/${ruleName}`,
    StatementId: `myProject-MyLambda-${ruleName}-permission` // Unique statement ID
  });

  return await client.send(command as any);
};

响应的状态代码再次为 200,但我仍然没有看到任何变化 在 lambda 权限内我没有看到这个新权限 在 lambda 触发器内,我没有看到我刚刚添加的规则。

我错过了什么?

amazon-web-services aws-lambda aws-event-bridge aws-permissions
1个回答
0
投票

我担心您有 IAM 角色吗?你能显示抛出异常消息吗?把它放入 try catch 并找出来。我不太清楚,但我认为

EventBusName 
RoleArn
非常重要。

© www.soinside.com 2019 - 2024. All rights reserved.