使用函数工作流压缩图片
1.功能介绍
将图片上传到特定的OBS桶中,然后对上传的每个图像的尺寸进行压缩,将处理完后的图像上传到另一个指定的OBS桶中。
2.准备工作
1.创建函数及添加事件源之前,需要创建两个OBS桶,分别用来保存用户上传的图片和压缩处理后的图片。
2.OBS桶创建以后,需要创建“委托”,给FunctionGraph函数赋权,确保FunctionGraph函数能够访问到OBS资源。
2.1 创建OBS桶
注意事项
1.上传图片的源桶、输出图片的目标桶和函数必须处于同一个区域下。
2.必须使用两个不同的桶。如果使用一个桶,会无限执行函数。(源桶上传图片会触发函数执行,从而无限循环)。
操作步骤
1.登录 对象存储服务控制台 ,单击“创建桶”,进入“创建桶”界面。
2.在“创建桶”界面,填写存储桶信息,如图1所示:
- 区域:根据实际情况设置
- 桶名称输入:“image-bucket-input”
- 存储别选择:“标准存储”
- 桶策略选择:"私有"
- 单击“立即创建”,完成源桶创建。
3.重复步骤2,创建目标桶。区域及存储类别与源桶保持一致,桶名称命名为“image-bucket-output”。
4.完成桶创建以后,OBS桶列表有以下两个桶,如图2所示。

图1 桶列表
2.2 创建委托
1.登录统一身份认证服务控制台,在左侧导航栏单击“委托”,进入“委托”界面。
2.单击“创建委托”,进入“创建委托”界面。
3.填写委托信息。
-
委托名称:输入“serverless_trust”。
-
委托类型:选择“云服务”。
-
云服务:选择“函数工作流 FunctionGraph”。
-
持续时间:选择“永久”。
-
权限选择:单击“配置权限”,在“配置权限”界面勾选“Tenant Administrator”,单击“确定”。

图2 创建委托
说明:Tenant Administrator:拥有该权限的用户可以对企业拥有的所有云资源执行任意操作。
4.单击“确定”,完成权限委托设置。
3.构建程序
3.1 创建程序包
本例使用Python语言实现图片压缩的功能,有关函数开发的过程请参考Python函数开发 。本例不再介绍业务功能实现的代码。

图3 样例代码
其中index.py为函数执行的入口文件,index.py中入口函数的代码片段如下,参数“output_bucket”(目标桶)为压缩后的图片存储地址,需要通过环境变量传递。
3.2 创建函数
创建函数的时候,必须选择委托包含OBS访问权限的委托,否则不能使用OBS服务。
1.登录函数工作流控制台 ,在左侧导航栏选择“函数 > 函数列表”,进入函数列表界面。
2.单击“创建函数”,进入创建函数流程。
3.填写函数配置信息
- 函数名称输入:“fss_examples_image_thumbnail”
- 所属应用选择默认的“default”。
- 委托名称选择创建委托中创建的“serverless_trust”
![creation]()
图4 创建函数
- 上传样例代码中的"image-thumbail-python.zip"
![upload]()
图5 上传zip包
键output_bucket: index.py文件中定义的存放输出图片的OBS桶参数
键obs_endpoint: index.py文件中定义的存放输出图片的OBS桶的地址参数
图7 设置环境变量
说明:键obs_address值的格式为obs.{region}.myhuaweicloud.com,region的值,请参考地区和终端节点 。
3.3 添加依赖包
示例代码依赖obs和pillow包,需要通过依赖包的形式进行引入,有关依赖已经添加到公共依赖包仓库中。
图8 添加依赖包
4.添加事件源
OBS桶及函数创建以后,可以为函数添加事件源,添加OBS事件源是通过创建OBS触发器实现的,步骤如下。
- 用户进入设置,在“触发器”页签,单击“创建触发器”,弹出创建触发器界面,触发器配置之前创建的”image-bucket-input“。
图8 创建触发器
- 单击"确定",完成触发器创建。OBS触发器创建以后,当有图片上传或更新至image-bucket-input桶时,生成事件,触发函数执行。
5.图片处理
OBS触发器创建以后,当有图片上传或更新至your-bucket-input桶时,生成事件,触发函数执行。
-
上传图片生成事件
进入your-bucket-input桶对象界面,上传image.jpg图片,如图9所示。
图9 上传图片
-
触发函数自动运行
上传图片至image-bucket-input桶,OBS生成事件触发函数运行,将图片压缩,压缩后的图片存放在image-bucket-output桶中。
进入image-bucket-output桶对象界面,可以看到压缩后的图片。
图10 压缩图片
使用函数工作流压缩图片
1.功能介绍
将图片上传到特定的OBS桶中,然后对上传的每个图像的尺寸进行压缩,将处理完后的图像上传到另一个指定的OBS桶中。
2.准备工作
1.创建函数及添加事件源之前,需要创建两个OBS桶,分别用来保存用户上传的图片和压缩处理后的图片。
2.OBS桶创建以后,需要创建“委托”,给FunctionGraph函数赋权,确保FunctionGraph函数能够访问到OBS资源。
2.1 创建OBS桶
注意事项
1.上传图片的源桶、输出图片的目标桶和函数必须处于同一个区域下。
2.必须使用两个不同的桶。如果使用一个桶,会无限执行函数。(源桶上传图片会触发函数执行,从而无限循环)。
操作步骤
1.登录 对象存储服务控制台 ,单击“创建桶”,进入“创建桶”界面。
2.在“创建桶”界面,填写存储桶信息,如图1所示:
3.重复步骤2,创建目标桶。区域及存储类别与源桶保持一致,桶名称命名为“image-bucket-output”。
4.完成桶创建以后,OBS桶列表有以下两个桶,如图2所示。
图1 桶列表
2.2 创建委托
1.登录统一身份认证服务控制台,在左侧导航栏单击“委托”,进入“委托”界面。
2.单击“创建委托”,进入“创建委托”界面。
3.填写委托信息。
委托名称:输入“serverless_trust”。
委托类型:选择“云服务”。
云服务:选择“函数工作流 FunctionGraph”。
持续时间:选择“永久”。
权限选择:单击“配置权限”,在“配置权限”界面勾选“Tenant Administrator”,单击“确定”。
图2 创建委托
说明:Tenant Administrator:拥有该权限的用户可以对企业拥有的所有云资源执行任意操作。
4.单击“确定”,完成权限委托设置。
3.构建程序
3.1 创建程序包
本例使用Python语言实现图片压缩的功能,有关函数开发的过程请参考Python函数开发 。本例不再介绍业务功能实现的代码。
图3 样例代码
其中index.py为函数执行的入口文件,index.py中入口函数的代码片段如下,参数“output_bucket”(目标桶)为压缩后的图片存储地址,需要通过环境变量传递。
3.2 创建函数
创建函数的时候,必须选择委托包含OBS访问权限的委托,否则不能使用OBS服务。
1.登录函数工作流控制台 ,在左侧导航栏选择“函数 > 函数列表”,进入函数列表界面。
2.单击“创建函数”,进入创建函数流程。
3.填写函数配置信息
图4 创建函数
图5 上传zip包
键output_bucket: index.py文件中定义的存放输出图片的OBS桶参数
键obs_endpoint: index.py文件中定义的存放输出图片的OBS桶的地址参数
说明:键obs_address值的格式为obs.{region}.myhuaweicloud.com,region的值,请参考地区和终端节点 。
3.3 添加依赖包
示例代码依赖obs和pillow包,需要通过依赖包的形式进行引入,有关依赖已经添加到公共依赖包仓库中。
4.添加事件源
OBS桶及函数创建以后,可以为函数添加事件源,添加OBS事件源是通过创建OBS触发器实现的,步骤如下。
5.图片处理
OBS触发器创建以后,当有图片上传或更新至your-bucket-input桶时,生成事件,触发函数执行。
上传图片生成事件
进入your-bucket-input桶对象界面,上传image.jpg图片,如图9所示。
触发函数自动运行
上传图片至image-bucket-input桶,OBS生成事件触发函数运行,将图片压缩,压缩后的图片存放在image-bucket-output桶中。
进入image-bucket-output桶对象界面,可以看到压缩后的图片。
6.参考
更多信息请参考函数工作流FunctionGraph 。