Topik ini menjelaskan parameter input dan output dari fungsi resolusi yang ditentukan pengguna serta cara menulis fungsi tersebut.
Mekanisme resolusi kebijakan komputasi untuk fungsi resolusi yang ditentukan pengguna
Proses resolusi HTTPDNS terdiri dari beberapa tahap. Software-Defined Name System (SDNS) memungkinkan Anda memanggil fungsi resolusi yang dibuat di Function Compute pada tahap-tahap tersebut, sehingga menambahkan tahap tambahan ke dalam proses dan mengubah alur resolusi HTTPDNS untuk menerapkan logika kustom.

Tabel berikut menjelaskan kemampuan yang harus disampaikan oleh fungsi resolusi yang ditentukan pengguna berdasarkan tahap tambahan.
Stage Name | Deskripsi |
BEFORE_READ_CACHE | 1. Fungsi mengganti nama domain input dengan nama domain yang sebenarnya diselesaikan. 2. Fungsi mengganti kunci cache default berdasarkan konteks. |
BEFORE_WRITE_CACHE | 1. Fungsi memodifikasi hasil resolusi rekursif sebelum hasilnya disimpan dalam cache. 2. Fungsi mengganti kunci cache default berdasarkan konteks. |
BEFORE_WRITE_RESPONSE | Sebelum respons DNS akhir dikembalikan, fungsi memodifikasi respons untuk terakhir kalinya. Fungsi dipanggil pada tahap ini terlepas dari apakah cache tercapai atau tidak. |
Input dan output fungsi SDNS
HTTPDNS meneruskan konteks waktu proses ke fungsi Function Compute yang didefinisikan pengguna. Fungsi tersebut kemudian memproses konteks tersebut, dan hasil pemrosesannya digabungkan kembali ke dalam proses resolusi HTTPDNS.
Format parameter input
HTTPDNS meneruskan konteks waktu proses ke objek parameter input event fungsi FC dalam bentuk objek JSON dengan struktur tetap.
Bidang-bidang tersebut dijelaskan sebagai berikut:
Bidang | Subbidang | Deskripsi |
domainName | Nama domain yang ingin Anda selesaikan. | |
clientIp | Alamat IP egress publik client. Selanjutnya disebut sebagai IP client. | |
location | benua | Benua tempat IP client berada:
|
region | Kode negara atau wilayah (ISO 3166-1 alpha-2) untuk IP client. Kode tersebut dalam huruf kecil. Untuk informasi selengkapnya, lihat Kode negara atau wilayah. | |
isp | Penyedia layanan internet (ISP) tempat alamat IP klien berada. Bidang ini hanya valid untuk alamat IP klien di daratan Tiongkok. Nilai valid:
| |
provinsi | Provinsi tempat alamat IP klien berada. Bidang ini hanya valid untuk alamat IP klien di daratan Tiongkok. | |
hookType | Fungsi dijalankan pada tahap-tahap berikut:
| |
ips[] | Daftar alamat IP dari hasil penguraian hanya tersedia pada tahap BEFORE_WRITE_CACHE dan BEFORE_WRITE_RESPONSE. | |
ttl | Nilai time-to-live (TTL) dari hasil resolusi. Bidang ini valid di tahap BEFORE_WRITE_CACHE dan BEFORE_WRITE_RESPONSE. | |
parameters{} | Objek parameter SDNS yang ditentukan pengguna. | |
queryType | Jenis resolusi. Nilai 1 menunjukkan Rekaman A, yaitu alamat IPv4. Nilai 28 menunjukkan Rekaman AAAA, yaitu alamat IPv6. |
Contoh parameter input
{
"domainName": "www.aliyun.com", // Nama domain yang sedang diresolusi.
"clientIp": "192.168.1.4", // IP client.
"location": {
"continent": "asia", // Benua tempat IP client berada.
"region": "cn", // Negara atau wilayah tempat IP client berada.
"isp": "bgp", // Jalur carrier untuk IP client.
"province": "zhejiang" // Provinsi tempat IP client berada.
},
"ips": ["192.168.1.3"], // Daftar alamat IP dari hasil resolusi. Bidang ini tidak tersedia pada tahap BEFORE_READ_CACHE.
"ttl": 60, // TTL dari hasil resolusi. Bidang ini tidak tersedia pada tahap BEFORE_READ_CACHE.
"hookType": "BEFORE_WRITE_CACHE", // Tahap eksekusi fungsi.
"parameters":{ // Objek parameter yang dibawa dalam permintaan.
"param1":"p1", // Sesuai dengan parameter "sdns-param1=p1" dalam URL.
"param2":"p2"
}
}Format parameter output
Fungsi FC harus mengembalikan hasil yang telah diproses ke HTTPDNS dalam format berikut. Semua bidang bersifat opsional. Jika suatu bidang tidak dikembalikan atau nilainya null, HTTPDNS mengasumsikan bahwa fungsi SDNS tidak perlu memodifikasi bidang tersebut.
Bidang | Deskripsi |
ips[] | Alamat IP tempat nama domain diselesaikan. |
ttl | Nilai TTL dari hasil resolusi. Unit: detik. Nilai bidang ini harus lebih besar dari 30 dan kurang dari 3600. |
extra | Informasi tambahan yang dikembalikan ke klien. Nilai bidang ini bisa mencapai hingga 1.024 karakter. |
domainName | Mengganti nama domain yang akan diresolusi. Bidang ini hanya berlaku pada tahap |
cacheKey | Kunci cache default. Nilai bidang ini dapat berisi huruf kecil, angka, dan tanda hubung, dan harus memiliki panjang 1 hingga 32 karakter. Berlaku pada tahap |
hookResult | Menunjukkan apakah akan segera mengembalikan hasil setelah fungsi hook dijalankan. Nilai valid:
Hanya
|
Contoh parameter output
{
"ips": event.ips.concat(['192.168.1.2']),
"ttl": event.ttl * 2,
"extra": "some-thing-send-to-user"
// ,"domainName": "www.alibabacloud.com" Bidang ini hanya valid di tahap BEFORE_READ_CACHE.
// ,"cacheKey": "cache-key-001" Bidang ini hanya valid di tahap BEFORE_READ_CACHE dan BEFORE_WRITE_CACHE.
}Kemampuan fungsi
Anda dapat memanggil fungsi resolusi yang dibuat di Function Compute pada tahap tertentu dari proses resolusi HTTPDNS. Anda juga dapat menggunakan kemampuan berikut:
Mendapatkan informasi tentang wilayah dan ISP yang sesuai dengan alamat IP klien.
Memodifikasi hasil resolusi DNS dan nilai TTL.
Menambahkan output kustom dan mengembalikan output kustom bersama dengan hasil resolusi.
Demo fungsi
Contoh ini menggunakan waktu proses nodejs6 atau nodejs8.
'use strict';
exports.handler = (event, context, callback) => {
// Memformat parameter input menjadi objek.
const eventObj = JSON.parse(event.toString());
const {
location, // Wilayah
ips, // Hasil resolusi yang dikembalikan oleh server DNS otoritatif.
ttl, // TTL asli.
} = eventObj;
if (location.province === 'zhejiang' && location.isp === 'chinanet') {
// Ketika pengguna China Telecom di Zhejiang mengakses nama domain, kembalikan alamat IP yang ditentukan.
callback(null, {
ips: ips.concat(['1.1.X.X']), // Menambahkan alamat IP yang ditentukan ke dalam array alamat IP yang dikembalikan.
ttl: event.ttl * 2, // Memodifikasi TTL.
extra: "", // Parameter tambahan yang akan dikirim ke client.
});
} else {
// Pengembalian default.
callback(null, {
ips,
ttl,
extra: "",
});
}
};
Untuk informasi selengkapnya tentang cara membuat layanan di Function Compute, lihat Konfigurasi resolusi DNS kustom menggunakan Function Compute.