You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向GCP上运行Python的VM发起HTTP请求并传参调用脚本或函数获取返回结果

最简实现方案

要实现外部应用调用VM上的Python代码、传入自定义变量、获取执行结果/函数返回值,不需要搭建复杂的分布式组件,直接在运行Python代码的VM上部署轻量Web服务,通过HTTP请求完成全流程交互即可。

可直接复用的基础示例

VM端前置配置

  • 在GCP防火墙规则中放通选定的服务端口(示例默认使用8000端口),规则来源建议限定为自有应用的出口IP段,不要开放0.0.0.0/0的全网访问,降低安全风险。
  • 在VM上安装基础依赖:pip install fastapi uvicorn pydantic

VM端服务代码

将原本要被调用的Python逻辑直接内嵌到服务逻辑中,支持自定义传参、函数调用、执行输出捕获:

from fastapi import FastAPI
from pydantic import BaseModel
import subprocess

app = FastAPI()

# 原本需要被外部调用的业务Python函数
def business_logic(input_val: int, rate: float):
    return round(input_val * rate, 2)

# 定义外部请求可传入的自定义参数格式
class InvokeParam(BaseModel):
    input_val: int
    rate: float
    script_path: str | None = None

# 暴露给外部应用的统一调用接口
@app.post("/invoke")
def handle_request(params: InvokeParam):
    try:
        # 场景1:直接调用内部Python函数,捕获返回值
        func_result = business_logic(params.input_val, params.rate)
        
        # 场景2:调用独立Python脚本时,捕获全量标准输出、错误输出
        script_output = None
        if params.script_path:
            proc = subprocess.run(
                ["python3", params.script_path, f"--input={params.input_val}", f"--rate={params.rate}"],
                capture_output=True,
                text=True
            )
            script_output = {
                "stdout": proc.stdout,
                "stderr": proc.stderr,
                "exit_code": proc.returncode
            }
        
        # 统一将结果返回给请求方
        return {
            "status": "success",
            "func_return": func_result,
            "script_exec_output": script_output
        }
    except Exception as e:
        return {
            "status": "failed",
            "error_detail": str(e)
        }

# 服务启动命令:uvicorn main:app --host 0.0.0.0 --port 8000

业务应用端调用逻辑

无论自有应用使用什么语言开发,只要能发送HTTP POST请求即可完成调用,Python端调用示例:

import requests

resp = requests.post(
    url="http://<你的VM连通IP>:8000/invoke",
    json={
        "input_val": 100,
        "rate": 0.85,
        "script_path": "/home/user/your_custom_script.py"
    },
    timeout=10
)
# 直接获取VM上Python代码的执行结果
print(resp.json())
落地注意事项
  • 不要通过SSH手动触发脚本的方式对接外部应用,这种方式稳定性差,需要额外处理的权限、进程、日志问题极多,投入产出比很低。
  • 生产环境使用systemd配置服务自启动,VM重启后不需要手动登录即可拉起Web服务。
  • 网络连通优先走GCP VPC内网通道,让应用和VM在同一VPC网络下通信,无需将服务端口暴露到公网,大幅降低被恶意扫描、调用的风险。
  • 对传入的自定义变量做严格格式校验,避免传入不符合预期的参数触发脚本执行异常。

内容的提问来源于stack exchange,提问作者Trey Collier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 01:06:06