使用函数计算FC的主要步骤
使用函数计算FC的主要步骤
初步了解函数计算FC的运行原理和使用流程以后,小陈准备动手开始使用函数计算FC来实现业务需求。在动手前,为了避免走错路耽误了功能的上线进度,小陈决定再找大刘确认一下。
小陈:师傅,我了解了函数计算FC的大致使用流程,感觉基础功能使用起来应该不复杂。
大刘:没错,FC产品很好的贯彻了Serverless的架构思想,在使用中屏蔽了资源层面的配置操作,所以操作起来并不复杂。你只需要创建服务和相关配置,然后上传代码并进行调试和部署就可以体验到函数的功能了。
小陈:嗯,那我就按照这个步骤来尝试一下吧,期待它能快速实现我的需求。
大刘:眼过千遍,不如手过一遍,你尝试一下才能发现会有什么困难,有问题随时来找我。
接下来开始尝试体验阿里云函数计算FC的功能吧。注:可以在本课程配套的实验环节中体验具体操作。
1)开通函数计算FC服务
首次进入函数计算FC控制台可能会提示创建AliyunFcDefaultRole 默认角色,我们点击创建即可(如未弹出授权界面表示已经授权,我们可以直接进入下一步);
2)创建并配置存储图片和素材的对象存储
我们使用阿里云对象存储OSS来存放网站的图片及相关素材文件,后续我们可以通过配置函数计算触发器的方式使OSS和FC联动工作,比如在OSS中的行为事件(如上传文件)自动触发函数的执行。
首先我们需要创建相应的OSS Bucket,由于Bucket的名称是全局唯一的,尽量使用与用户和应用有关联的可读性较强的名称,既避免重名也便于记忆。
Bucket创建完成后,我们在Bucket的文件列表中,创建source、resource目录,为后续操作做准备。source目录用于上传图片,resource目录用于上传压缩文件。
3)在FC中创建服务并添加OSS角色授权
在函数计算FC控制台选择服务及函数,选择创建服务,填写服务名称,然后点击确定按钮完成服务创建。
服务(Service)是函数计算资源管理的单位。
- 在创建函数前先创建服务,用户可以在服务级别上授权访问、配置日志、创建函数等,在服务内创建的函数共享同样的服务设置,例如服务授权和日志配置等。
- 当用户在使用函数计算开发应用时,可以先在同一服务内创建所有应用函数;随着应用功能和复杂度的增长,可以再将应用拆分为多个服务以构建微服务模式,各服务采取独立的节奏开发、测试和部署。
- 从业务场景出发,一个应用可以拆分为多个服务。从资源使用维度出发,一个服务可以由多个函数组成。
服务创建完成后,需要先对函数服务授权OSS角色权限,以便于后续OSS和FC的联动和事件触发。在服务详情的角色配置界面,选择创建好的fc-oss-access角色,点击保存完成角色授权。
思考:服务创建后该如何配置函数?
在创建好服务和相关的权限配置后,接下来该如何创建和配置图片的压缩、解压缩以及MD5码提取函数呢?小陈带着疑问再次请教大刘。
小陈:师傅,我已经创建好函数计算服务了,然后应该是创建函数吧,但是我现在需要通过函数实现三个功能,那我应该单独创建三个函数?
大刘:没错,函数其实是FC的基本运行单位,你想要实现的三个功能,如果彼此之前相互独立,应该拆分成三个函数来实现。那你有没有思考过这三个函数和之前创建的服务之间是什么关系?
小陈:我也想到这个问题了,应该把每个函数单独归属一个服务,还是三个函数归属同一个服务呢?
大刘:首先函数是从属于服务的,这个相信你已经了解了。其次,函数和服务的对应关系,应该要从业务场景的角度出发,根据应用功能的逻辑和复杂度情况来进行服务的拆分和合并。从业务场景出发,一个应用可以拆分为多个服务;从资源使用维度出发,一个服务可以由多个函数组成。例如,一个数据处理服务,分为数据准备和数据处理两部分。数据准备函数资源需求小,可以选择小规格实例。数据处理函数资源需求大,可以选择大规格实例。同样的也可以从功能的维度来决定服务的分布。
小陈:我们这次的需求其实都是围绕着网站图片的处理,按功能的维度来区分的话,其实放在一个服务内就挺合适的。
大刘:这么说来我是赞同这个方式的,接下来你继续创建函数吧。
注:可以在本课程配套的实验环节中体验具体操作。
1)创建函数
在函数服务fc-demo的左侧选择函数管理,再创建函数。
函数是管理、运行的基本单位,通常由一系列的配置和可运行代码包组成。函数从属于服务,同一个服务下可以创建多个函数,这些函数共享一些相同的设置,例如服务授权和日志配置等。但这些函数彼此相互独立,互不影响。函数由用户编写,由事件触发,需要注意一个服务内能创建的函数是有数量限制的。函数相关操作主要包括创建函数和调用函数等。
在创建函数界面,按照实际需求进行参数的设置,并选择“使用内置运行时”创建,代码上传方式选择“示例代码Hello,world!示例“,此处先使用示例代码,后续替换为实际的业务代码。
这里我们需要简单解释一下,运行时(Runtime)通常指的是运行某一门编程语言所需要的基础宿主环境。函数计算通过使用运行时支持多种编程语言。在创建函数时,需要选择上传代码需要的运行时环境。函数支持通过三种方式来进行创建:
- 使用内置运行时创建
按照函数计算定义的接口编写程序处理事件和 HTTP 请求。由于代码包中不包含运行时,所以冷启动最快。代码包格式支持ZIP、JAR(Java)和文件夹。
- 使用自定义运行时创建
适合想要基于各个语言的流行框架(Java SpringBoot、Node.js Express、Python Flask、Golang Gin 等)编写程序,或者迁移已有的框架应用,由于自定义运行时使用公共镜像,没有镜像拉取时间,所以冷启动会较快。代码包格式支持ZIP、JAR(Java)和文件夹。
- 使用容器镜像创建
适用于想要完全控制程序运行的环境,或者迁移已有的容器应用,或者想要使用 GPU 实例。因为需要通过容器镜像服务ACR服务来拉取镜像,所以冷启动较慢。
2)配置触发器
在下拉配置界面进行触发器配置,并按照相关参数进行设置,指定bucket和文件目录,设置 oss:ObjectCreated:PostObject 和 oss:ObjectCreated:PutObject 这两种触发事件。当有新的素材上传,OSS触发器会自动触发函数进行图片处理。
函数计算提供了一种事件驱动的计算模型。函数的执行是由事件驱动的。函数的执行可以通过函数计算控制台或SDK触发,也可以由其他一些事件源来触发。可以在指定函数中创建触发器,该触发器描述了一组规则,当某个事件满足这些规则,事件源就会触发关联的函数。
触发器是触发函数执行的方式,事件源是事件的生产者,函数是事件的处理者。当事件发生时,如果满足触发器定义的规则,事件源会自动调用触发器关联的函数。例如在本次实验任务中,通过配置OSS触发器,当有新图片上传到指定的Bucket,OSS触发器会自动触发函数处理图片。
按照触发器集成方式,触发器可以分为:
- 双向集成触发器(既可以在函数计算,又可以在事件源端配置触发器);
- 单向集成触发器(目前只支持在事件源端配置触发器);
- 云产品事件触发器(支持在函数计算配置触发器,同时支持在事件总线EventBridge创建函数触发规则,无需在事件源端配置)。
关于触发器种类和更多的详细信息,可以在阿里云函数计算产品文档中查询。