事件函数可以响应云服务产生的各种事件(如文件上传至对象存储 OSS、监控产品触发的告警等)。使用事件函数时,您只需编写处理逻辑代码,无需关注额外的事件集成、也无需购买及管理底层计算资源。此外,函数计算仅在需要时运行实例并自动扩展,事件处理完毕后会自动销毁实例,您只需按照资源使用量付费。
场景示例
您有一些文件需要保存到OSS。为了加速上传,您先将文件压缩为ZIP格式再上传,在使用时希望直接使用文件而不是ZIP包,因此需要一个自动化流程将文件解压并保存回OSS。
采用传统实现方法时,您需要构建并整合多个程序,以监控和处理OSS上的文件变动,同时还要考虑这些程序的部署和维护问题。而使用事件函数实现,您可以专注于文件处理程序。每当文件上传至OSS时都会产生事件,如果事件符合您设置的条件,函数将自动触发并运行您的处理程序,并在完成后自动释放计算资源,以节省开销。
考虑到您当前可能没有OSS Bucket,本文将通过下面的示例带您体验事件函数的实现流程:
创建一个模拟OSS文件上传的事件,该事件会调用一个事件函数来进行文件处理,并在控制台打印出文件名称、所在Bucket等信息。
通过实现这个示例,您将体验到以下内容:
用控制台完成创建事件函数、编写请求处理程序、测试函数的完整流程;
了解函数计算运行环境、内置运行时等关键概念;
了解请求处理程序中的请求参数
event
和context
。
前提条件
操作指引
1. 选择函数类型
登录函数计算控制台,在顶部菜单栏,选择您想要创建函数的地域,例如华东1(杭州)。在左侧导航栏,单击函数,然后单击创建函数。
在创建函数页面,选择事件函数。您可以自定义函数名称。
2. 选择运行环境
Python
运行环境请选择内置运行时-Python-Python 3.10。
对于事件函数推荐您搭配内置运行时作为函数运行环境,这是因为内置运行时包括了响应其他云产品事件所必需的依赖(例如Python的oss2模块),更多信息请参见环境说明。如果使用自定义运行时或自定义镜像作为函数运行环境,还需要自行安装所需依赖。关于各种运行环境的详细对比,请参见函数运行环境选型。
Node.js
运行环境请选择内置运行时-Node.js-Node.js 20
对于事件函数推荐您搭配内置运行时作为函数运行环境,这是因为内置运行时包括了响应其他云产品事件所必需的依赖(例如Node.js的ali-oss模块),更多信息请参见环境说明。如果使用自定义运行时或自定义镜像作为函数运行环境,还需要自行安装所需依赖。关于各种运行环境的详细对比,请参见函数运行环境选型。
3. 创建函数
选择Hello, world示例代码创建函数。高级配置和环境变量保持默认。单击创建,等待函数创建完成。
创建完成后,可以在代码标签页的WebIDE中查看生成的示例代码,下图以Python为例。
Hello, world示例代码会自动生成带有入口程序的函数模板,您可以直接在此模板基础上通过后续步骤构建您的业务代码。
4. 修改示例代码并部署
Python、Node.js等解释性语言支持在WebIDE中直接修改代码并部署,而Java等编译性语言只支持本地编译代码包然后上传,不支持WebIDE。
Python
在控制台的WebIDE中打开index.py,将当前代码替换为以下代码,然后单击部署代码使修改的代码生效。
Node.js
在控制台的WebIDE中打开index.mjs,将当前代码替换为以下代码,然后单击部署代码使修改的代码生效。
5. 测试函数
为了模拟文件上传到OSS触发函数的场景,我们将定义一个模拟事件,并使用该事件触发函数。
除了使用模拟事件测试,您也可以使用真实的OSS事件触发函数来测试,详情请参见进阶操作。
创建模拟事件:在函数详情页面,单击代码页签,单击测试函数右侧的下拉框,选择配置测试参数。在事件模板中选择对象存储OSS,将自动生成一个模拟事件,该事件的格式与真实OSS事件的格式相同。
您可以自定义事件名称和事件对象中的参数值(例如OSS Bucket名称和文件名称)。完成后单击确定。
单击测试函数,将立即触发函数执行。执行成功后查看返回结果,示例代码返回0代表事件处理成功。单击日志输出,查看函数执行过程中输出的日志信息。
测试函数时,函数计算会将模拟事件的内容通过
event
参数传递给请求处理程序handler
,并执行您在前一步骤中定义的代码,即解析event
参数并处理文件。
6. (可选)清理资源
函数计算按照实际资源使用量进行计费,已创建的函数资源如果不使用不会产生费用。但请留意您创建函数资源时关联的其他云产品或资源,例如存储在OSS和NAS的数据。
如果您希望删除函数,请登录函数计算控制台,单击函数,选择地域,在目标函数的操作列,选择 ,然后在弹出的对话框,确认要删除的函数已无任何绑定资源后,再次确认删除。
进阶操作
现在您已经通过控制台创建了一个事件函数、修改了请求处理程序、并使用模拟event
测试了函数。您可以根据业务需求,参考以下进阶操作:
添加触发器:
考虑到您可能没有OSS Bucket,本文中的示例采用模拟OSS文件上传事件的方式进行测试。如果您后续想要应用到您的实际业务中,您需要为函数添加一个OSS触发器,请参见配置原生OSS触发器。
除了对象存储,许多阿里云服务(如多款消息队列、Tablestore、SLS等)的事件也可以触发函数计算。请参见触发器简介,了解支持的触发器列表。
添加依赖:虽然内置运行时包含了事件处理过程中涉及的常用依赖库,但是在您的实际业务中可能仍然不满足要求,这时最简单的办法是将代码以及额外的依赖库打包到一个ZIP文件中作为代码包,上传并部署到函数计算,具体请参见部署代码包。如果您想减少代码包的体积以加速函数的冷启动,可以通过层来管理依赖,详情请参见创建自定义层。
配置日志:为了便于对函数进行调试、排查问题或满足安全审计等需求,建议您为函数配置日志,详细步骤请参见配置日志。
相关文档
除了使用控制台创建函数,您也可以使用Serverless Devs命令行工具来完成上述操作,请参见快速入门。
关于本文中示例场景的完整实践教程,请参见使用函数计算实现自动解压上传到OSS的ZIP文件。
推荐您参考以下实践教程,更深入地了解事件函数: