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