如何从Google Sheets远程触发EC2上的Python脚本执行
最简实现方案
全程不需要复杂架构,10-20分钟就能配完,没有额外成本。
核心逻辑就是在Google Sheets里加个一键触发的按钮,点了之后发带鉴权的请求给EC2上的轻量接口,接口收到合法请求就直接调用你现有的Python脚本跑流程。
EC2端配置步骤
- 不用重构你现有的证书生成/发信脚本,只需要套一层极薄的Web接口,用
Flask写就行,依赖安装直接跑pip install flask gunicorn,最小代码示例直接抄就行:
最小接口示例:
from flask import Flask, request, abort # 导入你已经写好的证书生成、发信脚本 import cert_send_script app = Flask(__name__) # 替换成你自己生成的20位以上随机字符串 AUTH_TOKEN = "your_secure_random_token_here" @app.route("/run-send-task", methods=["POST"]) def run_task(): # 校验请求令牌,不对直接拦截 if request.headers.get("X-Auth-Token") != AUTH_TOKEN: abort(403) try: # 直接调用你原有脚本的主执行函数 cert_send_script.main() return "task finished" except Exception as e: return f"run failed: {str(e)}", 500 if __name__ == "__main__": # 只监听本地回环地址,不直接对公网暴露 app.run(host="127.0.0.1", port=8899)
- 绝对不要把无鉴权的接口暴露在公网,不然被爬虫扫到会被恶意调用刷光你的SES发信额度。服务启动后用
gunicorn挂后台运行,别直接对公网监听端口,要么配Nginx做一层反代,要么直接在EC2的安全组里把端口的允许来源IP限定为Google官方的出口IP段,把攻击面缩到最小 - 怕重复发信的话,给你的原脚本加个小逻辑:在Google Sheet里加一列「发送状态」,脚本只处理状态为空的行,发完把对应行的状态标记为「已发送」就行
Google Sheets端配置步骤
- 打开你存人员信息的表格,点顶部菜单栏的「扩展程序」->「Apps Script」,直接跳转到Google自带的脚本编辑页面,不用额外搭开发环境
- 写个几十行以内的简单函数:功能就是给你EC2上搭好的接口发POST请求,请求头里带上你之前设置的鉴权令牌
- 回到Sheet页面,点「插入」->「绘图」,画个显眼的按钮,比如上面写「一键发送证书」,放到表格顶部合适的位置。右键点这个插入的按钮,选「指定脚本」,把你刚才在Apps Script里写的函数名填进去保存
- 第一次点按钮的时候会弹Google的授权提示,按流程给权限就行,个人用Google Apps Script的免费额度完全够,不会产生费用
可选优化
- 可以在Flask接口里加个简单的执行结果通知,脚本跑完不管成功还是失败,都给你自己的管理员邮箱发个通知,不用登EC2看日志
- 如果不想维护Web接口,也可以退而求其次用轮询方案:在EC2上开个定时任务每5分钟跑一次脚本,检查Sheet里有没有待发送的新数据,但这个方案不是实时触发,体验不如点按钮即时触发的方案好。
内容的提问来源于stack exchange,提问作者Moh'd Mahfadi
相关产品推荐
相关产品推荐

