函数的开发与配置|学习笔记

本文涉及的产品
文件存储 NAS,50GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
函数计算FC,每月15万CU 3个月
简介: 快速学习 函数的开发与配置

开发者学堂课程【从 0 入门函数计算:函数的开发与配置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/645/detail/10722


函数的开发与配置


内容简介:

1.基本概念

2.开发流程

3.操作演示


1、基本概念

1)服务

服务是函数计算资源管理的单位。

Ø 同一服务下有很多函数。

Ø 这些函数共享服务配置:网络配置、权限配置、NAS 配置、SLS 配置。

服务可以对应于一个微服务的概念,这个微服务可以由和很多函数共同组成,这些函数具有相同的访问权限,网络配置,日志也会记录到相同的 local store 里面去。这些函数本身的配置可以各不相同,比如说同一个服务下面有的函数内存为 3G,有的函数内存为 512M,有的函数用 python 写,有的函数用另一种语言写。如果应用比较复杂,同一个应用可以对应多个服务,没有强制的绑定关系。

2)服务配置

Ø 日志配置 LogConfig:设置日志服务的日志项目和日志仓库,用于存储和分析函数运行的日志。

开发者的代码在函数计算平台运行,如何查看函数运行产生的日志呢?

在 ESC 上或者是在传统的服务器上开发,日志都会打到统一的文件里面,通过日志收集工具收集到用户自己的 elastic search 中,并且通过可视化工具来查看日志或者指标。但是函数计算里面运行代码的机器是由函数计算动态分配的,开发者无法自己收集日志了。函数计算需要帮助开发者投递日志,日志配置就是起到这个作用。

配置 LogConfig,设置日志服务的 project 和 logstore,函数计算会将函数运行中产生的日志投递到开发者的 logstore 里面。但是为了成功投递日志,单单配置logstore 还不够,函数计算是没有权限向开发者的 logstore 里面投递日志的,还需要开发者授予函数计算向指定的 logstore 到写数据的权限,有了这个权限以后,函数计算就可以名正言顺的向开发者的 logstore 投递日志了。

总结一下,日志配置就是为了让用户有一个地方配置他的 logproject 和 logstore,然后允许函数计算向这个里面去投递函数日志,然后用户可以在 logstore 里再做一次进一步的分析。

Ø 文件存储配置 NASConfig:配置 NAS,让函数访问 NAS 文件系统时如同访问本地文件系统一样。

函数计算的每个函数都是独立的,都在不同的执行环境里运行。执行环境可以把它理解成是一个容器,如果用户有一些公共文件,希望多个函数共享怎么办呢?

在传统的开发方式中,那就是将公共文件放到磁盘里面,各个函数都去磁盘里面同一个位置读,但是函数计算的机器还是动态分配的,同一个函数的不同实例可能不在同一个主机上面,开发者也没有办法将这些文件存入磁盘,因为这个机器是函数计算的,那怎么办呢?

为了解决这个问题,函数计算推出了挂载 NAS 的功能,在服务中挂载了 NAS 函数,就可以像访问本地文件系统一样访问 NAS 的文件了,用户可以在 NAS 的控制台上去对文件进行操作。

Ø 网络配置:配置函数访问公网、配置函数访问指定 VPC。

网络配置顾名思义就是设置网络的访问能力,就是函数的网络访问能力。主要有两种。

一个是函数中是否可以访问公网,有的他不希望访问公网,因为产生一些预期之外的公网流量费用,然后这函数计算在这里设置了一个开关,默认是开启的,如果不需要访问公网就可以关闭开关。

另一个是函数是否可以访问指定 VPC,VPC 是专有网络,专有网络中的数据比较机密,是不能通过公共网络访问的,如果需要通过函数访问VPC的资源,那就需要授予函数计算访问指定 VPC 的能力。

Ø 权限 Role:

授予函数计算执行函数所需的权限:授权函数计算服务使用您的日志服务的权限、授权函数访问其他云资源的权限

函数计算和云上很多服务都会产生交互。阿里云有非常严格的权限限制,函数计算是没有能力访问开发者的其他云资源的。当开发者需要函数计算访问其他云服务的时候,就需要显示的授予函数计算权限。权限主要有两个应用场景。

一个是授予函数计算访问其他服务的权限,比如说授权函数计算访问开发者的日志服务。

另一个是授权函数可以访问开发者的云资源,

3)函数

Ø 函数是管理、运行的基本单元。

Ø 通常由一系列配置可运行代码包组成。

函数计算中函数是核心概念,函数是管理和运行的基本单元,函数通常有一系列的配置和一个可运行的代码包组成。

Runtime 是函数运行时的环境类型,函数目前支持 Python、PHP 等开发环境,同时也支持 custom run time,允许用户来建立运行环境。

Code 是函数代码包,函数计算的后端是指认代码包的,各个开发工具会自动帮助你打包,比如您可以在控制台上编写代码,控制台会将这些代码自动打包,然后给你为您创建函数或者更新函数,你也可以在本地编写函数或者调试函数,通过我们的部署工具部署到函数计算,

代码包中主要是有代码以及代码所需要第三方依赖。比如说你的代码当中用到了一些第三方的库,也需要将第三方的库和代码一同搭到这个代码包里面。

Handler 是入口函数,就是你告诉函数计算入口函数的位置,

Timeout 是函数的超时时间,如果函数计算执行超过了这个时间,函数就会被强制停止执行。

Memorysize 是函数分配的执行环境的内存,目前的取值范围是 128 兆到 3G,如果函数耗用的内存超过分配的内存就会 oin 掉。

initializer 叫做初始化函数,Initializer 中的逻辑就是在第一次分配执行环节中来执行的,

并且保证同一个执行环境执行且执行一次。基于这个特性,就是同一执行环境中执行起且只执行一次的特性,我们就可以将一些建立连接,加强依赖这些耗时的操作放到 initializer 里面来执行。

Initializertimeout 就是 initializer 函数的最大执行时间。

4)触发器

触发器是触发函数执行的方式。

Ø 在事件驱动的计算模型中,事件源是事件的生产者,函数是事件的处理者。

Ø 触发器提供了一种集中、统一的方式来管理不同的事件源。

Ø 当事件发生时,如果满足触发器定义的规则,事件源会自动调用这个触发器所对应的函数。

使用场景示例

Ø 对上传的 OSS 当中的对象进行处理

Ø 对 SLS 中日志进行清洗、处理、转存

Ø 在指定时间触发函数执行

5)版本

Ø 版本相当于是服务的快照,包括服务的配置、服务内的函数代码以及函数的配置。

Ø 函数计算提供服务级别的版本控制功能,支持您为自己的服务发布一个或多个版本。

Ø 版本发布后,已发布的版本不可更改。

6)别名

Ø 别名为指向特定服务版本的指针,别名无法脱离服务或版本单独存在。

Ø 使用别名访问服务或函数时,函数计算会将别名解析为其指向的版本。

Ø 可以使用别名切换流量进行灰度发布。

 

2、开发流程 

开发者需要先创建服务,设置日志,权限等配置,然后创建函数,在当前版本下编写代码,开发函数,测试通过后可以发布版本。第一次发布的版本为版本1,创建别名 prod 指向版本 1,就可以对外提供服务了。客户端调用函数的日志会记录在开发者配置的 logstore 里,函数计算提供完备的监控图表,应用上线后,开发者可以通过监控图表和日志来查看应用的健康状况。当开发者由新的需求的时候,可以继续在Latest版本来更改代码和开发函数,测试通过后就可以发布函数,这个时候发布版本为版本2,更改别名,切换别名 prod 10% 的流量到版本 2,观察一段时间之后,可以切换别名 prod 百分之百的流量到版本 2 上。

 

3、操作演示

打开函数计算工作台,新建服务,服务名称为 DemoService2,勾选绑定日志。

自定义修改以下的更多配置

创建好服务之后继续创建一个函数。

这里有三个函数,分别是事件函数,HTP 函数和模板函数。HTP 函数是说函数的入参就是 HTP 的 request,返回值是 HTP 的 response,它可以直接做你的应用的server,然后事件函数是说用户可以指定的一个入参,它不是 request,是你指定是什么就是什么。返回值也是,你指定什么就是什么,就像平时写的一个函数一样。模板是云服务提供的一些比较常用的模板,可以在这里面选。

以 hello world 函数为例。

函数入口就是函数计算从哪里的开始执行这一串代码。

单实例并发度指的是,函数计算是在实例里面执行,但实例默认情况下是同时只能执行一个请求的,有更多的请求怎么办?我们会调动更多的实例来执行更多的请求。但实际上有的时候,一个实例直接一个请求就会有点浪费,所以用户可以在这里选择一个实例同时可以并发多少个请求。

函数创建完成

创建完成之后,这里会有一个默认的代码

左边是文件数,右边的是代码

点击执行,产生结果

也可以在日志查询里面查看

高级查询会显示多条日志

latest 当前版本已经开发完成,假如你的代码就在 latest 上面,那就可以上线了,我们第一个上线的就是刚刚的 hello world 应用。怎么上线呢?比如我们要发布一个版本,并且创建一个别名指向这个版本,版本是服务级别的,发布了这个版本之后,这个服务下面所有的函数就都会跟着翻一个版本。

先发布一个版本,这个版本的 ID 是版本一。

当你发布了版本之后,代码是不能编辑的,只有在 latest 版本可以编辑,但可以看这个代码。

接下来创建一个别名,指向你刚才发布的版本。

主版本就是 100% 流量都会在这。灰度版本就是你想切多少流量到别的版本上面去。

接下来就可以通过别名来访问用户。

如果产品经理又提了新的需求,要开发迭代,那就在 lastest 上面开发。这时不叫hello word 叫 new word,保存,response 就变成 new word。最新的版本都要改成 new word

发布版本二。 

在别名管理里不用新建一个别名,只需要将刚才的别名指向版本二就好了,更新别名。

新版本设置灰度 50% 的流量。

现在是有一半的概率执行版本一,有一半的概率来执行版本二的,也就是一半的概率是输出 hello world,一般概率输出 new world 的

选了别名之后是看不到代码的,因为让用户更加的清楚,别名下是没有任何资源的,它只是一个指针,但是你可以来执行它,

所以这里我们搭建了一个简单的应用,就是 hello world 这里面应用,

然后并且模拟了应用的更新迭代,新的版本发布和上线,再有新的版本发布的时候,我们只需要在函数这里发布版本,并且将别名指向最新的版本,就可以完成一次应用的升级。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
小程序 JavaScript API
小程序云开发实战三:编写云函数代码
小程序云开发实战三:编写云函数代码
80 0
|
JSON 小程序 算法
uniapp小程序封装常用工具函数
类似的工具函数还有很多,这里暂时不一一列举了,上面提到的银行卡校验,还可以使用阿里公开的一个校验接口cardNo=银行卡号码&cardBinCheck=true这个接口会返回对应的银行简称银行卡类型,如果想要显示对应的银行logo的话,可以联系我,由于JSON数据太大,没办法全部放在这里。
201 0
|
1月前
|
Cloud Native Devops Shell
ArgoWorkflow教程(六)---无缝实现步骤间参数传递
本文为ArangoWorkflow系列教程第六篇,详细介绍了在同一Workflow中不同步骤间如何实现参数传递,避免了通过文件传递的不便。文章重点讲解了导出结果和导入参数的方法,并演示了如何将上一步骤的输出参数作为下一步骤的输入参数。此外,还介绍了ArgoWorkflow内置的`result`参数,可用于捕获容器的标准输出。通过具体示例和代码片段,读者可轻松掌握这一重要功能。
44 0
|
前端开发
前端学习笔记202307学习笔记第五十六天-搭建react源码调试环境2创建环境
前端学习笔记202307学习笔记第五十六天-搭建react源码调试环境2创建环境
61 0
|
6月前
|
小程序 开发工具 git
uniapp项目实践第三章:初始化项目
uniapp项目实践第三章:初始化项目
102 0
|
监控 Serverless 文件存储
课时4:函数的开发与配置
课时4:函数的开发与配置
|
存储 Serverless 文件存储
|
监控 Serverless 测试技术
|
人工智能 JavaScript Serverless
|
存储 数据可视化 Ubuntu
bcftools学习笔记丨软件简介、安装方式、使用方法、核心功能、参数解释等一文速览
bcftools学习笔记丨软件简介、安装方式、使用方法、核心功能、参数解释等一文速览
下一篇
无影云桌面