全部产品
云市场

编写自定义解析函数

更新时间:2019-10-20 20:34:36

HTTPDNS运行机制

HTTPDNS运行过程分为以下几个阶段,自定义解析(SDNS)允许客户在在这些执行阶段之间插入由客户编写的函数计算(FC)的函数逻辑,允许客户改变HTTPDNS的运行行为来实现一些自定义的功能。

阶段名 说明
HTTPDNS_LOCATE_IP 在地址库中定位该IP所在地域及运营商
HTTPDNS_CHECK_CACHE 以域名和定位结果信息作为key,搜索缓存中的解析结果,如果有有效解析结果则跳转至HTTPDNS_WRITE_RESPONSE阶段;如果没有进入HTTPDNS_RESOLVE阶段
HTTPDNS_RESOLVE 实际执行递归解析逻辑
HTTPDNS_WRITE_CACHE 将解析结果写入缓存
HTTPDNS_WRITE_RESPONSE 将解析结果写入响应中并返回给调用端


各执行阶段自定义解析函数能力

阶段名 说明
HTTPDNS_WRITE_CACHE 1. 修改解析结果
2. 写入缓存及返回给客户的数据均为修改后的结果


SDNS函数输入输出

HTTPDNS会将运行时上下文输入给函数计算(FC)的函数,允许客户定义逻辑来处理这些数据。并将处理后的结果合并回HTTPDNS解析流程中。

入参格式

HTTPDNS会将运行时上下文通过一个固定的 JSON 结构传给函数计算的入参 event。具体字段如下:

字段名 含义
domainName 当前正在解析的域名
clientIp 客户端IP
location{} 客户端IP对应的地域及运营商信息
ips[] 解析结果IP列表
ttl 解析结果过期时间

入参示例

  1. {
  2. "domainName": "www.aliyun.com.", // 注意后缀有个点
  3. "clientIp": "42.120.75.128",
  4. "location": {
  5. "continent": "asia",
  6. "country": "china",
  7. "isp": "bgp", // <cmcc|unicom|chinanet|bgp|unknown>
  8. "city": "zhejiang"
  9. },
  10. "ips": ["140.205.135.3"],
  11. "ttl": 60
  12. }


出参格式

函数计算中的函数需要将处理的结果按照如下格式返回给HTTPDNS,以便HTTPDNS进行解析。所有字段均为可选:当字段未返回,或返回为null时,HTTPDNS将认为自定义解析(SDNS)函数无需修改该字段。

字段名 含义
ips[] 解析结果IP列表
ttl 解析结果过期时间(秒),30<ttl<3600
extra 额外输出给客户端的扩展信息, 允许的字符集[\w-_=+],最大长度1024个字符

示例出参

  1. {
  2. ips: event.ips.concat(['188.177.166.155']),
  3. ttl: event.ttl * 2,
  4. extra: "some-thing-send-to-user"
  5. }


SDNS函数能力

HTTPDNS会在解析的过程中,在指定的阶段执行由客户编写的函数计算(FC)的函数逻辑,并提供以下能力。

  1. 获取客户IP所在的所在地域及运营商信息
  2. 修改域名解析结果及TTL时间
  3. 添加自定义的数据输出,与解析结果一起返回

函数demo

此demo编程语言为nodejs6或者nodejs8

  1. 'use strict';
  2. exports.handler = function (event, context, callback) {
  3. // 解析传入的入参
  4. event = JSON.parse(event.toString());
  5. // callback 第一个参数是exception,第二个参数是出参,会被自动JSON化
  6. callback(null, {
  7. ips: event.ips.concat(['188.177.166.155']),
  8. ttl: event.ttl * 2,
  9. extra: "some-thing-send-to-user"
  10. });
  11. };


函数计算(FC)函数操作参考

  1. 前往函数计算(FC) 上海区 https://fc.console.aliyun.com/service/cn-shanghai
  2. [创建服务] https://help.aliyun.com/document_detail/73337.html
  3. [创建函数] https://help.aliyun.com/document_detail/73338.html
    1. 函数模板选择:根据喜好选择对应的开发语言,模板选择“空白函数”
    2. 触发器配置:选择触发器类型为“不创建触发器”
    3. 角色选择:无需添加
  4. [编写函数代码] https://help.aliyun.com/document_detail/75152.html
  5. [发布服务] https://help.aliyun.com/document_detail/96351.html
  6. 前往httpdns控制台配置自定义域名解析


注意事项

  1. 当前仅支持上海区函数调用,请前往 [函数计算(FC)上海区] 创建您的SDNS函数
  2. 函数不能配置HTTP类型的触发器,否则HTTPDNS将无法引用该函数
    1. 实践中,应用于HTTPDNS的函数一般为专用函数,无需添加其他触发器
  3. 如果您的函数执行出错,HTTPDNS返回空解析结果,即ips=[]
  4. 如果函数返回的数据有误,则该字段会被丢弃


在函数计算(FC)控制台直接测试

您可以在函数计算(FC)控制台直接进行测试,具体步骤如下

  1. 选择您想要测试的函数,并进入到『代码执行』标签页
  2. 点击『触发事件』按钮并将『入参示例』中的json粘贴进弹窗,并点击确定
  3. 点击『执行』按钮,测试函数出参是否符合文档要求