Почему у моей функции Google Cloud истекает время ожидания при отправке HTTP-запроса к моему экземпляру AWS Fargate?
Я работаю над облачной функцией Google для
Упрощенная версия кода выглядит так:
import { Auth } from 'gcip-cloud-functions';
import fetch from 'node-fetch';
const authClient = new Auth();
export const beforeSignIn = authClient.functions().beforeSignInHandler(async (userRecord, context) => {
// ...
const response = await fetch(process.env.MICROSERVICE_URL);
// ...
});
URL-адрес считывается из переменной среды. Если я изменю эту переменную среды на другой домен, например
В противном случае время ожидания запроса на выборку истечет, и функция облака прерывается, и в журнал записывается следующее:
Function execution took 20006 ms, finished with status: 'error'
FetchError: request to {url} failed, reason: connect ETIMEDOUT
at ClientRequest.<anonymous> (file:///workspace/node_modules/node-fetch/src/index.js:108:11)
at ClientRequest.emit (node:events:513:28)
at ClientRequest.emit (node:domain:489:12)
at TLSSocket.socketErrorListener (node:_http_client:502:9)
at TLSSocket.emit (node:events:513:28)
at TLSSocket.emit (node:domain:489:12)
at emitErrorNT (node:internal/streams/destroy:151:8)
at emitErrorCloseNT (node:internal/streams/destroy:116:3)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
{
type: 'system',
errno: 'ETIMEDOUT',
code: 'ETIMEDOUT',
erroredSysCall: 'connect
}
Согласно журналам CloudWatch, запрос не доходит до экземпляра. Я проверил конфигурацию сети среды AWS и не нашел там каких-либо очевидных проблем.
1 ответ
После некоторого расследования я обнаружил, что облачная функция пыталась использовать IPv6, но среда AWS не была настроена для этого.
Я решил проблему, добавив новое правило в таблицу маршрутизации VPC с пунктом назначения.::/0
, нацеленный на интернет-шлюз. Раньше только0.0.0.0/0
был нацелен на интернет-шлюз.