开发函数计算的正确姿势 —— 使用 Fun Build 构建函数

简介: 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

备注: 本文介绍的技巧需要 Fun 版本大于等于 3.0.0+。

Fun Build 是什么,为什么需要 Fun Build?

在很多场景,源码距离交付物其实是有一定的距离,比如 java,写完 java 代码后,还要考虑如何编译、打包的问题。而对于函数计算来说,由于其只能接受一个 zip 或 jar 包,我们还要想一些方法,将我们的代码编译产物及其依赖一同打包的一个 jar 中,然后交付。

Fun Build 的职责就是完成从源码到交付产物的构建过程。

Fun Build 功能介绍

使用 fun build -h 可以查看 build 的帮助文档:

$ fun build -h
Usage: fun build [options] [[service/]function]

Build the dependencies.

Options:
  -u, --use-docker           Use docker container to build functions
  -t, --template [template]  path of fun template file.
  -h, --help                 output usage information

最简单的使用方法是直接使用 fun build,如果想编译某个函数,可以使用 fun build serviceName/functionName 或者 fun build functionName。

默认情况下,fun build 构建时,是直接在宿主机上构建的,如果想避免因为环境差异带来的部署后的不兼容问题,可以在 build 时,指定 -u 或者 --use-docker 参数,表示会在本地使用函数计算模拟环境进行编译。

如果 template.yml 不在当前目录,可以通过 fun build -t templatePath 的方式指定。

Fun Build 的行为是将 template.yml 中列出的函数进行构建(不指定具体函数,则默认编译所有函数)。

使用示例

# 使用 fun build 对所有函数进行构建
fun build 

# 使用 fun build 并且以本地模拟环境对所有函数进行构建
fun build --use-docker

# 使用 fun build 进行构建,构建完成后,立刻进行调用
fun build && fun local invoke

# 使用 fun build 进行构建,构建完成后,立刻进行部署
fun build && fun deploy

Fun Build 构建流程

Fun Build 的构建流程可以理解为,去函数代码目录查找特定的 manifest 文件(清单文件),然后根据这些 manifest 文件进行特定的构造、依赖下载、编译等操作。

目前 Fun 针对不同的语言分别提供了一些其主流的包管理器 manifest 文件的支持

  1. Fun 本身定义的不限语言的 [Funfile]()
  2. java maven 包管理器的 pom.xml
  3. node npm 包管理器的 package.json
  4. python pip 包管理器的 requirements.txt
  5. php composer 包管理器的 composer.json

比如,我这里有一个包含 php7.2、python2.7、python3、nodejs6、nodejs8、java8 的示例 template.yml 。

// 省略部分属性配置 ... ...
Resources:
  localdemo:
    Type: 'Aliyun::Serverless::Service'
    php72:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Runtime: php7.2
                // 省略其它属性配置 ... ...
    python27:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Runtime: python2.7
                // 省略其它属性配置 ... ...
    python3:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Runtime: python3
                // 省略其它属性配置 ... ...
    nodejs6:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Runtime: nodejs6
                // 省略其它属性配置 ... ...
    nodejs8:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Runtime: nodejs8
        // 省略其它属性配置 ... ...
    java8:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Runtime: java8
        // 省略其它属性配置 ... ...

当执行 fun build 时,会对这些函数依次进行构建,构建的产物,会被存放到项目根目录的 .fun/build/artifacts/ 目录。

Build 示例

Java 示例

下面是一个初始化、构建、运行、修改、构建、运行的 java 示例:

总结

使用 Fun Build 可以直接实现从源码到交付产物的构建过程,节省用户的配置成本。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
25天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
26 5
|
3月前
|
JSON 安全 Serverless
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数【1月更文挑战第23天】【1月更文挑战第112篇】
222 7
|
3月前
|
Serverless 异构计算
函数计算FC部署问题之函数报错如何解决
函数计算FC部署是指在阿里云Function Compute服务上部署函数或应用程序的过程,它提供了一个无需管理服务器即可运行代码的平台;本合集将介绍和总结函数计算FC部署中常见的问题与解决方案,指导用户如何高效部署和管理Serverless函数。
|
26天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之API生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
37 3
|
2月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
2月前
|
小程序 IDE Serverless
【经验分享】支付宝小程序serverless云开发拓荒
【经验分享】支付宝小程序serverless云开发拓荒
80 0
|
3月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
7678 132
|
3月前
|
弹性计算 Serverless 开发者
Serverless 应用引擎问题之镜像构建失败如何解决
在进行Serverless应用开发和部署时,开发者可能会遇到不同类型的报错信息;本合集着重收录了Serverless环境中常见的报错问题及其解决策略,以助于开发者迅速诊断和解决问题,保证服务的连续性和可用性。
451 2
|
3月前
|
存储 监控 Serverless
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况【1月更文挑战第23天】【1月更文挑战第114篇】
63 5
|
3月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
为了帮助用户高效率、低成本应对企业级复杂场景,函数计算团队正式推出 Stable Diffusion API Serverless 版解决方案,通过使用该方案,用户可以充分利用 Stable Diffusion +Serverless 技术优势快速开发上线 AI 绘画应用,期待为广大开发者 AI 绘画创业及变现提供思路。
87307 4

热门文章

最新文章