【发布时间】:2020-01-14 04:03:29
【问题描述】:
我正在 GCP 中测试一个云函数,我想用云函数修改我的计算实例的标签,即将标签“status=active”更改为“status=tobedeleted”。
有没有办法用 Cloud Function 和 node.js 做到这一点?
看起来方法 compute.instances.setLabels 需要额外的库?
我已经创建了 Cloud Function 来停止/启动实例。
这是错误:
资源:{…}
严重性:“错误”
textPayload:“{错误:需要登录 在 Gaxios.request (/srv/node_modules/googleapis-common/node_modules/gaxios/build/src/gaxios.js:70:23) 在 在 process._tickDomainCallback (internal/process/next_tick.js:229:7) 回复: {配置: { 网址:'https://www.googleapis.com/compute/v1/projects/wpress-v1/zones/us-central1-a/instances/instance-1/setLabels?labels%5Bis-scheduled%5D=manual', 方法:'POST', 参数序列化器:[功能], 标题:[对象], 参数:[对象], 验证状态:[功能], 重试:真, 响应类型:'json', 重试配置:[对象]}, 数据:{错误:[对象]},
然后这是我的代码:
const Compute = require('@google-cloud/compute');
/*const compute = new Compute();*/
const {google} = require('googleapis');
/*const google = require('@google-cloud/googleapis');*/
var compute = google.compute('v1');
exports.setInstanceScheduleMode = (event, context, callback) => {
try {
const payload = _validatePayload(
JSON.parse(Buffer.from(event.data, 'base64').toString())
);
var request = {
project: 'wpress-v1',
zone: 'us-central1-a',
instance: 'instance-1',
labels: {
"is-scheduled": "manual"
},
auth: google.authClient,
};
compute.instances.setLabels(request, function(err, response) {
if (err) {
console.error(err);
return;
}
console.log(JSON.stringify(response, null, 2));
});
} catch (err) {
console.log(err);
callback(err);
}
};
// [END functions_start_instance_pubsub]
function _validatePayload(payload) {
if (!payload.zone) {
throw new Error(`Attribute 'zone' missing from payload`);
} else if (!payload.label) {
throw new Error(`Attribute 'label' missing from payload`);
}
else if (!payload.instance) {
throw new Error(`Attribute 'instance' missing from payload`);
}
return payload;
}
function authorize(callback) {
google.auth.getClient({
scopes: ['https://www.googleapis.com/auth/cloud-platform']
}).then(client => {
callback(client);
}).catch(err => {
console.error('authentication failed: ', err);
});
}
【问题讨论】:
-
我知道这看起来像是一个授权问题,但我试图找出除了授权功能之外我应该在哪里
标签: node.js google-cloud-platform google-cloud-functions google-compute-engine