我正在使用node-fetch
来从lambda向API(托管在具有Serverless Framework的AWS Lambda / API网关上)进行API请求。 Lambda失败,并显示以下调用错误:
{
"errorType": "FetchError",
"errorMessage": "request to https://[API].us-east-2.amazonaws.com/[ENDPOINT] failed, reason: connect ETIMEDOUT [IP]:443",
"code": "ETIMEDOUT",
"message": "request to https://[API].us-east-2.amazonaws.com/[ENDPOINT] failed, reason: connect ETIMEDOUT [IP]:443",
"type": "system",
"errno": "ETIMEDOUT",
"stack": [
"FetchError: request to https://[API].us-east-2.amazonaws.com/[ENDPOINT] failed, reason: connect ETIMEDOUT [IP]:443",
" at ClientRequest.<anonymous> (/var/task/node_modules/node-fetch/lib/index.js:1461:11)",
" at ClientRequest.emit (events.js:315:20)",
" at TLSSocket.socketErrorListener (_http_client.js:426:9)",
" at TLSSocket.emit (events.js:315:20)",
" at emitErrorNT (internal/streams/destroy.js:92:8)",
" at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)",
" at processTicksAndRejections (internal/process/task_queues.js:84:21)"
]
}
以下是有问题的lambda,其中删除了多余的代码:
"use strict";
import { PrismaClient } from "@prisma/client";
import fetch from "node-fetch";
const prisma = new PrismaClient();
module.exports.handler = async (event, context, callback) => {
const users = await prisma.user.findMany();
for (const user of users) {
await fetch(...); // this is where the error occurs
}
};
该代码在本地运行良好(lambda本身中的代码以及手动发出请求的代码)。因此,我认为可以通过为lambda设置NAT /将VPC配置为具有外部Internet访问来解决此问题,尽管如果确实存在问题,我不确定如何使用Serverless Framework做到这一点。尝试执行获取请求的lambda与API在同一VPC中。任何帮助或想法,我们将不胜感激!