用 FunctionGraph 与 OBS 搭建无服务器图片处理服务
【摘要】 本文演示如何用华为云函数工作流 FunctionGraph 搭配对象存储 OBS,实现图片上传后自动压缩与生成缩略图,免运维、按调用计费,适合轻量图片处理场景。
一、为什么用无服务器做图片处理
图片上传后的压缩与缩略图生成,是很多应用都会遇到的需求。传统做法是常驻一台服务器跑处理程序:闲时资源浪费,高峰期又容易扛不住。用华为云函数工作流 FunctionGraph 配合 对象存储 OBS,可以做到“上传即处理”,按调用次数计费,闲置时零成本。
二、整体架构
用户上传图片到 OBS 源桶,OBS 产生对象创建事件后自动触发 FunctionGraph 函数,函数在运行时里用 Pillow 完成压缩与缩略图生成,再把结果写回目标桶。
三、准备工作
- 创建两个 OBS 桶:
img-src(源)与img-out(结果)。 - 在函数工作流控制台新建函数,运行时选择 Python 3.9。
- 为函数配置 OBS 触发器,并授予具备 OBS 读写权限的委托。
四、核心代码
def handler(event, context):
rec = event["Records"][0]
bucket = rec["s3"]["bucket"]["name"]
key = rec["s3"]["object"]["key"]
img = Image.open(io.BytesIO(get_object(bucket, key)))
img.thumbnail((800, 800))
buf = io.BytesIO()
img.save(buf, "JPEG", quality=85)
put_object("img-out", "thumb/" + key, buf.getvalue())
return {"status": "ok"}
五、验证方式
向 img-src 上传一张 2MB 左右的照片,几秒后到 img-out/thumb/ 下即可看到压缩后的缩略图,说明链路打通。
六、小结
这套方案按实际调用计费,不需要维护服务器,非常适合个人博客、小程序后端这类轻量图片处理场景。如果业务访问量有明显的波峰波谷,无服务器方案在成本和弹性上都比较划算,值得一试。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)