GithubHelp home page GithubHelp logo

start-zip-oss-v3-pvhg's Introduction

注:当前项目为 Serverless Devs 应用,由于应用中会存在需要初始化才可运行的变量(例如应用部署地区、函数名等等),所以不推荐直接 Clone 本仓库到本地进行部署或直接复制 s.yaml 使用,强烈推荐通过 s init --project ${模版名称} 的方法或应用中心进行初始化,详情可参考部署 & 体验

start-zip-oss-v3 帮助文档

使用函数计算zip打包下载OSS文件

前期准备

使用该项目,您需要有开通以下服务:

服务 备注
函数计算 FC 需要创建函数处理核心业务逻辑
对象存储 OSS 需要拉取存储 OSS 文件

推荐您拥有以下的产品权限 / 策略:

服务/业务 权限 备注
函数计算 AliyunFCFullAccess 需要创建函数处理核心业务逻辑
对象存储 AliyunOSSFullAccess 需要拉取存储 OSS 文件

您还需要注意:
您还需要注意:
OSS 创建的 bucket 和 应用函数需在同一个 region

免责声明:
免责声明:
本项目打包使用标准的 python zipfile lib 处理,因需要打包的文件大小、数量不同函数执行时间不同,需根据情况具体测试打包时间以及所产生的费用。

部署 & 体验

应用详情

打包下载 OSS 上存储的多个文件,例如将 OSS 上的一个目录打包下载。这样可以节省网络传输的数据,达到减少费用和下载时间的效果。使用 Serverless Devs 开发者工具,您只需要几步,就可以体验 Serverless 架构,带来的降本提效的技术红利。

使用文档

调用函数

应用部署成功后, 会输出 HTTP trigger 对应的公网访问地址

  1. 在 OSS 上准备要打包的文件, OSS 和 应用函数在同一个 region
    • 把文件放在 OSS 上面一个目录下面, 比如 files目录

Tips: 除了支持 source-dir 指定目录, 也可以使用 "source-files" :['1.txt', 'a/2.txt'] 这种形式指定多个文件

  1. 触发函数(通过 HTTP trigger 对应的公网访问地址)
    • 使用 curl 命令直接调用函数
cat <<EOF > event.json
{
  "bucket": "fc-test-bucket",
  "source-dir": "files/"
}
EOF

curl -v -L -o /tmp/my.zip -d @./event.json https://zip-oss-func-zip-oss-xxxx.cn-shanghai.fcapp.run

打开/tmp/my.zip,就是files/目录下所有文件的压缩包。

注意, 如果您有需求将上面的示例中的匿名非鉴权的 HTTP 函数改成需要鉴权的 HTTP 函数,可以采用相关的 sdk 去调用

方案

使用函数计算先把多个文件压缩成一个 zip,存储到 OSS 上面,返回 zip 文件的地址,客户端下载此文件。一般的客户端都支持跟随 HTTP 302 跳转地址,所以在完成压缩后,返回一个 302 的地址,客户端再跟随这个地址下载压缩后的文件包。

zip_oss_high

实现细节

  1. 函数运行环境的磁盘空间是有限的,采用流式下载和上传的方式,只在内存中缓存少量的数据
  2. 为了加快速度,一边生成 zip 文件时一边上传到 OSS
  3. 上传 zip 文件到 OSS 时,利用 OSS 分片上传的特性,多线程并发上传

zip_oss_low

实验数据

# 文件数 压缩前总大小 压缩后总大小 执行时间
1 7 1.2MB 1.16MB 0.4s
2 57 1.06GB 0.91GB 63s

通过 Serverless Devs 开发者工具,您只需要几步,就可以体验 Serverless 架构,带来的降本提效的技术红利。

开发者社区

您如果有关于错误的反馈或者未来的期待,您可以在 Serverless Devs repo Issues 中进行反馈和交流。如果您想要加入我们的讨论组或者了解 FC 组件的最新动态,您可以通过以下渠道进行:

微信公众号:serverless 微信小助手:xiaojiangwh 钉钉交流群:33947367

start-zip-oss-v3-pvhg's People

Watchers

魏树鸿 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.