使用FunctionGraph函数对OBS中的图片进行压缩
方案概述
本实践适用于将单张或批量的图片压缩处理。高质量图片文件通常占用大量存储空间和带宽,导致网站和应用的加载速度变慢,结合对象存储服务OBS,使用FunctionGraph函数可以构建一个高效的图片压缩解决方案,对存储在OBS桶中的图片进行自动压缩处理,实现存储空间优化与资源高效利用。
约束与限制
- “OBS应用事件源”触发器目前仅支持“华北-北京四”、“华北-乌兰察布一”、“华东-上海一”区域,在创建函数和OBS桶时请选择上述区域之一。
- 在操作过程中,所创建的函数和OBS桶必须位于同一个区域下。
资源和成本规划
表1介绍使用FunctionGraph函数对OBS中的图片进行压缩所需的资源和成本规划。
资源 |
资源说明 |
计费说明 |
---|---|---|
对象存储服务 OBS |
|
|
函数工作流 FunctionGraph |
|
|
操作流程
下表介绍使用FunctionGraph函数对OBS中的图片进行压缩的总体操作流程。
操作流程 |
说明 |
---|---|
创建两个OBS桶,源桶用于存储原始图片,目标桶用于存储压缩后图片。 |
|
创建云服务委托,授权FunctionGraph使用其他云服务,确保能与OBS服务协同工作。 |
|
创建空白函数,配置代码环境和创建OBS应用事件源触发器,以实现对OBS源桶中上传或更新的图片自动进行压缩。 |
|
上传原始图片到OBS源桶,图片压缩函数自动执行,在OBS目标桶中生成压缩后的图片,验证图片压缩函数正常运行。 |
步骤一:创建两个OBS桶
- 登录对象存储服务控制台,进入“对象存储”页签。
- 单击“创建桶”,进入“创建桶”界面。
- 在“创建桶”界面,参考表3填写OBS源桶信息。
表3 OBS源桶配置 参数名称
参数说明
取值样例
区域
必选参数。
桶所属区域。请选择靠近您业务的区域,以降低网络时延,提高访问速度。桶创建成功后,不支持变更区域。当前“OBS应用事件源”触发器仅支持“华北-北京四”、“华北-乌兰察布一”、“华东-上海一”区域。
华北-北京四
数据冗余存储策略
必选参数。
- 多AZ存储:数据冗余存储至多个可用区(AZ),可靠性更高。
- 单AZ存储:数据仅存储在单个可用区(AZ),成本更低。
- 桶创建成功后,不支持变更存储策略。
单AZ存储
桶名称
必选参数。
桶的名称。需全局唯一,桶创建成功后,不支持修改名称。
your-bucket-input
存储类别
必选参数。
- 标准存储:适用于有大量热点文件或小文件,且需要频繁访问(平均一个月多次)并快速获取数据的业务场景,支持单AZ存储和多AZ存储。
- 低频访问存储:适用于不频繁访问(平均一年少于12次),但需要快速获取数据的业务场景,支持单AZ存储和多AZ存储。
- 归档存储:适用于很少访问(平均一年一次),且对数据获取速率要求不高的业务场景,仅支持单AZ存储。
标准存储
桶策略
必选参数。
桶的读写权限控制。
- 私有:除桶ACL授权外的其他用户无桶的访问权限。
- 公共读:任何用户都可以对桶内对象进行读操作。
- 公共读写:任何用户都可以对桶内对象进行读/写/删除操作。
私有
默认加密
必选参数。
服务器端加密是指OBS服务端对客户端上传到OBS的对象进行加密存储,开启后需要选择加密密钥。
关闭
归档数据直读
必选参数。
通过归档数据直读,可以直接下载存储类别为归档存储的数据,无需提前恢复。归档数据直读会收取相应的费用。
关闭
企业项目
必选参数。
企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,默认项目为default。
default
标签
可选参数。
标签用于标识OBS中的桶,以此达到对OBS中的桶进行分类的目的。
保持默认,不填写。
- 重复步骤3,创建OBS目标桶。桶名称命名为“your-bucket-output”,其余参数信息与源桶保持一致。
- 完成桶创建后,桶列表有your-bucket-input、your-bucket-output两个桶。
步骤二:创建云服务委托
- 登录,左侧导航栏选择“委托”,进入“委托”页面后,右上角单击“创建委托”。
- 在“创建委托”页面,配置如下参数:
- 委托名称:输入“serverless_trust”。
- 委托类型:选择“云服务”。
- 云服务:选择“函数工作流 FunctionGraph”。
- 持续时间:选择“永久”。
- 描述:保持默认,无需填写。
- 单击“完成”,系统提示创建成功,单击“立即授权”,进入“授权”界面。
- 在“选择策略”界面搜索并勾选“OBS Administrator”,单击“下一步”。
图1 选择策略
- 在“设置最小授权范围”界面选择“所有资源”,单击“确定”。
“OBS Administrator”策略暂不支持指定区域项目资源。
- 系统提示授权成功,单击“完成”,回到“委托”列表,列表中出现“serverless_trust”委托则创建成功。
步骤三:创建图片压缩函数
- 登录函数工作流控制台,在左侧导航栏选择 ,进入函数列表界面。
- 单击“创建函数”,进入创建函数界面。
- 选择“创建空白函数”,参考表4填写函数基本信息,填写完成后单击“创建函数”。
表4 配置函数参数 参数名称
参数说明
取值样例
函数类型
必选参数。
- 事件函数:通过触发器来触发函数执行。
- HTTP函数:用户可以直接发送 HTTP 请求到 URL 触发函数执行。
事件函数
区域
必选参数。
代码部署的区域。需与OBS桶区域保持一致。
华北-北京四
项目
必选参数。
项目部署的区域。会根据区域默认选择。
华北-北京四(默认)
函数名称
必选参数。
函数的名称。可包含字母、数字、下划线和中划线,以大/小写字母开头,以字母或数字结尾,长度不超过60个字符。
fss_examples_image_thumbnail
企业项目
必选参数。
将函数添加至已创建的企业项目中,需与OBS桶的企业项目保持一致,默认项目为default。
default
委托名称
可选参数,本实践必选。
委托函数工作流服务访问其他云服务的委托名称。选择步骤二:创建云服务委托中创建的委托。
serverless_trust
运行时
必选参数。
编写函数的语言及其版本。控制台代码编辑器仅支持Node.js、Python和PHP语言。
Python3.6
- 进入fss_examples_image_thumbnail函数详情页,配置如下信息。
- 下载示例代码fss_examples_image_thumbnail.zip。
- 在“代码”页签,选择“上传自Zip文件”,添加下载的“fss_examples_image_thumbnail_eg.zip”文件,单击“确定”,代码自动部署。
- 单击页面最底部的“添加依赖包”,添加公共依赖包“pillow-7.1.2”,版本默认选择“1”,单击“确定”。
- 在
- 执行超时时间:输入“40”。
- 内存:选择“256”。
填写完成后单击“保存”。
页签,修改如下配置。
- 在“编辑环境变量”,在弹出窗口中单击“添加环境变量”,添加表5信息,填写完成后单击“确定”。
表5 环境变量 键
值
说明
output_bucket
your-bucket-output
存储压缩图片的OBS目标桶名称。
obs_endpoint
obs.cn-north-4.myhuaweicloud.com
华北-北京四区域的OBS服务终端节点(其他区域节点参考地区和终端节点)。
页签,单击 - 在“创建触发器”,弹出创建触发器界面,参考表6填写触发器基本信息,填写完成后单击“确定”。
表6 配置触发器参数 参数名称
参数说明
取值样例
触发器类型
必选参数。
本实践通过添加OBS应用事件源触发器,当对OBS桶执行操作时,将生成事件触发函数执行。
OBS应用事件源
触发器名称
必选参数。
触发器的名称。只能包含字母、数字、下划线和中划线。不能以数字、中划线开头。长度在 1-128 之间。
Image
桶
必选参数。
选择已创建的OBS源桶,用于存储原始图片。
your-bucket-input
事件类型
必选参数。
触发事件的类型,本实践通过上传或更新桶对象触发函数执行。
“通过页面或Put请求创建或覆盖桶对象。”、“使用Post请求创建或覆盖桶对象。”
对象名前缀
可选参数。
用来限制以此关键字开头的对象的事件通知,该限制可以实现对OBS对象名的过滤。
保持默认,不填写。
对象名后缀
可选参数。
用来限制以此关键字结尾的对象的事件通知,该限制可以实现对OBS对象名的过滤。
保持默认,不填写。
对象名编码
必选参数。
选择是否对对象名进行编码。
默认开启。
页签,单击