ALB触发器

函数计算支持应用型负载均衡 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. 应用型负载均衡ALB控制台的左侧导航栏选择服务器组,在顶部菜单栏选择目标地域,单击创建服务器组

  3. 在左侧导航栏,选择应用型负载均衡ALB > 服务器组

  4. 服务器组页面,单击创建服务器组,完成以下配置,然后单击创建

    函数计算类型服务器组

    配置项

    说明

    服务器组类型

    选择服务器组类型。本文选择函数计算类型

    服务器组名称

    自定义。

    选择后端协议

    选择一种后端协议。本文选择HTTP

    选择资源组

    选择归属的资源组。

    配置健康检查

    开启健康检查

    开启或关闭健康检查。本文保持默认配置,即关闭健康检查。

    高级配置

    如果需要开启健康检查,请按需修改高级配置中的信息。更多信息,请参见创建和管理服务器组

  5. 服务器组创建成功对话框单击添加后端服务器

  6. 后端服务器页签,单击设置函数计算

  7. 添加后端服务器面板,选择以下任意一种方式完成配置,然后单击确定

    • 通过选择资源

      配置项

      说明

      配置方式

      选择通过选择资源

      服务

      选择目标函数所属的服务。

      版本

      选择LATEST。新创建的服务,默认只有一个LATEST版本。

      函数

      选择目标函数。

      备注

      自定义。

    • 通过ARN配置

      配置项

      说明

      配置方式

      选择通过ARN配置

      ARN

      输入目标函数的ARN。关于如何获取函数ARN,请参见获取函数ARN

      备注

      自定义。

    添加后端服务器面板会显示添加成功!,单击关闭,您可以在后端服务器页签,查看已配置的后端服务器。

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

  1. 登录应用型负载均衡ALB控制台

  2. 在顶部菜单栏选择所属地域。本文选择华东1(杭州)

  3. 实例页面,单击创建应用型负载均衡

  4. 应用型负载均衡(按量付费)购买页面,完成参数配置。

    此处仅列出和本文强相关的配置项。关于其余参数的配置,请参见创建和管理ALB实例

    • 地域:本文选择华东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列表

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