События CloudWatch, запланированные из функции Lambda - PullRequest
2 голосов
/ 12 июня 2019

Я пытался настроить планирование с помощью Amazon CloudWatch Events, которая должна вызывать функцию Lambda, из другой системы Lambda, которую я использовал из Отправка событий в Amazon CloudWatch Events - AWS SDK для JavaScript .

Проблема в том, что даже после установки роли IAM CloudWatch Events

{
                    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.' } ] }

Я не уверен, где мне искать ответ, поскольку я не видел ни одного случая, документированного в Интернете.

1 Ответ

2 голосов
/ 12 июня 2019

хорошо, поэтому добавление в ruleParams

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

и установка Entries в

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

решило проблему

...