2016-07-09 23 views
7

Beim Schreiben einer AWS Java Lambda-Funktion, die von geplanten Cloudwatch-Ereignissen ausgelöst wird, welches Ereignisobjekt wird an die Lambda-Handler-Funktion übergeben?AWS Lambda - CloudWatch Ereignistyp

Beispielsweise ruft AWS für eine Lambda-Funktion, die von einem S3-Ereignis ausgelöst wird, die Funktion auf und übergibt ein S3Event-Objekt. Ähnlich würde es ein SNSEvent-Objekt an eine Funktion weitergeben, die von einer SNS-Nachricht ausgelöst wurde.

public class LambdaHandler { 

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

ODER

public class LambdaHandler { 

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

Für eine Cloudwatch Geplante Veranstaltung angetrieben Funktion, was anstelle von SNSEvent/S3Event sein würde?

public class LambdaHandler { 

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

Ich kann mich nicht für das Leben keine Beispiele von AWS Lambda-Funktionen in Java geschrieben finden, die ... von Cloudwatch Geplante Ereignisse ausgelöst werden Funktion

Bonuspunkte für eine Probe.

EDIT 1 Es gibt keine richtige Antwort auf diese Frage (obwohl ich nicht weiß, dass AWS ein korrektes Ereignisobjekt im SDK veröffentlicht hat, das an die Lambda-Funktion übergeben würde) eigentlich eine Antwort, nach der ich gesucht habe.

Diese Frage wurde auch hier gestellt: What is the parameter type passed to a Lambda function by a CloudWatch Events - Schedule trigger? und jemand kommentierte Vorschlag mit Objekt und Drucken der Klassenname. Hat sich als LinkedHashMap herausgestellt. Sieht so korrekt aus wie eine Antwort ...

+0

Sind Sie auf der Suche nach [diese] (http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/EventTypes.html#schedule_event_type)? –

+0

@ Michael-sqlbot Wahrscheinlich, obwohl das JSON ist. Ich bin sicher, die Antwort liegt direkt vor mir, aber was ist die tatsächliche Java-Ereignisklasse, die an die Lambda-Handler-Funktion übergeben wurde? – Brooks

Antwort

1

com.amazonaws.services.lambda.runtime.events.ScheduledEvent ist die aktuelle Antwort.

Ich kann sehen, dass in Version 2.0.2 der aws-lambda-java-events-Bibliothek dies verfügbar ist. Code ist here und weitere Details zu Version 2.0 sind here

+0

Hah! Super, dass sie es endlich geschafft haben! – Brooks

1

Leider gibt es keine spezielle Klasse für diese Art von Ereignissen.

Sie können jedoch Ihre eigenen POJOs frei erstellen und sie als Ereignisparameterklasse angeben. Zum Beispiel kann CloudWatchEvent beschrieben werden, wie:

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 Motor automatisch Eingabe in das Objekt der gegebenen Klasse zu serialisieren versucht.

die Struktur kennen Sie Typ angeben können „Karte“ und Ausdruck es zu protokollieren:

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