2017-01-03 10 views
0

Javaのjarファイルを使用してテキスト行を出力する簡単なラムダ関数を設定しました。 「テスト」ボタンを使ってテストを実行することができます。私はまた、5分のCloudWatchスケジュールトリガーを設定して、式をスケジュールしました:レート(5分)。トリガーが有効になっています。私はトリガーを表示し、 "編集"でトリガーが自分の関数に割り当てられていることを確認し、静的なJSONを入力として使用することもできます。何らかの理由で私の機能が5分間のトリガーでトリガーされていないようです - 私はトリガーのログを見ることを期待していますが、何もありません。私はこのロガーを使用しています:com.amazonaws.services.lambda.runtime.LambdaLogger。トリガーが働くように設定する必要があることに気づいていない別の設定があるのだろうかと思います。あなたの時間をありがとう。AWS CloudWatch Schedule + Lambda:トリガーが機能しない

1編集:ラムダはElasticSearchサービスにhttpにするために解像度

タイマーがあります。当社のElasticSearchサービスは無応答となり、再作成する必要がありました。 ElasticSearchサービスを再作成した後、タイマーが作動し始めました...タイマーは動作しますが、コンソールではタイマーのダストが見え始めました。私がタイマーをオフにした後、それはそれ自身の別の複製を作成しました。バギーUIのようだ。私はChromeを使用しています。

+0

だけロガーの問題を排除するために - あなたはラムダ管理コンソールを行くと「監視」タブをクリックした場合 - あなたは、任意の呼び出しやエラーを見ていますか? –

+0

@DaveMaple:こんにちは、 "Monitoring"の下にグラフが表示されます。このメッセージには「この関数には外部ライブラリが含まれています。 、エラーはありません。 – user2917629

+0

5分ごとにグラフに呼び出しが表示されますか? –

答えて

1

私は過去にこの問題に遭遇しましたが、これを修正する別の方法があるかもしれませんが、作成したルール(CloudWatchトリガ)にロールを指定してラムダ関数を呼び出す。私が使用したポリシー文書は次のとおりです:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "lambda:InvokeFunction" 
     ], 
     "Resource": "*" 
    } 
    ] 
} 

コンソール/ Webインターフェイス経由でこれを行う方法がわかりません。しかし、AWS Command Line Interface - Rule - Put Ruleでそれを行うことができます。だから、する必要があるでしょう:ロールに手順1で作成したポリシーを取り付けますCloudWatchのルール

  • ためのロールを作成の上、文書
  • でポリシーを作成します

    1. ステップ2
    2. で作成します以前と同じようにCloudWatchルールを作成しますが、指定された役割を使用してください。
  • +0

    お薦めいただきありがとうございます。プレイ中のサービスの1つを再作成した後、タイマーは独自に作業を開始しました。上記の説明を参照してください。それにもかかわらず、ありがとう、私はあなたのポストを念頭に置いて、私たちがawsで持っているすべてのものの許可を見つけたらそれを使用する必要があるかもしれません。 – user2917629

    0

    あなたが行っているケースがjava sdk経由である場合は、ラムダをターゲットとしてCWに入れた後の解決策です。

    AddPermissionRequest addPermissionRequest = new AddPermissionRequest(); addPermissionRequest.setStatementId( "12345ff"); //あなたの許可を識別するユニークな手段 addPermissionRequest.withSourceArn(ruleArn); addPermissionRequest.setAction( "lambda:InvokeFunction"); addPermissionRequest.setPrincipal( "events.amazonaws.com"); addPermissionRequest.setFunctionName( "あなたのラムダの名前");

    AWSLambdaAsyncClient lambdaClient = new AWSLambdaAsyncClient(); 
        lambdaClient.withRegion(Regions.US_EAST_1); //specify whichever region your lambda is hosted in 
    
    0
    //*Build client* 
    AmazonCloudWatchEvents cwe = 
           AmazonCloudWatchEventsClientBuilder.defaultClient(); 
    
          //*Add rules* 
           PutRuleRequest rulerequest = new PutRuleRequest() 
            .withName(name).withRoleArn(your-role-arn) 
            .withScheduleExpression(yourExpiryByRateorCron) 
            .withState(RuleState.ENABLED); 
    
           PutRuleResult ruleresponse = cwe.putRule(rulerequest); 
    
           //*Add targets* 
    
            Target target = new Target() 
             .withArn(lambda-arn) 
             .withId(id).withInput(input); 
    
            PutTargetsRequest targetrequest = new PutTargetsRequest() 
             .withTargets(target) 
             .withRule(rule-name); 
    
            cwe.putTargets(targetrequest); 
    
            AWSLambda al = AWSLambdaAsyncClientBuilder.defaultClient(); 
          // *Add Permissions*    
            AddPermissionRequest apr = new AddPermissionRequest() 
              .withFunctionName("function:yourfunctionname") 
              .withAction("lambda:InvokeFunction") 
              .withPrincipal("events.amazonaws.com") 
              .withStatementId(id) 
              .withSourceArn(arn); 
              al.addPermission(apr); 
    
    関連する問題