2017-11-03 2 views
4

Ich versuche, ein paar asynchrone Anfragen von einer lambda Funktion auszuführen. Der erste Anruf resolveEndpoints() gelingt und die zweite nicht mitAWS lambda nodejs Laufzeit: IO: lesen/schreiben auf geschlossene Leitung

2017/11/03 17:13:27 Function oauth.callbackHandler timed out after 3 seconds 

2017/11/03 17:13:27 Error invoking nodejs6.10 runtime: io: read/write on closed pipe 

Der Handler ist:

exports.callbackHandler = async (event, context, callback) => { 
    context.callbackWaitsForEmptyEventLoop = false; 

    let endpoints: any = await resolveEnpoints(); 

    config.accessTokenUri = endpoints.token_endpoint; 

    let tokenRequestPath = 
    `http://localhost:7001${event.path}?code=${event.queryStringParameters.code}&realmId=${event.queryStringParameters.realmId}&`; 

    let accessToken: any = await getAuthToken(tokenRequestPath); 

    callback(undefined, {statusCode: 200, body: JSON.stringify(accessToken.data)}); 
}; 

Wenn ich den resolveEndpoint() Anruf entfernen dann getAuthToken() erfolgreich ist.

resolveEndpoint() gibt ein Versprechen zurück, das nach Abschluss der Anfrage aufgelöst wird.

+0

was diese 'resolveEnpoints()' tatsächlich macht. Und auch das darf kein Lambda sein. –

+0

@VaisakhPS hat die Frage aktualisiert. Wie Sie schon gesagt haben, könnte es sehr wohl Lambda-bezogen sein, aber es ist zumindest ein seltsames Verhalten. – nilobarp

+0

'async/await' wird in NodeJS 6.10 nicht unterstützt. Sind Sie sicher, dass der Code ausgeführt wird und keine kompilierte Version? – dashmug

Antwort

2

Lambda's Standard-Timeout ist 3 Sekunden und ich traf das über einen einzigen HTTP-Anruf hinaus. Sie müssen nur SAM Template aktualisieren, um die Zeitüberschreitung für Handler zu erhöhen, die mehrere Dienste von Drittanbietern aufrufen müssen.

Die aktualisierte Vorlage mit einem Zeitlimit von 10 Sekunden ermöglicht den Abschluss des Handlers.

AWSTemplateFormatVersion : '2010-09-09' 
Transform: AWS::Serverless-2016-10-31 

Description: | 
    Data service 

Resources: 
    OAuthCallback: 
    Type: AWS::Serverless::Function 
    Properties: 
     Runtime: nodejs6.10 
     CodeUri: ./build/services/quickbooks 
     Handler: oauth2.callbackHandler 
     Timeout: 10 
     Events: 
     AuthRoute: 
      Type: Api 
      Properties: 
      Path: /oauth2/callback 
      Method: get