您可以通过使用Serverless Devs和函数计算控制台完成函数的部署,当匹配解压规则的ZIP文件上传到OSS后,会触发函数自动解压。
注意事项
建议使用UTF-8或GB 2312编码命名您的文件或文件夹,否则可能导致解压后的文件或文件夹名称出现乱码、解压过程中断等问题。
向Bucket上传压缩文件时,请不要选择归档存储或冷归档存储类型,否则无法正常触发函数执行。
压缩文件建议使用标准的ZIP命令行进行压缩,防止解压失败。
向Bucket上传的压缩文件中,单个文件大小不要超过1 GB,否则可能导致解压失败。
解压单个压缩包的最大时间为2小时,超过2小时未完成的任务会解压失败。
默认设置的函数执行时长为2小时,您可以调整函数的执行超时时间来满足业务需求。
操作流程
使用函数计算控制台实现压缩文件的自动解压
前提条件
操作步骤
- 登录函数计算控制台,在左侧导航栏,单击应用。
在应用页面,单击创建应用。
在创建应用页面,选择创建应用的方式。
本文以通过模板创建应用方式为例进行介绍。
在下方模板区域,选择热门应用页签,找到OSS上传zip文件自动解压卡片,光标放到该卡片,然后单击立即创建。
在创建应用页面,设置以下配置项,然后单击创建并部署。
主要配置项说明如下,其余配置项选择默认值即可。
配置项
说明
基本信息
部署类型
选择直接部署。
角色名称
默认为角色AliyunFCServerlessDevsRole。如果现有权限不足,单击+添加策略,在弹出的对话框选择要添加的策略,然后单击添加。
高级配置
地域
选择应用部署的地域。
服务名
设置要创建的应用所属的服务名称。
函数名
设置要创建的应用所属的函数名称。
RAM角色ARN
选择OSS触发函数时所用的角色。请确保已为该角色配置AliyunOSSFullAccess和AliyunFCDefaultRolePolicy权限策略。
OSS存储桶名
选择已创建的Bucket。
前缀
设置文件前缀。默认为src。同一个Bucket下的不同触发器的文件前缀不能重复。
解压目标目录
设置文件解压后的目标存储目录。默认为dst。
说明为了防止循环触发函数,请将此目录设置为不同于前缀的目标目录。
是否保留压缩文件名为路径目录
设置是否保留压缩文件名为路径的目录。取值说明如下:
true:保留压缩文件名为路径目录。例如,设置的解压目标目录为target,压缩文件名为source.zip,解压后文件路径为target/source/...。
false:直接解压到目标目录中。上述示例中,解压后文件路径为target/...。
触发器RAM角色ARN
默认为角色AliyunOSSEventNotificationRole,OSS会使用此角色发送事件通知调用函数。
测试应用。
上传.zip文件至与您设置的前缀匹配的目录时,触发应用所属函数执行,自动将.zip文件解压并保存至您设置的解压目标目录。
例如,您设置的前缀为source,解压目标目录为target。将.zip文件上传至source或source1时,均触发函数执行,并自动解压保存文件至target。
(推荐)使用Serverless Devs实现压缩文件的自动解压
前提条件
已开通函数计算服务。具体操作,请参见开通函数计算服务。
已开通OSS服务并在OSS创建存储空间。具体操作,请参见开通OSS服务并创建存储空间。
已安装并配置Serverless Devs。具体操作,请参见安装Serverless Devs和配置Serverless Devs。
操作步骤
执行以下命令,下载示例工程。
git clone git@github.com:awesome-fc/decompress-oss.git
执行以下命令,进入项目目录。
cd decompress-oss
编辑s.yaml文件内的配置信息并保存。
将文件内的
bucketName
的参数信息your-bucket
修改为您创建的Bucket的名称。可选:按需修改OSS触发器前缀
Prefix
、后缀Suffix
和解压后文件保存的目录PROCESSED_DIR
的参数信息。
说明本文示例中OSS触发器前缀默认为
src/
,您可以设置为src
;解压后文件保存目录默认为dst/
。执行以下命令,部署项目。
sudo s fc-decompress-oss-invoke-fc-EnhancedInstance deploy -y
输出示例。
Checking Service, Function, Triggers (18.63s) Creating Service, Function, Triggers (13.44s) There is auto config in the service: enhancedInstance-decompress Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigge * Remove CustomDomain: s remove domain fc-decompress-oss-invoke-fc-EnhancedInstance: region: cn-hangzhou service: name: enhancedInstance-decompress function: name: oss-invoke-fc runtime: python3 handler: index.handler memorySize: 4096 timeout: 7200 triggers: - type: oss name: zip-t - type: oss name: gz-t - type: oss name: tar-t
向Bucket中上传后缀为.zip、.tar、.gz等压缩文件到指定的目录并触发解压函数执行。
本文示例的默认目录为src/,解压后的文件会自动生成到指定的目录dst/。
相关文档
如果您仅需要解压上传到OSS的ZIP文件,可以直接在OSS配置ZIP文件自动解压,具体请参见ZIP包解压。
如果您需要在一个Bucket内关联大于10个以上的触发器,可以选择创建EventBridge类别的OSS触发器,具体请参见配置EventBridge类别的OSS触发器。
如果您需要使用函数计算实现打包下载OSS的文件,请参见使用函数计算实现打包下载OSS文件。