所以我试图部署云功能来关闭GCP上不同项目中的所有VM。
我已使用以下指南将功能添加到单个项目:https://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule
它使用正确的标签关闭/启动VM。
现在,我想将此扩展到所有项目中的所有VM,因此我想我需要可以在云功能下添加的另一个服务帐户。
我已经从云管理员那里获得了一个可以访问所有项目的服务帐户,并在IAM下添加了该帐户,并被授予了所有者角色。但是问题是我无法将服务帐户分配给该功能。
我缺少什么吗?还是有一种更简单的方式来完成我要完成的工作?
答案 0 :(得分:2)
最简单的方法是授予该Cloud Function使用的服务帐户访问其他项目的权限。您只需要转到其他项目,然后在IAM部分中添加此服务帐户并为其提供所需的权限即可,例如compute.admin
。
请注意,默认情况下,Cloud Functions使用App Engine默认服务帐户,这可能对您来说不方便,因为您在Cloud Function项目中的App Engine应用程序还将在其他项目中被授予compute.admin
角色。
我建议为此用例创建一个专用的服务帐户(在与您的Function相同的项目中),并将其分配给Function,然后将其添加为其他项目的成员。
然后,在您的Cloud Function中,您需要为要执行的每个项目运行代码。您可以为每个将项目ID指定为构造器选项的对象创建一个单独的客户端对象,如下所示:
const compute = new Compute({
projectId: 'your-project-id'
});
到目前为止,您仅循环浏览运行该功能的当前项目中的VM。
另一种选择是在您要执行的每个项目中定义这样的功能。您将拥有一个要调用的“主”功能,该功能将作用于其项目中的VM,然后调用另一个项目中的其他功能来对其进行操作。