Микросервисное приложение React Node работает локально, но не один раз в AWS ECS. - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь развернуть приложение в AWS ECS. Бэкэнд приложения - это микросервис, а клиентская часть - приложение реакции с рендерингом на стороне сервера.

Серверная часть развертывается в частной подсети в ECS с внутренним балансировщиком нагрузки. То же самое со стороны клиента, развернуто в той же частной подсети, но в другом кластере ECS (с отдельными экземплярами ECS). Кроме того, на стороне клиента подключен балансировщик нагрузки приложений, выходящий в Интернет.

Следующая диаграмма изображает архитектуру AWS, которую я описал

enter image description here

выпуск

Всякий раз, когда GET, POST или любой другой HTTP-запрос, сделанные приложением React, не доходят до серверной части. Но все это прекрасно работает, когда я запускаю приложение локально

Когда я отправляю SSH в экземпляр ECS на стороне клиента и выполняю вызов GET или POST, используя CURL с внутренним DNS-именем внутреннего балансировщика нагрузки, он работает отлично и выполняет соответствующий HTTP-запрос к бэкэнду. Я также попробовал то же самое по SSH в клиентском док-контейнере и работает без проблем.

Ниже приведен пример действия, которое выполняет внутренний вызов

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, и это происходит. При локальном запуске я передаю имя хоста / порт каждой службы отдельно.

Буду очень признателен за любые замечания и замечания по этому вопросу, и если вам, ребята, нужна дополнительная информация, пожалуйста, дайте мне знать, я обновлю этот вопрос.

Заранее спасибо!

...