能否通过GCP Cloud Function启动Vertex AI Workbench托管笔记本中的指定.py文件?
在GCP中通过Cloud Function触发Vertex AI Workbench笔记本内脚本的可行方案
是的,完全可以实现,以下是几种实用的方案:
方案一:基于GCE API控制实例并远程执行脚本
Vertex AI Workbench托管笔记本本质是GCE实例,所以可以通过Cloud Function调用GCE API完成操作:
- 第一步:在Cloud Function中检查目标笔记本实例的运行状态,如果实例未启动,先调用API启动它
- 第二步:实例启动后,通过
gcloud compute ssh命令远程执行指定的.py文件(需要给Cloud Function的服务账号配置对应权限) - 示例Python代码片段(Cloud Function中使用):
import subprocess import googleapiclient.discovery def trigger_notebook_script(request): # 初始化GCE客户端 compute = googleapiclient.discovery.build('compute', 'v1') project = '你的项目ID' zone = '实例所在区域' instance_name = '目标笔记本实例名称' # 检查实例状态 instance = compute.instances().get(project=project, zone=zone, instance=instance_name).execute() if instance['status'] != 'RUNNING': # 启动实例 compute.instances().start(project=project, zone=zone, instance=instance_name).execute() # 远程执行脚本(需确保服务账号有SSH权限) subprocess.run([ 'gcloud', 'compute', 'ssh', instance_name, '--zone', zone, '--command', 'cd /脚本所在目录 && python3 目标脚本.py' ]) return '脚本已触发执行' - 注意:要给Cloud Function的服务账号分配
Compute Instance Admin和Service Account User权限,确保能操作实例并执行SSH命令
方案二:迁移脚本到Vertex AI自定义作业(推荐)
如果不需要在笔记本实例内运行脚本,更推荐把.py脚本封装成Vertex AI自定义作业,直接在Cloud Function中调用API触发:
- 先把脚本上传到Cloud Storage
- 在Cloud Function中调用Vertex AI API创建自定义作业,指定脚本路径和运行环境
- 示例代码片段:
import googleapiclient.discovery def trigger_vertex_job(request): ai_platform = googleapiclient.discovery.build('aiplatform', 'v1') project = '你的项目ID' location = '你的区域' job_display_name = '触发的脚本作业' gcs_script_path = 'gs://你的存储桶/脚本路径/目标脚本.py' job_body = { 'displayName': job_display_name, 'jobSpec': { 'workerPoolSpecs': [{ 'machineSpec': { 'machineType': 'n1-standard-1' }, 'replicaCount': 1, 'pythonPackageSpec': { 'executorImageUri': 'us-docker.pkg.dev/vertex-ai/training/scikit-learn-cpu.0-23:latest', 'packageUris': [], 'pythonModule': '目标脚本', 'args': [], 'baseOutputDirectory': { 'outputUriPrefix': 'gs://你的存储桶/输出目录' } } }] } } parent = f'projects/{project}/locations/{location}' response = ai_platform.projects().locations().customJobs().create(parent=parent, body=job_body).execute() return f"作业已触发:{response['name']}" - 这种方式无需维护笔记本实例的运行状态,更符合GCP的云原生架构,可靠性和可扩展性更好
方案三:利用实例启动脚本自动执行
如果只需要在实例启动时自动运行脚本,可以给笔记本实例配置自定义启动脚本:
- 在笔记本实例的元数据中添加
startup-script,内容为执行目标.py文件的命令 - Cloud Function只需负责启动实例,实例启动后会自动运行脚本
内容的提问来源于stack exchange,提问作者Ritu Gahir
相关产品推荐
相关产品推荐

