文档首页> 函数工作流 FunctionGraph> 常见问题> 通用问题> FunctionGraph函数如何解析DNS内网域名?
更新时间:2022-04-08 GMT+08:00
分享

FunctionGraph函数如何解析DNS内网域名?

当前FunctionGraph函数无法直接解析华为云解析服务(DNS)的内网域名,当需要在函数中解析DNS域名,可参考本章节操作,通过调用DNS服务的接口,实现解析功能。

解析DNS内网域名

  1. 已获取内网域名和域名ID。

    以添加解析记录的域名为例,获取方法如下:
    1. 登录云解析服务控制台。
    2. 获取域名ID。
      图1 获取域名ID
    3. 获取对应解析记录的域名。
      图2 获取域名

  2. 创建函数。

    创建一个运行时语言为Python 2.7版本的函数,代码示例如下:

    其中,url的加粗斜体内容表示DNS服务的终端节点信息,请根据实际情况修改。DNS服务终端节点信息,您可以从地区和终端节点中查询,以下示例以华北-北京4为例。

    # -*- coding:utf-8 -*-
    import json
    import os
    import requests
    
    def handler(event, context):
        zone_id = context.getUserData("zone_id")
        domain =  context.getUserData("domain")
        token=context.getToken()
        ips = domainResolved(zone_id, domain,token)
        if ips != []:
            print(ips)
            return ips
    
    # GET /v2/zones/{zone_id}/recordsets   
    def domainResolved(zone_id, domain,token):
        url = "https://dns.cn-north-4./v2/zones/%s/recordsets" % zone_id
        headers = {'content-type': 'application/json',
                   "X-Auth-Token": token}
        resp = requests.get(url, headers=headers)
        if resp.status_code == 200:
            text = json.loads(resp.text)
            for record in text["recordsets"]:
                if record["name"] == domain:
                    ips = record["records"]
                    return ips
        else:
            print("[GET /v2/zones/{zone_id}/recordsets] failed, response: %s" % resp.text)
            return []

  3. 为函数创建DNS委托。

    在IAM页面,创建配置了DNS ReadOnlyAccess系统策略的委托。

    图3 创建DNS委托

    在进行解析域名时,函数需要查看云解析服务资源,所以必须要配置DNS资源数据读取权限,否则在执行函数时,会提示如下错误,获取不成功。

    2020/08/20 10:37:12 GMT+08:00  Start invoke request 'a2f105b4-2e72-4fda-94a5-86d3837e961d', version: latest
    [GET /v2/zones/{zone_id}/recordsets] failed, response: {"code":"DNS.1802","message":"Policy doesn't allow dns:recordset:list to be performed."}
    2020/08/20 10:37:13 GMT+08:00  Finish invoke request 'a2f105b4-2e72-4fda-94a5-86d3837e961d', duration: 1030.072ms, billing duration: 1100ms, memory used: 77.039MB.

  4. 配置函数。

    进入2创建的函数页面,选择“配置”页签,执行以下配置。

    1. 在“委托名称”选择3创建的委托。
    2. 配置环境变量,输入1获取的域名和域名ID。
    图4 配置函数

  5. 保存配置,执行函数。

    执行成功后,可以正常返回域名对应的IP。如果调用DNS接口有问题,返回的域名IP为空。

    图5 执行函数

分享:

通用问题所有常见问题

more

close