本文介紹如何配置基於Function Compute的自訂解析。
前提條件
已添加需配置自訂解析的網域名稱,參見1. 添加網域名稱。
1. 授權服務關聯角色
HTTPDNS調用Function Compute實現自訂解析功能時,需要在HTTPDNS控制台授權服務關聯角色以允許HTTPDNS使用Function Compute。
操作步驟
登入EMAS控制台。
在左側導覽列選擇解析管理> 自訂解析。
點擊添加自訂解析,策略類型選擇Function Compute策略時,如果沒有許可權會看到授權說明,點擊授權。
在彈出的服務關聯角色授權頁面,單擊確定 即可完成授權動作,如不授權,則無法使用Function Compute策略功能。
在初次使用Function Compute策略時需要授權,有兩個時機會觸發授權:
建立自訂解析記錄,選擇Function Compute策略時。
進入策略管理列表後,Function Compute策略列表中會提示需要授權。

2. 建立自訂解析函數
您需先開通阿里雲Function Compute服務,並開發自訂解析函數。開發完成後,請發布服務和函數,並產生正式的版本或別名。
為確保 HTTPDNS Function Compute策略的安全穩定運行,配置策略時請勿使用預設的 Latest 版本,應明確指定發行的服務與函數版本。
HTTPDNS 同時支援 FC 2.0 和 FC 3.0,但推薦使用 FC 3.0(FC 2.0 已不推薦)。如需瞭解兩者區別,請參見:2.0和3.0區別。
如仍需建立2.0 函數,請參考建立2.0函數。
建立3.0函數
登入 Function Compute控制台,在頂部功能表列,選擇地區。
在左側選擇函數菜單,在函數列表頁面點擊建立函數。

在建立函數頁面,選擇“事件函數”,按需配置參數,程式碼範例可選擇“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. 綁定函數解析計算到解析網域名稱
每個需要自訂解析的網域名稱可以配置多個地區的Function Compute服務,多個自訂解析網域名稱的Function Compute策略可以配置相同的Function Compute服務。
操作步驟
登入EMAS控制台。
在左側導覽列選擇解析管理> 自訂解析。
點擊添加自訂解析,策略類型選擇Function Compute策略。

您可以做以下配置,配置完成後,點擊確定會回到策略列表中。
參數
說明
地區
必填,選擇Function Compute服務所在的地區,比如:您在上海地區建立了一個Function Compute服務,這裡就選擇上海。
FC版本
現在同時支援FC2.0和FC3.0的函數配置,預設是FC3.0,推薦使用FC3.0。
服務
必填,選擇地區下對應的Function Compute服務,FC2.0版本才有該欄位。
服務版本/別名
必填,選擇對應服務的版本或者別名,FC2.0版本才有該欄位。
說明不推薦使用Function ComputeLATEST版本。
BEFORE_READ_CACHE階段的自訂解析函數
在讀取HTTPDNS服務端緩衝前鉤子階段,可在此階段配置對應的Function Compute函數。可選擇不啟用。
BEFORE_WRITE_CACHE階段的自訂解析函數
在HTTPDNS服務端遞迴解析後寫入緩衝前鉤子階段,可在此階段配置對應的Function Compute函數。可選擇不啟用。
BEFORE_WRITE_RESPONSE階段的自訂解析函數
在HTTPDNS服務端寫入緩衝後構造返回內容前鉤子階段,可在此階段配置對應的Function Compute函數。可選擇不啟用。
hook函數功能單元測試
用來測試HTTPDNS服務和Function Compute服務的連通性:
測試成功:代表HTTPDNS服務可正常連通已配置的Function Compute服務。
測試失敗:代表HTTPDNS服務還不能夠連通已經配置的Function Compute服務。
後續步驟
參考以上內容,您已經配置了基於Function Compute的自訂解析,請參考整體使用流程繼續完成後續步驟。