我有一个Lambda和一个触发lambda的CloudWatch Rule。当我通过Web控制台进行设置时,我可以在Lambda控制台中看到它的触发确实是CloudWatch规则。
现在,我想从AWS SAM YAML模板进行设置,并且确实按预期创建了触发器,但是在lambda Web控制台中,它没有将CloudWatch规则显示为触发器。
此外,我需要在YAML中设置Lambda的VPC,但对Lambda无效。
如果有人可以看一下YAML并指出正确的方向,我将为您提供帮助:
Resources:
checkNoSessionLambda:
Type: AWS::Serverless::Function
Properties:
Description: 'checkNoSessionLambda at every 1 minute'
Handler: checkNoSessionLambda.handler
Runtime: nodejs8.10
Timeout: 60
CodeUri: ./src
Role: ***
VpcConfig:
SecurityGroupIds:
- "***"
SubnetIds:
- "***"
- "***"
Events:
CheckNoSessionClouadwatchRule:
Properties:
EventPattern:
source:
- "aws.events"
Type: AWS::Events::Rule
CheckNoSessionClouadwatchRule:
Type: AWS::Events::Rule
Properties:
Description: "Invoke checkNoSession lambda every 1 minute"
ScheduleExpression: "rate(1 minute)"
State: "ENABLED"
Targets:
-
Arn: "***"
Id: "checkNoSessionLambdaTargetId"
编辑:
Lambad位于堆栈中,因此仅使用GetAtt并没有帮助
答案 0 :(得分:1)
您要对ARN进行硬编码吗?这将不起作用,因为您要指向的资源(lambda函数)尚不存在,并且将由CFN模板本身创建。
您必须使用intrinsic function Fn::GetAtt
和已定义的无服务器功能的逻辑ID来获取ARN。
Targets:
-
Arn: !GetAtt checkNoSessionLambda.Arn
Id: "checkNoSessionLambdaTargetId"
答案 1 :(得分:1)
您需要允许cloudwatch调用lambda函数,签入doc。常规流量为
缺少以下内容!
Type: AWS::Lambda::Permission
Properties:
FunctionName:
Ref: "checkNoSessionLambda"
Action: "lambda:InvokeFunction"
Principal: "events.amazonaws.com"
SourceArn:
Fn::GetAtt:
- "CheckNoSessionClouadwatchRule"
- "Arn"