文章图片
serverless-devs 是一个开源的 Serverless 应用全生命周期管理工具 。
笔者作为一名 Serverless 应用开发者 , 对国内的阿里云FC , 腾讯云SCF都有一定的了解 。 接下来我将在此文中介绍: 如何使用这个工具 , 来把同一个应用 , 通过不同的方式 , 部署到阿里云函数计算中 。
文章中使用的示例项目为一个 nestjs 应用 , 运行环境为 nodejs , 源代码见附录 。 这三种部署方式 , 由于部署目标平台都为阿里云 , 统一使用 。
预置 Runtime 部署
这个部署方式是最简单直接的 , 假如你只是想搭建一个简单的 web service 或者处理做一些 batch job , 不需要依赖一些额外的系统库或者软件 , 往往使用这个方式部署就够了 。 主要的 yml 配置也很简单:
function: runtime: nodejs14 # 运行环境 handler: index.handler # 函数入口
这种方式最大的特点 , 就是 runtime 需要从预置的枚举值中配置一个具体值 , 比如 nodejs12nodejs14python2.7python3java8java11php7.2dotnetcore2.1 等等 。 一旦你指定了具体的运行时 , 那么函数动态扩容伸缩所使用的镜像就已经确定了下来 。 接下来就是把你的代码放入镜像创建容器中 , 去执行了 。 此时就需要 codeUri 和 handler 这些配置项了 , 用它们来指定 , 执行代码入口 。
同时除了对外暴露的 handler 中的代码会被执行外 , 在 。 就以 initialize 这个回调方法名为例 , 我们在函数配置中设置函数的 Initializer 回调程序为 index.initialize , 那么 exports.initialize 这个方法会在实例初始化时被执行 , 其他生命周期亦然 。
Custom Runtime 部署
自定义运行环境部署 , 与预置 Runtime 部署方式 , 最大的特点就是可自定义语言和运行时了 。
我们为啥需要这种部署方式?当然是因为预置的 Runtime 不够用了 。 通过这种方式 , 我们可以自定义运行时的语言和版本 。 比如使用 rust 和 nodejs2048 。 而它主要的 yml 配置也很简单:
function: runtime: custom # 运行环境(从预置的枚举值中选一个) caPort: 9000 customRuntimeConfig: # 不用这个就用 bootstrap 文件 , 示例见附录 command: - /code/node-v16.15.0-linux-x64/bin/node args: - 'dist/main.js'
其中 customRuntimeConfig 中声明了启动命令和参数 , 直接执行便可 。
需要注意的是 , 这种部署方式 , 需要你上传运行环境的解析器/运行时 , 再和你的代码文件 , 一起打包部署到函数计算 。 这往往很大 , 比如我下载的 node-v16.15.0-linux-x64 解压后足足有 100M , 所以可以找一种方式来复用运行时的包来加快你的部署速度 。
Custom Runtime 部署这种方式 , 要求你的代码是一个 HTTP Server 并监听指定的 caPort 端口 。 而且你的也是由 HTTP Server 中指定路由来完成的比如 /initialize /pre-freeze/pre-stop 这类 。
总的来说 , 它比起 预置 Runtime 部署 有了更多的可操作性 , 相比来说它的速度也差一些 , 毕竟代码包的体积变大了 , 每次都要下载解压 , 这个速度肯定是慢一点的 。 所以灵活的代价无非就是性能差一点 , 我们在选择部署方式的时候也要根据情况 , 斟酌损益 。
- 小时候|华为p50系列手机巧用这几个功能,轻松教会长辈、玩转数字生活
- 巧用鸿蒙操作系统,轻松教会长辈玩转数字生活
- 摩托罗拉|moto大事还有4天发生,这次准备玩转环保!
- bin|还没学会Python?这份学习资料包让你玩转Python,赶快收下
- 自媒体|分享,这些干货告诉你新手如何玩转自媒体,你也能一个月1w+
- 股票|强制员工五一加班背后:中青宝董事长一边蹭热点 一边减持
- 颠覆囤鲜想象 海信真空冰箱玩转“大容量”
- 让大众汽车变得更“有趣”,CARIAD中国要“玩转”智能化
- 本文转自:中国消费品质量安全小时候|超全投屏教程,轻松玩转多屏共享
- 欧科云链推出链上天眼2.0 个人用户玩转区块链的“护身符”