当前位置: 首页 > Web前端 > HTML

【知识点】如何快速开发部署Serverless应用?

时间:2023-03-28 01:58:56 HTML

本文将详细介绍如何开发部署Serverless应用,以及通过阿里云函数计算控制台和开发者工具ServerlessDevs初始化部署应用;最后分享应用调试,通过科学发布、可观察性等应用部署运维总结,进而实现从应用初始化到调试、发布、运维的基本流程和核心步骤的探索。一、如何开发部署Serverless应用1、通过控制台创建函数下面我们将基于Serverless架构在FaaS平台上实现Helloworld的输出。基本步骤可分为:1)注册账号并登录;2)找到对应的FaaS产品:阿里云的函数计算;3)点击“创建函数”按钮创建函数;4)配置函数,包括函数名、运行时(可以认为是要使用的编程语言,或者编程环境等);5)完成创建和测试。以阿里云函数计算为例,注册登录阿里云账号后,需要找到函数计算产品,点击进入产品首页,如图:阿里云函数计算产品首页,选择左侧的“服务和功能”,创建一个服务,如图。阿里云函数计算创建服务页面,然后创建函数,如图。与其他云平台相比,在阿里云函数计算平台上,在阿里云函数计算平台上,我们不仅需要为要创建的函数设置函数名称和选择运行时,还需要设置函数所在的服务位于。在阿里云函数计算体系中,引入服务的概念会带来一定的好处:相关的函数可以归类到一个服务下,其实比标签分类更直观、更清晰。相关功能在同一个服务下共享某些配置,比如VPC配置、NAS配置,甚至一些日志仓库配置。通过服务,我们可以很好地划分功能环境。比如一个相册项目,这个项目可能有线上环境、测试环境和开发环境。那么我们可以在服务层面进行区分,也就是可以设置album-release,album-test和album-dev这三个服务进一步隔离环境。通过服务,我们可以很好地容纳功能。如果项目比较大,可能会产生很多功能,放在同一层会很混乱。这时候可以使用服务进行有效存储。创建函数后,我们可以编辑代码。阿里云函数计算支持从对象存储上传代码、直接上传代码包、在线编辑。另外,阿里云函数计算还支持直接上传文件夹,如图。保存代码后,您可以点击“执行”按钮来触发和测试功能。可以看到系统有输出相关日志:Helloworld。至此,一个非常简单的函数就创建成功了。2.通过工具创建和部署功能通过serverless开发者工具开始serverless应用的开发、部署和运维是非常方便的。我们将以ServerlessDevs为例介绍阿里云函数计算应用的部署,以及在工具端创建函数。、部署和其他相关功能。ServerlessDevs是一个开源的Serverless开发者平台,致力于为开发者提供强大的工具链。通过该平台,开发者可以一键体验多云Serverless产品,快速部署Serverless项目。根据目前官方描述,ServerlessDevs已经支持了AWSLanbda、阿里云函数计算、百度智能云函数计算、腾讯云函数、华为云函数工作流等多家云厂商的Serverless相关产品。下面我们使用ServerlessDevs开发者工具,以阿里云函数计算为例,实践探索如何创建和部署Serverless应用。1)安装ServerlessDevs开发者工具(执行npminstall-g@Serverless-devs/s命令)。2)设置阿里云凭证信息(执行sconfigadd--AccessKeyIDAccessKeyID--AccessKeySecretAccessKeySecret--AccountIDAccountID命令)。3)创建模板工程(执行sinitnode.js12-http-dfc-hello-world-demo命令),初始化流程如图。通过ServerlessDevs创建项目图4)进入项目目录(执行cdfc-hello-world-demo命令),部署(执行sdeploy命令),部署后的结果如图。通过ServerlessDevs部署项目项目部署成功后,可以进行更多的操作,如下,触发函数(执行sinvoke命令),结果如图。使用ServerlessDevstrigger功能查看在线功能详情(执行sinfo命令),结果如图。通过ServerlessDevs查看功能详情ServerlessDevs也有比较完善的桌面客户端。开发者可以通过桌面客户端创建和管理应用,使用相关的配套功能。例如查看应用列表,快速创建应用,如图。通过ServerlessDevs桌面客户端查看应用列表创建应用后,可以对应用进行管理。下图是ServerlessDevs桌面客户端管理应用界面。通过ServerlessDevs桌面客户端使用管理应用的其他配套功能如下。图为一键压测功能的性能表现。使用ServerlessDevs桌面客户端一键测试函数性能,一键调试函数资源,如图。使用ServerlessDevs桌面客户端一键调试函数资源,一键查看函数的多维指标信息,如图。通过ServerlessDevs桌面客户端一键查看功能多维指标信息此外,ServerlessDevs还有更方便的Yaml可视化配置功能,如下图所示。通过ServerlessDevs桌面客户端进行Yaml可视化配置二、如何调试Serverless应用在应用开发过程中,或者应用开发完成后,当执行结果不符合预期时,通常需要进行一定的调试。然而,在Serverless架构下,调试往往会面临很大的挑战,尤其是在受限于环境因素的情况下。通常,会出现这样一种情况:本地开发的应用可以正常运行,符合预期,但在FaaS平台上却出现了一些不可预知的问题;或者在一些特殊的环境下,没有办法在本地模拟线上环境,很难调试应用。Serverless应用的调试一直饱受诟病,但各家云厂商并没有放弃在调试方向上的深入探索。下面我们介绍几种方法。一、在线调试(一)简单调试所谓简单调试,就是在控制台上进行调试。以阿里云函数计算为例,您可以通过控制台的“代码执行”按钮进行基本的调试,如下图所示。函数计算代码编辑页面也可以在需要的时候通过设置Event来模拟一些事件。在阿里云函数计算事件页面在线调试的好处是可以使用一些在线环境进行代码测试。当线上环境有VPC等资源时,在本地环境调试起来比较困难。(2)断点调试除了简单的在线调试,一些云厂商还支持断点调试,比如阿里云函数计算的远程调试。我们以阿里云函数计算的远程调试为例,可以通过控制台实现函数的在线调试。函数创建完成后,可以选择远程调试,点击“启用调试”按钮,如图。在函数计算远程调试页面开启调试后,稍等片刻,系统会进入远程调试界面,如图。当出现函数计算远程调试启动页面时,出现下图所示界面,我们就可以进行断点调试了。函数计算远程调试断点调试页面2.端云联调在本地开发Serverless应用时,经常会涉及到一些线上资源,比如通过对象存储触发器触发函数执行,通过VPC访问数据库等。与离线环境的不一致会让离线开发调试面临很大的挑战。ServerlessDevs开发者工具通过构建代理辅助功能,连接线上线下资源,可以快速帮助开发者在本地开发和调试应用。这种调试方式称为端云联调。如下图所示,ServerlessDevs开发者工具会基于Yaml配置文件创建辅助服务和辅助功能,通过辅助服务和辅助功能打通线上线下资源,完成端云联合调试。ServerlessDevs端云联调原理示意图ServerlessDevsDeveloper工具会根据Yaml配置文件的内容创建辅助服务和辅助功能(辅助服务与Yaml中声明的业务服务配置一致)。辅助功能(FunctionComputeC)通过触发器(包括通过SDK、API、sproxiedinvoke命令或其他触发器)触发,请求流返回本地调试实例(本地环境A)。这时候本地的调试实例(本地函数执行环境容器接收到的事件和上下文)实际上是从线上来的。本地调试实例(本地环境A)可以直接访问如下内容:VPC内网资源,如RDS、Kafka内网地址等;一些云服务内网地址;硬盘挂载服务(直接接入NAS)。端云联调流程如下:1)执行sproxiedsetup命令,准备端云联调所需的辅助资源和本地环境;2)对于普通的事件函数或者没有触发器的HTTP触发器,准备完成后,再启动一个新终端,切换到项目路径下,执行sproxiedinvoke命令调用本地函数;3)完成调试任务后,执行sproxiedcleanup命令,清理端云联调所需的辅助资源和本地环境。除了通过命令使用端云联调功能外,我们还可以使用VSCode开发者工具中的端云联调功能,如图。使用VSCode3端云联调功能远程调试端云联调有本地通道服务容器和函数计算容器执行本地函数;远程辅助功能只是将远程流量发送到本地。在实际调试过程中,需要登录实例对项目进行调试。这时,你可以选择使用远程调试。与端云联调相比,远程调试本地只有一个通道服务容器,执行过程完全依赖线上;远程函数返回执行结果。远程调试的整体架构示意图如图所示。除了通过上图远程调试架构图所示的通道服务登录线上环境进行代码调试或问题定位,部分云厂商还提供了直接登录实例进行代码调试的功能。以ServerlessDevs为例,在使用阿里云函数计算时,我们可以直接通过instance命令登录在线实例。实例登录命令虽然提供了便捷的登录体验,可以帮助用户解决复杂场景下的应用异常定位等问题,但用户登录实例后,无法通过功能日志和监控指标直接定位问题,需要通过例如,使用coredump。、tcpdump、jmap和其他用于深入故障排除的工具。例如,某用户最近发现自己的在线程序出现了一些功能错误提示,报错内容为连接远程服务超时。用户怀疑功能实例与远程服务之间的网络连接不稳定,于是想进入实例分析一下实例与远程服务之间的网络情况。此时,我们可以按照以下步骤进行问题排查。1)如图所示,登录实例后,需要执行apt-getupdate和apt-getinstalltcpdump这两条命令安装tcpdump工具。示例登录及软件安装效果图2)安装完成后,执行tcpdump命令抓取远程服务IP的请求,并将抓包结果保存在tcpdump.cap文件中。3)抓包后,使用OSS命令行工具ossutil64将tcpdump.cap文件上传到自己的OSS,然后下载到本地使用分析工具Wireshark进行分析。4、本地调试(1)命令行工具大多数FaaS平台都为用户提供了比较完善的命令行工具,比如阿里云的Funcraft,也有一些开源项目比如ServerlessFramework、ServerlessDevs等支持多云厂商的FaaS平台。通过命令行工具调试代码的方法非常简单。以ServerlessDevs为例,阿里云函数计算本地调试方法如下:首先确保本地有函数计算项目,然后在项目下执行调试命令,比如在Docker中调试,如下图.通过命令行本地调试(二)Editor插件以VSCode插件为例,下载阿里云函数计算的VSCode插件,并配置账户信息,在本地新建一个函数,执行断点点后调试,如图所示。在编辑器插件中调试五、其他调试方案(一)web框架本地调试以Python语言Bottle框架为例,如果在阿里云FaaS平台上开发传统的web框架,可以添加如下内容code:app=bottle.default_app()并限制run()方法(ifname=='__main__'):if__name__=='__main__':bottle.run(host='localhost',port=8080,debug=真)例如:#index.pyimportbottle@bottle.route('/hello/')defindex(name):返回“Helloworld”app=bottle.default_app()if__name__=='__main__':bottle.run(host='localhost',port=8080,debug=True)和传统的开发思路一样,我们可以在本地开发,在本地调试。在线部署时,只需要在入口方法处设置index.app即可实现平滑部署。(2)本地模拟事件调试对于非web框架,可以在本地构建一个方法,例如调试对象存储触发器,代码如下:importjsondefhandler(event,context):print(event)deftest():event={"events":[{"eventName":"ObjectCreated:PutObject","eventSource":"acs:oss","eventTime":"2017-04-21T12:46:37.000Z","eventVersion":"1.0","oss":{"bucket":{"arn":"acs:oss:cn-shanghai:123456789:bucketname","name":"testbucket","ownerIdentity":"123456789","virtualBucket":""},"object":{"deltaSize":122539,"eTag":"688A7BF4F233DC9C88A80BF985AB7329","key":"image/a.jpg","size":122539},"ossSchemaVersion":"1.0","ruleId":"9adac8e253828f4f7c0466d941fa3db81161****"},"region":"cn-shanghai","requestParameters":{"sourceIPAddress":"140.205.***.***"},"responseElements":{"requestId":"58F9FF2D3DF792092E12044C"},"userIdentity":{"principalId":"123456789"}}]}handler(json.dumps(event),None)if__name__=="__main__":print(test())这样通过构造一个事件对象,就可以实现模拟事件触发3.依赖安装通过开发者工具Serverless架构下的应用开发和传统架构下的应用开发有很大区别,两者的内容维度不同,比如在理想状态下,前者不需要人付费关注服务器等底层资源。但是在如今的serverless开发阶段,serverless架构下的应用开发真的需要人们格外关注服务器吗?其实不然。虽然serverless架构强调noservermind,在实际生产中,有很多依赖关系。它不能跨平台使用。比如Python语言中的一些依赖需要二进制编译,这跟操作系统和软件环境有比较大的关系。在一致的环境中安装依赖项、打包代码或部署项目。阿里云函数计算对自己的线上函数环境有更详细的描述,并提供了相应的文档,如C、C++、Go等。执行文件需要兼容函数计算的运行环境。函数计算的Python运行环境如下。Linux内核版本:Linux4.4.24-2.al7.x86_64。Docker基础镜像:dockerpullpython:2.7;dockerpullpython:3.6但是在实际的应用开发过程中,依赖打包仍然是很多开发者头疼的问题。他们在很多Serverless应用的开发中都会面临类似的挑战:项目在本地可以正常运行,但是一旦发布到线上就找不到某个依赖,但实际上依赖是存在的。这时候,问题定位就变得非常重要了。困难的事情。目前Serverless应用安装依赖或者工程构建一般有3种方式:1)本地创建工程后,根据云厂商提供的环境数据自行搭建线上环境,然后安装依赖。这种方法相对自主可控,但难度很大,操作繁琐。2)使用已有的开发者工具安装依赖,如图:通过工具安装依赖。以ServerlessDevs开发者工具和阿里云函数计算产品为例,开发者只需要根据语言习惯准备相应的语言即可。相关的依赖安装文件就够了,比如Python语言的requirements.txt,Node.js语言的package.json等,然后在当前项目下,执行sbuild--use-docker命令完成依赖的安装与阿里云函数计算平台线上环境一致。以Python项目为例,开发者只需在项目目录下完成以下操作:开发源代码;执行sbuild–use-docker命令后,根据requirements.txt文件自动下载相应的依赖到本地,并与源码一起形成Delivery;执行sdeploy命令对整个交付进行打包,创建函数,并设置依赖包的环境变量,使得函数可以直接输入对应的代码依赖包。3)目前部分云厂商的FaaS平台控制台支持WebIDE。阿里云的WebIDE具有命令行程序的实现能力,所以也可以直接在控制台的WebIDE中安装依赖。在线安装依赖关系图如图:在线安装依赖关系图