使用函数计算实现OSS压缩文件的自动解压

您可以通过使用Serverless Devs函数计算控制台完成函数的部署,当匹配解压规则的ZIP文件上传到OSS后,会触发函数自动解压。

注意事项

  • 建议使用UTF-8或GB 2312编码命名您的文件或文件夹,否则可能导致解压后的文件或文件夹名称出现乱码、解压过程中断等问题。

  • 向Bucket上传压缩文件时,请不要选择归档存储或冷归档存储类型,否则无法正常触发函数执行。

  • 压缩文件建议使用标准的ZIP命令行进行压缩,防止解压失败。

  • 向Bucket上传的压缩文件中,单个文件大小不要超过1 GB,否则可能导致解压失败。

  • 解压单个压缩包的最大时间为2小时,超过2小时未完成的任务会解压失败。

  • 默认设置的函数执行时长为2小时,您可以调整函数的执行超时时间来满足业务需求。

操作流程

image

使用函数计算控制台实现压缩文件的自动解压

前提条件

操作步骤

  1. 登录函数计算控制台,在左侧导航栏,单击应用
  2. 应用页面,单击创建应用

  3. 创建应用页面,选择创建应用的方式。

    本文以通过模板创建应用方式为例进行介绍。

  4. 在下方模板区域,选择热门应用页签,找到OSS上传zip文件自动解压卡片,光标放到该卡片,然后单击立即创建

  5. 创建应用页面,设置以下配置项,然后单击创建并部署

    主要配置项说明如下,其余配置项选择默认值即可。

    配置项

    说明

    基本信息

    部署类型

    选择直接部署

    角色名称

    默认为角色AliyunFCServerlessDevsRole。如果现有权限不足,单击+添加策略,在弹出的对话框选择要添加的策略,然后单击添加

    高级配置

    地域

    选择应用部署的地域。

    服务名

    设置要创建的应用所属的服务名称。

    函数名

    设置要创建的应用所属的函数名称。

    RAM角色ARN

    选择OSS触发函数时所用的角色。请确保已为该角色配置AliyunOSSFullAccessAliyunFCDefaultRolePolicy权限策略。

    OSS存储桶名

    选择已创建的Bucket。

    前缀

    设置文件前缀。默认为src。同一个Bucket下的不同触发器的文件前缀不能重复。

    解压目标目录

    设置文件解压后的目标存储目录。默认为dst

    说明

    为了防止循环触发函数,请将此目录设置为不同于前缀的目标目录。

    是否保留压缩文件名为路径目录

    设置是否保留压缩文件名为路径的目录。取值说明如下:

    • true:保留压缩文件名为路径目录。例如,设置的解压目标目录target,压缩文件名为source.zip,解压后文件路径为target/source/...

    • false:直接解压到目标目录中。上述示例中,解压后文件路径为target/...

    触发器RAM角色ARN

    默认为角色AliyunOSSEventNotificationRole,OSS会使用此角色发送事件通知调用函数。

  6. 测试应用。

    上传.zip文件至与您设置的前缀匹配的目录时,触发应用所属函数执行,自动将.zip文件解压并保存至您设置的解压目标目录

    例如,您设置的前缀source解压目标目录target。将.zip文件上传至sourcesource1时,均触发函数执行,并自动解压保存文件至target

(推荐)使用Serverless Devs实现压缩文件的自动解压

前提条件

操作步骤

  1. 执行以下命令,下载示例工程。

    git clone git@github.com:awesome-fc/decompress-oss.git
  2. 执行以下命令,进入项目目录。

    cd decompress-oss
  3. 编辑s.yaml文件内的配置信息并保存。

    • 将文件内的bucketName的参数信息your-bucket修改为您创建的Bucket的名称。

    • 可选:按需修改OSS触发器前缀Prefix、后缀Suffix和解压后文件保存的目录PROCESSED_DIR的参数信息。

    说明

    本文示例中OSS触发器前缀默认为src/,您可以设置为src;解压后文件保存目录默认为dst/

  4. 执行以下命令,部署项目。

    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
  5. 向Bucket中上传后缀为.zip、.tar、.gz等压缩文件到指定的目录并触发解压函数执行。

    本文示例的默认目录为src/,解压后的文件会自动生成到指定的目录dst/

相关文档