如何通过Cloud Scheduler定时关闭Compute Engine虚拟机?
定时关闭GCP测试虚拟机方案
能否通过Cloud Scheduler实现定时关机?
可以,但Cloud Scheduler本身无法直接操作Compute Engine虚拟机,需要搭配Cloud Functions(或Cloud Run)来调用Compute Engine API完成关机动作,也可以通过Pub/Sub作为中间触发层。
需要用到的其他GCP服务
- Cloud Functions:编写轻量代码调用Compute Engine的关机API,处理批量VM的关闭逻辑
- Compute Engine API:需提前启用该API才能调用实例操作接口
- IAM权限配置:给Cloud Functions的服务账号分配
compute.instances.stop权限(或更宽泛的Compute Instance Admin角色),确保能执行关机操作
快速实现步骤
- 先在GCP控制台启用Cloud Scheduler、Cloud Functions、Compute Engine API
- 创建Cloud Function:
- 触发器选Cloud Pub/Sub,新建一个主题(比如
stop-test-vms) - 编写函数代码(以Python为例):
import googleapiclient.discovery def stop_test_vms(event, context): compute = googleapiclient.discovery.build('compute', 'v1') PROJECT_ID = '你的项目ID' ZONE = '虚拟机所在区域(如us-central1-a)' TARGET_VMS = ['test-vm-01', 'test-vm-02'] # 替换成你的测试VM名称 for vm_name in TARGET_VMS: try: compute.instances().stop( project=PROJECT_ID, zone=ZONE, instance=vm_name ).execute() print(f"已发起关闭指令:{vm_name}") except Exception as e: print(f"关闭{vm_name}失败:{str(e)}")
- 触发器选Cloud Pub/Sub,新建一个主题(比如
- 创建Cloud Scheduler任务:
- 设置触发频率(比如
0 18 * * 1-5,代表工作日每天18点执行) - 目标类型选Cloud Pub/Sub,指定刚才创建的主题
- 消息内容可随意填写(函数不需要解析该内容)
- 设置触发频率(比如
虚拟机启停选项的配置时机
不是只能在创建VM时配置自动启停,已创建的VM也可以修改:
- 进入Compute Engine控制台,找到目标VM
- 点击顶部的编辑按钮
- 滚动到页面底部的自动启停模块,勾选启用后即可设置启动/停止的时间规则
- 注意:该方式只能单台VM独立配置,若有多台测试VM需要统一管理,还是用Cloud Scheduler+Cloud Functions的批量方案更高效
内容的提问来源于stack exchange,提问作者Kristiyan Kotomanov
相关产品推荐
相关产品推荐

