Почему у моей функции Google Cloud истекает время ожидания при отправке HTTP-запроса к моему экземпляру AWS Fargate?

Я работаю над облачной функцией Google длятриггер, которому необходимо получить некоторые данные из микросервиса, размещенного на экземпляре 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-адрес считывается из переменной среды. Если я изменю эту переменную среды на другой домен, напримерилиили даже домен, указывающий на один из наших экземпляров Fargate из другого проекта, выборка работает нормально в среде облачных функций Google, и я получаю действительный ответ.

В противном случае время ожидания запроса на выборку истечет, и функция облака прерывается, и в журнал записывается следующее:

      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был нацелен на интернет-шлюз.

Другие вопросы по тегам