web-dev-qa-db-ja.com

AWS Lambda-CloudWatchイベントタイプ

CloudwatchのスケジュールされたイベントによってトリガーされるAWS Java Lambda関数を書き込むとき、どのイベントオブジェクトがLambdaハンドラー関数に渡されますか?

たとえば、S3イベントによってトリガーされるLambda関数の場合、AWSは関数を呼び出し、S3Eventオブジェクトを渡します。同様に、SNSEventオブジェクトをSNSメッセージによってトリガーされた関数に渡します。

public class LambdaHandler {

    public void eventHandler(S3Event event, Context context) {
    }

OR

public class LambdaHandler {

    public void eventHandler(SNSEvent event, Context context) {
    }

Cloudwatchのスケジュールされたイベントドリブン機能の場合、SNSEvent/S3Eventの代わりに何をしますか?

public class LambdaHandler {

    public void eventHandler(__________ event, Context context) {
    }

CloudwatchのスケジュールされたイベントによってトリガーされるJavaで記述されたAWS Lambda関数の例を見つけることができません...

サンプル関数のボーナスポイント。

EDIT 1これに対する正しい答えはまだありません(AWSがSDKで適切な「イベント」オブジェクトをリリースしたことを知りませんがLambda関数に渡されるため)、私が探していた答えは実際にはない可能性があります。

この質問もここで尋ねられました: CloudWatchイベント-スケジュールトリガーによってLambda関数に渡されるパラメーターのタイプは何ですか? と、オブジェクトの使用とクラス名の出力を提案するコメントがありました。 LinkedHashMapであることが判明しました。私が得ようとしているのと同じくらい正解に見えます...

25
Brooks

現在の答えはcom.amazonaws.services.lambda.runtime.events.ScheduledEventです。

2.0.2バージョンのaws-lambda-Java-eventsライブラリでは、これが利用可能であることがわかります。コードは here であり、2.0バージョンの詳細は here です。

18

以下は、そのボイラープレートコードです。

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.ScheduledEvent;


public class CollectionLambda {
    public void eventHandler(ScheduledEvent event, Context context) {
        // todo
    }
}

Mavenに次の依存関係を追加します。

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-Java-core</artifactId>
    <version>1.2.0</version>
</dependency>

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-Java-events</artifactId>
    <version>2.2.2</version>
</dependency>
3
meeza

残念ながら、この種のイベントに特定のクラスはありません。

ただし、独自のPOJOを自由に作成して、イベントパラメータのクラスとして指定できます。たとえば、CloudWatchEventは次のように説明できます。

public class CloudWatchEvent {

    private String version;
    private String id;
    private String detailType;
    private String source;
    private String account;
    private Date time;
    private String region;
    private List<String> resources;
    ...   
    // getters and setters
}

AWS Lambdaエンジンは、指定されたクラスのオブジェクトへの入力を自動的にシリアル化しようとします。

構造を知るには、タイプ「マップ」を指定して、ログに出力します。

  public void eventHandler(Map event, Context context) {
        log.debug(event); // or System.out....
  }
1
Andremoniy