2017-11-02 9 views
0

Ich möchte ein AWS-Lambda schreiben, das den Aufruf-Typ event verwendet. Nach java-programming-model-handler-types sollte ich folgendes tun:AWS Lambda Java mit Ereignisaufruf-Typ

Wenn Sie die Lambda-Funktion asynchron aufzurufen planen (die Ereignisinvokation Typ verwendet wird), sollte die output nichtig. Wenn Sie beispielsweise AWS Lambda mit Ereignisquellen wie Amazon S3, Kinesis und Amazon SNS verwenden, rufen diese Ereignisquellen die Lambda-Funktion mit dem Ereignisaufrufstyp auf.

Ich bin auf der Suche nach einem Beispiel zum Schreiben einer solchen Handler (Java) -Methode.

Es gibt viele Beispiele für einen Java-Handler, der mit dem Aufruftyp RequestResponse funktioniert (z. B. public String myHandler(int myCount, Context context)). Es gibt auch Beispiele for using streams (die, IIUC, sind auch nur für RequestResponse Aufruf-Typ). Ich konnte kein Beispiel für ein Java-Lambda, deren Handler ist der Umgang mit einem Event Aufruftyp finde

Antwort

2

Es wird wie folgt aussehen:

public class MyFunction implements RequestHandler<eventType, Void> { 

    public Void handleRequest(eventType event, Context context) { 

     ... 
     return null; 
    } 

} 

Der Trick ist, zu wissen, welche Klasse Ihres Ereignistyp sein. Sie können eventType auf Object setzen, die Funktion einmal auslösen lassen und den Klassennamen in der Funktion ausgeben lassen, um herauszufinden, was der Ereignistyp sein soll.

+0

Danke, ich möchte API Gateway-Ereignisse verwenden, so IIUC wird es ein APIGatewayProxyRequestEvent-Objekt sein (siehe https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java -Veranstaltungen). Wissen Sie, wie die API zum Zurücksenden einer (asynchronen) Antwort vom Typ APIGatewayProxyResponseEvent ist? –

+2

Wenn API Gateway die Lambda-Funktion aufruft, dann denke ich, dass Sie anstelle eines Ereignistyps 'Map ' erhalten und Ihre Funktion nicht 'void' ist. Nicht sicher, was du mit "async response" meinst. All dies ist in NodeJS oder Python übrigens millionenfach einfacher, und diese Sprachen sind auch bei Lambda besser als Java. –

+0

@MarkB "* und diese Sprachen arbeiten auch besser auf Lambda als Java. *" Was lässt dich das denken? – cy3er