Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 云观察事件触发云形成_Amazon Web Services_Yaml_Amazon Cloudformation - Fatal编程技术网

Amazon web services 云观察事件触发云形成

Amazon web services 云观察事件触发云形成,amazon-web-services,yaml,amazon-cloudformation,Amazon Web Services,Yaml,Amazon Cloudformation,我在为cloudwatch事件触发器编写cloudformation脚本以启动lambda脚本时遇到了一些问题,我知道我可以通过控制台来完成,但我的要求是我需要在cloudformation中提供所有内容。我遵循了文档,但它仍然不适用于我,我不断地发现错误: 模板包含错误。模板属性或属性无效 [rPermissionForEventsToInvokeLambda,rlambda Scheduledrule] 有人能指出我的cloudformation脚本的这部分有什么问题吗?我几乎完全按照文档进

我在为cloudwatch事件触发器编写cloudformation脚本以启动lambda脚本时遇到了一些问题,我知道我可以通过控制台来完成,但我的要求是我需要在cloudformation中提供所有内容。我遵循了文档,但它仍然不适用于我,我不断地发现错误:

模板包含错误。模板属性或属性无效 [rPermissionForEventsToInvokeLambda,rlambda Scheduledrule]

有人能指出我的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::RuleTargets属性需要资源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"
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
2) 创建CloudWatch事件时,需要将步骤1中创建的lambda函数的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"
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}
的值应该是步骤1中的StackName。 您需要在模板中纠正的一些问题:

  • 更正资源
    rLambdaScheduledRule
    目标属性
  • 从资源
    rLambdaScheduledRule
    中删除Action属性
  • 更正resource
    rPermissionForEventsToInvokeLambda的FunctionName属性

保留以上示例作为参考,更正模板并重试。

这是完整的cloudformation模板吗?既然它在抱怨rLambdaScheduledRule和rppermissionforeventsinvokelambda,也许它们没有被置于“资源”之下?只是一个猜测。。。