函数计算搭建 Serverless Web 应用(一)- HTTP 触发器
摘要: Web 应用(Serverless web backend) 是函数计算很重要的一个使用场景。相比于传统的在服务器上搭建 web 应用,函数计算无需您管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,以 弹性、可靠 的方式运行您的代码,实现毫秒级别弹性伸缩,轻松应对峰值压力。
函数计算简介
阿里云 函数计算(Function Compute) 是事件驱动的全托管计算服务,是阿里云的 Serverless 计算平台。基于函数计算构建应用,您无需管理服务器等基础设施,而是专注于应用逻辑的开发,大幅提高开发效率。
借助函数计算,您几乎可以构建任何类型的应用程序或后端服务,包括 Web 应用后端服务,大规模文件处理,数据实时流式处理等等。函数计算能实时弹性伸缩计算资源来匹配您的应用负载,使得您的系统能始终如一的、可靠的支撑业务的高速增长。此外您只需为实际使用的资源付费,函数未执行则不付费,财务成本显著减低。
函数计算遇见 Web 应用
Web 应用(Serverless web backend) 是函数计算很重要的一个使用场景。相比于传统的在服务器上搭建 web 应用,函数计算无需您管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,以 弹性 、 可靠 的方式运行您的代码,实现毫秒级别弹性伸缩,轻松应对峰值压力。
为了更好地支持 Serverless web backend 的使用场景,提升用户体验,函数计算推出 HTTP 触发器,即可以通过 HTTP 请求触发函数执行,您只需将业务代码写在函数中就可以搭建 Web 应用,同时,HTTP 触发器各个编程语言对流行的 Web 框架做了不同程度的兼容,方便您将原有服务迁移到函数计算上来,真正实现 一行代码,一触即发 。
HTTP 触发器
HTTP 触发器,顾名思义,即 HTTP 请求可以触发函数执行。配置 HTTP 触发器的函数可以通过 HTTP 请求触发执行。此时函数可以看做一个 Web 应用,对 HTTP 请求进行处理,并将处理结果返回给调用端。
目前函数计算的 HTTP 触发器支持 nodejs、python、php 等编程语言,并不同程度支持对应的 Web 框架,具体内容请参看 参考文档 。
使用示例
下面对使用 HTTP 触发器搭建 Web 应用的示例进行介绍。
搭建基于 HTTP 触发器的 Web 应用分为三个步骤:
配置 HTTP 触发器
只有配置了 HTTP 触发器的函数才可以对 HTTP 请求进行处理;
值得注意的是配置了 HTTP 触发器的函数接口与普通函数接口不同。
编写处理函数
编写处理函数的时候一定注意配置了 HTTP 触发器的函数接口与普通函数接口不同。
测试函数执行
通过向函数 HTTP 发送请求触发函数执行,并检验是否符合预期。
配置 HTTP 触发器
登录 函数计算管理控制台 。
新建服务,本示例的服务名称为 web-server,所属区域为华东2,开启【高级配置】,配置日志项目和日志仓库,角色创建方式为新建角色,系统授权模板选择
AliyunLogFullAccess
,点击 【授权】,点击【确定】。在左侧导航栏选择服务,进入到新建的服务中。
单击 【创建函数】,在创建函数页面:
认证方式选择 anonymous,不需要身份验证,支持匿名访问。
请求方式为此函数可以处理的 HTTP Method。
单击 【选择全部的语言】,在下拉菜单中选择开发语言。
选择 【空白函数】。
按如下图示配置 HTTP 触发器,单击 【下一步】。
创建函数并填写所在服务、函数名称、描述信息和运行环境信息。
单击【下一步】。
核对信息无误后,单击【创建】。
配置 HTTP 触发器更多内容请参考 配置 HTTP 触发器官方文档 。
编写函数代码
以 Python 为例,一个简单的示例代码如下:
# -*- coding: utf-8 -*-import jsonHELLO_WORLD = b"Hello world!\n"def handler(environ, start_response): request_uri = environ['fc.request_uri'] response_body = { 'uri':environ['fc.request_uri'], 'method':environ['REQUEST_METHOD'] } # do something here status = '200 OK' response_headers = [('Content-type', 'text/json')] start_response(status, response_headers) # Python2 return [json.dumps(response_body)] # Python3 tips: When using Python3, the str and bytes types cannot be mixed. # Use str.encode() to go from str to bytes # return [json.dumps(response_body).encode()]
更多编程语言的代码示例及详细信息请参考 编写函数代码 。
短短两步,基于 HTTP 触发器的 Web 应用就搭建完成了,下面我们对函数进行测试,看是否符合我们的预期。
测试函数执行
您需要向函数发送 HTTP 请求测试函数执行是否符合预期。可以通过浏览器发送 HTTP 请求、curl 发送 HTTP 请求进行测试,控制台也可以发送 HTTP 请求方便您的调试。
例如,通过 curl 发送 HTTP 请求触发函数执行,结果如下:
~ curl https://123456.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/web-server/testHttp/{"uri": "/2016-08-15/proxy/web-server/testHttp/", "method": "GET"}%
通过控制台及浏览器发送 HTTP 请求请参考文章 测试函数执行 。
总结
使用 HTTP 触发器可以快速搭建基于函数计算的 Web 服务,按量付费,免运维,毫秒级弹性扩容,完美解决用户痛点。
Serverless 时代已来,一行代码,一触即发。
参考文档
HTTP 触发器文档
HTTP 触发器示例
设置 HTTP 触发器的 Nodejs 函数入口
设置 HTTP 触发器的 Python 函数入口
设置 HTTP 触发器的 PHP 函数入口
函数计算搭建 Serverless Web 应用(二)- 自定义域名
函数计算搭建 Serverless Web 应用(三)- 三分钟搭建 Web 应用