我需要根据我制作的模板启动一个Google Compute实例,该模板有一个启动脚本,可以从我的服务器下载最新的游戏服务器可执行文件并运行它。这一切都很好。
现在,我的自定义匹配器将确定当前所有游戏(即游戏服务器的实例(是否已满,如果已满,我希望它运行一个云函数,该函数根据我上面提到的模板创建另一个新实例(基本上为12名玩家充当大厅/游戏(。一旦创建了实例,我需要云函数将新创建的实例的IP返回到任何名称(这将是我的游戏(。
我知道第一部分可以通过HTTP POST
实现,但我在云函数docs/compute-docs/admin-SDK中找不到任何允许我创建实例并获取IP的文档,这可能吗?
编辑:我已经找到了这个文档,但我还没有找到从模板启动VM的函数,然后返回VM的对象-包括它的IP。。。
您可以直接使用API。首先创建VM,然后等待运行状态以获取内部和外部IP
async function main() {
const auth = new GoogleAuth({
scopes: 'https://www.googleapis.com/auth/cloud-platform'
});
const client = await auth.getClient();
const url = `https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/instances`
const template= 'projects/PROJECT_ID/global/instanceTemplates/instance-template-1';
const instanceName = 'example-instance'
const body= '{ "name": "' + instanceName + '" }'
let res = await client.request({ url: url + "?sourceInstanceTemplate=" + template,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: body
});
res = await client.request({ url: url + "/" + instanceName,
method: 'GET'});
while (res.data['status'] != 'RUNNING') {
setTimeout(function(){},1000)
res = await client.request({ url: url + "/" + instanceName,
method: 'GET'});
}
//Internal Ip (interface0)
console.log(res.data.networkInterfaces[0].networkIP);
//External Ip
console.log(res.data.networkInterfaces[0].accessConfigs[0].natIP);
}
main().catch(console.error);
我的NodeJs技能很低(样式、格式、习语等(,但这很管用