函数计算支持应用型负载均衡 ALB(Application Load Balancer)作为事件源,即支持将函数计算设置为ALB的后端服务。ALB会将请求转发到函数计算中的函数,并且同步返回函数调用结果。本文介绍如何配置ALB触发函数执行。
前提条件
- 函数计算 
- 应用型负载均衡 ALB(Application Load Balancer) 
使用限制
- 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控制台。
- 在应用型负载均衡ALB控制台的左侧导航栏选择服务器组,在顶部菜单栏选择目标地域,单击创建服务器组。 
- 在左侧导航栏,选择。 
- 在服务器组页面,单击创建服务器组,完成以下配置,然后单击创建。  - 配置项 - 说明 - 服务器组类型 - 选择服务器组类型。本文选择函数计算类型。 - 服务器组名称 - 自定义。 - 选择后端协议 - 选择一种后端协议。本文选择HTTP。 - 选择资源组 - 选择归属的资源组。 - 配置健康检查 - 开启健康检查 - 开启或关闭健康检查。本文保持默认配置,即关闭健康检查。 - 高级配置 - 如果需要开启健康检查,请按需修改高级配置中的信息。更多信息,请参见创建和管理服务器组。 
- 在服务器组创建成功对话框单击添加后端服务器。 
- 在后端服务器页签,单击设置函数计算。 
- 在添加后端服务器面板,选择以下任意一种方式完成配置,然后单击确定。 - 通过选择资源 - 配置项 - 说明 - 配置方式 - 选择通过选择资源。 - 服务 - 选择目标函数所属的服务。 - 版本 - 选择LATEST。新创建的服务,默认只有一个LATEST版本。 - 函数 - 选择目标函数。 - 备注 - 自定义。 
- 通过ARN配置 - 配置项 - 说明 - 配置方式 - 选择通过ARN配置。 - ARN - 输入目标函数的ARN。关于如何获取函数ARN,请参见获取函数ARN。 - 备注 - 自定义。 
 - 添加后端服务器面板会显示添加成功!,单击关闭,您可以在后端服务器页签,查看已配置的后端服务器。 
步骤三:创建ALB实例并配置监听
- 在顶部菜单栏选择所属地域。本文选择华东1(杭州)。 
- 在实例页面,单击创建应用型负载均衡。 
- 在应用型负载均衡(按量付费)购买页面,完成参数配置。 - 此处仅列出和本文强相关的配置项。关于其余参数的配置,请参见创建和管理ALB实例。 - 地域:本文选择华东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列表。 
如需对创建的触发器进行修改或删除,请参见触发器管理。