AWS SAM 模板获取具有内在函数的规则名称
AWS SAM Template get rule name with intrinsic function
假设我在 SAM 中声明了一个计划函数 template.yaml
myScheduledFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myScheduledFunction
Policies:
- AWSLambdaBasicExecutionRole
Events:
CloudwatchEvents:
Type: Schedule
Properties:
Schedule: rate(1 minute)
Enabled: true
然后我有另一个功能 enable/disable 计划规则
myFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myFunction
Environment:
Variables:
RULE_NAME: !Ref MyRuleName
Policies:
- AWSLambdaBasicExecutionRole
- EventBridgePutEventsPolicy:
EventBusName: default
Events:
SomeEvent: ...
现在,如何在环境变量 RULE_NAME: !Ref MyRuleName
中引用规则名称?
可以在 SAM 中执行吗?也许使用 !GetAtt myScheduledFunction.RuleName
之类的东西?
我找不到与此相关的任何信息,我知道在 Cloudformation 中有一种方法可以做到这一点,但我想知道在 SAM 中是否也可以,谢谢。
我认为这不可能使用所写的模板进行检索。解决方法是将 CloudWatch 规则创建为顶级资源,而不是在 Events
属性.
中创建它
例如:
myScheduledFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myScheduledFunction
Policies:
- AWSLambdaBasicExecutionRole
myRule:
Type: AWS::Events::Rule
Properties:
Description: "ScheduledRule"
ScheduleExpression: "rate(1 minutes)"
State: "ENABLED"
Targets:
- Arn:
Fn::GetAtt:
- "myScheduledFunction"
- "Arn"
PermissionForEventsToInvokeLambda:
Type: AWS::Lambda::Permission
Properties:
FunctionName:
Ref: "myScheduledFunction"
Action: "lambda:InvokeFunction"
Principal: "events.amazonaws.com"
SourceArn:
Fn::GetAtt:
- "myRule"
- "Arn"
myFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myFunction
Environment:
Variables:
RULE_NAME: !Ref myRule
Policies:
- AWSLambdaBasicExecutionRole
- EventBridgePutEventsPolicy:
EventBusName: default
Events:
SomeEvent: ...
此 rule/permission 的代码片段取自 Cloudwatch Rule cloudformation documentation。
假设我在 SAM 中声明了一个计划函数 template.yaml
myScheduledFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myScheduledFunction
Policies:
- AWSLambdaBasicExecutionRole
Events:
CloudwatchEvents:
Type: Schedule
Properties:
Schedule: rate(1 minute)
Enabled: true
然后我有另一个功能 enable/disable 计划规则
myFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myFunction
Environment:
Variables:
RULE_NAME: !Ref MyRuleName
Policies:
- AWSLambdaBasicExecutionRole
- EventBridgePutEventsPolicy:
EventBusName: default
Events:
SomeEvent: ...
现在,如何在环境变量 RULE_NAME: !Ref MyRuleName
中引用规则名称?
可以在 SAM 中执行吗?也许使用 !GetAtt myScheduledFunction.RuleName
之类的东西?
我找不到与此相关的任何信息,我知道在 Cloudformation 中有一种方法可以做到这一点,但我想知道在 SAM 中是否也可以,谢谢。
我认为这不可能使用所写的模板进行检索。解决方法是将 CloudWatch 规则创建为顶级资源,而不是在 Events
属性.
例如:
myScheduledFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myScheduledFunction
Policies:
- AWSLambdaBasicExecutionRole
myRule:
Type: AWS::Events::Rule
Properties:
Description: "ScheduledRule"
ScheduleExpression: "rate(1 minutes)"
State: "ENABLED"
Targets:
- Arn:
Fn::GetAtt:
- "myScheduledFunction"
- "Arn"
PermissionForEventsToInvokeLambda:
Type: AWS::Lambda::Permission
Properties:
FunctionName:
Ref: "myScheduledFunction"
Action: "lambda:InvokeFunction"
Principal: "events.amazonaws.com"
SourceArn:
Fn::GetAtt:
- "myRule"
- "Arn"
myFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bin
Handler: myFunction
Environment:
Variables:
RULE_NAME: !Ref myRule
Policies:
- AWSLambdaBasicExecutionRole
- EventBridgePutEventsPolicy:
EventBusName: default
Events:
SomeEvent: ...
此 rule/permission 的代码片段取自 Cloudwatch Rule cloudformation documentation。