web-dev-qa-db-fra.com

AWS Lambda - Type d'événement CloudWatch

Lors de l'écriture d'un AWS Java fonction Lambda déclenchée par des événements planifiés Cloudwatch, quel objet événement est transmis à la fonction de gestionnaire Lambda?

Par exemple, pour une fonction Lambda déclenchée par un événement S3, AWS appelle la fonction et transmet un objet S3Event. De même, il transmettrait un objet SNSEvent à une fonction déclenchée par un message SNS.

public class LambdaHandler {

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

OR

public class LambdaHandler {

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

Pour une fonction pilotée par les événements planifiés Cloudwatch, que remplacerait SNSEvent/S3Event?

public class LambdaHandler {

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

Je ne peux pas pour la vie de moi trouver des exemples de fonctions AWS Lambda écrites en Java qui sont déclenchées par des événements Cloudwatch Scheduled ...

Points bonus pour un exemple de fonction.

EDIT 1 Il n'y a pas encore de réponse correcte à cela (bien que je ne sache pas qu'AWS a publié un objet d'événement approprié dans le SDK qui être passé à la fonction Lambda), donc il n'y a peut-être pas vraiment de réponse que je cherchais.

Cette question a également été posée ici: Quel est le type de paramètre transmis à une fonction Lambda par un déclencheur CloudWatch Events - Schedule? et quelqu'un a commenté suggérant d'utiliser Object et d'imprimer le nom de la classe. Il s'est avéré être un LinkedHashMap. Semble être aussi correct d'une réponse que je vais obtenir ...

25
Brooks

com.amazonaws.services.lambda.runtime.events.ScheduledEvent est la réponse actuelle.

Je peux voir que dans la version 2.0.2 de la bibliothèque aws-lambda-Java-events, cela est disponible. Le code est ici et plus de détails sur la version 2.0 sont ici

18
sandeepkunkunuru

Voici le code passe-partout pour cela.

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
    }
}

Ajoutez les dépendances suivantes pour 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

Malheureusement, il n'y a pas de classe spécifique pour ce type d'événements.

Mais vous pouvez librement créer vos propres POJO et les spécifier comme classe de paramètre d'événement. Par exemple, CloudWatchEvent peut être décrit comme:

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
}

Le moteur AWS Lambda essaie automatiquement de sérialiser les entrées dans l'objet de la classe donnée.

Pour connaître la structure, vous pouvez spécifier le type "Carte" et l'imprimer pour vous connecter:

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