amazon-web-services - AWS CloudWatch 事件未触发
问题描述
我尝试使用以下代码创建 cloudwatch 事件规则。但是,它似乎不起作用。我检查了 AWS CloudWatch Events,我附加了 lambda 函数,规则就在那里。但是,该事件永远不会被触发。我该如何解决这个问题?
async function createCloudWatchEvent(zip){
if(zip){
try{
await putRule(zip);
await putTarget(zip);
} catch (e) {
console.log(`Can't create [${zip}] cloudwatch event`);
}
}
}
function putRule (ruleName) {
let cloudWatchParams = {
Name: ruleName, // required
ScheduleExpression: 'rate(1 minute)',
State: 'ENABLED'
};
return new Promise(resolve => {
cloudwatchevent.putRule(cloudWatchParams, async function(err, data) {
if(err){
console.log(err);
resolve(err);
}else{
console.log('Successfully created rule: ' + ruleName);
resolve();
}
});
});
}
function putTarget (ruleName) {
let cloudWatchParams = {
Rule: ruleName, // required
Targets: [ // required
{
Arn: 'xxxxxxxxxx',
Id: 'Determine_State',
Input: JSON.stringify({zip: ruleName})
}
]
};
return new Promise(resolve => {
// Attach "Determine_State" target to cloudwatch event
cloudwatchevent.putTargets(cloudWatchParams, function(err, data) {
if(err){
console.log(err);
resolve(err);
}else{
console.log('Successfully attached target [' + cloudWatchParams.Targets[0].Id + '] to rule: ' + ruleName);
resolve();
}
});
});
}
解决方案
我不确定您是否已经知道,您为 lambda 函数设置的 cron 计划是 UTC 时间。例如,如果您指定下午 5 点,则为 UTC 时间下午 5 点。也许您在执行之前正在检查日志。
登录到 cloudwatch 的 Lambda 权限
lambda 应该有权登录到 cloudwatch。否则 lambda 函数不会将日志添加到 cloudwatch。这是您可以参考的政策。
{
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "arn:aws:logs:*:*:*"
}
]
}
参考:
无法让 AWS Lambda 函数记录(文本输出)到 CloudWatch
希望这可以帮助。
推荐阅读
- sympy - SymPy 无法求解方程 cos(x) = - 1 /cosh(x)
- docker - 如何使用 Docker 列出可用的 repo 版本
- c# - 如何从嵌套列表中删除重复行?
- ios - 快速在动态表格视图单元格中使用 JSON 响应
- python - 等效于 str.format 的 Keras 后端函数
- wpf - 最简单的跨分辨率应用程序和自适应 UI 构建。不能在 WPF 中做到这一点
- c# - 在 app.config 中获取 ConfigurationElement 父级
- ocaml - OCaml- 评估函数时出错(此表达式的类型为 'a * 'b 但表达式应为 ('a * 'b) list# 类型)
- python - 加载 numpy 时本地脚本与内置模块冲突
- ssl - 如何找到 ssl / tls 主密钥