Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bagaimana mencegah penimpaan objek dengan penulisan bersyarat
Dengan penulisan bersyarat, Anda dapat menambahkan header tambahan ke permintaan tulis Anda untuk menentukan prasyarat operasi S3 Anda. Ini dapat mencegah penimpaan data yang ada dengan memvalidasi tidak ada objek yang ada dengan nama kunci yang sama yang sudah ada di bucket Anda. Penulisan bersyarat berfungsi untuk API permintaan ke ember tujuan umum dan ember direktori.
Saat Anda mengunggah objek ke Amazon S3, Anda menentukan nama kuncinya. Nama kuncinya adalah pengidentifikasi unik dan peka huruf besar/kecil dari suatu objek dalam ember. Jika Anda mengunggah objek dengan nama kunci yang identik dalam bucket yang tidak berversi atau ditangguhkan versi, objek akan ditimpa. Dalam bucket berversi, objek yang paling baru diunggah akan menjadi versi objek saat ini.
Penulisan bersyarat akan memeriksa keberadaan objek selama WRITE
operasi. Jika nama kunci identik jika ditemukan di bucket WRITE
operasi akan gagal. Dengan penulisan bersyarat, Anda dapat memiliki beberapa klien yang menulis ke ember yang sama tanpa kemungkinan menimpa objek yang ada.
Untuk melakukan penulisan bersyarat, Anda harus memiliki s3:PutObject
izin. Izin ini memungkinkan penelepon untuk memeriksa keberadaan objek dalam ember. Anda dapat menggunakan penulisan bersyarat dengan presigned URLs with the. AWS SDKs
catatan
Untuk menggunakan penulisan bersyarat, Anda harus membuat permintaan over HTTPS (TLS) atau menggunakan AWS Signature Version 4 untuk menandatangani permintaan.
Didukung APIs
APIsDukungan S3 berikut menggunakan penulisan bersyarat:
Anda dapat menggunakan header berikut untuk menulis objek tergantung pada nama kunci objek. Untuk informasi tentang nama kunci objek lihat,Menamai objek Amazon S3.
PutObject
-
If-None-Match
— Unggah objek hanya jika tidak ada objek yang ada dengan nama kunci yang sama sudah ada di bucket yang ditentukan. Anda harus menggunakan nilai * (tanda bintang) dengan parameter ini.
put-object
Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk meng-upload objek dengan header tulis bersyarat menggunakan if-none-match
parameter.
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, silakan lihat put-object
Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam AWS Command Line Interface User Guide.
Untuk informasi selengkapnya tentang header ini, lihat PutObjectdi API Referensi Layanan Penyimpanan Sederhana Amazon.
CompleteMultipartUpload
-
If-None-Match
— Selesaikan unggahan hanya jika tidak ada objek yang ada dengan nama kunci yang sama yang sudah ada di bucket yang ditentukan. Anda harus menggunakan nilai * (tanda bintang) dengan parameter ini.
complete-multipart-upload
Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk menyelesaikan upload multipart dengan header tulis bersyarat menggunakan parameter. if-none-match
aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket
amzn-s3-demo-bucket
--key dir-1/my_images.tar.bz2 --upload-iduploadID
--if-none-match "*"
Untuk informasi selengkapnya, silakan lihat complete-multipart-uploadpada AWS CLI Command Reference.
Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam AWS Command Line Interface User Guide.
Untuk informasi selengkapnya tentang header ini, lihat CompleteMultipartUploaddi API Referensi Layanan Penyimpanan Sederhana Amazon.
Perilaku menulis bersyarat
Penulisan bersyarat mengevaluasi terhadap objek yang ada dalam ember. Jika tidak ada objek yang ada dengan nama kunci yang sama di bucket, maka operasi penulisan berhasil, menghasilkan 200
respons. Jika ada objek yang ada, maka operasi tulis gagal, menghasilkan 412 Precondition Failed
respons. Untuk bucket dengan versi diaktifkan, S3 memeriksa keberadaan versi objek saat ini dengan nama yang sama sebagai bagian dari evaluasi bersyarat. Jika tidak ada versi objek saat ini dengan nama yang sama, atau jika versi objek saat ini adalah penanda hapus, maka operasi tulis berhasil. Jika tidak, itu menghasilkan operasi penulisan yang gagal dengan 412 Precondition Failed
respons.
Jika beberapa penulisan bersyarat terjadi untuk nama objek yang sama, operasi penulisan pertama yang selesai akan berhasil. Amazon S3 kemudian akan gagal menulis berikutnya dengan tanggapan. 412 Precondition
Failed
Anda juga dapat menerima 409 Conflict
respons jika terjadi permintaan bersamaan, jika permintaan penghapusan ke objek berhasil sebelum operasi tulis bersyarat pada objek tersebut dapat diselesaikan. Ini karena permintaan hapus lebih diutamakan daripada operasi tulis bersyarat yang dimulai sebelumnya. Saat menggunakan penulisan bersyarat denganPutObject
, unggahan dapat dicoba lagi setelah menerima kesalahan. 409
Saat menggunakanCompleteMultipartUpload
, unggahan multibagian harus dimulai CreateMultipartUpload
ulang untuk mengunggah objek lagi setelah menerima kesalahan. 409
Pertimbangkan skenario berikut di mana dua klien menjalankan operasi pada bucket yang sama.
412 Prasyarat Tanggapan gagal
Penulisan bersyarat tidak mempertimbangkan permintaan unggahan multibagian yang sedang berlangsung karena itu belum sepenuhnya ditulis objek. Perhatikan contoh berikut di mana Klien 1 mengunggah objek menggunakan unggahan multipart. Selama pengunggahan multipart, Klien 2 berhasil menulis objek yang sama dengan operasi penulisan bersyarat. Selanjutnya, ketika Klien 1 mencoba menyelesaikan unggahan multibagian menggunakan penulisan bersyarat, unggahan gagal karena objek sudah ada.
409 Tanggapan konflik
Jika permintaan hapus berhasil sebelum permintaan tulis bersyarat dapat diselesaikan, Amazon S3 mengembalikan respons untuk 409 Conflict
operasi tulis. Ini karena permintaan hapus yang dimulai sebelumnya lebih diutamakan daripada operasi tulis bersyarat. Perhatikan contoh berikut di mana file puppy.txt
ada dalam ember. Klien 1 memulai unggahan multipart untuk file lain yang juga diberi nama puppy.txt
dengan maksud untuk menyelesaikan unggahan multipart dengan penulisan bersyarat. Selama upload Klien 2 menghapus puppy.txt
dari bucket. Ketika Klien 1 mencoba menggunakan CompleteMultipartUpload
untuk mengunggah puppy.txt
file mereka sendiri dengan penulisan bersyarat, itu akan gagal dengan 409
Conflict
respons. Dalam kasus seperti itu, Anda harus memulai unggahan multipart baru.
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.