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 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-Match
Header mencegah penimpaan 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 yang diberikan dengan ETag nilai objek di ETag S3. Jika ETag nilainya tidak cocok, operasi gagal.
Pemilik bucket dapat menggunakan kebijakan bucket untuk menerapkan penulisan bersyarat untuk objek yang diunggah. Untuk informasi selengkapnya, lihat Menegakkan penulisan bersyarat di ember Amazon S3.
catatan
Untuk menggunakan penulisan bersyarat, Anda harus membuat permintaan melalui HTTPS (TLS) atau menggunakan AWS Signature Version 4 untuk menandatangani permintaan.
Topik
Bagaimana mencegah penimpaan objek berdasarkan nama kunci
Anda dapat menggunakan header If-None-Match
bersyarat HTTP untuk memeriksa apakah objek sudah ada di bucket yang ditentukan berdasarkan nama kuncinya sebelum membuatnya. Saat Anda mengunggah objek ke Amazon S3, tentukan nama kunci: pengenal unik dan peka huruf besar/kecil dari objek dalam bucket. Tanpa If-None-Match
header HTTP, 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 menjadi versi objek saat ini. Penulisan bersyarat dengan If-None-Match
header HTTP memeriksa keberadaan objek selama WRITE
operasi. Jika nama kunci yang identik ditemukan di bucket, operasi gagal. Untuk informasi selengkapnya tentang menggunakan nama kunci, lihatMenamai objek Amazon S3.
Untuk melakukan penulisan bersyarat dengan If-None-Match
header HTTP Anda harus memiliki s3:PutObject
izin. Hal ini memungkinkan penelepon untuk memeriksa keberadaan objek dalam ember. If-None-Match
Header mengharapkan nilai * (tanda bintang).
Anda dapat menggunakan If-None-Match
header dengan yang berikut APIs:
put-object
Contoh perintah berikut mencoba untuk melakukan penulisan bersyarat untuk objek dengan nama dir-1/my_images.tar.bz2
kunci.
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
Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam AWS Command Line Interface User Guide.
Bagaimana mencegah penimpaan jika objek telah berubah
Objek ETag adalah string yang unik untuk objek dan mencerminkan perubahan pada konten objek. Anda dapat menggunakan If-Match
header untuk membandingkan ETag nilai objek di bucket Amazon S3 dengan yang Anda berikan selama operasi. WRITE
Jika ETag nilainya tidak cocok, operasi gagal. Untuk informasi lebih lanjut tentang ETags, lihatMenggunakan Konten- MD5 dan ETag untuk memverifikasi objek yang diunggah.
Untuk melakukan penulisan bersyarat dengan If-Match
header HTTP Anda harus memiliki s3:PutObject
dan s3:GetObject
izin. Hal ini memungkinkan penelepon untuk memeriksa ETag dan memverifikasi status objek dalam ember. If-Match
Header mengharapkan ETag nilai sebagai string.
Anda dapat menggunakan If-Match
header dengan yang berikut APIs:
put-object
Contoh perintah berikut mencoba untuk melakukan penulisan bersyarat dengan ETag nilai 6805f2cfc46c0f04559748bb039d69ae
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
Untuk informasi tentang AWS CLI, lihat Apa itu AWS Command Line Interface? dalam AWS Command Line Interface User Guide.
Perilaku menulis bersyarat
- Menulis bersyarat dengan header
If-None-Match
-
Penulisan bersyarat dengan
If-None-Match
header mengevaluasi objek yang ada dalam ember. Jika tidak ada objek yang ada dengan nama kunci yang sama di bucket, operasi penulisan berhasil, menghasilkan200 OK
respons. Jika ada objek yang ada, operasi tulis gagal, menghasilkan412 Precondition Failed
respons.Untuk bucket dengan versi diaktifkan, jika tidak ada versi objek saat ini dengan nama yang sama, atau jika versi objek saat ini adalah penanda hapus, 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 berhasil. Amazon S3 kemudian gagal menulis berikutnya dengan tanggapan.
412 Precondition Failed
Anda juga dapat menerima
409 Conflict
respons dalam kasus permintaan bersamaan jika permintaan penghapusan ke objek berhasil sebelum operasi tulis bersyarat pada objek tersebut selesai. Saat menggunakan penulisan bersyarat denganPutObject
, unggahan dapat dicoba lagi setelah menerima kesalahan.409 Conflict
Saat menggunakanCompleteMultipartUpload
, seluruh unggahan multibagian harus dimulai ulangCreateMultipartUpload
untuk mengunggah objek lagi setelah menerima kesalahan.409 Conflict
- Menulis bersyarat dengan header
If-Match
-
If-Match
Header mengevaluasi terhadap objek yang ada dalam ember. Jika ada objek yang ada dengan nama kunci dan pencocokan yang sama ETag, operasi penulisan berhasil, menghasilkan200 OK
respons. Jika ETag tidak cocok, operasi tulis gagal dengan412 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 tulis bersyarat pada objek tersebut selesai, karena kunci objek tidak ada lagi. Anda harus mengunggah ulang objek ketika Anda menerima404 Not Found
respons.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 tulis bersyarat
Pertimbangkan skenario berikut di mana dua klien menjalankan operasi pada bucket yang sama.
Penulisan bersyarat selama unggahan multipart
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.
catatan
Skenario ini akan menghasilkan 412 Precondition Failed
respons untuk keduanya If-None-Match
dan If-Match
header.

Penghapusan bersamaan selama unggahan multipart
Jika permintaan hapus berhasil sebelum permintaan penulisan bersyarat dapat diselesaikan, Amazon S3 mengembalikan 409 Conflict
respons 404 Not Found
atau untuk operasi tulis. Ini karena permintaan hapus yang dimulai sebelumnya lebih diutamakan daripada operasi tulis 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.

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.