AWS Шаблон SAM получает имя правила с функцией intrinsi c - PullRequest
0 голосов
/ 12 апреля 2020

Допустим, у меня есть запланированная функция, объявленная в 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

, а затем у меня есть другая функция, которая включает / отключает запланированное правило

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, спасибо.

1 Ответ

1 голос
/ 13 апреля 2020

Я не думаю, что это возможно получить с шаблоном, как написано. Обходным путем будет создание правила 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: ...

Этот фрагмент кода для Правило / разрешение взято из документации по облачной информации Cloudwatch Rule .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...