从 Lambda 函数安排的 CloudWatch 事件
Posted
技术标签:
【中文标题】从 Lambda 函数安排的 CloudWatch 事件【英文标题】:CloudWatch Events scheduled from Lambda function 【发布时间】:2019-10-26 11:15:53 【问题描述】:我尝试使用 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 角色相似,当我调用 main 函数时
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.' ]
我不确定我应该在哪里寻找答案,因为我没有在网络上的任何地方看到这个案例。
【问题讨论】:
角色建立信任关系了吗?即“声明”:[“效果”:“允许”,“主体”:“服务”:“events.amazonaws.com”,“行动”:“sts:AssumeRole” @tedsmitt 是的,我设置了声明:[效果:'允许',主体:服务:['lambda.amazonaws.com'],,操作:['sts:AssumeRole'] , , Effect: 'Allow', Principal: Service: ['events.amazonaws.com'], , Action: ['sts:AssumeRole'], , ],适用于 lambda 执行角色和 cloudWatch 事件角色 我认为这里的问题是aws.*
前缀是保留给 AWS 自己使用的。因此,当您尝试将来源指定为aws.events
时,它会告诉您您无权使用该来源。虽然,除了 blog post 的结尾之外,我似乎找不到任何关于此的文档。
【参考方案1】:
好的,所以添加到 ruleParams
EventPattern: JSON.stringify(
source: ['sourceName'],
),
并将条目设置为
Entries: [
DetailType: 'Scheduled Event',
Source: 'sourceName',
Resources: [rule.RuleArn],
Detail: '',
,
],
解决了问题
【讨论】:
嗨,这只是监听每个 cloudwatch 事件。我想运行一个 cron 并将 cloudwatch 事件与有效负载一起传递给 lambda以上是关于从 Lambda 函数安排的 CloudWatch 事件的主要内容,如果未能解决你的问题,请参考以下文章
为 Lambda 函数设置 CloudWatch 日志组的过期时间
禁用 CloudWatch 以监控 Lambda 函数的日志
如何将值传递给 CloudWatch 中的 Lambda 函数?
Terraform 多个 cloudwatch 事件触发相同的 lambda 函数
javascript CloudWatch到AWS Lambda到Slack Channel Alerts和Charts。通过SNS主题通过Lambda函数将CloudWatch警报发布到Slack通