Я пытаюсь сделать http-запросы от экземпляра движка приложения к функции firebase, разрешенной только для внутренних запросов.
// index.js (firebase functions)
const egressOpts = {
vpcConnector: 'the-vpc-connector',
vpcConnectorEgressSettings: 'ALL_TRAFFIC'
}
exports.processTransaction = functions
.runWith({
...egressOpts,
ingressSettings: 'ALLOW_INTERNAL_ONLY',
timeoutSeconds: 300
})
.https.onRequest(processTransaction)
Говорят, что экземпляры appengine flex находятся в той же сети, что и облачные функции, поэтому они должны общаться друг с другом без дополнительной настройки (как видно на здесь).
Но что, если моя функция подключена к VPC через бессерверный коннектор vpc? Нужно ли мне подключать мой экземпляр GAE к той же сети? И как мне это сделать?
Я попытался развернуть стандартный GAE с коннектором vpc, но ничего не изменилось:
runtime: nodejs14
env: standard
manual_scaling:
instances: 1
resources:
cpu: 2
memory_gb: 2.0
disk_size_gb: 10
vpc_access_connector:
name: "projects/the-project-id/locations/us-central1/connectors/the-vpc-connector"
Я также попытался назначить роль Invoker облачной функции учетной записи службы GAE, но безуспешно.
Добавляя больше контекста, это мой гибкий GAE app.yaml (я развертываю с помощью облачного конструктора):
runtime: nodejs
env: flex
manual_scaling:
instances: 1
resources:
cpu: 2
memory_gb: 2.0
disk_size_gb: 10
vpc_access_connector:
name: "projects/the-project-id/locations/us-central1/connectors/the-vpc-connector"
skip_files:
- ^node_modules
- ^dev_credentials
- ^deployment
Ошибка, которую я получаю на stackdriver:
</body></html>
<h2></h2>
<h2>Your client does not have permission to get URL <code>/processTransaction</code> from this server.</h2>
<h1>Error: Forbidden</h1>
<body text=#000000 bgcolor=#ffffff>
</head>
<title>403 Forbidden</title>
Что мне здесь не хватает?