当您需要批量上传文件、按特定目录结构上传文件、上传完整的文件或对文件快速进行资源分发时,可以配置解压规则,上传ZIP文件到OSS指定路径,触发函数计算自动解压,并将解压后内容保存回OSS。
前提条件
已开通函数计算服务。您可以在函数计算的产品详情页面开通函数计算服务。
使用场景
批量上传:当您有大量小文件需要上传时,使用程序上传耗时较多,此时可以使用ZIP包解压功能,将文件打包上传。
上传完整的文件:出于资源完整性考虑,有时需要将多个文件组合成一个资源,而将多个文件分别上传可能成功率不高,此时可以使用ZIP包解压功能,提升上传成功率。
按特定目录结构上传:网站中引用了很多静态资源,资源的目录结构比较复杂,如果在OSS中逐一新建目录上传文件的话耗时很长。此时可以在本地定义ZIP包中目录结构,压缩后上传到OSS,使用ZIP包解压功能解压使用。
资源分发:在需要将大量文件分发给用户或不同服务器时,可以将这些文件打包成ZIP包,并使用OSS ZIP包解压功能将ZIP包解压到指定目录。这样可以减少传输时间和带宽消耗。
实现原理
ZIP包解压结合函数计算完成ZIP文件的解压工作,解压流程如下图所示。
“匹配解压规则后缀”的ZIP文件上传到“满足OSS解压规则前缀”的目录。
自动触发函数计算。
配置ZIP包解压规则时需要触发器授权,以便OSS使用触发器角色AliyunOSSEventNotificationRole调用函数计算,触发器授权时自动为该角色授予调用函数计算的权限策略。
函数计算解压ZIP文件,并将解压后的文件存储至OSS的指定目录中。
配置ZIP包解压规则时需要给函数计算服务授权。授权时将新建角色,函数计算使用角色获取OSS上的ZIP包,并将解压后的文件保存回OSS。新建角色时会同步授予角色相应的权限策略(对OSS Bucket的读写权限)。
费用说明
ZIP包解压功能是增值服务,将产生OSS和函数计算相关费用:
OSS:请求Bucket的资源的请求数计费和存储费用。更多信息,请参见OSS计费概述。
函数计算:vCPU使用量费用和内存使用量费用,按执行时间计费。例如:ZIP包解压执行了5分钟,vCPU是2核,内存是3GB,计费为2*0.000015*300+3*0.0000015*300=0.01035美元。更多信息,请参见FC计费概述。
Bucket资源和函数计算资源通过Bucket的内网域名进行传输,内网域名传输数据免流量费用。
使用限制
地域限制:仅华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北 3(张家口)、华北5(呼和浩特)、华南1(深圳)、西南1(成都)、中国香港、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、日本(东京)、德国(法兰克福)、英国(伦敦)、美国(弗吉尼亚)、美国(硅谷)、沙特(利雅得)地域的存储空间支持ZIP包解压。
存储类型限制:冷归档存储类型的文件需先解冻再解压;归档存储类型的文件,如果所在Bucket未开启归档直读,需先解冻再解压。
文件或文件夹命名限制:建议使用UTF-8或GB 2312编码命名您的文件或文件夹,否则可能会出现解压后的文件或文件夹名称出现乱码、解压过程中断等问题。
压缩包限制:ZIP压缩包中单个文件的大小不超过1 GB,解压单个压缩包默认的最大时间是2小时,超过2小时可以调整函数最大执行时长,详情请参见解压超大文件解压超过2h任务失败。
配置ZIP包解压规则
登录OSS管理控制台。
单击Bucket 列表,然后单击目标Bucket名称。
在左侧导航栏,选择 。
单击ZIP 包解压,在ZIP 包解压面板配置ZIP包解压规则。
参数说明
参数
是否必选
说明
服务授权
是
授予函数计算读写OSS和执行函数的权限。
单击授权按钮,然后按照提示完成授权。
触发器授权
是
授予OSS访问函数计算的权限。
单击授权按钮,然后按照提示完成授权。如果已完成授权,此项显示为触发器角色。
前缀
否
配置触发函数计算的文件前缀。您上传指定前缀的ZIP文件或将ZIP文件上传至指定目录会触发函数计算。置空此项则匹配所有上传的ZIP文件。
重要置空此项可能会触发循环执行,建议您配置文件前缀。更多信息,请参见如何避免循环触发?。
目标目录
否
填写ZIP文件解压后存放的目录。置空此项,函数计算会将ZIP文件解压到当前Bucket的根目录。
如果您需要在目标目录中保留ZIP文件名,则选中保留压缩文件名为路径目录。
如果您不需要保留ZIP文件名,直接将解压后的文件存放在目标目录,则选中直接解压到目标目录中。配置详情请参见以下配置示例。
警告为避免影响OSS-HDFS服务的正常使用或者引发数据污染、数据丢失的风险,在开通了OSS-HDFS服务的Bucket中配置ZIP包解压规则时,禁止将目标目录填写为
.dlsdata/
。配置示例
场景
配置方法
解压后的文件结构
所有上传至zipfolder目录的ZIP包均解压到destfolder目录,不保留ZIP包名称。
前缀设置为zipfolder/。
目标目录设置为destfolder。
选中直接解压到目标目录中。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip└─── destfolder/ ├─── a.txt ├─── b.txt └─── ...
所有上传至zipfolder目录的ZIP包均解压到根目录,保留ZIP包名称。
您需要配置如下参数:
前缀设置为zipfolder/。
目标目录设置为空。
选中保留压缩文件名为路径目录。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip├─── a/│ ├─── a.txt│ └─── ...└─── b/ ├─── b.txt └─── ...
所有上传至zipfolder目录的ZIP包均解压到destfolder目录,保留ZIP包名称。
您需要配置如下参数:
前缀设置为zipfolder/。
目标目录设置为destfolder。
选中保留压缩文件名为路径目录。
bucket ├─── zipfolder/ │ ├─── a.zip│ └─── b.zip└─── destfolder/ ├─── a/ │ ├─── a.txt │ └─── ... └─── b/ ├─── b.txt └─── ...
选中我已知晓并同意开通函数计算,通过函数计算处理压缩文件。压缩文件里面的文件名或文件夹名不支持非UTF-8或GB 2312编码后,单击确定。
修改ZIP包解压配置
您可以根据自己的需求修改ZIP包解压的配置。
修改触发函数计算的文件前缀
在OSS控制台的ZIP 包解压页面,单击目标触发器右侧的编辑。
在弹出的函数详情页面下的触发器管理页签,单击目标触发器右侧的编辑。
在编辑触发器对话框,修改文件前缀,其他参数保持默认配置。
单击确定。
修改函数计算配置
在函数计算控制台的函数详情页面下的函数配置页签,单击目标触发器右侧的编辑。
根据实际需求,修改函数计算相关配置,例如函数执行内存、执行超时时间等。
具体操作,请参见管理函数。
删除触发器
删除后无法恢复,且不能继续使用当前触发器触发函数。执行中的任务会继续进行。
在函数详情页面下的触发器管理页签,单击目标触发器右侧的删除。
在弹出的对话框,单击删除。