Bagaimana mencegah penimpaan 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.

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-objectContoh 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-objectpada 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 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-uploadContoh 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-id uploadID --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.

Contoh dua klien menulis item dengan nama kunci yang sama. Satu dengan UploadPart untuk MPU dan satu dengan PutObject dan tulisan bersyarat. CompleteMultipartUpload Operasi, yang dimulai setelahnya, gagal.
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.

Contoh dua klien, satu menggunakan unggahan multibagian dan satu mengirim permintaan hapus setelah MPU dimulai. Permintaan hapus 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.