众所周知,随着时间的发展,Serverless 命令行工具也逐渐的玩出了更多的花样,就目前来看,常见的形态有两种,一种是通过 Yaml 来进行资源的描述,另外一种是纯粹的命令行操作,而不依赖这些内容。

第一种通过 Yaml 来进行资源描述,其好处不言而喻,目前主流的 Serverless 开发者工具均是类似的模式,例如阿里云的 Funcraft,著名的开源项目 Serverless Framework 等,通过 Yaml,使用者可以通过简单的命令,进行复杂的操作,例如开发者在 Yaml 中描述好服务、函数等配置,描述好代码位置,只需要 deploy 就可以将本地项目部署到线上,非常方便。但是这里有一个非常明显的劣势,在很多时候我们的企业管理者,给每个人分配的权限是固定的,例如运维人员只能更新某些内容,开发人员只能更新某些代码,某些负责可以发布版本等,那么这个时候”一把梭”的行为就显得非常尴尬,想为开发者做更多,但是有些开发者不需要你做更多,那么”高阶能力”和”原子能力”的平衡就显得至关重要的。

第二种模式,虽然是不需要依赖 Yaml,在很多时候使用起来可能会稍微复杂一些,例如我们创建一个函数可能涉及到很多流程:创建服务,创建函数,创建触发器…,相对比上面所说的一条指令而言,确实复杂很多,但是这种无 Yaml 的模式,更适合做原子操作,可以最大程度解决上述问题,同时这种做法也可以在一定程度上进行更多的拓展,例如某些本不需要依赖 Yaml 的行为:查询服务列表,查询函数列表……

所以这两种模式各有优缺点,我们在使用的时候完全可以组合来使用,达到最大的一个生产效能。那么一个新问题来了,以阿里云函数计算为例,如何同时拥有这两种模式的使用方法呢?

其实 Serverless Devs 天然支持 Yaml 描述和非 Yaml 描述的能力,例如阿里云函数计算的 FC 组件就是一个可以依靠 Yaml 描述进行资源操作的组件,而 FC-API 组件则是 API 相关的原子性操作。

本文将会以这样一个案例/场景为例,为读者介绍这两者的使用方法:

1.通过 Serverless Devs 快速创建一个服务/函数/触发器
2.通过无 Yaml 的模式对其中的代码部分进行单独的更新
3.更新之后发布一个版本
4.通过 Git+Github Action 实现一个代码自动化发布和版本自动化发布的能力

快速创建函数

我们只需要通过s init并且选择阿里云函数计算的 Python3 Http 函数即可:

创建完成之后,我们只需要进入到对应的文件夹,并且执行s deploy,即可将项目快速部署到线上。在进入到项目后,我们可以在项目下看到一个s.yaml的文件,这个文件就是资源描述文件:

其完整的描述:
https://github.com/devsapp/fc/blob/main/docs/Others/yaml.md
此时我们可以通过s deploy进行项目的部署:

部署完成,我们可以打开系统分配给我们的域名,我们可以看到内容:

通过无 Yaml 模式更新函数

我们可以编辑index.py,将Hello world!变为Hello world Serverless Devs!

然后我们就要接触一个新的组件 FC-API :
https://github.com/devsapp/fc-api
我们可以执行帮助文档:s cli fc-api -h:

此时我们需要明确的是,当我们执行s cli的时候,系统就不去读 Yaml,而直接进行相关方法的调用。

如果我们对这个方法还是不清楚,我们可以:s cli fc-api updateFunction -h

此时我们只需要按照规范,填写好地区,服务名,函数名,以及要更新的字段即可:

s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-trigger-function--code '{"zipFile": "./"}'

完成之后,我们可以再去看一下之前的页面是否同步更新了:


此处可能有疑问,你的帮助文档写的是:–code string [JSON String] The code of the function. The code must be packaged into a ZIP file.你是怎么知道传递–code '{“zipFile”: “./”}'的?

因为在我们看帮助文档的时候,题已经提醒了我们这是一个 JSON String,同时在帮助文档最上面是有链接地址:
_```Usage

 s cli fc-api updateFunctionAPI Document: https://help.aliyun.com/document_detail/189986.htmlOptions--region stringThe region of fc endpoint.
--access stringSpecify the key name.
--props stringThe json string of props.
--serviceName stringThe name of the service.
--functionName stringThe description of the function.
--code string[JSON String]The code of the function.The code must be packaged into a ZIP file.
>此时,我们可以打开 https://help.aliyun.com/document_detail/189986.html:![image](https://img-blog.csdnimg.cn/img_convert/8637cf368aa84e041dd53cec20aae78d.png)![image](https://img-blog.csdnimg.cn/img_convert/16edc45aedcd8a1891456a33258820e9.png)>此时为了方便,Serverless devs 支持本地路径,会帮助你进行打包等操作。当然,我们还可以更刺激一些,修改其他内容,如单纯修改一些 timeout:

s cli fc-api updateFunction —region cn-hangzhou —serviceName fc-deploy-service —functionName http-trigger-function —timeout 70


![image](https://img-blog.csdnimg.cn/img_convert/228762a2963eb779772c4867c276b38f.png)## 通过无 Yaml 模式发布版本和上面一样,我们可以用`s cli fc-api -h `查看一下版本发布的方法:`s cli fc-api publishVersion -h`![image](https://img-blog.csdnimg.cn/img_convert/463ff083ae9096882521522fa2ff0b27.png)尝试拼接参数:

s cli fc-api publishVersion —region cn-hangzhou —serviceName fc-deploy-service —description “This is a test version”


得到结果:![image](https://img-blog.csdnimg.cn/img_convert/ef8a2bc25023d7fb0337428121da67d7.png)## CI/CD 组件的使用当我们想要把上面只更新代码,发布版本的能力集成到 CI/CD,或者某些自动化流程中,如何操作呢?以 GithubAction 为例,我们可以直接执行`s cli cicd`:![image](https://img-blog.csdnimg.cn/img_convert/7a8a842db8a7df79f5fbf440277da745.png)接下来,我们对`./.github/workflow/serverless-devs.yml`进行自定义编辑:```yaml
name: Serverless Devs Project CI/CDon:push:branches: [ master ]jobs:serverless-devs-cd:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: actions/setup-node@v2with:node-version: 12registry-url: https://registry.npmjs.org/- run: npm install- run: npm install -g @serverless-devs/s# 默认密钥配置指令是阿里云密钥配置指令,更多可以参考:# 如何通过 Github Action使用Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage# Serverless Devs 的官网是通过 Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice- run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default- run: s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-trigger-function --code '{"zipFile":"./"}'- run: s cli fc-api publishVersion --region cn-hangzhou --serviceName fc-deploy-service

我们只是在最后加了两个人 run,一个是发布代码,一个是发布版本,此时我们可以创建一个 Github 仓库,尝试一下:

创建完成之后,我们可以按照案例提醒,进行密钥的配置:

# 默认密钥配置指令是阿里云密钥配置指令,更多可以参考:
# 如何通过 Github Action 使用 Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage
# Serverless Devs 的官网是通过 Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice


接下来, 我们通过 git init 等一系列指令,完成代码推到仓库:

此时,我们再次修改代码:

修改完成之后,我们将代码 push 到测试仓库,可以看到,我们在 Action 中可以看到一个 workflow 在执行:

稍等片刻,当这个流程完成:

我们打开之前的页面,可以看到,网页内容已经顺利被更新:

总结

本文以阿里云为例,通过在 Github 上使用 Servelress Devs 单纯对代码进行更新,并进行版本发布,该流程是比较常见的,也是比较通用的,希望读者可以发挥想象力,将这个流程应用到自己的项目中。

(原文作者 | Anycodes 文章转载自 Go Serverless)

Serverless Devs 参与的贡献

Serverless Devs 的开源为国内外开发者提供了 Serverless 工具的新选择,让开发者可以以更短的路径体验到多云 Serverless 产品,以更快的速度创建和部署 Serverless 应用,以更简单和更自动化的方法进行项目管理/运维,未来期待更多开发者参与共建。

目前代码已经在 Gitee(码云)和 GitHub 上正式开放:

  • Github 地址:
    https://github.com/serverless-devs
  • Gitee 地址:https://gitee.com/organizations/serverless-devs/projects
  • Serverless Devs 官网:
    https://www.serverless-devs.com

只更新代码,然后发布版本:基于 Serverless Devs 原子化操作阿里云函数计算相关推荐

  1. 基于阿里云函数计算实现需要用到超大依赖包的 Python 无服务器计算

    文章目录 引言 一.阿里云函数计算是什么? 开发流程 函数计算的触发调用 函数计算运行实例的生命周期 二.示例应用的架构及简介 三.具体开发部署步骤所遇到的坑和~~避坑指南~~ 坑1. 超大依赖包的部 ...

  2. 独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

    作者 | 杨丽 来源 | 雷锋网(ID:leiphone-sz) Serverless 其实离我们并没有那么遥远. 如果你是一名互联网研发人员,那么极有可能了解并应用过 Serverless 这套技术 ...

  3. 跨越行业绊脚石,阿里云函数计算发布 7 大技术突破

    作者|望宸 等 Serverless 的本质是通过屏蔽底层的计算资源,来实现业务层开发的专注度和自由度.但越是往上抽象,云厂商在底层的实现就越是复杂.函数计算将服务进一步拆分到函数的颗粒度,这势必会给 ...

  4. Serverless 实战 —— 阿里云函数计算配合SpringBoot项目

    阿里云函数计算配合SpringBoot项目 DecentAnt 2019-06-24 15:16:13 浏览2862 作者:DecentAnt 首先要弄清楚,阿里云的函数计算项目和SpringBoot ...

  5. [SAE] [FC] 阿里云 Serverless 产品横行对比: 应用引擎与函数计算

    欢迎加入 Spring cloud 交流群: 617143034 文章目录 简介 对比 参考 推广 简介 本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengch ...

  6. Spring Boot Serverless 实战系列“架构篇” | 光速入门函数计算

    作者 |:西流(阿里云函数计算专家) Spring Boot 是基于 Java Spring 框架的套件,它预装了 Spring 一系列的组件,开发者只需要很少的配置即可创建独立运行的应用程序. 在云 ...

  7. 微信小程序连接物联网(三):微信小程序远程遥控宿舍开门 基于NodeMCU通过MQTT协议连接阿里云物联网平台

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  8. 重磅发布 | 阿里云视图计算,边缘计算的主“战”场

    简介: 云计算情报局第10期,阿里云产品专家云觉对新产品--视图计算的产品设计背景.产品功能以及应用场景和价值进行了全面的在线揭秘,带领网友探索全新"视"界. 近日云计算情报局第1 ...

  9. Java实现操作阿里云OSS云存储详解,含配置和完整代码

    最近使用java代码操作阿里云存储,分享给大家 目录 1.OSS云存储配置 2.获取accessKeyId和accessKeySecret 3.编写SpringBoot代码 3.1pom.xml文件引 ...

最新文章

  1. 2022-2028年中国阻燃纤维行业市场研究及前瞻分析报告
  2. 启用Windows 7/2008 R2 XPS Viewer
  3. AWS — AWS 上的 5G 网络
  4. Java学习之while语句
  5. 如何查看python安装位置图_怎么查看python安装路径
  6. java主要开发哪几类程序,开发与运行Java程序需要经过的主要步骤为:(多选)
  7. 基于threejs的商场楼层展示导航系统源码_便民措施再升级就诊无需问路!我院“智能导航系统”正式上线啦!...
  8. awk获取+sed替换+paste命令追加一列
  9. SwipeRefreshlayout+RecyclerView+binding实现上拉和下拉刷新
  10. 杨振宁讲(经典)数学笑话兼论数学和物理的关系
  11. fast-rcnn win10 tensorflow部署
  12. Redis夺命连环11问
  13. 链表C++ | 根据 位置 / 值 删除节点_2
  14. ppt flash倒计时器_央视都在分享的9个PPT小技巧 帮你搞定职场烦心事
  15. 蓝牙BLE芯片PHY6222之SPI驱动ST7789
  16. 洛谷P1725 琪露诺
  17. vsftpd 操作手册 - 完整版
  18. 供应链金融的三种业务模式
  19. 我的世界红石计算机教程1,《我的世界》红石电脑制作原理及使用教程
  20. android无法启动adb服务,android – 初始化ADB时出错:无法创建调试桥:无法启动ADB服务器...

热门文章

  1. Win测试——使用Spy++获取窗口标题
  2. [C++优先队列模板应用一] 哈夫曼树
  3. AndroidStudio打包生成apk
  4. 完美解决 IDEA plugins 插件搜索不出结果
  5. 从持续交付看敏捷开发的自相似性(敏捷开发的心跳)
  6. extjs FormPanel更改为普通表单提交,提交到iframe显示
  7. 表达式for loop
  8. 接口参数,get和post
  9. 学c语言做练习之文件
  10. Hadoop Ambari 安装