我正在尝试将应用程序部署到AWS ECS。该应用程序的后端是微服务,客户端是具有服务器端渲染的React应用。
后端使用内部负载均衡器部署在ECS的专用子网中。与客户端相同,部署在相同的专用子网中,但部署在不同的ECS群集(具有单独的ECS实例)中。而且,客户端连接到面向Internet的应用程序负载平衡器。
下图描述了我描述的AWS架构
每当React App发出的GET或POST或任何其他HTTP请求未到达后端时。但是当我在本地运行该应用程序时,所有这些都可以正常工作
当我通过SSH进入客户端的ECS实例并使用带有后端内部负载均衡器DNS名称的CURL进行GET或POST调用时,它可以完美运行并向后端执行适当的HTTP请求。我还通过SSH在客户端docker容器中尝试了同样的方法,并且没有任何问题。
以下是进行后端调用的操作示例
export function getData() {
return {
type: "GET_DATA",
payload: new Promise((resolve, reject) => {
app.auth().onAuthStateChanged((id) => {
if(id) {
axios.get(process.env.BACKEND_HOST+`/service1/${id}`)
.then((response) => {
if(response.data == "") {
reject(false);
}
resolve(response.data)
}).catch((error) => { console.log(error) })
} else {
reject(false);
}
})
})
}
}
以下是在进行上述调用时得到的错误输出
OPTIONS http://internal-cc-backend-lb-238318069.us-east-1.elb.amazonaws.com/service1/data net::ERR_CONNECTION_TIMED_OUT
Error: Network Error
at e.exports (bundle.js:30)
at XMLHttpRequest.f.onerror (bundle.js:30)
OPTIONS http://internal-cc-backend-lb-238318069.us-east-1.elb.amazonaws.com/service1 net::ERR_CONNECTION_TIMED_OUT
Error: Network Error
at e.exports (bundle.js:30)
at XMLHttpRequest.f.onerror (bundle.js:30)
GET http://internal-cc-backend-lb-238318069.us-east-1.elb.amazonaws.com/service1/XfSOjVUFCcSoNEsFljOPfP11XyG2 net::ERR_CONNECTION_TIMED_OUT
Error: Network Error
at e.exports (bundle.js:30)
at XMLHttpRequest.f.onerror (bundle.js:30)
我将内部负载平衡器的DNS名称作为环境变量传递。使用console.log进行了测试,以查看代码是否获得正确的DNS名称,并且确实如此。在本地运行时,我分别传递每个服务的主机名/端口。
我将非常感谢您对此提供的任何投入和见解,如果你们需要更多信息,请告诉我,我将更新此问题。
谢谢!