Saat Alibaba Cloud CDN menghasilkan file log offline di bawah Nama domain akselerasi CDN, pemicu CDN secara otomatis memanggil fungsi Function Compute untuk memproses log tersebut. Topik ini memandu Anda dalam membuat pemicu CDN, mengonfigurasi event pengujian, dan menulis kode fungsi untuk menangani event CDN.
Cara kerja
Alibaba Cloud CDN menghasilkan file log offline di bawah Nama domain akselerasi CDN.
Pemicu CDN aktif dan meneruskan muatan event ke Function Compute.
Function Compute memanggil fungsi Anda dengan data event, sehingga Anda dapat menyimpan log, merefresh cache, atau menjalankan logika bisnis kustom.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Layanan dan fungsi Function Compute. Lihat Buat layanan dan Buat fungsi.
Bucket Object Storage Service (OSS) yang digunakan sebagai server origin CDN. Lihat Buat bucket.
Nama domain akselerasi CDN yang didukung oleh titik akhir bucket OSS. Lihat Tambahkan domain.
Contoh ini menggunakan titik akhir OSS sebagai server origin. Alibaba Cloud CDN juga mendukung alamat IP, nama domain, dan nama domain Function Compute sebagai server origin. Anda dapat mengonfigurasi server origin primer dan sekunder untuk load balancing. Untuk informasi selengkapnya, lihat Konfigurasikan server origin.
Langkah 1: Buat pemicu CDN
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, temukan layanan yang ingin Anda kelola dan klik Functions di kolom Actions.
Pada halaman Functions, klik fungsi yang ingin Anda modifikasi.
Di halaman detail fungsi, klik tab Triggers. Pilih versi atau alias dari daftar drop-down Version or Alias dan klik Create Trigger.
Di panel Create Trigger, konfigurasikan parameter berikut dan klik OK.
Parameter Deskripsi Contoh Trigger type Pilih Alibaba Cloud CDN. CDN Name Masukkan nama untuk pemicu. cdn-trigger Version or Alias Default-nya adalah LATEST. Untuk menyambungkan pemicu ke versi atau alias tertentu, pilih dari daftar drop-down Version or Alias di halaman detail fungsi. Lihat Kelola versi dan Kelola alias. LATEST Trigger event Pilih jenis event CDN yang memanggil fungsi. Untuk deskripsi setiap jenis event, lihat bagian Event CDN di bawah. CdnDomainStarted Trigger event version Hanya versi 1.0.0 yang didukung. 1.0.0 Domain name Masukkan nama domain akselerasi CDN. bucket*******.oss-cn-chengdu-internal.aliyuncs.com Description (Opsional) Masukkan deskripsi untuk pemicu. cdntrigger Role name Pilih AliyunCDNEventNotificationRole untuk memberikan izin CDN agar dapat memanggil fungsi Anda. Jika ini pertama kalinya Anda membuat pemicu CDN, klik Authorize Now pada prompt. AliyunCDNEventNotificationRole
Setelah pemicu dibuat, pemicu tersebut akan muncul di tab Triggers. Untuk memodifikasi atau menghapus pemicu yang sudah ada, lihat Kelola pemicu.
Langkah 2: Konfigurasikan event pengujian
Di halaman detail fungsi, klik tab Code. Klik ikon
di samping Test Function dan pilih Configure Test Parameters dari daftar drop-down.Di panel Configure Test Parameters, pilih tab Create New Test Event atau Modify Existing Test Event. Masukkan Event Name dan tempel muatan event, lalu klik OK.
Gunakan salah satu muatan contoh berikut tergantung pada jenis event CDN yang ingin Anda uji.
Struktur muatan event
Semua muatan event CDN memiliki struktur tingkat atas yang sama. Bidang dalam eventParameter berbeda-beda tergantung jenis event.
Bidang umum
| Bidang | Tipe | Contoh | Deskripsi |
|---|---|---|---|
eventName | String | LogFileCreated | Jenis event. |
eventSource | String | cdn | Sumber event. |
region | String | cn-hangzhou | Wilayah tempat Alibaba Cloud CDN berada. Default: cn-hangzhou. |
eventVersion | String | 1.0.0 | Versi pemicu event. |
eventTime | String | 2018-06-14T15:31:49+08:00 | Waktu saat event terjadi. |
traceId | String | c6459282-6a4d-4413-894c-e4ea3968**** | ID yang dikirimkan oleh sumber event untuk troubleshooting. |
resource.domain | String | example.com | Nama domain akselerasi CDN. |
userIdentity.aliUid | String | 164901546557**** | ID Akun Alibaba Cloud yang membuat namespace. |
LogFileCreated
Aktif ketika CDN menghasilkan file log offline baru di bawah Nama domain akselerasi CDN.
Ganti filePath dengan path ke file log CDN atau file pengujian.
{
"events": [
{
"eventName": "LogFileCreated",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventVersion": "1.0.0",
"eventTime": "2018-06-14T15:31:49+08:00",
"traceId": "c6459282-6a4d-4413-894c-e4ea3968****",
"userIdentity": {
"aliUid": "164901546557****"
},
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com",
"endTime": 1528959900,
"fileSize": 1788115,
"filePath": "http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx",
"startTime": 1528959600
}
}
]
}Bidang `eventParameter` untuk LogFileCreated
| Bidang | Tipe | Contoh | Deskripsi |
|---|---|---|---|
domain | String | example.com | Nama domain akselerasi CDN. |
startTime | Long | 1528959600 | Waktu mulai file log (Unix timestamp). |
endTime | Long | 1528959900 | Waktu akhir file log (Unix timestamp). |
fileSize | Long | 1788115 | Ukuran file log, dalam byte. |
filePath | String | http://cdnlog... | URL unduh file log. |
CachedObjectsRefreshed dan CachedObjectsPushed
Aktif ketika tugas refresh cache atau prefetch cache selesai.
{
"events": [
{
"eventName": "CachedObjectsRefreshed",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
"resource": {
"domain": "example.com"
},
"eventParameter": {
"objectPath": [
"/2018/03/16/13/33b430c57e7.mp4",
"/2018/03/16/14/4ff6b9bd54d.mp4"
],
"createTime": 1521180769,
"domain": "example.com",
"completeTime": 1521180777,
"objectType": "File",
"taskId": 2089687230
},
"userIdentity": {
"aliUid": "164901546557****"
}
}
]
}Bidang `eventParameter` untuk CachedObjectsRefreshed dan CachedObjectsPushed
| Bidang | Tipe | Contoh | Deskripsi |
|---|---|---|---|
domain | String | example.com | Nama domain akselerasi CDN. |
objectPath | Array | ["/2018/03/16/13/33b430c57e7.mp4"] | Path objek yang direfresh atau diprefetch. |
objectType | String | File | Tipe objek. Nilai yang valid: File, Directory. |
taskId | Long | 2089687230 | ID tugas refresh atau prefetch cache. |
createTime | Long | 1521180769 | Waktu saat tugas dibuat (Unix timestamp). |
completeTime | Long | 1521180777 | Waktu saat tugas selesai (Unix timestamp). |
CdnDomainStarted dan CdnDomainStopped
Aktif ketika Nama domain akselerasi CDN diaktifkan atau dinonaktifkan.
{
"events": [
{
"eventName": "CdnDomainStarted",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com",
"status": "online"
},
"userIdentity": {
"aliUid": "164901546557****"
}
}
]
}Bidang `eventParameter` untuk CdnDomainStarted dan CdnDomainStopped
| Bidang | Tipe | Contoh | Deskripsi |
|---|---|---|---|
domain | String | example.com | Nama domain akselerasi CDN. |
status | String | online | Status domain setelah event. |
CdnDomainAdded dan CdnDomainDeleted
Aktif ketika Nama domain akselerasi CDN ditambahkan ke atau dihapus dari akun Anda.
{
"events": [
{
"eventName": "CdnDomainAdded",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com"
},
"userIdentity": {
"aliUid": "164901546557****"
}
}
]
}Bidang `eventParameter` untuk CdnDomainAdded dan CdnDomainDeleted
| Bidang | Tipe | Contoh | Deskripsi |
|---|---|---|---|
domain | String | example.com | Nama domain akselerasi CDN. |
Langkah 3: Tulis dan uji fungsi
Di halaman detail fungsi, klik tab Code. Masukkan kode fungsi Anda di editor kode dan klik Deploy. Contoh Python berikut membaca jenis event dan mengekstrak bidang relevan dari muatan. Semua jenis event menggunakan handler yang sama — fungsi melakukan percabangan berdasarkan
eventNameuntuk menerapkan logika yang sesuai.# -*- coding: utf-8 -*- import logging import json logger = logging.getLogger("cdn-sample") def handler(event, context): evt = json.loads(event) eventObj = evt["events"][0] eventName = eventObj['eventName'] info = "" eventParam = eventObj['eventParameter'] domain = eventParam['domain'] if eventName == "CachedObjectsRefreshed" or eventName == "CachedObjectsPushed": objPathList = eventParam['objectPath'] info = ",".join(objPathList) elif eventName == "LogFileCreated": info = eventParam['filePath'] elif eventName == "CdnDomainStarted" or eventName == "CdnDomainStopped": # Logika bisnis yang sesuai pass elif eventName == "CdnDomainAdded" or eventName == "CdnDomainDeleted": # Logika bisnis yang sesuai pass return f"eventName:{eventName}, domain: {domain}, info: {info}"Di tab Code, klik Test Function. Hasilnya akan muncul di tab Code setelah fungsi dijalankan.
Event CDN
Jenis event CDN berikut didukung. Pilih jenis event saat membuat pemicu CDN.
| Jenis Peristiwa | Kapan aktif |
|---|---|
LogFileCreated | CDN menghasilkan file log offline untuk nama domain akselerasi CDN. |
CachedObjectsRefreshed | Tugas refresh cache selesai. |
CachedObjectsPushed | Tugas prefetch cache selesai. |
CachedObjectsBlocked | Tugas blokir cache selesai. |
CdnDomainStarted | Nama domain akselerasi CDN diaktifkan. |
CdnDomainStopped | Nama domain akselerasi CDN dinonaktifkan. |
CdnDomainAdded | Nama domain akselerasi CDN ditambahkan ke akun Anda. |
CdnDomainDeleted | Nama domain akselerasi CDN dihapus dari akun Anda. |
Untuk panduan memilih jenis event, lihat bagian event CDN di Ikhtisar.
Langkah selanjutnya
Untuk mengonfigurasi pemicu menggunakan alat selain konsol:
Untuk memodifikasi atau menghapus pemicu yang sudah ada, lihat Kelola pemicu.