2017-11-09 2 views
0

내 람다 스크립트를 시작하는 cloudwatch 이벤트 트리거에 대한 cloudformation 스크립트를 작성하는 데 문제가 있는데, 나는 콘솔을 통해 할 수 있지만 내 요구 사항은 내가 cloudform에 모든 것을 제공해야한다는 것입니다. 나는 문서를 다음과 여전히 나를 위해 일하지 않은 나는 오류가 점점 계속 :cloudwatch 이벤트 트리거 cloudcom

Template contains errors.: Invalid template property or properties [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 
+0

완벽한 클라우드 정보 템플릿입니까? rLambdaScheduledRule과 rPermissionForEventsToInvokeLambda에 대해 불평하고 있기 때문에 아마도 'Resources'아래 놓이지 않았습니까? 그냥 추측 ... – niekname

답변

0

1) 당신은 당신이 람다 함수를 작성하는 CloudFormation 템플릿에 람다 함수 ARN를 내 보내야합니다. 람다 함수 ARN을 cloudwatch 이벤트의 입력으로 전달해야합니다 (AWS::Events::Rule대상 속성에는 자원 ARN이 필요함).

아래 샘플 스크립트를 참조하십시오 : 당신이 CloudWatch에서 이벤트 만들 때)

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, 당신은 ARN대상로 1 단계에서 생성 된 람다 함수의을 통과해야 .

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에서 속성을 제거하십시오.
  • FunctionName 리소스 rPermissionForEventsToInvokeLambda의 속성을 수정하십시오.

참고로 위의 샘플을 유지하면서 템플릿을 수정하고 다시 시도하십시오.