从 Lambda 函数调度的 CloudWatch 事件



我尝试使用 Amazon CloudWatch Events 设置调度,该事件应从另一个 Lambda 调用 Lambda 函数我使用了将事件发送到 Amazon CloudWatch Events - 适用于 JavaScript 的 AWS 开发工具包中的指南。

问题是,即使在设置了CloudWatch Events IAM角色之后

{
                    Sid: 'CloudWatchEventsFullAccess',
                    Effect: 'Allow',
                    Action: ['*'],
                    Resource: '*',
},

和类似的 Lambda 角色,当我调用主函数时

const cloudWatchEvents = new CloudWatchEvents()
        const ruleParams = {
            Name: projectId,
            ScheduleExpression: crontab,
            State: 'ENABLED',
            RoleArn: apiCloudWatchEventsIamRole,
        }
        const targetParams = {
            Rule: projectId,
            Targets: [
                {
                    Arn: apiLongTaskFunctionArn,
                    Id: 'lambdaCloudWatch',
                },
            ],
        }

        cloudWatchEvents.putRule(ruleParams, (err, rule) => {
            if (err) {
                console.log(err)
                return err
            }
            cloudWatchEvents.putTargets(targetParams, (err, data) => {
                if (err) {
                    console.log(err)
                    return (err)
                }
                const eventParams = {
                    Entries: [
                        {
                            DetailType: 'Scheduled Event',
                            Source: 'aws.events',
                            Resources: [rule.RuleArn],
                            Detail: '{}',
                        },
                    ],
                }
                cloudWatchEvents.putEvents(eventParams, (err, data) => {
                    if (err) {
                        console.log(err)
                        return (err)
                    }
                    console.log(data)
                })
            })
        })

我收到来自上一个控制台的响应.log

{ FailedEntryCount: 1,
      Entries: 
       [ { ErrorCode: 'NotAuthorizedForSourceException',
           ErrorMessage: 'Not authorized for the source.' } ] }

不确定我应该在哪里搜索答案,因为我还没有在网上任何地方看到这种情况的记录。

好的,所以添加到规则参数

            EventPattern: JSON.stringify({
                source: ['sourceName'],
            }),

并将条目设置为

                    Entries: [
                        {
                            DetailType: 'Scheduled Event',
                            Source: 'sourceName',
                            Resources: [rule.RuleArn],
                            Detail: '{}',
                        },
                    ],

解决了问题

最新更新