从 Lambda 函数安排的 CloudWatch Events

CloudWatch Events scheduled from Lambda function

我尝试使用 Amazon CloudWatch Events 设置调度,它应该从另一个 Lambda 调用 Lambda 函数 我使用了 Sending Events to Amazon CloudWatch Events - AWS SDK for JavaScript.

的指南

问题是,即使在设置 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)
                })
            })
        })

我收到了上次的回复 console.log

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

我不确定应该在哪里寻找答案,因为我在网络上的任何地方都没有看到这个案例的记录。

好的,所以添加到 ruleParams

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

并将条目设置为

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

解决了问题