我已经为这个问题苦苦挣扎了两天,但无法让它工作。
我有这样的流程:
外部世界 --> AWS API Gateway ---> VPC Link ---> 网络负载均衡器 ---> 我的单个 EC2 实例
我已正确设置 EC2 实例。 “Typescript/ExpressJS”api 服务正在端口
3001
上运行
我还设置了网络负载均衡器和目标组,NLB 正在侦听并将请求转发到目标组(包含 EC2 实例)的端口
3001
。
我已配置 EC2 实例的安全组:
1. Allow All protocol traffic on All ports from my VPC
(specified using CIDR notation `171.23.0.0/16`);
2. Allow All protocol traffic on All ports from ANY source (`0.0.0.0/0`);
现在,当我这样做时
curl docloud-backend-xxxxx.elb.ap-northeast-1.amazonaws.com:3001/api/user
,
api 服务收到请求,我可以看到 EC2 实例中生成的日志。
然后,我还设置了 API 网关,但问题似乎是向 API 网关发出的请求未传递到我的 EC2 实例的端口
3001
。
在 API 网关配置中,当我设置 VPC Link 并指定目标 NLB 时,API 网关默认会向端口 80 发送请求。
我必须告诉API网关发送请求到
docloud-backend-xxxxx.elb.ap-northeast-1.amazonaws.com:3001
。
但是,AWS API Gateway 上没有地方可以设置“转发到”端口号。
如何配置?
详细设置如下: 在 AWS API Gateway 方面,我有:
我已经完成了从 AWS 文档中了解到的所有必要设置,但现在的问题是对 API 网关发出的请求似乎没有传递到我的 EC2 实例。
在API网关的方法测试中,我收到以下错误:
Request: /api/user
Status: 500
Latency: 4282 ms
Response Body
{
"message": "Internal server error"
}
Response Headers
{"x-amzn-ErrorType":"InternalServerErrorException"}
Logs
Execution log for request 22ac2b9b-e859-474d-aa69-bd8c4bf51b4b
Tue Dec 28 09:53:02 UTC 2021 : Starting execution for request: 22ac2b9b-e859-474d-aa69-bd8c4bf51b4b
Tue Dec 28 09:53:02 UTC 2021 : HTTP Method: GET, Resource Path: /api/user
Tue Dec 28 09:53:02 UTC 2021 : Method request path: {proxy=api/user}
Tue Dec 28 09:53:02 UTC 2021 : Method request query string: {}
Tue Dec 28 09:53:02 UTC 2021 : Method request headers: {}
Tue Dec 28 09:53:02 UTC 2021 : Method request body before transformations:
Tue Dec 28 09:53:02 UTC 2021 : Endpoint request URI: http://docloud-backend-6ff16c1d637f19bc.elb.ap-northeast-1.amazonaws.com
Tue Dec 28 09:53:02 UTC 2021 : Endpoint request headers: {x-amzn-apigateway-api-id=jeva09t4qc, User-Agent=AmazonAPIGateway_jeva09t4qc, Host=docloud-backend-6ff16c1d637f19bc.elb.ap-northeast-1.amazonaws.com}
Tue Dec 28 09:53:02 UTC 2021 : Endpoint request body after transformations:
Tue Dec 28 09:53:02 UTC 2021 : Sending request to http://docloud-backend-6ff16c1d637f19bc.elb.ap-northeast-1.amazonaws.com
Tue Dec 28 09:53:07 UTC 2021 : Execution failed due to configuration error: There was an internal error while executing your request
Tue Dec 28 09:53:07 UTC 2021 : Method completed with status: 500
从浏览器的开发模式中,我可以看到向端点发出的 2 个请求
/api/user
。一个是预检请求,以 200
成功结束,另一个是“实际”请求,给出 500
和 InternalServerErrorException
错误:
我认为请求已从 API 网关传输到 NLB,但它到达端口
80
而不是 3001
。
如何设置正确?
配置并读取该 NLB 网络接口的流日志后,很明显 API Gateway 没有向 NLB 发送任何流量;这就是我在 2024 年 12 月解决问题的方法: