AWS lambda nodejs运行时:io:在closures的pipe道上读/写

我正在尝试从lambda函数执行几个asynchronous请求。 第一次调用resolveEndpoints()成功,第二次失败

 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 

处理程序是:

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

如果我删除resolveEndpoint()调用,然后getAuthToken()成功。

resolveEndpoint()返回一个请求完成后parsing的promise。

 const resolveEnpoints = async () => { return new Promise((resolve, reject) => { request({ url: config.sandboxEndpoint, headers: { 'Accept': 'application/json' } }, (err, response) => { if (err) { reject(err); } let payload = JSON.parse(response.body); resolve(payload); }); }); }; 

Lambda的默认超时时间是3秒,而且我已经超越了一个HTTP调用。 只需要更新SAM模板以增加需要调用多个第三方服务的处理程序的超时时间。

超时设置为10秒的更新模板允许处理程序运行完成。

 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