最全!即学即会 Serverless Devs 基础入门(下)

在上篇《最全!即学即会 Serverless Devs 基础入门》中,我们阐述了工具链的重要性,并对安装方式 & 密钥配置进行了讲解。但是在 Serverless Devs 的规定中,一个 Yaml 可以被认为是一个 Serverless 应用,因此本文将继续带领各位了解下 Yaml 的使用规范。

Yaml的使用规范

Serverless Devs可以通过指定格式的Yaml对Serverless应用进行描述,在Serverless Devs的规定中,一个Yaml可以被认为是一个Serverless应用。

Yaml的格式需要按照 Serverless Devs 的规范,提供相对应的资源/行为描述文件,且该文件还需要符合以下条件:

  • 拓展名可以是.yaml或.yml
  • 格式必须符合Yaml规范 (https://yaml.org/spec/1.2.2/)

对于需要通过描述文件进行环境隔离的项目,建议将文件命名为 s-${ENV}.yaml 或 s-${ENV}.yml 格式。例如:s-prod.yaml。

在默认情况下,Serverless Devs 开发者工具会默认该描述文件的名称为s.yaml或s.yml,且s.yaml的优先级大于s.yml,即在一个 Serverless 应用下,同时出现s.yaml与s.yml时,系统会优先识别和使用s.yaml。

当然,开发者也可以通过-t,--template [templatePath]进行指定,例如,在某应用在生产环境下的描述文件名为s-prod.yml,则可以在执行相关命令时,增加参数-ts-prod.yml或者--templates-prod.yml。

描述文件格式/规范

关于 ServerlessDevs 所支持的资源/行为描述文件基本格式为:

 

例如,一个相对完整的 Yaml 案例可以是:

 

元数据相关描述

在该格式中:

参数名

代表含义

edition

命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范

name

应用名称

access

秘钥别名,可以使用通过config命令配置的密钥信息,以及配置到环境变量的密钥信息

vars

全局变量,提供给各个服务使用,是一个Key-Value的形式

Service

应用所包含的服务,是一个Key-Value的形式

关于Service参数:

参数名

代表含义

access

秘钥别名,如果和项目的access相同,可省略

component

组件名称

actions

自定义执行逻辑

props

组件的属性值

变量赋值

Serverless Devs的Yaml文件支持多种变量格式:

  • 获取当前机器中的环境变量:${env(环境变量)},例如${env(secretId)}
  • 获取外部文档的变量:${file(路径)},例如${file(./path)}
  • 获取全局变量:${vars.*}
  • 获取其他项目的变量:${projectName.props.*}
  • 获取Yaml中其他项目的结果变量:${projectName.output.*}

服务顺序

如果一个ServerlessApplication模型对应的Yaml文件中有过多的服务,系统会默认分析部署顺序,该部署顺序分为两个步骤:

  1. 分析项目中的依赖关系
  2. 有依赖关系的按照依赖关系从前到后部署,无依赖关系的按Yaml配置的从上到下部署

行为描述

在ServerlessApplication模型对应的Yaml文件中,可以针对服务,提供对应的行为操作,其基本格式是:

 

例如:

 

当ServerlessDevs开发者工具执行到该服务时,会在进行相关的命令之行之前,优先按照顺序执行pre-命令的操作,所有内容完成执行之后,再执行post-命令的操作。

以下面的Yaml为例:

 

当开发者在当前应用下执行了deploy命令,系统将会按照以下顺序进行操作:

  1. 在./backend_src目录下执行s exec -- publish
  2. 在./backend_src目录下执行s build
  3. 调用组件vue-component的deploy方法,并将props和项目的基本信息传入到组件vue-component的deploy方法中
  4. 在./frontend_src目录下执行s clean

以上顺序仅适用于整个流程没有出错的前提下,如果流程出现错误,系统将会进行报错,并终止后续流程的执行。

通过命令操作应用

所谓的自定义命令指的是由组件决定的命令。由于 ServerlessDevs 开发者工具,本身并不具备任何业务相关的能力(值得包括不限于函数的部署、应用的构建、项目的测试等),所以,这些能力都将会由组件提供,通过 ServerlessDevs 开发者工具进行透出。

例如,某应用的资源/行为描述文件如下:

 

通过该 Yaml 文件可以看出以下信息:

  1. 该应用的名字是FullStack,将会使用密钥xxx-account1;
  2. 该应用拥有三个服务:
  • backend服务:使用了django-component组件
  • user—frontend服务:使用了vue-component组件
  • admin-frontend服务:使用了vue-component组件

如果此时django-component组件和vue-component组件支持的自定义命令为:

django-component

vue-component

deploy

支持

支持

remove

支持

支持

test

支持

不支持

则可以通过自定义命令实现应用级操作和服务级操作

1)应用级操作

在当前项目下,可以执行s [自定义命令]实现应用纬度的操作。

  • 执行s deploy或者s remove时,由于backend、user—frontend、admin-frontend三个服务对应的组件,均支持deploy和remove方法,所以此时系统会按照服务的部署顺序,进行三个服务分别对应的组件的deploy或remove操作;此时,系统的exit code为0;
  • 执行s test时,由于user—frontend、admin-frontend两个服务对应的组件并不支持test方法,所以此时系统会执行backend对应组件(django-component)的test操作;此时,系统会对user—frontend、admin-frontend两个服务进行警告,但是并不会报错,最终的exit code为0;
  • 如果在执行相关的命令时,backend、user—frontend、admin-frontend三个服务任何一个服务在执行过程中出现了错误,系统则会报错,并终止下一步的操作,此时,系统的exit code为101;

2)服务级操作

在当前项目下,可以执行s [服务名] [自定义命令]实现服务级操作。

  • 执行s backend deploy等,可以针对服务backend进行deploy相关的操作,如果顺利完成与其操作,系统的exit code为0;否则,出现错误,系统的exit code为101
  • 执行s admin-frontend test是,由于服务admin-frontend对应的test方法是不存在的,此时系统将会认为是未找到组件方法,系统的exit code为100

多种操作模式下的工具体系

众所周之,目前大部分的Serverless开发者工具均是通过Yaml等进行资源描述,少部分的Serverless开发者工具是通过命令行直接操作,无论是通过Yaml进行资源描述,还是通过纯命令行的操作,可以说两者各有各的好处。而在ServerlessDevs开发者工具中,这两者均得以有效的支持。

Serverless Devs 开发者工具从根本上提供了两种使用方法。

  • Yaml模式:需要依赖资源描述文档进行操作的模式
  • Cli模式:可以在任何目录下直接执行,而不需要依赖资源描述文档;

这两者的核心区别是:

  • 如果想要使用 Yaml 模式,在当前目录下,必须要有s.yaml/s.yml文件,或通过-t/--template指定的资源部描述文件;
  • 如果想要试用 Cli 模式,则必须是 s cli 组件名方法参数的格式进行,此时不需要 Yaml 文件;

举一个非常简单的例子,如果有一个应用的资源描述文件s.yaml如下:

 

此时,可以执行s deploy进行myApp应用部署,如果执行s backend-starter deploy则可以进行myApp应用下的backend-starter项目/服务部署。

此时,部署过程中,所需要的相关参数,可以通过该 Yaml 文件进行读取。

但是,在某些情况下,并不方便直接使用 ServerlessDevs 规范的 Yaml 文件(例如,将线上资源同步到本地,或者要将 Funcraft 的 Yaml 转换成为 Serverless Devs 的 Yaml),此时可以选择纯命令行形式,即s cli模式。

在 s cli模式下,由于不会读取 Yaml 等资源描述文件,所以很多参数都需要自行填写,这时的填写方法有两种:

  • 通过 s cli天然支持的 -p/--prop参数,进行相关Yaml 参数的赋值,例如上述案例的s backend-starter deploy,此时可以改写成:
 
  • 通过 demo 组件本身所支持的一些参数,例如通过s clidevsapp/demo -h,可以得到帮助信息,部分内容如下:
 

此时,就可与通过下面的命令实现上述功能:

 

特点对比

模式

使用方法

优势

劣势

适用场景

Yaml模式

在具有符合Serverless Devs规范,且存在资源/行为描述的Yaml文件的应用目录下,执行组件对应的命令,即可直接使用,例如s deploy,s servicename build等

可以一键部署一个完整的应用(例如,某个应用中规定了多个Service,可以通过该命令一键部署);同时,通过资源/行为描述文档,可以更佳简单,清晰的对应用进行描述;

需要学习Yaml的规范,且在某些时候与一些自动化流程进行结合,会比较复杂;

部署、运维等操作,尤其是批量操作时更为合适;

纯Cli模式

在任何目录下,通过子命令cli进行触发,同样适用全部组件,例如s cli deploy -p "{/"function/": /"function-name/"}",s cli fc-api listFunctions --service-name my-service

相对来说可以更加简单,快速上手工具,并且可以非常简单的与自动化流程进行结合,降低了Yaml格式/规范的学习难度

对于一些复杂项目而言,需要在命令行中写过多的参数,出错的概率会比较高;

更适合项目的管理,源自化操作

设计思路

为什么要同时存在 Yaml 模式和 Cli 模式? 因为在长期的实践过程中,发现通过 Yaml 进行资源描述会相对来说更简单和方便,例如 K8S 等也都是通过 Yaml 进行资源描述的;但是,在某些情况下,Yaml 文件也可能成为一种负担,例如想要查看某个服务下的函数列表,查看某个地区下的服务列表,因为这样一个简单的事情要额外的去完成一个 Yaml 文件,就显得过于臃肿,所以,在 Serverless Devs 项目中,同时保留了两种使用方法。 附录

[1]Serverless Devs 社区 GitHub:
https://github.com/serverless-devs/serverless-devs

作者 | 刘宇(阿里云 Serverless 产品经理)

原文链接

本文为阿里云原创内容,未经允许不得转载。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球创见者共话企业韧性 金蝶“数字员工”惊艳亮相

11月11日,由云南省昆明市人民政府、云南省工信厅指导,金蝶集团主办的“2022全球创见者大会”成功举办。大会以“数治企业 韧性成长”为主题,求索不确定时代,如何以“数”治企,用EBC治理和管理企业,实现韧性…

开箱即用!Linux 内核首个原生支持,让你的容器体验飞起来!

容器化是最近几年 DevOps 界流行的趋势,通过业务的容器化我们将创建一个完全打包、自包含的计算环境,让软件开发人员能够更加快速地创建和部署自己的应用程序。然而长期以来,由于镜像格式的限制,容器启动镜像的加载是很慢的&#…

专访快准车服CIO牛小虎:全面信息化支持,让车爱上快准

一、紧跟创业浪潮,年轻的快准团队走在前列 1999年11月,第五届中国国际电源展览会和第二届中国电子变压器展览会在广州成功举办,近150家企业的电源及电子变压器产品争相亮相,这样中国电源产业看到了广阔的前景与市场空间。 电源产…

元宇宙照进现实 金蝶联手科大讯飞发布“数字员工”

“金小蝶,请帮我查一下这个项目资金占用的情况。” 企业管理者话音刚落,包括损益分析、回款分析、资金占用分析等详尽的数据结果便已呈现在其眼前,同时还针对资金异常情况给出了风险评估。在一问一答中,销售总监得到了一个得力的“…

《阿里云代码安全白皮书》5个维度应对3类代码安全问题

摘要:在互联网快速发展的时代,代码是企业最核心的资产,代码安全也是企业资产安全最重要部分;为了保护企业代码安全,各公司使出的手段也是五花八门。阿里云云效联合阿里云的代码安全能力从基础安全、备份与恢复、安全与…

优化搜索排序结果从而“ 提升CTR、CVR业务指标”

案例背景 某导购类电商APP,与淘宝天猫等一线商家合作,亿级商品索引量,类目和子类目多层嵌套,商品有不同子款式和尺码,搜索和筛选需求复杂。通过采用分销券模式,优惠券帮助普通C用户降低了单品价格,分销模式…

阿里CTO程立:首个全面深度用云的天猫双11,更敏捷、更经济、更绿色

“一个全面深度用云的时代正在到来。”在2022天猫双11技术分享中,阿里CTO程立表示,历经双11大规模场景的淬炼,阿里巴巴将云的先进性转变为技术效能的提升,今年阿里整体单位算力成本下降8%,全面用云带来了业务的敏捷创新…

详解异步任务:函数计算的任务触发去重​

前言 无论是在大数据处理领域,还是在消息处理领域,任务系统都有一个很关键的能力 - 任务触发去重的保障。这个能力对于一些准确性要求极高的场景中(如金融等)是必不可少的。作为 Serverless 化任务处理平台,Serverles…

阿里云混合云建管用一体化探索实践 助力政企从容应对数字化转型难题

随着十四五规划强调打造数字经济新优势,将云计算列为数字经济重点产业,明确了以混合云为重点的云服务产业发展路线:“以混合云为重点培育行业解决方案、系统集成、运维管理等云服务行业”,混合云成为产业内众多服务商和政企客户关…

蚂蚁集团升级“绿色计算”,双11期间减排效果同比增长140%

“双11”正在全面进入“晚八点”时代,顺滑体验得力于保障技术的升级。 今年双11期间,蚂蚁集团通过应用“绿色计算”技术体系,有效提高算力、降低服务器需求压力。经中环联合认证中心(CEC)测算,在2022年双1…

如果有一天不做前端了,我会做什么?

毕业后就投身于前端行业,这期间做过业务,做过基建,大前端技术体系下的各个子方向基本都实践过。回过头来看,与刚进入前端行业时相比,对前端行业的认识更清晰了,但也发现困惑更多了,追求的东西好…

深入浅出eBPF|你要了解的7个核心问题

过去一年,ARMS基于eBPF技术打造了Kubernetes监控,提供多语言无侵入的应用性能,系统性能,网络性能观测能力,验证了eBPF技术的有效性。eBPF技术和生态发展很好,未来前景广大,作为该技术的实践者&a…

蚂蚁集团数字科技六大新品发布,以数助实赋能产业数字化

作者 | 伍杏玲 出品 | CSDN 产业数字化作为数字经济的核心引擎,与以往的信息化转型不同,如何通过通过大数据、人工智能、云计算、区块链等技术,实现“从数据中来,到实体中去”的目标,是科技公司一直在思考之事。 蚂…

阿里可观测性数据引擎的技术实践

一 前言 可观测性这个概念最早出现于20世纪70年代的电气工程,核心的定义是: A system is said to be observable if, for any possible evolution of state and control vectors, the current state can be estimated using only the information from…

618 大促来袭,浅谈如何做好大促备战

如何有效利用云产品做好我们的业务大促备战,这是一个大家都比较关心的问题。今天趁着 618 大促来袭前,谈一谈我们所积累的最佳实践。 点击链接,立即查看视频讲解:https://yqh.aliyun.com/live/detail/28697 大促的不确定性挑战 …

以数为基,云启健康未来|“对标世界一流管理——走进一心堂暨生命科学行业峰会”圆满落幕

11月12日,由金蝶软件(中国)(以下简称“金蝶”)主办的2022全球创见者大会之“对标世界一流管理——走进一心堂暨生命科学行业峰会”在云南昆明顺利举办。金蝶携手众多企业经营管理者,业界思想领袖及先锋企业…

Java 应用压测性能问题定位经验分享

什么是压测 压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和和可能存在的隐患。 压测主要用于检测服务器的承受能力,包括用户承受能力,即多少用户同…

异步任务处理系统,如何解决业务长耗时、高并发难题?

当我们构建一个应用,总是希望它是响应迅速,成本低廉的。而在实际中,我们的系统却面临各种各样的挑战,例如不可预测的流量高峰,依赖的下游服务变得缓慢,少量请求却消耗大量 CPU/内存资源。这些因素常常导致整…

将绿色计算进行到底,蚂蚁集团四大硬核黑科技全公开

作者 | 伍杏玲 出品 | CSDN 在红包和优惠券齐飞的热闹气氛下,第14个“双11”正式结束。可能大家意料不到的是,你在买单时,绿色计算为降低碳排放“买单”,打造绿色低碳的双 11。 看到这,你可能有疑问,自…

EasyNLP 带你玩转 CLIP 图文检索

导读 随着自媒体的不断发展,多种模态数据例如图像、文本、语音、视频等不断增长,创造了互联网上丰富多彩的世界。为了准确建模用户的多模态内容,跨模态检索是跨模态理解的重要任务,采用一种模态的数据作为数据,检索另…