

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
<a name="conditional-writes"></a>

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](conditional-writes-enforce.md).

**catatan**  
Untuk menggunakan penulisan bersyarat, Anda harus menggunakan AWS Signature Version 4 untuk menandatangani permintaan.

**Topics**
+ [Bagaimana mencegah penimpaan objek berdasarkan nama kunci](#conditional-write-key-names)
+ [Bagaimana mencegah penimpaan jika objek telah berubah](#conditional-write-etags)
+ [Perilaku menulis bersyarat](#conditional-error-response)
+ [Skenario tulis bersyarat](#conditional-write-scenarios)
+ [Menegakkan penulisan bersyarat di ember Amazon S3](conditional-writes-enforce.md)

## Bagaimana mencegah penimpaan objek berdasarkan nama kunci
<a name="conditional-write-key-names"></a>

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

Penulisan bersyarat dengan `If-None-Match` header HTTP memeriksa 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 berversi atau ditangguhkan versi, objek akan ditimpa. Untuk informasi selengkapnya tentang menggunakan nama kunci, lihat[Penamaan objek Amazon S3](object-keys.md).

**catatan**  
`If-None-Match`Header 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 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:
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

### Conditional Put Menggunakan AWS CLI
<a name="conditional-writes-putobject-CLI-key-names"></a>

`put-object`Contoh perintah berikut mencoba untuk melakukan penulisan kondisional 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 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) dalam *AWS CLI Referensi Perintah*.

Untuk informasi tentang AWS CLI, lihat [Apa itu AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dalam *AWS Command Line Interface User Guide*. 

### Salinan Bersyarat Menggunakan AWS CLI
<a name="conditional-writes-copyobject-CLI-key-names"></a>

`copy-object`Contoh perintah berikut mencoba untuk menyalin objek ke bucket tujuan dengan penulisan bersyarat untuk objek dengan nama `dir-1/my_images.tar.bz2` kunci.

```
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 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html) dalam *AWS CLI Referensi Perintah*.

Untuk informasi tentang AWS CLI, lihat [Apa itu AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dalam *AWS Command Line Interface User Guide*. 

### Unggahan multibagian bersyarat Menggunakan AWS CLI
<a name="conditional-writes-mpu-complete-CLI-key-names"></a>

`complete-multipart-upload`Contoh perintah berikut mencoba untuk menyelesaikan upload multipart dengan penulisan bersyarat untuk objek dengan nama kunci. `dir-1/my_images.tar.bz2` 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 khusus 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 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html) dalam *AWS CLI Referensi Perintah*.

Untuk informasi tentang AWS CLI, lihat [Apa itu AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dalam *AWS Command Line Interface User Guide*. 

## Bagaimana mencegah penimpaan jika objek telah berubah
<a name="conditional-write-etags"></a>

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, lihat[Menggunakan Konten- MD5 dan ETag untuk memverifikasi objek yang diunggah](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5).

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:
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

### Conditional Put Menggunakan AWS CLI
<a name="conditional-writes-putobject-CLI-etags"></a>

`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 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) dalam *AWS CLI Referensi Perintah*.

Untuk informasi tentang AWS CLI, lihat [Apa itu AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dalam *AWS Command Line Interface User Guide*. 

### Salinan Bersyarat Menggunakan AWS CLI
<a name="conditional-writes-copyobject-CLI-etags"></a>

`copy-object`Contoh perintah berikut mencoba untuk melakukan penulisan bersyarat dengan ETag nilai `6805f2cfc46c0f04559748bb039d69ae` 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 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html) dalam *AWS CLI Referensi Perintah*.

Untuk informasi tentang AWS CLI, lihat [Apa itu AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dalam *AWS Command Line Interface User Guide*. 

### Unggahan multibagian bersyarat Menggunakan AWS CLI
<a name="conditional-writes-mpu-complete-CLI-etags"></a>

`complete-multipart-upload`Contoh perintah berikut mencoba untuk menyelesaikan upload multipart dengan penulisan bersyarat menggunakan nilai yang disediakan ETag . `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 khusus 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 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html) dalam *AWS CLI Referensi Perintah*.

Untuk informasi tentang AWS CLI, lihat [Apa itu AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dalam *AWS Command Line Interface User Guide*. 

## Perilaku menulis bersyarat
<a name="conditional-error-response"></a>

**Penulisan bersyaratatau salinan 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, menghasilkan `200 OK` respons. Jika ada objek yang ada, operasi tulis gagal, menghasilkan `412 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 atau salinan 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 dengan`PutObject`, unggahan dapat dicoba lagi setelah menerima kesalahan. `409 Conflict` Saat menggunakan`CompleteMultipartUpload`, seluruh unggahan multibagian harus dimulai ulang `CreateMultipartUpload` untuk mengunggah objek lagi setelah menerima kesalahan. `409 Conflict`

**Menulis atau menyalin bersyarat dengan header `If-Match`**  
`If-Match`Header mengevaluasi objek yang ada dalam ember. Jika ada objek yang ada dengan nama kunci dan pencocokan yang sama ETag, operasi penulisan 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 tulis bersyarat pada objek tersebut selesai, karena kunci objek tidak ada lagi. Anda harus mengunggah ulang objek ketika Anda menerima `404 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
<a name="conditional-write-scenarios"></a>

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.

![Contoh dua klien yang 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.](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/conwrite_put_mpu.png)


**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.

![Contoh dua klien, satu menggunakan unggahan multibagian dan satu mengirim permintaan hapus setelah MPU dimulai. Permintaan hapus selesai sebelum penulisan bersyarat dimulai.](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/conwrite_delete_mpu.png)


**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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html).