#google-cloud-platform #google-cloud-functions #google-cloud-networking #google-vpc
#google-cloud-platform #google-cloud-функции #google-cloud-networking #google-vpc
Вопрос:
У меня есть служба, которая запускается в вычислительном экземпляре и может получить доступ с помощью частного IP-адреса, подобного этому (https://172.31.93.233/proxy.php). Я хочу сделать запрос https из облачной функции для доступа к этой службе, поэтому я создал соединитель (с диапазоном IP: 172.31.0.0 / 28) для VPC, который имеет диапазон IP: 172.30.0.0 / 16, и у соединителя есть настройки входа (разрешить весь трафик) и настройки выхода (направить весь трафик через соединитель VPC). НО почему-то моей функции не удалось выполнить запрос и указать это в журнале: «Выполнение функции заняло 60002 мс, завершено со статусом: ‘тайм-аут’ Оба VPC и функция находятся в одном регионе (us-central1)
Дополнительная информация: На самом деле основная служба https развернута на стороне AWS, и я использую VPN от сайта к сайту через AWS к GCP для доступа к этой службе с помощью GCP. Я могу подтвердить, что эта служба доступна в вычислительном экземпляре GCP под тем же VPC, который я подключил к VPN.
Я создал бессерверный соединитель через веб-консоль при создании функции. В IAM я вижу следующее разрешение с учетными записями служб:
1: Бессерверный агент службы доступа к VPC (администратор бессерверного доступа к VPC, бессерверный агент службы доступа к VPC)
2: Агент службы облачных функций Google (агент службы облачных функций, администратор бессерверного доступа к VPC)
3: Моя собственная учетная запись, из которой я использую функцию тестирования от GCP (редактор, владелец, администратор бессерверного доступа к VPC)
Существуют и другие учетные записи служб, но я не думаю, что они связаны или интересны для функции тестирования и т.д.
Вот мой пример кода функции:
var http = require('https');
exports.helloWorld = (req, res) => {
http
.get('https://172.31.93.233/proxy.php?api=catalogos_direcciones', resp => {
let data = ''
resp.on('data', chunk => {
data = chunk
})
resp.on('end', () => {
let peopleData = JSON.parse(data)
console.log(peopleData);
res.status(200).json(peopleData);
})
})
};
Комментарии:
1. Настроили ли вы правила брандмауэра для доступа к вычислительной виртуальной машине?
2. Извините, что вы имеете в виду для доступа к вычислительной виртуальной машине? Вы имеете в виду правило брандмауэра для облачной функции для доступа к этой службе?
3. Я имею в виду правила брандмауэра входа в вашу сеть VPC, чтобы ваша служба была доступна на назначенном порту.
4. Как я уже писал, эта служба доступна везде в VPC, поэтому нет необходимости добавлять для этого дополнительное правило брандмауэра.
5. Достаточно ли 1 минуты тайм-аута по умолчанию? Вы проверили в журналах, действительно ли запрос достигает виртуальной машины?