函数计算支持应用型负载均衡ALB(Application Load Balancer)作为事件源,即支持将函数计算设置为ALB的后端服务。ALB会将请求转发到函数计算中的函数,并且同步返回函数调用结果。本文介绍如何配置ALB触发函数执行。

前提条件

使用限制

  • ALB实例和函数计算服务属于同一个地域。
  • 函数计算作为ALB后端服务器的使用限制:
    • 仅支持创建通过HTTP请求触发的函数。
    • 函数计算要求客户端在访问函数时,HTTP请求头中包含Date头域。Date头域表示消息发送的时间。
  • ALB使用函数计算的使用限制:
    • ALB中服务器组类型选择函数计算类型,且后端服务器组和监听仅支持HTTP协议。
    • ALB仅支持添加一个函数计算作为后端服务器。

步骤一:编写函数代码并测试

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数
  2. 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
  3. 函数管理页面,单击目标函数名称。
  4. 在函数详情页面,单击函数代码页签,在代码编辑器中编写代码,然后单击部署代码
    代码修改示例如下。
    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));
        });
        */
    }
  5. 单击函数代码页签的测试函数
    执行完成后,您可以在函数代码页签的上方查看执行结果。

步骤二:创建函数计算类型的服务器组

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏选择所属地域。本文选择华东1(杭州)
  3. 在左侧导航栏,选择应用型负载均衡ALB > 服务器组
  4. 服务器组页面,单击创建服务器组,完成以下配置,然后单击创建
    函数计算类型服务器组
    配置项说明
    服务器组类型选择服务器组类型。本文选择函数计算类型
    服务器组名称自定义。
    选择后端协议选择一种后端协议。本文选择HTTP
    选择资源组选择归属的资源组。
    配置健康检查
    开启健康检查开启或关闭健康检查。本文保持默认配置,即关闭健康检查。
    高级配置如果需要开启健康检查,请按需修改高级配置中的信息。更多信息,请参见创建和管理服务器组
  5. 服务器组页面,找到目标服务器组,然后在操作列单击编辑后端服务器
  6. 后端服务器页签,单击设置函数计算
  7. 添加后端服务器面板,选择以下任意一种方式完成配置,然后单击确定
    • 通过选择资源
      配置项说明
      配置方式选择通过选择资源
      服务选择目标函数所属的服务。
      版本选择LATEST。新创建的服务,默认只有一个LATEST版本。
      函数选择目标函数。
      备注自定义。
    • 通过ARN配置
      配置项说明
      配置方式选择通过ARN配置
      ARN输入目标函数的ARN。关于如何获取函数ARN,请参见获取函数ARN
      备注自定义。
    添加后端服务器面板会显示添加成功!,单击关闭,您可以在后端服务器页签,查看已配置的后端服务器。

步骤三:创建ALB实例并配置监听

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏选择所属地域。本文选择华东1(杭州)
  3. 实例页面,单击创建应用型负载均衡
  4. 应用型负载均衡(按量付费)购买页面,完成参数配置。
    此处仅列出和本文强相关的配置项。关于其余参数的配置,请参见创建应用型负载均衡
    • 地域:本文选择华东1(杭州)
    • 实例网络类型:本文选择公网
  5. 实例页面,找到已创建的ALB实例,在目标实例操作列下单击创建监听,然后打开监听配置向导。
  6. 配置监听配置向导,完成以下配置,然后单击下一步
    配置项说明
    选择负载均衡协议选择监听的协议类型。 本文选择HTTP
    监听端口输入用来接收请求并向后端服务器进行请求转发的监听端口,端口范围为[1,65535]。本文输入80
    监听名称自定义。
    高级配置本文使用默认配置。
  7. 选择服务器组配置向导的选择服务器组下拉列表,选择函数计算类型,并选择步骤二:创建函数计算类型的服务器组创建的后端服务器组,然后单击下一步
  8. 配置审核配置向导,确认配置信息,单击提交

步骤四:连通性测试

完成上述操作后,函数计算和ALB已经建立了连接。您可以通过以下操作,测试函数计算和ALB的连通性。

  1. 打开命令行窗口,执行curl - v命令获取Date头域。
    函数计算要求HTTP访问请求头中包含Date头域。
    curl -v <ALB实例域名>
    获取时间
  2. 执行curl - H命令,尝试访问ALB实例的域名。
    curl -H "Date头域" <ALB实例域名>
    如下图所示,收到如下所示的回复报文,则表示ALB可以将请求转发至函数计算并调用函数。ALB支持函数计算验证结果

更多信息

除了函数计算控制台,您还可通过以下方式配置触发器:
  • 通过Serverless Devs工具配置触发器。更多操作,请参见Serverless Devs
  • 通过SDK配置触发器。更多操作,请参见SDK列表

如需对创建的触发器进行修改或删除,请参见触发器管理