我尝试使用 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: '{}',
},
],
解决了问题