本文介绍如何配置基于函数计算的自定义解析。
前提条件
已添加需配置自定义解析的域名,参见概述。
1. 授权服务关联角色
HTTPDNS调用函数计算实现自定义解析功能时,需要在HTTPDNS控制台授权服务关联角色以允许HTTPDNS使用函数计算。
操作步骤
登录EMAS控制台。
在左侧导航栏选择解析管理> 自定义解析。
点击添加自定义解析,策略类型选择函数计算策略时,如果没有权限会看到授权说明,点击授权。
在弹出的服务关联角色授权页面,单击确定 即可完成授权动作,如不授权,则无法使用函数计算策略功能。
在初次使用函数计算策略时需要授权,有两个时机会触发授权:
新建自定义解析记录,选择函数计算策略时。
进入策略管理列表后,函数计算策略列表中会提示需要授权。

2. 创建自定义解析函数
您需先开通阿里云函数计算服务,并开发自定义解析函数。开发完成后,请发布服务和函数,并生成正式的版本或别名。
为确保 HTTPDNS 函数计算策略的安全稳定运行,配置策略时请勿使用默认的 Latest 版本,应明确指定已发布的服务与函数版本。
HTTPDNS 同时支持 FC 2.0 和 FC 3.0,但推荐使用 FC 3.0(FC 2.0 已不推荐)。如需了解两者区别,请参见:2.0和3.0区别。
如仍需创建2.0 函数,请参考新建函数计算服务。
新建3.0函数
登录 函数计算控制台,在顶部菜单栏,选择地域。
在左侧选择函数菜单,在函数列表页面点击创建函数。

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

编辑器初始化完成后,输入函数代码,函数代码配置请参考3. 编写自定义解析函数代码,如选择了“HTTPDNS自定义解析”模板可忽略这一步。
接下来测试您的函数,函数的入参设置具体请参见3. 编写自定义解析函数代码,单击测试函数,确认函数能正确执行且返回的数据符合预期。

测试完成后,点击部署代码,确认代码部署完成。
点击版本管理,输入提示内容,创建一个版本。

3. 编写自定义解析函数代码
编写函数代码
在函数编辑器中输入您的自定义解析逻辑。函数需接收 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: "", }); } };配置测试入参
单击测试函数前,请先设置模拟的入参数据,以验证函数行为是否符合预期。测试事件应模拟真实 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" } }执行测试并验证结果
单击测试函数,检查返回结果是否包含预期的 ips、ttl 或 extra 字段,且格式正确。示例返回:
{ "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. 绑定函数解析计算到解析域名
每个需要自定义解析的域名可以配置多个地域的函数计算服务,多个自定义解析域名的函数计算策略可以配置相同的函数计算服务。
操作步骤
登录EMAS控制台。
在左侧导航栏选择解析管理> 自定义解析。
点击添加自定义解析,策略类型选择函数计算策略。

您可以做以下配置,配置完成后,点击确定会回到策略列表中。
参数
说明
地域
必填,选择函数计算服务所在的地域,比如:您在上海区域新建了一个函数计算服务,这里就选择上海。
FC版本
现在同时支持FC2.0和FC3.0的函数配置,默认是FC3.0,推荐使用FC3.0。
服务
必填,选择地域下对应的函数计算服务,FC2.0版本才有该字段。
服务版本/别名
必填,选择对应服务的版本或者别名,FC2.0版本才有该字段。
说明不推荐使用函数计算LATEST版本。
BEFORE_READ_CACHE阶段的自定义解析函数
在读取HTTPDNS服务端缓存前钩子阶段,可在此阶段配置对应的函数计算函数。可选择不激活。
BEFORE_WRITE_CACHE阶段的自定义解析函数
在HTTPDNS服务端递归解析后写入缓存前钩子阶段,可在此阶段配置对应的函数计算函数。可选择不激活。
BEFORE_WRITE_RESPONSE阶段的自定义解析函数
在HTTPDNS服务端写入缓存后构造返回内容前钩子阶段,可在此阶段配置对应的函数计算函数。可选择不激活。
hook函数功能单元测试
用来测试HTTPDNS服务和函数计算服务的连通性:
测试成功:代表HTTPDNS服务可正常连通已配置的函数计算服务。
测试失败:代表HTTPDNS服务还不能够连通已经配置的函数计算服务。
后续步骤
参考以上内容,您已经配置了基于函数计算的自定义解析,请参考概述继续完成后续步骤。