问题:AWS put-targets无法为Events规则添加Lambda目标,控制台无目标显示
问题排查与解决:CloudWatch Events规则无法添加Lambda目标
问题现象
部署Lambda函数并配置CloudWatch Events定时规则后,执行aws events put-targets命令尝试将Lambda关联为规则目标,但控制台始终看不到已添加的目标。
核心问题分析
从提供的命令脚本来看,两个关键错误导致目标添加失败:
- JSON格式解析错误:命令中使用了HTML转义字符
"代替双引号,shell无法识别为有效的JSON格式。 - 环境变量未解析:
put-targets命令中的Lambda ARN用单引号包裹,导致${AWS_ACCOUNT_ID}环境变量无法被shell替换为实际账号ID,生成的ARN无效。
修正后的命令脚本
调整JSON字符串的引号格式,确保环境变量能被正确解析:
aws iam create-role --role-name lambda-basic-execution --assume-role-policy-document file://lambda-trust-policy.json aws iam attach-role-policy --role-name lambda-basic-execution --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole sleep 5 aws lambda create-function --function-name "GlobalEntry" --handler globalentry --zip-file fileb://globalentry.zip \ --region="us-east-1" \ --environment "{\"Variables\":{\"TWILIO_ACCOUNT_SID\":\"${TWILIO_ACCOUNT_SID}\",\"TWILIO_AUTH_TOKEN\":\"${TWILIO_AUTH_TOKEN}\"}}" \ --role "arn:aws:iam::${AWS_ACCOUNT_ID}:role/lambda-basic-execution" \ --runtime go1.x aws events put-rule \ --name GlobalEntryCron \ --region="us-east-1" \ --state 'ENABLED' \ --schedule-expression 'rate(1 minute)' aws lambda add-permission \ --region="us-east-1" \ --function-name GlobalEntry \ --statement-id GlobalEntryEvent \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:${AWS_ACCOUNT_ID}:rule/GlobalEntryCron aws events put-targets --rule GlobalEntryCron --targets \ "{\"Id\":\"1\",\"Arn\":\"arn:aws:lambda:us-east-1:${AWS_ACCOUNT_ID}:function:GlobalEntry\"}"
验证步骤
- 执行完
put-targets后,运行以下命令确认目标状态:aws events list-targets-by-rule --rule GlobalEntryCron --region us-east-1 - 若返回结果包含目标信息,说明添加成功,控制台可能存在延迟,刷新后即可显示;若仍无结果,检查
AWS_ACCOUNT_ID是否正确设置,以及Lambda函数与规则的区域是否均为us-east-1。
内容的提问来源于stack exchange,提问作者Arun Gopalpuri
相关产品推荐
相关产品推荐

