View a markdown version of this page

Cara mencegah penulisan objek dengan penulisan bersyarat - Amazon Simple Storage Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Cara mencegah penulisan objek dengan penulisan bersyarat

Dengan menggunakan penulisan bersyarat, Anda dapat menambahkan header tambahan ke WRITE permintaan Anda untuk menentukan prasyarat untuk operasi Amazon S3 Anda. Untuk menulis objek secara kondisional, tambahkan HTTP If-None-Match atau If-Match header.

If-None-MatchHeader mencegah penulisan ulang data yang ada dengan memvalidasi bahwa tidak ada objek dengan nama kunci yang sama di bucket Anda.

Atau, Anda dapat menambahkan If-Match header untuk memeriksa tag entitas objek (ETag) sebelum menulis objek. Dengan header ini, Amazon S3 membandingkan nilai ETag yang disediakan dengan nilai ETag objek di S3. Jika nilai ETag tidak cocok, operasi gagal.

Pemilik bucket dapat menggunakan kebijakan bucket untuk menerapkan penulisan bersyarat untuk objek yang diunggah. Untuk informasi selengkapnya, lihat Menerapkan penulisan bersyarat di bucket Amazon S3.

catatan

Untuk menggunakan penulisan bersyarat, Anda harus menggunakan AWS Tanda Tangan Versi 4 untuk menandatangani permintaan.

Cara mencegah penulisan objek berdasarkan nama kunci

Anda dapat menggunakan header kon If-None-Match disional HTTP untuk memeriksa apakah objek sudah ada di bucket yang ditentukan berdasarkan nama kuncinya sebelum membuatnya atau menyalinnya ke bucket tujuan.

Menulis bersyarat dengan pemeriksaan If-None-Match header HTTP untuk keberadaan objek selama WRITE operasi. Jika nama kunci yang identik ditemukan di bucket, operasi gagal. Tanpa If-None-Match header HTTP, jika Anda mengunggah atau menyalin objek dengan nama kunci yang identik dalam bucket yang tidak diberi versi atau ditangguhkan versi, objek akan diganti. Untuk informasi selengkapnya tentang menggunakan nama kunci, lihatPenamaan objek Amazon S3.

catatan

If-None-MatchHeader HTTP hanya berlaku untuk versi objek saat ini dalam bucket versi.

Untuk melakukan penulisan bersyarat dengan If-None-Match header HTTP, Anda harus memiliki s3:PutObject izin. Hal ini memungkinkan pemanggil untuk memeriksa keberadaan objek di bucket. If-None-MatchHeader mengharapkan nilai* (asterisk).

Anda dapat menggunakan If-None-Match header dengan API berikut:

put-objectContoh perintah berikut mencoba untuk melakukan penulisan kondisional untuk objek dengan nama kuncidir-1/my_images.tar.bz2.

aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-none-match "*"

Untuk informasi selengkapnya, lihat put-object dalam AWS CLI Referensi Perintah.

Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam Panduan AWS Command Line Interface Pengguna.

copy-objectContoh perintah berikut mencoba menyalin objek ke bucket tujuan dengan penulisan kondisional untuk objek dengan nama kuncidir-1/my_images.tar.bz2.

aws s3api copy-object --copy-source amzn-s3-demo-bucket/key --key dir-1/my_images.tar.bz2 --bucket amzn-s3-demo-bucket2 --if-none-match "*"

Untuk informasi selengkapnya, lihat copy-object dalam AWS CLI Referensi Perintah.

Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam Panduan AWS Command Line Interface Pengguna.

complete-multipart-uploadContoh perintah berikut mencoba menyelesaikan upload multipart dengan penulisan kondisional untuk objek dengan nama dir-1/my_images.tar.bz2 kunci. Dalam contoh ini, awalan file://digunakan untuk memuat struktur JSON dari file di folder lokal bernama daftar semua bagian mpustruct yang telah diunggah untuk unggahan multipart tertentu tnis.

aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --upload-id upload-id --if-none-match "*"

Untuk informasi selengkapnya, lihat complete-multipart-upload dalam AWS CLI Referensi Perintah.

Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam Panduan AWS Command Line Interface Pengguna.

Cara mencegah penulisan ulang jika objek telah berubah

ETag objek adalah string yang unik untuk objek dan mencerminkan perubahan pada konten objek. Anda dapat menggunakan If-Match header untuk membandingkan nilai ETag objek dalam bucket Amazon S3 dengan yang Anda berikan selama WRITE operasi. Jika nilai ETag tidak cocok, operasi gagal. Untuk informasi lebih lanjut tentang ETag, lihat. Menggunakan Content-MD5 dan ETag untuk memverifikasi objek yang diunggah

Untuk melakukan penulisan bersyarat dengan If-Match header HTTP, Anda harus memiliki s3:GetObject izin s3:PutObject dan. Ini memungkinkan pemanggil untuk memeriksa ETag dan memverifikasi status objek dalam bucket. If-MatchHeader mengharapkan nilai ETag sebagai string.

Anda dapat menggunakan If-Match header dengan API berikut:

put-objectContoh perintah berikut mencoba untuk melakukan penulisan bersyarat dengan nilai 6805f2cfc46c0f04559748bb039d69ae ETag yang disediakan.

aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69ae"

Untuk informasi selengkapnya, lihat put-object dalam AWS CLI Referensi Perintah.

Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam Panduan AWS Command Line Interface Pengguna.

copy-objectContoh perintah berikut mencoba untuk melakukan penulisan bersyarat dengan nilai 6805f2cfc46c0f04559748bb039d69ae ETag yang disediakan.

aws s3api copy-object --copy-source amzn-s3-demo-bucket/key --key dir-1/my_images.tar.bz2 --bucket amzn-s3-demo-bucket2 --if-match "6805f2cfc46c0f04559748bb039d69ae"

Untuk informasi selengkapnya, lihat copy-object dalam AWS CLI Referensi Perintah.

Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam Panduan AWS Command Line Interface Pengguna.

complete-multipart-uploadContoh perintah berikut mencoba menyelesaikan unggahan multipart dengan penulisan bersyarat menggunakan nilai ETag yang disediakan. 6805f2cfc46c0f04559748bb039d69ae Dalam contoh ini, awalan file://digunakan untuk memuat struktur JSON dari file di folder lokal bernama daftar semua bagian mpustruct yang telah diunggah untuk unggahan multipart tertentu tnis.

aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --upload-id upload-id --if-match "6805f2cfc46c0f04559748bb039d69ae"

Untuk informasi selengkapnya, lihat complete-multipart-upload dalam AWS CLI Referensi Perintah.

Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam Panduan AWS Command Line Interface Pengguna.

Perilaku menulis bersyarat

Menulis atau menyalin bersyarat dengan If-None-Match header

Menulis bersyarat dengan evaluasi If-None-Match header terhadap objek yang ada dalam bucket. Jika tidak ada objek yang ada dengan nama kunci yang sama di bucket, operasi tulis berhasil, menghasilkan 200 OK respons. Jika ada objek yang ada, operasi tulis gagal, menghasilkan 412 Precondition Failed respons.

Untuk bucket dengan pembuatan versi diaktifkan, jika tidak ada versi objek saat ini dengan nama yang sama, atau jika versi objek saat ini adalah penanda hapus, operasi penulisan berhasil. Jika tidak, itu menghasilkan operasi penulisan yang gagal dengan 412 Precondition Failed respons.

Jika beberapa penulisan atau salinan bersyarat terjadi untuk nama objek yang sama, operasi penulisan pertama yang diselesaikan berhasil. Amazon S3 kemudian gagal menulis berikutnya dengan 412 Precondition Failed respons.

Anda juga dapat menerima 409 Conflict respons dalam kasus permintaan bersamaan jika permintaan penghapusan ke objek berhasil sebelum operasi penulisan bersyarat pada objek tersebut selesai. Saat menggunakan penulisan bersyarat denganPutObject, unggahan dapat dicoba lagi setelah menerima kesalahan. 409 Conflict Saat menggunakanCompleteMultipartUpload, seluruh unggahan multipart harus dimulai kembali CreateMultipartUpload untuk mengunggah objek lagi setelah menerima kesalahan. 409 Conflict

Menulis atau menyalin bersyarat dengan If-Match header

If-MatchHeader mengevaluasi terhadap objek yang ada dalam bucket. Jika ada objek yang ada dengan nama kunci yang sama dan ETag yang cocok, operasi tulis berhasil, menghasilkan 200 OK respons. Jika ETag tidak cocok, operasi tulis gagal dengan 412 Precondition Failed respons.

Anda juga dapat menerima 409 Conflict tanggapan dalam kasus permintaan bersamaan.

Anda akan menerima 404 Not Found respons jika permintaan penghapusan bersamaan ke objek berhasil sebelum operasi penulisan bersyarat pada objek tersebut selesai, karena kunci objek tidak ada lagi. Anda harus mengunggah ulang objek ketika Anda menerima tang 404 Not Found gapan.

Jika tidak ada versi objek saat ini dengan nama yang sama, atau jika versi objek saat ini adalah penanda hapus, operasi gagal dengan 404 Not Found kesalahan.

Skenario penulisan bersyarat

Pertimbangkan skenario berikut di mana dua klien menjalankan operasi pada bucket yang sama.

Penulisan bersyarat selama unggahan multibagian

Penulisan bersyarat tidak mempertimbangkan permintaan unggahan multibagian yang sedang berlangsung karena itu belum sepenuhnya objek yang ditulis. Pertimbangkan contoh berikut di mana Klien 1 mengunggah objek menggunakan upload multipart. Selama upload multipart, Client 2 berhasil menulis objek yang sama dengan operasi penulisan bersyarat. Selanjutnya, ketika Klien 1 mencoba menyelesaikan unggahan multipart menggunakan penulisan bersyarat, unggahan gagal.

catatan

Skenario ini akan menghasilkan 412 Precondition Failed respons untuk keduanya If-None-Match dan If-Match header.

Contoh berikut menunjukkan dua klien menulis item dengan nama kunci yang sama. Satu dengan UploadPart untuk MPU dan satu dengan PutObject dan tulisan bersyarat. CompleteMultipartUploadOperasi, yang dimulai setelahnya, gagal.

Dua klien menulis ke kunci yang sama menggunakan UploadPart dan bersyarat PutObject. CompleteMultipartUpload gagal.
Penghapusan secara bersamaan selama unggahan multibagian

Jika permintaan penghapusan berhasil sebelum permintaan penulisan bersyarat dapat diselesaikan, Amazon S3 mengembalikan 404 Not Found respons 409 Conflict atau untuk operasi penulisan. Ini karena permintaan penghapusan yang dimulai sebelumnya lebih diutamakan daripada operasi penulisan bersyarat. Dalam kasus seperti itu, Anda harus memulai unggahan multipart baru.

catatan

Skenario ini akan menghasilkan 409 Conflict respons untuk If-None-Match header dan 404 Not Found respons untuk If-Match header.

Contoh berikut menunjukkan dua klien, satu menggunakan upload multipart dan satu mengirim permintaan hapus setelah MPU dimulai. Permintaan hapus selesai sebelum penulisan bersyarat dimulai.

Satu klien menggunakan MPU dan yang lain mengirim permintaan hapus. Penghapusan selesai sebelum penulisan bersyarat dimulai.
catatan

Untuk meminimalkan biaya penyimpanan, kami menyarankan untuk Anda mengonfigurasi aturan siklus hidup untuk menghapus unggahan multibagian yang tidak lengkap setelah beberapa hari tertentu dengan menggunakan tindakan AbortIncompleteMultipartUpload. Untuk informasi selengkapnya tentang membuat aturan siklus hidup untuk menghapus unggahan multibagian yang tidak lengkap, lihat Mengonfigurasi konfigurasi siklus hidup bucket untuk menghapus unggahan multibagian yang tidak lengkap.