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