【发布时间】:2019-11-26 08:57:54
【问题描述】:
我有一个 Lambda 和一个触发 lambda 的 CloudWatch 规则。当我通过 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 无济于事
【问题讨论】:
-
我最近做了这个。您不应该在函数上设置事件,只需删除函数上的整个
Events部分。您只需要 3 个资源:AWS::Serverless::Function、AWS::Events::Rule(按照下面的答案使用!GetAtt)和AWS::Lambda::Permission授予规则访问权限以调用您的函数。 -
@404 我们不需要 AWS::Events::Rule。相反,我们可以在 Serverless::Function 资源中使用事件。这将在部署模板时创建一个事件规则。详情:github.com/awslabs/serverless-application-model/blob/master/…
标签: amazon-web-services aws-lambda