簡體   English   中英

cloudwatch事件觸發cloudformation

[英]cloudwatch event trigger cloudformation

我在編寫用於cloudwatch事件觸發器的cloudformation腳本以啟動我的lambda腳本時遇到了一些麻煩,我知道我可以通過控制台來完成它,但是我的要求是我需要在cloudformation中提供所有內容。 我遵循了文檔,但對於我來說仍然無效,並且不斷出現錯誤:

模板包含錯誤。:無效的模板屬性或屬性[rPermissionForEventsToInvokeLambda,rLambdaScheduledRule]

有人可以指出我的cloudformation腳本的這部分是什么問題嗎? 我幾乎按照文檔進行操作,但仍然有錯誤,即使在嘗試驗證文檔時,文檔中的示例也有相同的錯誤。 我的cloudformation代碼在下面,感謝您的幫助!

rLambdaScheduledRule:
  Type: AWS::Events::Rule
  Properties:
    ScheduleExpression: rate(1 hour)
    State: ENABLED
    Targets:
      Ref: 
        Fn::ImportValue:
          Fn::Sub: rUploadLambda
    Action: lambda:InvokeFunction
rPermissionForEventsToInvokeLambda: 
  Type: AWS::Lambda::Permission
  Properties: 
    FunctionName: 
      Ref: 
        Fn::ImportValue:
        Fn::Sub: rUploadLambda
    Action: lambda:InvokeFunction
    Principal: events.amazonaws.com
    SourceArn: 
      Fn::GetAtt: 
        - rLambdaScheduledRule
        - Arn

1)您必須在創建Lambda函數的CloudFormation模板中導出Lambda函數ARN 您需要將Lambda函數ARN傳遞給cloudwatch事件( AWS::Events::Rule Targets屬性需要資源ARN)。

請參閱下面的示例腳本:

Resources:
  # Create Controlled Lambda Function
  myLambda:
    Type: "AWS::Lambda::Function"
    Properties: 
      Code:
        S3Bucket: "lambda-bucket"
        S3Key: "myhandler.zip"
      Description: "Lambda handler"
      FunctionName: "myhandler"
      Handler: myhandler.myhandler
      MemorySize: 128
      Role: "arn:aws:iam::xxxxxxxxxxx:role/myLambdaExecutionRole-NC7FA7TUSZ5B"
      Runtime: "python3.6"
      Timeout: 10

# Output of the cf template
Outputs:
  myLambdaArn:
    Description: Arn of the my_lambda_function
    Value: !GetAtt myLambda.Arn
    Export: 
      Name: !Sub "${AWS::StackName}-LambdaArn"

2)創建CloudWatch Event時 ,需要將在步驟1中創建的lambda函數的ARN作為目標傳遞。

請參閱下面的示例腳本:

Resources:
  # Cloudwatch event to trigger lambda periodically
  rLambdaScheduledRule:
    Type: "AWS::Events::Rule"
    Properties: 
      Description: "CloudWatch Event to trigger lambda fn"
      ScheduleExpression: "rate(1 hour)"
      State: "ENABLED"
      Targets:
        - 
          Arn: 
            Fn::ImportValue:
              !Sub "${NetworkStackName}-LambdaArn"
          Id: "targetevent_v1"

  PermissionForEventsToInvokeLambda: 
    Type: "AWS::Lambda::Permission"
    Properties: 
      FunctionName: 
        Fn::ImportValue:
          !Sub "${NetworkStackName}-LambdaArn"
      Action: "lambda:InvokeFunction"
      Principal: "events.amazonaws.com"
      SourceArn: 
        Fn::GetAtt: 
          - rLambdaScheduledRule
          - Arn

${NetworkStackName}的值應為Step1中的StackName 您需要在模板中糾正的一些問題:

  • 更正資源rLambdaScheduledRuleTargets屬性。
  • 從資源rLambdaScheduledRule刪除Action屬性。
  • 更正資源rPermissionForEventsToInvokeLambdaFunctionName屬性。

保留上面的示例作為參考,更正您的模板,然后重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM