函数计算支持应用型负载均衡ALB(Application Load Balancer)作为事件源,即支持将函数计算设置为ALB的后端服务。ALB会将请求转发到函数计算中的函数,并且同步返回函数调用结果。本文介绍如何配置ALB触发函数执行。
前提条件
使用限制
- ALB实例和函数计算服务属于同一个地域。
- 函数计算作为ALB后端服务器的使用限制:
- 仅支持创建通过HTTP请求触发的函数。
- 函数计算要求客户端在访问函数时,HTTP请求头中包含Date头域。Date头域表示消息发送的时间。
- ALB使用函数计算的使用限制:
- ALB中服务器组类型选择函数计算类型,且后端服务器组和监听仅支持HTTP协议。
- ALB仅支持添加一个函数计算作为后端服务器。
步骤一:编写函数代码并测试
- 登录函数计算控制台,在左侧导航栏,单击服务及函数。
- 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
- 在函数管理页面,单击目标函数名称。
- 在函数详情页面,单击函数代码页签,在代码编辑器中编写代码,然后单击部署代码。代码修改示例如下。
var getRawBody = require('raw-body'); var getFormBody = require('body/form'); var body = require('body'); /* To enable the initializer feature please implement the initializer function as below: exports.initializer = (context, callback) => { console.log('initializing'); callback(null, ''); }; */ exports.handler = (req, resp, context) => { console.log('hello world'); var params = { path: req.path, queries: req.queries, headers: req.headers, method : req.method, requestURI : req.url, clientIP : req.clientIP, log : ("Hello World.This is FC!"), } getRawBody(req, function(err, body) { for (var key in req.queries) { var value = req.queries[key]; resp.setHeader(key, value); } resp.setHeader("Content-Type", "text/plain"); params.body = body.toString(); resp.send(JSON.stringify(params, null, ' ')); }); /* getFormBody(req, function(err, formBody) { for (var key in req.queries) { var value = req.queries[key]; resp.setHeader(key, value); } params.body = formBody; console.log(formBody); resp.send(JSON.stringify(params)); }); */ }
- 单击函数代码页签的测试函数。执行完成后,您可以在函数代码页签的上方查看执行结果。
步骤二:创建函数计算类型的服务器组
- 登录应用型负载均衡ALB控制台。
- 在顶部菜单栏选择所属地域。本文选择华东1(杭州)。
- 在左侧导航栏,选择 。
- 在服务器组页面,单击创建服务器组,完成以下配置,然后单击创建。
配置项 说明 服务器组类型 选择服务器组类型。本文选择函数计算类型。 服务器组名称 自定义。 选择后端协议 选择一种后端协议。本文选择HTTP。 选择资源组 选择归属的资源组。 配置健康检查 开启健康检查 开启或关闭健康检查。本文保持默认配置,即关闭健康检查。 高级配置 如果需要开启健康检查,请按需修改高级配置中的信息。更多信息,请参见创建和管理服务器组。 - 在服务器组页面,找到目标服务器组,然后在操作列单击编辑后端服务器。
- 在后端服务器页签,单击设置函数计算。
- 在添加后端服务器面板,选择以下任意一种方式完成配置,然后单击确定。
- 通过选择资源
配置项 说明 配置方式 选择通过选择资源。 服务 选择目标函数所属的服务。 版本 选择LATEST。新创建的服务,默认只有一个LATEST版本。 函数 选择目标函数。 备注 自定义。 - 通过ARN配置
配置项 说明 配置方式 选择通过ARN配置。 ARN 输入目标函数的ARN。关于如何获取函数ARN,请参见获取函数ARN。 备注 自定义。
添加后端服务器面板会显示添加成功!,单击关闭,您可以在后端服务器页签,查看已配置的后端服务器。 - 通过选择资源
步骤三:创建ALB实例并配置监听
- 登录应用型负载均衡ALB控制台。
- 在顶部菜单栏选择所属地域。本文选择华东1(杭州)。
- 在实例页面,单击创建应用型负载均衡。
- 在应用型负载均衡(按量付费)购买页面,完成参数配置。此处仅列出和本文强相关的配置项。关于其余参数的配置,请参见创建应用型负载均衡。
- 地域:本文选择华东1(杭州)。
- 实例网络类型:本文选择公网。
- 在实例页面,找到已创建的ALB实例,在目标实例操作列下单击创建监听,然后打开监听配置向导。
- 在配置监听配置向导,完成以下配置,然后单击下一步。
配置项 说明 选择负载均衡协议 选择监听的协议类型。 本文选择HTTP。 监听端口 输入用来接收请求并向后端服务器进行请求转发的监听端口,端口范围为[1,65535]。本文输入80。 监听名称 自定义。 高级配置 本文使用默认配置。 - 在选择服务器组配置向导的选择服务器组下拉列表,选择函数计算类型,并选择步骤二:创建函数计算类型的服务器组创建的后端服务器组,然后单击下一步。
- 在配置审核配置向导,确认配置信息,单击提交。
步骤四:连通性测试
完成上述操作后,函数计算和ALB已经建立了连接。您可以通过以下操作,测试函数计算和ALB的连通性。
- 打开命令行窗口,执行curl - v命令获取Date头域。函数计算要求HTTP访问请求头中包含Date头域。
curl -v <ALB实例域名>
- 执行curl - H命令,尝试访问ALB实例的域名。
curl -H "Date头域" <ALB实例域名>
如下图所示,收到如下所示的回复报文,则表示ALB可以将请求转发至函数计算并调用函数。
更多信息
除了函数计算控制台,您还可通过以下方式配置触发器:
- 通过Serverless Devs工具配置触发器。更多操作,请参见Serverless Devs。
- 通过SDK配置触发器。更多操作,请参见SDK列表。
如需对创建的触发器进行修改或删除,请参见触发器管理。