2

CloudFormation(実際にはPythonのTroposphereを使用)を使用して、スケジュールされたイベントソースとしてRule-> TriggerによってトリガーされるようにAWS Lambdaを設定することに問題があります。すでに数日のうちに、どんな助けもありがとうございます。ここでLambdaのAWSスケジュールイベントルールがCloudFormationで機能しません

は、関連するCF JSONスニペットだ -

 "DataloaderRetrier": { 
     "Properties": { 
      "Code": { 
       "S3Bucket": "mycompanylabs-config", 
       "S3Key": "v3/mycompany-component-loader-lambda-0.5.jar" 
      }, 
      "FunctionName": "DataloaderRetriervitest27", 
      "Handler": "mycompany.ScheduledEventHandler::handleRequest", 
      "MemorySize": 320, 
      "Role": "arn:aws:iam::166662328783:role/kinesis-lambda-role", 
      "Runtime": "java8", 
      "VpcConfig": { 
       "SecurityGroupIds": [ 
        "sg-2f1f6047" 
       ], 
       "SubnetIds": [ 
        "subnet-ec3c1435" 
       ] 
      } 
     }, 
     "Type": "AWS::Lambda::Function" 
    }, 
    "DataloaderRetrierEventTriggerPermission": { 
     "Properties": { 
      "Action": "lambda:InvokeFunction", 
      "FunctionName": { 
       "Fn::GetAtt": [ 
        "DataloaderRetrier", 
        "Arn" 
       ] 
      }, 
      "Principal": "events.amazonaws.com", 
      "SourceAccount": { 
       "Ref": "AWS::AccountId" 
      }, 
      "SourceArn": { 
       "Fn::GetAtt": [ 
        "DataloaderRetrierEventTriggerRule", 
        "Arn" 
       ] 
      } 
     }, 
     "Type": "AWS::Lambda::Permission" 
    }, 
    "DataloaderRetrierEventTriggerRule": { 
     "DependsOn": "DataloaderRetrier", 
     "Properties": { 
      "Description": "Reminding the lambda to read from the retry SQS", 
      "Name": "DataloaderRetrierEventTriggerRulevitest27", 
      "ScheduleExpression": "rate(1 minute)", 
      "State": "ENABLED", 
      "Targets": [ 
       { 
        "Arn": { 
         "Fn::GetAtt": [ 
          "DataloaderRetrier", 
          "Arn" 
         ] 
        }, 
        "Id": "DataloaderRetrierEventTriggerTargetvitest27", 
        "Input": "{\"Hey\":\"WAKE UP!\"}" 
       } 
      ] 
     }, 
     "Type": "AWS::Events::Rule" 
    } 

AWSラムダ関数がゼロの呼び出しを示しており、[イベント] - > [ルールメトリックは、しかし、それらはすべて失敗し、呼び出しの正しい数を示します。 LambdaはTriggersセクションにトリガーを表示し、Ruleはそのトリガーセクションにラムダを表示します。彼らはうまくリンクします。

しかし、ウェブコンソールのルールの下でと同じトリガーのを手動で作成すると、うれしくラムダにイベントが送信され始めます。

PSは - ここでは、対流圏のコードです:

# DATALOADER RETRIER LAMBDA 
dataloader_retrier = t.add_resource(awslambda.Function(
    "DataloaderRetrier", 
    Code=awslambda.Code(
     "DataloaderRetrierCode", 
     S3Bucket='mycompanylabs-config', 
     S3Key='v3/mycompany-snowplow-loader-lambda-0.5.jar' 
    ), 
    FunctionName=suffix("DataloaderRetrier"), 
    Handler="mycompany.ScheduledEventHandler::handleRequest", 
    MemorySize="320", 
    Role="arn:aws:iam::166662328783:role/kinesis-lambda-role", 
    Runtime="java8", 
    VpcConfig=lambda_vpc_config 
)) 

dataloader_retrier_scheduled_rule = t.add_resource(events.Rule(
    "DataloaderRetrierEventTriggerRule", 
    Name=suffix("DataloaderRetrierEventTriggerRule"), 
    Description="Reminding the lambda to read from the retry SQS", 
    Targets=[events.Target(
     Id=suffix("DataloaderRetrierEventTriggerTarget"), 
     Arn=tr.GetAtt("DataloaderRetrier", "Arn"), 
     Input='{"Hey":"WAKE UP!"}' 
    )], 
    State='ENABLED', 
    ScheduleExpression="rate(1 minute)", 
    DependsOn="DataloaderRetrier" 
)), 

t.add_resource(awslambda.Permission(
    "DataloaderRetrierEventTriggerPermission", 
    Action="lambda:InvokeFunction", 
    FunctionName=tr.GetAtt("DataloaderRetrier", "Arn"), 
    Principal="events.amazonaws.com", 
    SourceAccount=tr.Ref("AWS::AccountId"), 
    SourceArn=tr.GetAtt("DataloaderRetrierEventTriggerRule", "Arn") 
)) 

答えて

3

あなたのAWS::Lambda::PermissionリソースからSourceAccountパラメータを削除する必要があります。

AddPermission APIドキュメントに記載されているように、SourceAccountパラメータは、指定されたAWSアカウントIDへの許可された呼び出しの 'ソース'を制限します。たとえば、S3バケットまたはCloudWatchログ通知を指定します。

CloudWatch Events Schedule Expressionの場合、イベントのsourceは自分のAWSアカウントIDではなくaws.eventsであるため、これを追加する理由ですパラメータによって、イベントがラムダ関数をトリガできなくなります。

+0

ありがとうございます!あなたは私をビーニーの家から救った。 – vivri

関連する問題