Saat Anda perlu memproses, menyinkronkan, memantau, memicu alur kerja bisnis, atau mencatat perubahan pada objek di OSS secara real-time, Anda dapat mengonfigurasi aturan notifikasi event untuk menentukan objek yang akan dipantau dan menerima notifikasi tepat waktu mengenai event terkait.
Prasyarat
Anda telah mengaktifkan Simple Message Queue (SMQ). Anda dapat mengaktifkan SMQ di halaman produk SMQ.
Catatan penggunaan
Notifikasi event melibatkan panggilan antara OSS dan SMQ. Ketika suatu operasi di OSS memicu aturan notifikasi event, OSS menginstruksikan SMQ untuk mengirim pesan notifikasi. Panggilan dari OSS ke SMQ ini mungkin gagal. Anda dapat memeriksa nilai header
x-oss-event-statusdalam respons untuk menentukan apakah notifikasi berhasil dipicu. Nilainya dikodekan dalam Base64. Jika nilai setelah didekode adalah{"Result": "Ok"}, panggilan ke SMQ berhasil. Jika nilai yang didekode bukan{"Result": "Ok"}, panggilan ke SMQ gagal.Penggunaan fitur notifikasi event akan dikenakan biaya SMQ. Untuk informasi selengkapnya, lihat Penagihan.
Untuk daftar wilayah tempat Anda dapat mengonfigurasi notifikasi event untuk bucket, lihat Wilayah yang didukung.
Anda dapat mengonfigurasi maksimal 10 aturan notifikasi event di setiap wilayah. Jika bisnis Anda memerlukan lebih banyak aturan, hubungi dukungan teknis.
Objek TS dan M3U8 yang dihasilkan dari aliran Real-Time Messaging Protocol (RTMP) tidak memicu aturan notifikasi event. Untuk informasi selengkapnya tentang streaming RTMP, lihat Operasi terkait LiveChannel.
Cara kerja
Setelah Anda membuat aturan notifikasi event, jika suatu operasi pada bucket OSS Anda memicu aturan tersebut, SMQ akan mengirim pesan mengenai event tersebut ke server HTTP atau antrian SMQ yang Anda tentukan. Gambar berikut menunjukkan proses ini.
Jenis event
Group | Type | Description |
ObjectCreated (Create object) | ObjectCreated:PutObject | Sebuah objek diunggah menggunakan operasi PutObject. Untuk informasi selengkapnya, lihat PutObject. |
ObjectCreated:PostObject | Sebuah objek diunggah menggunakan operasi PostObject. Untuk informasi selengkapnya, lihat PostObject. | |
ObjectCreated:CopyObject | Sebuah objek disalin. Untuk informasi selengkapnya, lihat CopyObject. | |
ObjectCreated:AppendObject | Sebuah objek diunggah dengan menambahkan data ke dalamnya. Untuk informasi selengkapnya, lihat AppendObject. | |
ObjectCreated:InitiateMultipartUpload | Tugas unggah multi-bagian dimulai. Untuk informasi selengkapnya, lihat InitiateMultipartUpload. | |
ObjectCreated:UploadPart | Sebuah bagian diunggah untuk tugas unggah multi-bagian. Untuk informasi selengkapnya, lihat UploadPart. | |
ObjectCreated:UploadPartCopy | Sebuah bagian disalin untuk tugas unggah multi-bagian. Untuk informasi selengkapnya, lihat UploadPartCopy. | |
ObjectCreated:CompleteMultipartUpload | Tugas unggah multi-bagian selesai. Untuk informasi selengkapnya, lihat CompleteMultipartUpload. | |
ObjectCreated:PutSymlink | Tautan simbolik dibuat untuk sebuah objek. Untuk informasi selengkapnya, lihat PutSymlink. | |
ObjectCreated:Mirror | Objek dibuat melalui pencerminan. Catatan Secara default, pencerminan OSS memicu event ObjectCreated:PutObject. Untuk memicu event ObjectCreated:Mirror sebagai gantinya, Anda harus mengajukan tiket untuk mengaktifkan fitur ini. | |
ObjectCreated:* | Event apa pun yang diawali dengan Catatan Wildcard ini secara otomatis mencakup semua jenis event baru yang ditambahkan di bawah kategori ObjectCreated di masa mendatang, seperti | |
ObjectDownloaded (Download object) | ObjectDownloaded:GetObject | Sebuah objek diunduh. |
ObjectModified (Modify object) | ObjectModified:UpdateObjectMeta | Metadata objek dimodifikasi menggunakan operasi UpdateObjectMeta. |
ObjectModified:ChangeStorageClass | Kelas penyimpanan objek diubah oleh aturan siklus hidup. | |
ObjectModified:* | Event apa pun yang diawali dengan Catatan Wildcard ini secara otomatis mencakup semua jenis event baru yang ditambahkan di bawah kategori ObjectModified di masa mendatang, seperti | |
ObjectRemoved (Delete object) | ObjectRemoved:DeleteObject | Sebuah objek tunggal dihapus. Untuk informasi selengkapnya, lihat DeleteObject. |
ObjectRemoved:DeleteObjects | Beberapa objek dihapus. Untuk informasi selengkapnya, lihat DeleteMultipleObjects. | |
ObjectRemoved:AbortMultipartUpload | Tugas unggah multi-bagian dibatalkan dan bagian-bagiannya dihapus. Untuk informasi selengkapnya, lihat AbortMultipartUpload. | |
ObjectRemoved:* | Event apa pun yang diawali dengan Catatan Wildcard ini secara otomatis mencakup semua jenis event baru yang ditambahkan di bawah kategori ObjectRemoved di masa mendatang, seperti | |
ObjectReplication (Replicate object) | ObjectReplication:ObjectCreated | Operasi tulis terjadi sebagai bagian dari proses replikasi data. |
ObjectReplication:ObjectRemoved | Operasi hapus terjadi sebagai bagian dari proses replikasi data. | |
ObjectReplication:ObjectModified | Operasi timpa terjadi sebagai bagian dari proses replikasi data. | |
ObjectReplication:* | Event apa pun yang diawali dengan Catatan Wildcard ini secara otomatis mencakup semua jenis event baru yang ditambahkan di bawah kategori ObjectReplication di masa mendatang, seperti | |
ObjectRestore (Restore object) | ObjectRestore:FinishRestore | Sebuah objek berhasil dipulihkan dari kelas penyimpanan arsip ke status yang dapat diakses. Jenis event ini hanya berlaku untuk objek dalam kelas penyimpanan Cold Archive dan Deep Cold Archive. |
Pesan notifikasi
Notifikasi event OSS berisi muatan JSON yang dikodekan Base64. Setelah didekode, muatan tersebut memiliki struktur berikut:
{
"events": [
{
"eventName": "", // Jenis notifikasi event.
"eventSource": "", // Sumber notifikasi event. Nilai ini tetap "acs:oss".
"eventTime": "", // Waktu terjadinya event, dalam format ISO 8601.
"eventVersion": "", // Versi notifikasi event. Versi saat ini adalah "1.0".
"oss": {
"bucket": {
"arn": "", // Nama Sumber Daya Alibaba Cloud (ARN) bucket, dalam format "acs:oss:region:uid:bucketname".
"name": "", // Nama bucket tujuan.
"ownerIdentity": "" // Pemilik bucket.
},
"object": {
"deltaSize": "", // Perubahan ukuran objek. Misalnya, ketika objek baru dibuat, nilai ini adalah ukuran objek. Ketika objek ditimpa, nilai ini adalah selisih ukuran antara objek baru dan lama, yang bisa bernilai negatif.
"eTag": "", // ETag objek.
"key": "", // Kunci objek.
"position": "", // Posisi awal untuk operasi append. Parameter ini hanya berlaku untuk event ObjectCreated:AppendObject. Permintaan AppendObject pertama untuk suatu objek dimulai dari byte 0.
"readFrom": "", // Posisi awal untuk operasi baca. Parameter ini hanya berlaku untuk event ObjectDownloaded:GetObject. Untuk permintaan non-range, nilai ini adalah 0. Untuk permintaan range, nilai ini adalah byte awal permintaan.
"readTo": "", // Posisi akhir untuk operasi baca. Parameter ini hanya berlaku untuk event ObjectDownloaded:GetObject. Untuk permintaan non-range, nilai ini adalah ukuran objek. Untuk permintaan range, nilai ini adalah byte akhir permintaan range ditambah 1.
"size": "" // Ukuran objek.
},
"ossSchemaVersion": "", // Versi skema ini. Versi saat ini adalah "1.0".
"ruleId": "GetObject", // ID aturan notifikasi event yang sesuai.
"region": "", // Wilayah bucket.
"requestParameters": {
"sourceIPAddress": "" // Alamat IP sumber permintaan.
},
"responseElements": {
"requestId": "" // ID permintaan.
},
"userIdentity": {
"principalId": "" // UID pengguna yang membuat permintaan.
},
"xVars": { // Parameter kustom dalam fitur callback unggahan OSS.
"x:callback-var1":"value1",
"x:callback-var2":"value2"
}
}
}
]
}Berikut ini contoh pesan notifikasi:
{"events": [
{
"eventName": "ObjectDownloaded:GetObject",
"eventSource": "acs:oss",
"eventTime": "2016-07-01T11:17:30.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-shenzhen:114895646818****:event-notification-test-shenzhen",
"name": "event-notification-test-shenzhen",
"ownerIdentity": "114895646818****"},
"object": {
"deltaSize": 0,
"eTag": "0CC175B9C0F1B6468E1199E269772661",
"key": "test",
"readFrom": 0,
"readTo": 1,
"size": 1
},
"ossSchemaVersion": "1.0",
"ruleId": "GetObjectRule",
"region": "cn-shenzhen",
"requestParameters": {
"sourceIPAddress": "198.51.100.1"
},
"responseElements": {
"requestId": "5FF16B65F05BC932307A3C3C"
},
"userIdentity": {
"principalId": "114895646818****"
},
"xVars": {
"x:callback-var1":"value1",
"x:callback-var2":"value2"
}
}
}
]
}Prosedur
-
Masuk ke Konsol OSS.
-
Di panel navigasi kiri, klik Buckets. Di halaman yang muncul, klik nama bucket target.
Di panel navigasi kiri, pilih Data Processing > Event Notification.
Di halaman Event Notification, klik Create Rule.
Di panel Create Rule, konfigurasikan parameter berikut:
Parameter
Description
Rule Name
Tentukan nama untuk aturan notifikasi event.
Nama aturan harus unik dalam wilayah yang sama untuk Akun Alibaba Cloud yang sama. Nama harus dimulai dengan huruf, dapat berisi huruf kapital, huruf kecil, angka, dan tanda hubung (-), serta tidak lebih dari 85 karakter.
Event Type
Pilih satu atau beberapa jenis event untuk objek target. Misalnya, jika Anda ingin menerima notifikasi saat objek dibuat atau ditimpa melalui operasi salin, pilih CopyObject.
Anda dapat mengonfigurasi satu aturan dengan beberapa jenis event untuk objek target, atau mengonfigurasi beberapa aturan untuk objek yang sama. Saat mengonfigurasi beberapa aturan, perhatikan hal berikut:
Jika beberapa aturan berlaku untuk Objek target yang sama, jenis event-nya tidak boleh sama. Misalnya, jika Aturan A dikonfigurasi dengan event CopyObject untuk awalan
images, dan Aturan B berlaku untuk Objek apa pun di bawah awalanimages, jenis event untuk Aturan B tidak boleh mencakup CopyObject.Jika beberapa aturan berlaku untuk Objek target yang berbeda, jenis event-nya dapat sama atau berbeda. Misalnya, Aturan A dikonfigurasi untuk event PutObject untuk objek dengan awalan
imagesdan akhiran.png. Jika Aturan B berlaku untuk objek dengan awalanlogdan akhiran.jpg, jenis event-nya dapat mencakup PutObject atau DeleteObject.
PentingSaat Anda menghapus objek dari bucket yang telah diaktifkan Pengendalian versi, event DeleteObject atau DeleteObjects tidak dipicu jika Anda tidak menentukan ID versi. Hal ini karena operasi hapus tanpa ID versi tidak menghapus permanen versi objek apa pun. Sebaliknya, versi saat ini menjadi versi sebelumnya dan penanda hapus ditambahkan.
Untuk informasi selengkapnya tentang operasi objek yang sesuai dengan jenis event, lihat Jenis event.
Object Matching
Tentukan objek target untuk notifikasi event.
Cocokkan objek berdasarkan Full Name
Untuk mencocokkan objek bernama
exampleobject.txtdi Direktori root bucket, masukkan exampleobject.txt.Untuk mencocokkan objek bernama
myphoto.jpgdi direktoridestdirbucket, masukkan destdir/myphoto.jpg.
Cocokkan objek berdasarkan Prefix/Suffix
Untuk mencocokkan semua objek di bucket, biarkan Prefix dan Suffix kosong.
Untuk mencocokkan semua objek di direktori
examplefolder, atur Prefix menjadi examplefolder/ dan biarkan Suffix kosong.Untuk mencocokkan semua objek dengan ekstensi
.jpgdi bucket, biarkan Prefix kosong dan atur Suffix menjadi .jpg.Untuk mencocokkan semua objek dengan ekstensi
.mp3di direktori examplefolder, atur Prefix menjadi examplefolder/ dan Suffix menjadi .mp3.
Anda dapat mengklik Add Condition untuk membuat hingga lima aturan object matching.
Subscription Endpoint
Tentukan titik akhir yang menerima event. Jenis langganan yang didukung meliputi HTTP dan Queue.
Klik OK.
Setelah menyelesaikan langkah-langkah ini, aturan notifikasi event akan berlaku dalam waktu sekitar 10 menit.
FAQ
Mengapa notifikasi event tidak dipicu saat saya menghapus objek?
Referensi
Anda dapat menentukan objek mana yang akan dipantau dalam aturan notifikasi event. Saat event tertentu terjadi pada objek tersebut, Anda dapat menerima notifikasi event melalui titik akhir yang ditentukan di SMQ. Untuk informasi selengkapnya, lihat Tutorial: Gunakan SMQ untuk mengimplementasikan notifikasi event OSS.
Jika Anda tidak dapat menerima isi pesan di HttpEndpoint, kemungkinan karena Anda menggunakan metode POST. Untuk solusinya, lihat Apa yang harus saya lakukan jika tidak dapat menerima isi pesan saat menggunakan PHP untuk menulis antarmuka HttpEndpoint di Simple Message Queue (formerly MNS)?
Jika Anda ingin mengimplementasikan callback unggahan, Anda juga dapat menggunakan fitur callback unggahan yang disediakan oleh OSS. Untuk informasi selengkapnya, lihat Callback unggahan.