2017-11-09 3 views
0

クラウドウォッチイベントトリガのクラウドフォーメーションスクリプトを作成してラムダスクリプトを起動するのに問題がありますが、私はコンソールから操作できますが、私の要件はクラウド情報をすべてプロビジョニングする必要があることです。私は、マニュアルを参照して、その後、それはまだ私のために働いていないと、私はエラーを取得保管:クラウドウォッチイベントトリガクラウド

Template contains errors.: Invalid template property or properties [rPermissionForEventsToInvokeLambda, rLambdaScheduledRule]

は、誰かが私の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のプロパティを修正します。

上記のサンプルを参考にして、テンプレートを修正してもう一度お試しください。