配置基于函数计算的自定义解析

本文介绍如何配置基于函数计算的自定义解析。

前提条件

  • 已添加需配置自定义解析的域名,参见概述

1. 授权服务关联角色

HTTPDNS调用函数计算实现自定义解析功能时,需要在HTTPDNS控制台授权服务关联角色以允许HTTPDNS使用函数计算。

操作步骤

  1. 登录EMAS控制台

  2. 在左侧导航栏选择解析管理> 自定义解析

  3. 点击添加自定义解析,策略类型选择函数计算策略时,如果没有权限会看到授权说明,点击授权

  4. 在弹出的服务关联角色授权页面,单击确定 即可完成授权动作,如不授权,则无法使用函数计算策略功能。

说明

在初次使用函数计算策略时需要授权,有两个时机会触发授权:

  • 新建自定义解析记录,选择函数计算策略时。

  • 进入策略管理列表后,函数计算策略列表中会提示需要授权。

image

2. 创建自定义解析函数

您需先开通阿里云函数计算服务,并开发自定义解析函数。开发完成后,请发布服务和函数,并生成正式的版本或别名。

为确保 HTTPDNS 函数计算策略的安全稳定运行,配置策略时请勿使用默认的 Latest 版本,应明确指定已发布的服务与函数版本。

HTTPDNS 同时支持 FC 2.0 和 FC 3.0,但推荐使用 FC 3.0(FC 2.0 已不推荐)。如需了解两者区别,请参见:2.03.0区别

如仍需创建2.0 函数,请参考新建函数计算服务

新建3.0函数

  1. 登录 函数计算控制台,在顶部菜单栏,选择地域

  2. 在左侧选择函数菜单,在函数列表页面点击创建函数image

  3. 在创建函数页面,选择“事件函数”,按需配置参数,代码示例可选择“HTTPDNS自定义解析”模板,参数配置完成后,点击创建进入函数编写。image

  4. 编辑器初始化完成后,输入函数代码,函数代码配置请参考3. 编写自定义解析函数代码,如选择了“HTTPDNS自定义解析”模板可忽略这一步。

  5. 接下来测试您的函数,函数的入参设置具体请参见3. 编写自定义解析函数代码,单击测试函数,确认函数能正确执行且返回的数据符合预期。image

  6. 测试完成后,点击部署代码,确认代码部署完成。

  7. 点击版本管理,输入提示内容,创建一个版本。image

3. 编写自定义解析函数代码

  1. 编写函数代码

    在函数编辑器中输入您的自定义解析逻辑。函数需接收 HTTPDNS 传入的上下文参数(如客户端 IP、地域、运营商等),并返回处理后的解析结果。例如:

    该示例编程语言为nodejs6或者nodejs8

    'use strict';
    exports.handler = (event, context, callback) => {
      // 将传入的参数格式化成对象
      const eventObj = JSON.parse(event.toString());
      const {
        location, // 地域
        ips, // 权威返回的解析结果
        ttl, // 原始ttl
      } = eventObj;
    
      if (location.province === 'zhejiang' && location.isp === 'chinanet') {
        // 当 浙江电信 的用户访问该域名时,返回指定的IP
        callback(null, {
          ips: ips.concat(['1.1.X.X']), // 将指定的IP加入返回的IP数组中
          ttl: event.ttl * 2, // 修改ttl
          extra: "", // 携带给客户端额外的参数
        });
      } else {
        // 默认返回
        callback(null, {
          ips,
          ttl,
          extra: "",
        });
      }
    };
  2. 配置测试入参

    单击测试函数前,请先设置模拟的入参数据,以验证函数行为是否符合预期。测试事件应模拟真实 HTTPDNS 调用格式,例如:

    {
      "domainName": "www.aliyun.com", // 当前正在解析的域名
      "clientIp": "192.168.1.4", // 客户端 IP
      "location": {
        "continent": "asia", // 客户端IP所属大洲
        "region": "cn", // 客户端IP所属国家或地区
        "isp": "bgp", // 客户端IP所属运营商线路 
        "province": "zhejiang" // 客户端IP所属省份
      },
      "ips": ["192.168.1.3"], // 解析结果列表,BEFORE_READ_CACHE阶段没有此结果
      "ttl": 60, // 解析结果 TTL,BEFORE_READ_CACHE阶段没有此结果
      "hookType": "BEFORE_WRITE_CACHE", // 函数运行的阶段
      "parameters":{ // 解析携带的参数对象
        "param1":"p1",   //对应URL中的参数"sdns-param1=p1"
        "param2":"p2"
       }
    }
  3. 执行测试并验证结果

    单击测试函数,检查返回结果是否包含预期的 ipsttlextra 字段,且格式正确。示例返回:

    {
        "ips": event.ips.concat(['192.168.1.2']),
        "ttl": event.ttl * 2,
        "extra": "some-thing-send-to-user"
        // ,"domainName": "www.alibabacloud.com" 仅限BEFORE_READ_CACHE阶段有效
        // ,"cacheKey": "cache-key-001" 仅限BEFORE_READ_CACHE、BEFORE_WRITE_CACHE阶段有效
     }
    说明

    如需了解自定义解析函数运行机制、完整入参/出参字段说明等内容,请参阅详细文档:编写自定义解析函数代码

4. 绑定函数解析计算到解析域名

每个需要自定义解析的域名可以配置多个地域的函数计算服务,多个自定义解析域名的函数计算策略可以配置相同的函数计算服务。

操作步骤

  1. 登录EMAS控制台

  2. 在左侧导航栏选择解析管理> 自定义解析

  3. 点击添加自定义解析,策略类型选择函数计算策略image

  4. 您可以做以下配置,配置完成后,点击确定会回到策略列表中。

    参数

    说明

    地域

    必填,选择函数计算服务所在的地域,比如:您在上海区域新建了一个函数计算服务,这里就选择上海。

    FC版本

    现在同时支持FC2.0FC3.0的函数配置,默认是FC3.0,推荐使用FC3.0。

    函数计算3.02.0版本差异及兼容性说明

    服务

    必填,选择地域下对应的函数计算服务,FC2.0版本才有该字段。

    服务版本/别名

    必填,选择对应服务的版本或者别名,FC2.0版本才有该字段。

    说明

    不推荐使用函数计算LATEST版本。

    BEFORE_READ_CACHE阶段的自定义解析函数

    在读取HTTPDNS服务端缓存前钩子阶段,可在此阶段配置对应的函数计算函数。可选择不激活。

    查看函数计算策略钩子说明

    BEFORE_WRITE_CACHE阶段的自定义解析函数

    HTTPDNS服务端递归解析后写入缓存前钩子阶段,可在此阶段配置对应的函数计算函数。可选择不激活。

    查看函数计算策略钩子说明

    BEFORE_WRITE_RESPONSE阶段的自定义解析函数

    HTTPDNS服务端写入缓存后构造返回内容前钩子阶段,可在此阶段配置对应的函数计算函数。可选择不激活。

    查看函数计算策略钩子说明

    hook函数功能单元测试

    用来测试HTTPDNS服务和函数计算服务的连通性:

    • 测试成功:代表HTTPDNS服务可正常连通已配置的函数计算服务。

    • 测试失败:代表HTTPDNS服务还不能够连通已经配置的函数计算服务。

后续步骤

参考以上内容,您已经配置了基于函数计算的自定义解析,请参考概述继续完成后续步骤。