构建程序
本例提供了实现图片压缩功能的程序包,使用空白模板创建函数,用户可以下载(fss_examples_image_thumbnail.zip)(sha256校验包)学习使用。
创建程序包
本例使用Python语言实现图片压缩的功能,有关函数开发的过程请参考Python函数开发。本例不再介绍业务功能实现的代码,样例代码目录如图1所示。
# -*-coding:utf-8 -*- import os import string import random import urllib.parse from PIL import Image from obs import ObsClient LOCAL_MOUNT_PATH = '/tmp/' def handler(event, context): ak = context.getSecurityAccessKey() sk = context.getSecuritySecretKey() st = context.getSecurityToken() if ak == "" or sk == "" or st == "": context.getLogger().error('Failed to access OBS because no temporary ' 'AK, SK, or token has been obtained. Please ' 'set an agency.') return 'Failed to access OBS because no temporary AK, SK, or token ' \ 'has been obtained. Please set an agency. ' obs_endpoint = context.getUserData('obs_endpoint') if not obs_endpoint: return 'obs_endpoint is not configured' output_bucket = context.getUserData('output_bucket') if not output_bucket: return 'output_bucket is not configured' compress_handler = ThumbnailHandler(context) records = event.get("Records", None) return compress_handler.run(records[0])
创建函数
创建函数的时候,必须选择委托包含OBS访问权限的委托,否则不能使用OBS服务。
- 登录函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,进入函数列表界面。
- 单击“创建函数”,进入创建函数流程。
- 选择“创建空白函数”,填写函数配置信息。
输入基础配置信息,完成后单击“创建函数”。
- 函数类型:事件函数
- 函数名称:输入您自定义的函数名称,此处以“fss_examples_image_thumbnail”为例。
- 委托名称:选择创建委托中创建的“serverless_trust”
- 运行时语言:选择“Python3.6”
- 进入fss_examples_image_thumbnail函数详情页,配置如下信息。
- 在“代码”页签,代码选择“上传自ZIP文件”,上传样例代码中的“fss_examples_image_thumbnail.zip”。
- 在“设置 > 常规设置”页签,设置如下信息,完成后单击“保存”。
- 内存:选择“256”
- 执行超时时间:输入“40”
- 函数执行入口:默认“index.handler”,无需修改
- 所属应用:默认“default”
- 描述:输入“压缩图片”
- 在“设置 > 环境变量”页签,输入环境信息,完成后单击“保存”。
键output_bucket:index.py文件中定义的存放输出图片的OBS桶参数,值your-bucket-output: 创建OBS桶中创建的存放输出图片OBS桶;
键obs_endpoint:index.py文件中定义的存放输出图片的OBS桶的地址参数,值obs.region.myhuaweicloud.com。
表1 环境变量说明 环境变量
说明
obs_endpoint
OBS服务终端节点,获取地址请参考地区和终端节点。
output_bucket
存放输出图片的OBS桶。
添加依赖包
示例代码依赖pillow包,需要通过依赖包的形式进行引入,步骤如下。
- 用户进入fss_examples_image_thumbnail函数详情页,在“代码”页签,单击页面最底部的“添加依赖包”。
- 添加公共依赖包“pillow-7.1.2”。
图2 添加依赖包
demo包的函数代码中已预置了依赖包的引用配置,因此添加依赖包后无需再进行依赖包的引用配置。