云函数工作流教你快速实现图片压缩【玩转华为云】

举报
龙哥手记 发表于 2022/10/04 23:17:00 2022/10/04
【摘要】 函数工作流服务来写,让您能用函数工作流服务实现图片压缩的功能并定位修改

本文主要内容有

  • 一 OBS这个很厉害
  • 二 先建两个桶
  • 三 创建并配函数
  • 上传图片生成事件并触发函数执行
  • 问题定下位

1.gif

一 🌈 OBS这个很厉害

1.1 啥是OBS桶?

对象存储服务说白了就是一个基于对象的存储服务,哈哈废话文学,目的给客户提供海量、安全、高可靠、低成本的数据存储能力,让你无需考虑容量限制,并且提供多种存储类型供选择,满足客户各类业务场景要求;

1.2 优势在哪里嘛?

  • 数据稳定,业务可靠:OBS支撑华为手机云相册,数亿用户访问,稳定可靠。通过跨区域复制、AZ之间数据容灾、AZ内设备和数据冗余、存储介质的慢盘/坏道检测等技术方案,保障数据持久性高达99.9999999999%,业务连续性高达99.995%,远高于传统架构

  • 下面是五级可靠性架构保证数据稳定,业务可靠
  • 多重防护,授权管理OBS通过可信云认证,让数据安全放心。支持多版本控制、敏感操作保护、服务端加密、防盗链、VPC网络隔离、访问日志审计以及细粒度的权限控制,保障数据安全可信


  • 千亿对象,千万并发OBS通过智能调度和响应,优化数据访问路径,并结合事件通知、传输加速、大数据垂直优化等,为各场景下用户的千亿对象提供千万级并发、超高带宽、稳定低时延的数据访问体验。
    下面是千亿对象,千万并发的数据访问体验
  • 简单易用,便于管理:OBS支持标准REST API、多版本SDK和数据迁移工具,让业务快速上云。无需事先规划存储容量,存储资源和性能可线性无限扩展,不用担心存储资源扩容、缩容问题。OBS支持在线升级、在线扩容,升级扩容由华为云实施,客户无感知。同时提供全新的POSIX语言系统,应用接入更简便;
  • 数据分层,按需使用:提供按量计费和包年包月两种支付方式,支持标准、低频访问、归档数据、深度归档数据独立计量计费,降低存储成本;
  • OBS与自建存储服务器对比

    在信息时代,企业数据直线增长,自建存储服务器存在诸多劣势,已无法满足企业日益强烈的存储需求。表1向您详细展示了OBS与自建存储服务器的优劣势对比;

    chrome_NuFspXGF2P.png1.3 有落地的场景吗?

    1.3.1 大数据分析

    OBS提供的大数据解决方案主要面向海量数据存储分析、历史数据明细查询、海量行为日志分析和公共事务分析统计等场景,向用户提供低成本、高性能、不断业务、无需扩容的解决方案;

    • 海量数据存储分析的典型场景:PB级的数据存储,批量数据分析,毫秒级的数据详单查询等
    • 历史数据明细查询的典型场景:流水审计,设备历史能耗分析,轨迹回放,车辆驾驶行为分析,精细化监控等
    • 海量行为日志分析的典型场景:学习习惯分析,运营日志分析,系统操作日志分析查询等
    • 公共事务分析统计的典型场景:犯罪追踪,关联案件查询,交通拥堵分析,景点热度统计等

    用户通过DES等迁移服务将海量数据迁移至OBS,再基于华为云提供的MapReduce等大数据服务或开源的Hadoop、Spark等运算框架,对存储在OBS上的海量数据进行大数据分析,最终将分析的结果呈现在ECS中的各类程序或应用上

    建议搭配服务

    MapReduce服务 MRS,弹性云服务器 ECS,数据快递服务 DES



    1.3.2 静态网站托管

    OBS提供低成本、高可用、可根据流量需求自动扩展的网站托管解决方案,结合内容分发网络CDN和弹性云服务器ECS快速构建动静态分离的网站/应用系统。

    终端用户浏览器和APP上的动态数据直接与搭建在华为云上的业务系统进行交互,动态数据请求发往业务系统处理后直接返回给用户。静态数据保存在OBS中,业务系统通过内网对静态数据进行处理,终端用户通过就近的高速节点,直接向OBS请求和读取静态数据;

    建议搭配服务

    内容分发网络 CDN,弹性云服务器 ECS


    1.3.2 在线视频点播

    OBS提供高并发、高可靠、低时延、低成本的海量存储系统,结合媒体处理MPC、内容审核Moderation和内容分发网络CDN可快速搭建极速、安全、高可用的视频在线点播平台

    OBS作为视频点播的源站,一般的互联网用户或专业的创作主体将各类视频文件上传至OBS后,通过Moderation对视频内容进行审核,并通过MPC对视频源文件进行转码,最终通过CDN回源加速之后便可以在各类终端上进行点播

    建议搭配服务

    内容分发网络 CDN,媒体处理 MPC,内容审核 Moderation


二 😘 先建两个桶

步骤说明:创建两个OBS桶,一个用于上传待压缩图片,一个用于存放压缩后图片

2.1 创建图片输入桶

于华为云控制台,鼠标移动到云桌面浏览器页面中左侧菜单栏,点击服务列表->“存储”->选择“对象存储服务OBS”,进入对象存储服务OBS控制台

单击页面右上角“创建桶”按钮

按如下配置创建OBS桶:

① 区域:华北-北京四

② 桶名:自定义(如img-input-xxxx)

其他配置项保持默认,点击“立即创建”按钮

2.2 创建图片输出桶

按照步骤2.1创建图片输出桶,用于存放压缩后的图片

注意:该桶名称请以“img-output-”开头,否则影响实验进行。请记住该桶名称以备后续创建函数时使用


三 🎨 建函数

步骤说明:在函数工作流 FunctionGraph服务平台按照预制函数模板创建一个图片压缩函数

什么是函数工作流 FunctionGraph?

函数工作流(FunctionGraph)是一项基于事件驱动的函数托管计算服务。通过函数工作流,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用;

于华为云控制台,鼠标移动到云桌面浏览器页面中左侧菜单栏,点击服务列表->“计算”->选择“函数工作流FunctionGraph”,进入函数工作流FunctionGraph控制台

点击页面右上角“创建函数”按钮

按如下配置创建函数:

①函数创建方式:使用函数模板

②场景:图片处理

③语言:Python3.6

点击“图片生成缩略图”卡片的“使用模板”按钮

按如下配置函数基本信息:

①区域:华北北京四

②函数名称:自定义

③委托:选择“obs_trust”

说明:由于华为云各服务之间存在业务交互关系,一些云服务需要与其他云服务协同工作,需要您创建云服务委托,将操作权限委托给该服务,让该服务以您的身份使用其他云服务,代替您进行一些资源运维工作;

obs_trust是为本实验准备的FunctionGraph与OBS服务之间业务交互委托

④ 环境变量

obs_endpoint:obs.cn-north-4.myhuaweicloud.com

output_bucket:填写步骤2.2中创建的图片输出obs桶名称(以“img-output-”开头的桶,获取方法参考步骤2.1进入OBS控制台)

点击“创建函数”按钮,完成图片压缩函数创建


四 🚀 配函数

步骤说明:为函数添加Python图像处理库依赖包,创建OBS触发器。

4.1 添加依赖包

进入函数详情页,在“代码”页签,点击“添加依赖包”按钮。

在“选择依赖包”弹框中,选择“公共依赖包”-“pillow-7.1.2”,点击“确定”完成依赖包添加。

说明:pillow-7.1.2 依赖包是Python图像处理库,支持多种文件格式,并提供了强大的图像处理和图形处理能力。

4.2 常规配置

切换到“设置”页签-“常规设置”。

超时时间输入:“40”

内存选择:“1024”

点击“保存”按钮

4.3 添加事件源

在“设置”页签-“触发器”,点击“创建触发器”按钮。

按如下配置触发器:

触发器类型:对象存储服务(OBS)

桶:选择步骤2.1中创建的图片输入桶

事件:勾选“Put”,“Post”

点击“确定”按钮,完成触发器创建。

点击“确定”按钮完成触发器创建

五 😍 上传图片生成事件并触发函数执行

5.1 下载图片

复制https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/20220926/Cloud_huge.jpg,用浏览器打开下载需压缩的图片

5.2 上传图片

于华为云控制台,鼠标移动到云桌面浏览器页面中左侧菜单栏,点击服务列表->“存储”->选择“对象存储服务OBS”,进入对象存储服务OBS控制台

在“桶列表”菜单,点击图片输入桶名称,进入图片输入桶界面

在“对象”菜单页面,点击“上传对象”按钮,将实验桌面上的图片上传至桶内


点击“添加文件”

选择步骤5.1下载的图片Cloud_huge.jpg进行上传

可以看到上传的图片大小是1.34M

返回桶列表页,单击输图片出桶名称,进入图片输出桶界面,进入“对象”菜单页面

可以看到图片输出桶内已经存在压缩后的图片,图片大小是413.32KB,小于1.34M,实现了对图片的压缩


五 🎯 问题定下位

步骤说明:如果在函数执行过程中出现错误,可以通过函数内的监控模块进行问题定位

6.1 函数执行入口代码错误

如下图所示,修改代码中的函数执行入口,改为“index.handle”,并点击“部署”保存。而设置中的函数执行入口依旧为“index.handler”,然后在“img-input-xxx”桶中新上传一张图片文件,发现在“img-output-xxx”桶中并没有对应的压缩文件

说明:“index.py”文件的代码中,AK/SK(Access Key ID/Secret Access Key)即访问密钥,包含访问密钥ID(AK)和秘密访问密钥(SK)两部分,华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性

代码30、31、32行作用为获取OBS服务中“img-input-xxx”桶中的上传图片信息,并调用“ThumbnailHandler”方法对图片压缩后上传至“img-output-xxx”桶中

6.2 定位错误并修改

此时,通过监控模块查看问题。可以看到函数执行过程中代码异常,点击日志请求id进入查看日志

通过日志可以发现由于没有名为“handler”的执行入口,所以函数执行失败

最后回到设置界面,将函数执行入口修改正确,保存后再次上传图片至“img-input-xxx”桶,函数执行回归正常

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。