Согласно документации , которую вы связали , использование ключей API ограничено ограниченным числом API:
Ограниченное количество сервисов GCP разрешает доступ с использованием только ключа API:
- API Google Cloud Natural Language
- Google Cloud Speech API
- API Google Cloud Translation
- API Google Cloud Vision
- Конечные точки Google Cloud
- API Google Billing Catalog API
- API предотвращения потери данных в облаке
Следовательно, невозможно использовать ключи API для вызовов REST к ресурсам Compute Engine.
Однако у вас есть возможность использовать Клиент API Google Node.js .
Я сделал небольшой пример со своей стороны, который создает экземпляр Compute Engine из шаблона экземпляра в облачной функции, работающей в Node.js 8 (в Node.js 6 у вас нет возможности создавать асинхронные вызовы Я полагаю, что вам нужны эти вызовы, поскольку вам не нужно ждать, пока будет создан экземпляр, чтобы получить ответ от CF):
index.js
const {google} = require('googleapis');
const compute = google.compute('v1');
exports.helloWorld = async data => {
const authClient = await google.auth.getClient({
scopes: [
'https://www.googleapis.com/auth/cloud-platform',
'https://www.googleapis.com/auth/compute',
],
});
const projectId = await google.auth.getProjectId();
const result = await compute.instances.insert({
auth: authClient,
project: projectId,
zone: "us-east1-c",
sourceInstanceTemplate: "projects/YOUR_PROJECT_NAME/global/instanceTemplates/YOUR_TEMPLATE_NAME-template",
resource: {
name: "example-vm-from-api-call",
},
});
console.log('done');
};
package.json
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"google-auth-library": "3.0.0",
"googleapis-common": "0.6.0",
"googleapis": "36.0.0"
}
}
Я жестко закодировал имя экземпляра, чтобы оно всегда было example-vm-from-api-call
, но при выполнении запросов к облачной функции вы можете передать имя экземпляра в параметрах и использовать его для создания экземпляра.
Также обратите внимание, что аутентификация выполняется путем выполнения строки const authClient = await google.auth.getClient(...)
. Для этого используется учетная запись, прошедшая проверку подлинности по умолчанию, которая является служебной учетной записью, выполняющей облачную функцию.
Эта учетная запись службы имеет по умолчанию разрешения project/editor
, которых достаточно для создания виртуальных машин CE, однако, если вы когда-либо будете использовать другую учетную запись для выполнения этих функций, вам придется предоставить ей правильные области доступа (см. Параметры вышеупомянутая функция).