

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

# Mempertahankan beberapa versi objek dengan Versi S3
<a name="Versioning"></a>

Penentuan Versi di Amazon S3 adalah cara menyimpan beberapa varian objek dalam bucket yang sama. Anda dapat menggunakan fitur Penentuan Versi S3 untuk menyimpan, mengambil, dan memulihkan setiap versi dari setiap objek yang disimpan dalam bucket Anda. Dengan Penentuan Versi, Anda dapat lebih mudah memulihkan dari tindakan pengguna yang tidak diinginkan dan kegagalan aplikasi. Setelah Penentuan Versi diaktifkan untuk bucket, jika Amazon S3 menerima beberapa permintaan tulis untuk objek yang sama secara bersamaan, itu akan menyimpan semua objek.

Bucket dengan Penentuan Versi yang diaktifkan memungkinkan Anda memulihkan objek dari penghapusan atau penimpaan yang tidak disengaja. Misalnya, jika Anda menghapus objek, Amazon S3 menyisipkan penanda hapus alih-alih menghapus objek secara permanen. Penanda hapus menjadi versi objek saat ini. Jika Anda menimpa sebuah objek, akan muncul versi objek baru dalam bucket. Anda dapat selalu memulihkan versi sebelumnya. Untuk informasi selengkapnya, lihat [Menghapus versi objek dari bucket dengan dukungan Penentuan Versi](DeletingObjectVersions.md). 

Secara default, Penentuan Versi S3 dinonaktifkan pada bucket, dan Anda harus mengaktifkannya secara eksplisit. Untuk informasi selengkapnya, lihat [Mengaktifkan Penentuan Versi pada bucket](manage-versioning-examples.md).

**catatan**  
SOAP API tidak mendukung Penentuan Versi S3. Dukungan SOAP melalui HTTP dihilangkan, tetapi masih tersedia melalui HTTPS. Fitur Amazon S3 baru tidak mendukung SOAP.
Tarif normal Amazon S3 berlaku untuk setiap versi objek yang disimpan dan ditransfer. Setiap versi objek adalah seluruh objek; bukan hanya sebuah diff dari versi sebelumnya. Dengan demikian, jika memiliki tiga versi objek yang disimpan, Anda akan dikenakan biaya untuk tiga objek. 

## Bucket tanpa versi, dengan dukungan Penentuan Versi, dan dengan Penentuan Versi ditangguhkan
<a name="versioning-states"></a>

Bucket bisa berada di salah satu dari tiga status: 
+ Tanpa versi (default)
+ Dengan dukungan Penentuan Versi
+ Dengan Penentuan Versi ditangguhkan

Anda mengaktifkan dan menangguhkan Penentuan Versi di tingkat bucket. Setelah Anda mengaktifkan Penentuan Versi sebuah bucket, itu tidak akan pernah dapat kembali ke status tanpa versi. Namun, Anda dapat *menangguhkan* Penentuan Versi pada bucket tersebut.

Status Penentuan Versi berlaku untuk semua (tidak pernah sebagian) objek dalam bucket tersebut. Saat Anda mengaktifkan Penentuan Versi di bucket, semua objek baru akan mendapatkan Penentuan Versi dan diberi ID versi unik. Objek yang sudah ada di bucket pada saat Penentuan Versi diaktifkan akan *selalu* mendapatkan Penentuan Versi dan diberi ID versi unik saat diubah oleh permintaan di masa mendatang. Perhatikan hal-hal berikut: 
+ Objek yang disimpan di bucket sebelum Anda mengatur status Penentuan Versi memiliki ID versi `null`. Saat Anda mengaktifkan Penentuan Versi, objek yang ada di bucket tidak berubah. Perubahannya adalah cara Amazon S3 menangani objek di masa mendatang. Untuk informasi selengkapnya, lihat [Bekerja dengan objek di dalam bucket dengan dukungan Penentuan Versi](manage-objects-versioned-bucket.md).
+ Pemilik bucket (atau pengguna dengan izin yang sesuai) dapat menangguhkan Penentuan Versi untuk menghentikan pengumpulan versi objek. Saat Anda menangguhkan Penentuan Versi, objek yang ada di bucket tidak berubah. Perubahannya adalah cara Amazon S3 menangani objek di masa mendatang. Untuk informasi selengkapnya, lihat [Bekerja dengan objek dalam bucket dengan Penentuan Versi ditangguhkan](VersionSuspendedBehavior.md).

## Menggunakan Penentuan Versi S3 dengan Siklus Hidup S3
<a name="versioning-lifecycle"></a>

Untuk menyesuaikan pendekatan retensi data Anda dan mengontrol biaya penyimpanan, gunakan Penentuan Versi objek dengan Siklus Hidup S3. Untuk informasi selengkapnya, lihat [Mengelola siklus hidup objek](object-lifecycle-mgmt.md). Untuk informasi tentang membuat konfigurasi Siklus Hidup S3 menggunakan Konsol Manajemen AWS,, AWS CLI, atau REST AWS SDKs API, lihat. [Menyetel konfigurasi Siklus Hidup S3 pada bucket](how-to-set-lifecycle-configuration-intro.md)

**penting**  
Jika Anda memiliki konfigurasi siklus hidup kedaluwarsa objek di bucket tanpa versi dan ingin mempertahankan perilaku penghapusan permanen yang sama saat mengaktifkan Penentuan Versi, Anda harus menambahkan konfigurasi kedaluwarsa yang lama. Konfigurasi siklus hidup kedaluwarsa noncurrent mengelola penghapusan versi objek noncurrent di bucket berkemampuan versi. (Bucket berkemampuan versi mempertahankan satu versi objek saat ini, dan nol atau lebih versi objek yang tidak terkini.) Untuk informasi selengkapnya, lihat [Menyetel konfigurasi Siklus Hidup S3 pada bucket](how-to-set-lifecycle-configuration-intro.md).

Untuk informasi tentang bekerja dengan Penentuan Versi S3, lihat topik-topik berikut.

**Topics**
+ [Bucket tanpa versi, dengan dukungan Penentuan Versi, dan dengan Penentuan Versi ditangguhkan](#versioning-states)
+ [Menggunakan Penentuan Versi S3 dengan Siklus Hidup S3](#versioning-lifecycle)
+ [Cara kerja Penentuan Versi S3](versioning-workflows.md)
+ [Mengaktifkan Penentuan Versi pada bucket](manage-versioning-examples.md)
+ [Mengonfigurasi penghapusan MFA](MultiFactorAuthenticationDelete.md)
+ [Bekerja dengan objek di dalam bucket dengan dukungan Penentuan Versi](manage-objects-versioned-bucket.md)
+ [Bekerja dengan objek dalam bucket dengan Penentuan Versi ditangguhkan](VersionSuspendedBehavior.md)
+ [Pemecahan masalah pembuatan versi](troubleshooting-versioning.md)

# Cara kerja Penentuan Versi S3
<a name="versioning-workflows"></a>

Gunakan Penentuan Versi S3 untuk menyimpan beberapa versi dari sebuah objek di dalam satu bucket sehingga Anda dapat memulihkan objek yang terhapus atau ditimpa secara tidak sengaja. Misalnya, jika Anda menerapkan Penentuan Versi S3 ke bucket, perubahan berikut akan terjadi: 
+ Jika Anda menghapus objek, alih-alih menghapus objek secara permanen, Amazon S3 menyisipkan penanda hapus yang menjadi versi objek saat ini. Anda dapat selalu memulihkan versi sebelumnya. Untuk informasi selengkapnya, lihat [Menghapus versi objek dari bucket dengan dukungan Penentuan Versi](DeletingObjectVersions.md).
+ Jika Anda menimpa sebuah objek, Amazon S3 akan menambahkan versi objek baru dalam bucket. Versi sebelumnya tetap ada di bucket dan menjadi versi lama. Anda dapat selalu memulihkan versi sebelumnya.

**catatan**  
Tarif normal Amazon S3 berlaku untuk setiap versi objek yang disimpan dan ditransfer. Setiap versi objek adalah seluruh objek; bukan hanya sebuah diff dari versi sebelumnya. Dengan demikian, jika memiliki tiga versi objek yang disimpan, Anda akan dikenakan biaya untuk tiga objek.

Setiap bucket S3 yang Anda buat memiliki subsumber daya *Penentuan Versi* yang terkait dengannya. (Untuk informasi selengkapnya, lihat [Opsi konfigurasi bucket tujuan umum](UsingBucket.md#bucket-config-options-intro).) Secara default, bucket Anda *tanpa versi*, dan subsumber daya Penentuan Versi menyimpan konfigurasi Penentuan Versi yang kosong, sebagai berikut.

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
</VersioningConfiguration>
```

Untuk mengaktifkan Penentuan Versi, Anda dapat mengirimkan permintaan ke Amazon S3 dengan konfigurasi Penentuan Versi yang menyertakan status `Enabled`. 

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>Enabled</Status> 
</VersioningConfiguration>
```

Untuk menangguhkan Penentuan Versi, Anda menetapkan nilai status ke `Suspended`.

**catatan**  
Saat Anda mengaktifkan Penentuan Versi pada bucket untuk pertama kalinya, mungkin diperlukan beberaoa saat agar perubahan dapat dilakukan sepenuhnya. Saat perubahan ini menyebar, Anda mungkin mengalami `HTTP 404 NoSuchKey` kesalahan intermiten untuk permintaan ke objek yang dibuat atau diperbarui setelah mengaktifkan versi. Kami menyarankan Anda menunggu selama 15 menit setelah mengaktifkan Penentuan Versi sebelum mengeluarkan operasi tulis (`PUT` atau `DELETE`) pada objek di dalam bucket. 

Pemilik bucket dan semua pengguna resmi AWS Identity and Access Management (IAM) dapat mengaktifkan pembuatan versi. Pemilik ember adalah Akun AWS yang menciptakan ember. Untuk informasi selengkapnya tentang izin, lihat [Identity and Access Management untuk Amazon S3](security-iam.md).

Untuk informasi selengkapnya tentang mengaktifkan dan menonaktifkan Pembuatan Versi S3 dengan menggunakan Konsol Manajemen AWS, AWS Command Line Interface (AWS CLI), atau REST API, lihat. [Mengaktifkan Penentuan Versi pada bucket](manage-versioning-examples.md)

**Topics**
+ [Versi IDs](#version-ids)
+ [Alur kerja Penentuan Versi](#versioning-workflows-examples)

## Versi IDs
<a name="version-ids"></a>

Jika Anda mengaktifkan Penentuan Versi untuk bucket, Amazon S3 secara otomatis menghasilkan ID versi unik untuk objek yang sedang disimpan. Misalnya, dalam satu ember Anda dapat memiliki dua objek dengan kunci yang sama (nama objek) tetapi versi yang berbeda IDs, seperti `photo.gif` (versi 111111) dan `photo.gif` (versi 121212).

![\[Diagram yang menggambarkan bucket berkemampuan versi yang memiliki dua objek dengan kunci yang sama tetapi versi berbeda. IDs\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_Enabled.png)


Setiap objek memiliki ID versi, terlepas dari apakah Penentuan Versi S3 diaktifkan atau tidak. Jika Penentuan Versi S3 tidak diaktifkan, Amazon S3 menetapkan nilai ID versi ke `null`. Jika Penentuan Versi S3 diaktifkan, Amazon S3 akan menetapkan nilai ID versi untuk objek tersebut. Nilai ini membedakan objek dengan versi lain dari kunci yang sama.

Saat Anda mengaktifkan Penentuan Versi S3 pada bucket yang sudah ada, objek yang sudah disimpan dalam bucket tidak akan berubah. Versi IDs (`null`), konten, dan izinnya tetap sama. Setelah Anda mengaktifkan Penentuan Versi S3, setiap objek yang ditambahkan ke bucket akan mendapatkan sebuah ID versi, yang membedakannya dengan versi lain dari kunci yang sama. 

Hanya Amazon S3 yang menghasilkan versi IDs, dan mereka tidak dapat diedit. Versi IDs Unicode, UTF-8 dikodekan, URL-ready, string buram yang panjangnya tidak lebih dari 1.024 byte. Berikut ini adalah contohnya:

`3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo`

**catatan**  
Untuk kesederhanaan, contoh lain dalam topik ini menggunakan jauh lebih pendek IDs.



## Alur kerja Penentuan Versi
<a name="versioning-workflows-examples"></a>

Saat Anda `PUT` sebuah objek dalam sebuah bucket dengan dukungan Penentuan Versi, versi nonterkini tidak ditimpa. Seperti yang ditunjukkan pada gambar berikut, ketika versi `photo.gif` baru `PUT` ke dalam bucket yang sudah berisi objek dengan nama yang sama, perilaku berikut terjadi:
+ Objek asli (ID = 111111) tetap berada di bucket.
+ Amazon S3 menghasilkan ID versi baru (121212), dan menambahkan versi objek yang lebih baru ini ke bucket.

![\[Diagram yang menggambarkan cara kerja Penentuan Versi S3 ketika Anda PUT sebuah objek dalam bucket dengan dukungan Penentuan Versi.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled3.png)


Dengan fungsi ini, Anda dapat mengambil versi objek sebelumnya jika objek telah ditimpa atau dihapus secara tidak sengaja.

Saat Anda `DELETE` sebuah objek, semua versi tetap berada dalam bucket, dan Amazon S3 menyisipkan penanda hapus, seperti yang ditunjukkan pada gambar berikut.

![\[Ilustrasi yang menunjukkan penyisipan penanda hapus.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)


Delete marker menjadi versi objek saat ini. Secara default, permintaan `GET` akan mengambil versi yang paling terakhir disimpan. Melakukan permintaan `GET Object` ketika versi saat ini merupakan penanda hapus akan menampilkan pesan kesalahan `404 Not Found`, seperti yang ditunjukkan pada gambar berikut.

![\[Ilustrasi yang menunjukkan GetObject panggilan untuk penanda hapus yang mengembalikan kesalahan 404 (Tidak Ditemukan).\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


Akan tetapi, Anda dapat `GET` versi objek nonterkini dengan menentukan ID versinya. Di gambar berikut, Anda akan `GET` versi objek tertentu, 111111. Amazon S3 akan menampilkan versi objek tersebut meskipun bukan versi saat ini.

Untuk informasi selengkapnya, lihat [Mengambil versi objek dari bucket dengan dukungan Penentuan Versi](RetrievingObjectVersions.md).

![\[Diagram yang menggambarkan cara kerja Penentuan Versi S3 ketika Anda GET sebuah objek dalam bucket dengan dukungan Penentuan Versi.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_GET_Versioned3.png)


Anda dapat menghapus objek secara permanen dengan menentukan versi yang ingin Anda hapus. Hanya pemilik bucket Amazon S3 atau pengguna IAM resmi yang dapat menghapus versi secara permanen. Jika operasi `DELETE` Anda menentukan `versionId`, versi objek tersebut akan dihapus secara permanen, dan Amazon S3 tidak menyisipkan penanda hapus.

![\[Diagram yang menunjukkan bagaimana DELETE versionId secara permanen menghapus versi objek tertentu.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


Anda dapat menambahkan lebih banyak keamanan dengan mengonfigurasi bucket untuk mengaktifkan penghapusan autentikasi multi-faktor (MFA). Saat Anda mengaktifkan penghapusan MFA untuk sebuah bucket, pemilik bucket harus menyertakan dua bentuk autentikasi dalam setiap permintaan untuk menghapus sebuah versi atau mengubah status Penentuan Versi bucket. Untuk informasi selengkapnya, lihat [Mengonfigurasi penghapusan MFA](MultiFactorAuthenticationDelete.md).

### Kapan versi baru dibuat untuk suatu objek?
<a name="versioning-workflows-new-versions"></a>

Versi baru objek dibuat hanya ketika Anda `PUT` obyek baru. Ingatlah bahwa tindakan tertentu, seperti `CopyObject`, bekerja dengan menerapkan operasi `PUT`.

Beberapa tindakan yang mengubah objek saat ini tidak membuat versi baru karena tindakan tersebut tidak `PUT` objek baru. Ini termasuk tindakan seperti mengubah tag pada objek. 

**penting**  
Jika Anda menyadari adanya peningkatan signifikan dalam jumlah HTTP 503 (Layanan Tidak Tersedia) yang diterima oleh objek permintaan `PUT` atau `DELETE` Amazon S3 ke sebuah bucket dengan Penentuan Versi S3 yang diaktifkan, mungkin Anda memiliki satu atau beberapa objek dalam bucket yang memiliki jutaan versi. Untuk informasi selengkapnya, lihat bagian Penentuan Versi S3 dari [Pemecahan masalah pembuatan versi](troubleshooting-versioning.md).

# Mengaktifkan Penentuan Versi pada bucket
<a name="manage-versioning-examples"></a>

Gunakan Penentuan Versi S3 untuk menyimpan beberapa versi dari sebuah objek di dalam satu bucket. Bagian ini memberikan contoh cara mengaktifkan pembuatan versi pada bucket menggunakan konsol, REST API AWS SDKs, dan AWS Command Line Interface ()AWS CLI. 

**catatan**  
Setelah mengaktifkan pembuatan versi pada bucket untuk pertama kalinya, mungkin diperlukan waktu hingga 15 menit agar perubahan menyebar sepenuhnya di seluruh sistem S3. Selama waktu ini, `GET` permintaan untuk objek yang dibuat atau diperbarui setelah mengaktifkan versi dapat mengakibatkan kesalahan. `HTTP 404 NoSuchKey` Sebaiknya tunggu 15 menit setelah mengaktifkan pembuatan versi sebelum melakukan operasi penulisan (`PUT`atau`DELETE`) apa pun pada objek di bucket. Masa tunggu ini membantu menghindari potensi masalah dengan visibilitas objek dan pelacakan versi.

Untuk informasi selengkapnya tentang Penentuan Versi S3, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md). Untuk informasi tentang cara bekerja dengan objek yang ada di bucket dengan dukungan Penentuan Versi, lihat [Bekerja dengan objek di dalam bucket dengan dukungan Penentuan Versi](manage-objects-versioned-bucket.md).

Untuk mempelajari lebih lanjut cara menggunakan Penentuan Versi S3 untuk melindungi data, lihat [Tutorial: Melindungi data di Amazon S3 dari penghapusan yang tidak disengaja atau bug aplikasi menggunakan Penentuan Versi S3, Kunci Objek S3, dan Replikasi S3](https://aws.amazon.com/getting-started/hands-on/protect-data-on-amazon-s3/?ref=docs_gateway/amazons3/manage-versioning-examples.html).

Setiap bucket S3 yang Anda buat memiliki subsumber daya *Penentuan Versi* yang terkait dengannya. (Untuk informasi selengkapnya, lihat [Opsi konfigurasi bucket tujuan umum](UsingBucket.md#bucket-config-options-intro).) Secara default, bucket Anda *tanpa versi*, dan subsumber daya Penentuan Versi menyimpan konfigurasi Penentuan Versi yang kosong, sebagai berikut.

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
</VersioningConfiguration>
```

Untuk mengaktifkan Penentuan Versi, Anda dapat mengirimkan permintaan ke Amazon S3 dengan konfigurasi Penentuan Versi yang menyertakan status. 

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>Enabled</Status> 
</VersioningConfiguration>
```

Untuk menangguhkan Penentuan Versi, Anda menetapkan nilai status ke `Suspended`.

Pemilik bucket dan semua pengguna sah dapat mengaktifkan Penentuan Versi. Pemilik bucket adalah Akun AWS yang membuat bucket (akun root). Untuk informasi selengkapnya tentang izin, lihat [Identity and Access Management untuk Amazon S3](security-iam.md).

Bagian berikut memberikan detail lebih lanjut tentang mengaktifkan Versi S3 menggunakan konsol,, AWS CLI dan. AWS SDKs

## Menggunakan konsol S3
<a name="enable-versioning"></a>

Ikuti langkah-langkah ini untuk menggunakan fitur Konsol Manajemen AWS untuk mengaktifkan pembuatan versi pada bucket S3.

**Untuk mengaktifkan atau menonaktifkan pembuatan versi pada bucket tujuan umum S3**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di panel navigasi kiri, pilih **Bucket tujuan umum**.

1. Dalam daftar bucket, pilih nama bucket yang ingin Anda aktifkan pembuatan versi.

1. Pilih **Properti**.

1. Di bawah **Penentuan Versi Bucket**, pilih **Edit**.

1. Pilih **Tangguhkan** atau **Aktifkan**, lalu pilih **Simpan perubahan**.

**catatan**  
Anda dapat menggunakan otentikasi AWS multi-faktor (MFA) dengan pembuatan versi. Saat Anda menggunakan MFA dengan pembuatan versi, Anda harus memberikan kunci akses dan kode yang valid dari perangkat MFA akun untuk menghapus versi objek secara permanen atau menangguhkan atau mengaktifkan kembali pembuatan versi. Akun AWS  
Untuk menggunakan MFA dengan Penentuan Versi, Anda mengaktifkan `MFA Delete`. Namun, Anda tidak dapat mengaktifkan `MFA Delete` menggunakan Konsol Manajemen AWS. Anda harus menggunakan AWS Command Line Interface (AWS CLI) atau API. Untuk informasi selengkapnya, lihat [Mengonfigurasi penghapusan MFA](MultiFactorAuthenticationDelete.md).

## Menggunakan AWS CLI
<a name="manage-versioning-examples-cli"></a>

Contoh berikut memungkinkan pembuatan versi pada bucket tujuan umum S3. 

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled
```

Contoh berikut memungkinkan penghapusan S3 Versioning dan multi-factor authentication (MFA) pada bucket untuk perangkat MFA fisik. Untuk perangkat MFA fisik, dalam `--mfa` parameter, berikan rangkaian nomor seri perangkat MFA, karakter spasi, dan nilai yang ditampilkan pada perangkat otentikasi Anda.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SerialNumber 123456"
```

Contoh berikut memungkinkan penghapusan S3 Versioning dan multi-factor authentication (MFA) pada bucket untuk perangkat MFA virtual. Untuk perangkat MFA virtual, dalam `--mfa` parameter, berikan rangkaian perangkat MFA ARN, karakter spasi, dan nilai yang ditampilkan pada perangkat otentikasi Anda.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::account-id:mfa/root-account-mfa-device 123789"
```

**catatan**  
Menggunakan penghapusan MFA memerlukan perangkat autentikasi fisik atau virtual disetujui. Untuk informasi selengkapnya tentang menggunakan penghapusan MFA di Amazon S3, lihat [Mengonfigurasi penghapusan MFA](MultiFactorAuthenticationDelete.md).

*Untuk informasi selengkapnya tentang mengaktifkan versi menggunakan AWS CLI, lihat [put-bucket-versioning](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-versioning.html)di Command Reference.AWS CLI *

## Menggunakan AWS SDKs
<a name="manage-versioning-examples-sdk"></a>

Contoh berikut memungkinkan pembuatan versi pada bucket dan kemudian mengambil status pembuatan versi menggunakan dan. AWS SDK untuk Java AWS SDK untuk .NET Untuk informasi tentang menggunakan yang lain AWS SDKs, lihat [Pusat AWS Pengembang](https://aws.amazon.com/code/).

------
#### [ .NET ]

Untuk informasi tentang menyiapkan dan menjalankan contoh kode, lihat [Memulai SDK for .NET di AWSAWS SDK for](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) .NET *Developer Guide*. 

```
using System;
using Amazon.S3;
using Amazon.S3.Model;

namespace s3.amazon.com.rproxy.goskope.com.docsamples
{
    class BucketVersioningConfiguration
    {
        static string bucketName = "*** bucket name ***";

        public static void Main(string[] args)
        {
            using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1))
            {
                try
                {
                    EnableVersioningOnBucket(client);
                    string bucketVersioningStatus = RetrieveBucketVersioningConfiguration(client);
                }
                catch (AmazonS3Exception amazonS3Exception)
                {
                    if (amazonS3Exception.ErrorCode != null &&
                        (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                        ||
                        amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
                    {
                        Console.WriteLine("Check the provided AWS Credentials.");
                        Console.WriteLine(
                        "To sign up for service, go to http://aws.amazon.com/s3");
                    }
                    else
                    {
                        Console.WriteLine(
                         "Error occurred. Message:'{0}' when listing objects",
                         amazonS3Exception.Message);
                    }
                }
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }

        static void EnableVersioningOnBucket(IAmazonS3 client)
        {

                PutBucketVersioningRequest request = new PutBucketVersioningRequest
                {
                    BucketName = bucketName,
                    VersioningConfig = new S3BucketVersioningConfig 
                    {
                        Status = VersionStatus.Enabled
                    }
                };

                PutBucketVersioningResponse response = client.PutBucketVersioning(request);
        }


        static string RetrieveBucketVersioningConfiguration(IAmazonS3 client)
        {
                GetBucketVersioningRequest request = new GetBucketVersioningRequest
                {
                    BucketName = bucketName
                };
 
                GetBucketVersioningResponse response = client.GetBucketVersioning(request);
                return response.VersioningConfig.Status;
            }
    }
}
```

------
#### [ Java ]

Untuk petunjuk tentang cara membuat dan menguji sampel kerja, lihat [Memulai](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) di Panduan AWS SDK untuk Java Pengembang.

```
import java.io.IOException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;

public class BucketVersioningConfigurationExample {
    public static String bucketName = "*** bucket name ***"; 
    public static AmazonS3Client s3Client;

    public static void main(String[] args) throws IOException {
        s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
        s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));
        try {

            // 1. Enable versioning on the bucket.
        	BucketVersioningConfiguration configuration = 
        			new BucketVersioningConfiguration().withStatus("Enabled");
            
			SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = 
					new SetBucketVersioningConfigurationRequest(bucketName,configuration);
			
			s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);
			
			// 2. Get bucket versioning configuration information.
			BucketVersioningConfiguration conf = s3Client.getBucketVersioningConfiguration(bucketName);
			 System.out.println("bucket versioning configuration status:    " + conf.getStatus());

        } catch (AmazonS3Exception amazonS3Exception) {
            System.out.format("An Amazon S3 error occurred. Exception: %s", amazonS3Exception.toString());
        } catch (Exception ex) {
            System.out.format("Exception: %s", ex.toString());
        }        
    }
}
```

------
#### [ Python ]

Contoh kode Python berikut membuat bucket Amazon S3, mengaktifkannya untuk Penentuan Versi, dan mengonfigurasi siklus hidup yang membuat versi objek nonterkini kedaluwarsa setelah 7 hari.

```
def create_versioned_bucket(bucket_name, prefix):
    """
    Creates an Amazon S3 bucket, enables it for versioning, and configures a lifecycle
    that expires noncurrent object versions after 7 days.

    Adding a lifecycle configuration to a versioned bucket is a best practice.
    It helps prevent objects in the bucket from accumulating a large number of
    noncurrent versions, which can slow down request performance.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket_name: The name of the bucket to create.
    :param prefix: Identifies which objects are automatically expired under the
                   configured lifecycle rules.
    :return: The newly created bucket.
    """
    try:
        bucket = s3.create_bucket(
            Bucket=bucket_name,
            CreateBucketConfiguration={
                "LocationConstraint": s3.meta.client.meta.region_name
            },
        )
        logger.info("Created bucket %s.", bucket.name)
    except ClientError as error:
        if error.response["Error"]["Code"] == "BucketAlreadyOwnedByYou":
            logger.warning("Bucket %s already exists! Using it.", bucket_name)
            bucket = s3.Bucket(bucket_name)
        else:
            logger.exception("Couldn't create bucket %s.", bucket_name)
            raise

    try:
        bucket.Versioning().enable()
        logger.info("Enabled versioning on bucket %s.", bucket.name)
    except ClientError:
        logger.exception("Couldn't enable versioning on bucket %s.", bucket.name)
        raise

    try:
        expiration = 7
        bucket.LifecycleConfiguration().put(
            LifecycleConfiguration={
                "Rules": [
                    {
                        "Status": "Enabled",
                        "Prefix": prefix,
                        "NoncurrentVersionExpiration": {"NoncurrentDays": expiration},
                    }
                ]
            }
        )
        logger.info(
            "Configured lifecycle to expire noncurrent versions after %s days "
            "on bucket %s.",
            expiration,
            bucket.name,
        )
    except ClientError as error:
        logger.warning(
            "Couldn't configure lifecycle on bucket %s because %s. "
            "Continuing anyway.",
            bucket.name,
            error,
        )

    return bucket
```

------

# Mengonfigurasi penghapusan MFA
<a name="MultiFactorAuthenticationDelete"></a>

Saat bekerja dengan Penentuan Versi S3 di bucket Amazon S3, Anda dapat secara opsional menambahkan lapisan keamanan lainnya dengan mengonfigurasi bucket untuk mengaktifkan *Penghapusan MFA (autentikasi multi-faktor)*. Saat melakukannya, pemilik bucket harus menyertakan dua bentuk autentikasi dalam setiap permintaan untuk menghapus sebuah versi atau mengubah status Penentuan Versi bucket.

Penghapusan MFA memerlukan autentikasi tambahan untuk salah satu dari operasi berikut:
+ Mengubah status Penentuan Versi bucket Anda
+ Menghapus versi objek secara permanen

Penghapusan MFA memerlukan dua bentuk autentikasi secara bersamaan:
+ Kredensial keamanan Anda
+ Gabungan nomor seri yang valid, spasi, dan kode enam digit yang ditampilkan di perangkat autentikasi yang disetujui

Penghapusan MFA memberikan keamanan tambahan jika, misalnya, kredensial keamanan Anda disusupi. Penghapusan MFA dapat membantu mencegah penghapusan bucket yang tidak disengaja dengan mengharuskan pengguna yang memulai tindakan penghapusan untuk membuktikan kepemilikan fisik perangkat MFA dengan kode MFA dan menambahkan lapisan gesek dan keamanan ekstra ke tindakan penghapusan.

Untuk mengidentifikasi bucket dengan penghapusan MFA yang aktif, Anda dapat menggunakan metrik Lensa Penyimpanan Amazon S3. Lensa Penyimpanan S3 adalah fitur analisis penyimpanan cloud yang dapat Anda gunakan untuk mendapatkan visibilitas seluruh organisasi ke dalam penggunaan dan aktivitas penyimpanan objek. Untuk informasi selengkapnya, lihat [ Menilai aktivitas penyimpanan dan penggunaan Anda dengan Lensa Penyimpanan S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens?icmpid=docs_s3_user_guide_MultiFactorAuthenticationDelete.html). Untuk daftar lengkap metrik, lihat [ Glosarium metrik Lensa Penyimpanan S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_MultiFactorAuthenticationDelete.html).

Pemilik bucket, Akun AWS yang membuat bucket (akun root), dan semua pengguna yang berwenang dapat mengaktifkan pembuatan versi. Namun, hanya pemilik bucket (akun root) yang dapat mengaktifkan penghapusan MFA. Untuk informasi selengkapnya, lihat [Mengamankan Akses AWS Menggunakan MFA](https://aws.amazon.com/blogs/security/securing-access-to-aws-using-mfa-part-3/) di Blog Keamanan AWS .

**catatan**  
Untuk menggunakan MFA dengan Penentuan Versi, Anda mengaktifkan `MFA Delete`. Namun, Anda tidak dapat mengaktifkan `MFA Delete` menggunakan Konsol Manajemen AWS. Anda harus menggunakan AWS Command Line Interface (AWS CLI) atau API.   
Untuk contoh menggunakan penghapusan MFA dengan Penentuan Versi, lihat bagian contoh dalam topik [Mengaktifkan Penentuan Versi pada bucket](manage-versioning-examples.md).  
Anda tidak dapat menggunakan penghapusan MFA dengan konfigurasi siklus hidup. Untuk informasi selengkapnya tentang konfigurasi siklus hidup dan caranya berinteraksi dengan konfigurasi lain, lihat [Bagaimana Siklus Hidup S3 berinteraksi dengan konfigurasi bucket lainnya](lifecycle-and-other-bucket-config.md).

Untuk mengaktifkan atau menonaktifkan penghapusan MFA, Anda menggunakan API yang sama yang Anda gunakan untuk mengonfigurasi Penentuan Versi pada bucket. Amazon S3 menyimpan konfigurasi penghapusan MFA dalam subsumber daya *Penentuan Versi* yang menyimpan status Penentuan Versi bucket.

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>VersioningState</Status>
  <MfaDelete>MfaDeleteState</MfaDelete>  
</VersioningConfiguration>
```

Untuk menggunakan penghapusan MFA, Anda dapat menggunakan perangkat keras atau perangkat MFA virtual untuk menghasilkan kode autentikasi. Contoh berikut menunjukkan kode autentikasi yang dihasilkan yang ditampilkan pada perangkat keras.

![\[Contoh kode otentikasi yang dihasilkan ditampilkan pada perangkat keras.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/MFADevice.png)


Penghapusan MFA dan akses API yang dilindungi MFA adalah fitur yang dimaksudkan untuk memberikan perlindungan untuk skenario yang berbeda. Anda mengonfigurasi penghapusan MFA di bucket untuk membantu memastikan bahwa data di bucket Anda tidak dapat terhapus secara tidak sengaja. Akses API yang dilindungi MFA digunakan untuk memberlakukan faktor autentikasi lain (kode MFA) ketika mengakses sumber daya Amazon S3 yang sensitif. Anda dapat meminta operasi apa pun terhadap sumber daya Amazon S3 ini dilakukan dengan kredensial sementara yang dibuat menggunakan MFA. Sebagai contoh, lihat [Membutuhkan MFA](example-bucket-policies.md#example-bucket-policies-MFA). 

Untuk informasi selengkapnya tentang cara membeli dan mengaktifkan perangkat autentikasi, lihat [Autentikasi multi-faktor](https://aws.amazon.com/iam/details/mfa/).

## Untuk mengaktifkan Penentuan Versi S3 dan mengkonfigurasi penghapusan MFA
<a name="enable-versioning-mfa-delete"></a>

### Menggunakan AWS CLI
<a name="enable-versioning-mfa-delete-cli"></a>

Nomor seri adalah nomor yang secara unik mengidentifikasi perangkat MFA. Untuk perangkat MFA fisik, ini adalah nomor seri unik yang disediakan dengan perangkat. Untuk perangkat MFA virtual, nomor seri adalah perangkat ARN. Untuk menggunakan perintah berikut ini, ganti *user input placeholders* dengan informasi Anda sendiri.

Contoh berikut memungkinkan penghapusan S3 Versioning dan multi-factor authentication (MFA) pada bucket untuk perangkat MFA fisik. Untuk perangkat MFA fisik, dalam `--mfa` parameter, berikan rangkaian nomor seri perangkat MFA, karakter spasi, dan nilai yang ditampilkan pada perangkat otentikasi Anda.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SerialNumber 123456"
```

Contoh berikut memungkinkan penghapusan S3 Versioning dan multi-factor authentication (MFA) pada bucket untuk perangkat MFA virtual. Untuk perangkat MFA virtual, dalam `--mfa` parameter, berikan rangkaian perangkat MFA ARN, karakter spasi, dan nilai yang ditampilkan pada perangkat otentikasi Anda.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::account-id:mfa/root-account-mfa-device 123789"
```

Untuk informasi selengkapnya, lihat artikel AWS RePost [Bagaimana cara mengaktifkan penghapusan MFA untuk bucket Amazon S3 saya](https://repost.aws/knowledge-center/s3-bucket-mfa-delete)? .

### Penggunaan API REST
<a name="enable-versioning-mfa-delete-rest-api"></a>

Untuk informasi selengkapnya tentang menentukan penghapusan MFA menggunakan Amazon S3 REST API, lihat Referensi API Layanan Penyimpanan *Sederhana [PutBucketVersioning](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html)Amazon*.

# Bekerja dengan objek di dalam bucket dengan dukungan Penentuan Versi
<a name="manage-objects-versioned-bucket"></a>

Objek yang disimpan di bucket Amazon S3 sebelum Anda mengatur status Penentuan Versi memiliki ID versi `null`. Saat Anda mengaktifkan Penentuan Versi, objek yang ada di bucket tidak berubah. Perubahannya adalah cara Amazon S3 menangani objek di masa mendatang.

**Peralihan versi objek**  
Anda dapat menentukan aturan konfigurasi siklus hidup untuk objek yang memiliki siklus hidup yang ditetapkan dengan baik untuk transisi versi objek ke kelas penyimpanan S3 Glacier Flexible Retrieval pada waktu tertentu dalam masa aktif objek. Untuk informasi selengkapnya, lihat [Mengelola siklus hidup objek](object-lifecycle-mgmt.md).

Topik dalam bagian ini menjelaskan berbagai operasi objek dalam bucket dengan dukungan Penentuan Versi. Untuk informasi selengkapnya tentang penentuan versi, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md).

**Topics**
+ [Menambahkan objek ke bucket dengan dukungan Penentuan Versi](AddingObjectstoVersioningEnabledBuckets.md)
+ [Mencantumkan objek dalam bucket dengan dukungan Penentuan Versi](list-obj-version-enabled-bucket.md)
+ [Mengambil versi objek dari bucket dengan dukungan Penentuan Versi](RetrievingObjectVersions.md)
+ [Menghapus versi objek dari bucket dengan dukungan Penentuan Versi](DeletingObjectVersions.md)
+ [Mengonfigurasi izin objek berversi](VersionedObjectPermissionsandACLs.md)

# Menambahkan objek ke bucket dengan dukungan Penentuan Versi
<a name="AddingObjectstoVersioningEnabledBuckets"></a>

Setelah Anda mengaktifkan Penentuan Versi di bucket, Amazon S3 secara otomatis menambahkan ID versi unik ke setiap objek yang disimpan (menggunakan `PUT`, `POST`, atau `CopyObject`) di bucket. 

Gambar berikut menunjukkan bahwa Amazon S3 menambahkan ID versi unik ke objek saat ditambahkan ke bucket dengan dukungan Penentuan Versi. 

![\[Ilustrasi yang menunjukkan ID versi unik yang ditambahkan ke objek saat dimasukkan ke dalam bucket berkemampuan versi.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled.png)


**catatan**  
Nilai ID versi yang ditetapkan Amazon S3 adalah URL aman (dapat disertakan sebagai bagian dari URI).

Untuk informasi selengkapnya tentang penentuan versi, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md). Anda dapat menambahkan versi objek ke bucket berkemampuan versi menggunakan konsol AWS SDKs, dan REST API.

## Menggunakan konsol
<a name="add-obj-versioning-enabled-bucket-console"></a>

Untuk petunjuk, lihat [Mengunggah Objek](upload-objects.md). 

## Menggunakan AWS SDKs
<a name="add-obj-versioning-enabled-bucket-sdk"></a>

Untuk contoh mengunggah objek menggunakan AWS SDKs untuk Java, .NET, dan PHP, lihat[Mengunggah Objek](upload-objects.md). Contoh untuk mengunggah objek dalam bucket tanpa Penentuan Versi dan dengan Penentuan Versi yang diaktifkan adalah sama, meskipun dalam kasus bucket dengan dukungan Penentuan Versi, Amazon S3 menetapkan nomor versi. Jika tidak, nomor versi akan null. 

Untuk informasi tentang menggunakan yang lain AWS SDKs, lihat [Pusat AWS Pengembang](https://aws.amazon.com/code/). 

## Penggunaan API REST
<a name="add-obj-versioning-enabled-bucket-rest"></a>

**Untuk menambahkan objek ke bucket dengan dukungan Penentuan Versi**

1. Aktifkan Penentuan Versi di bucket menggunakan permintaan `PutBucketVersioning`.

   Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html) dalam *Referensi API Amazon Simple Storage Service*.

1. Kirim permintaan `PUT`, `POST`, atau `CopyObject` untuk menyimpan objek dalam bucket.

Saat Anda menambahkan objek ke bucket dengan dukungan Penentuan Versi, Amazon S3 mengembalikan ID versi objek di header respons `x-amz-version-id`, seperti yang ditunjukkan dalam contoh berikut.

```
1. x-amz-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY
```

# Mencantumkan objek dalam bucket dengan dukungan Penentuan Versi
<a name="list-obj-version-enabled-bucket"></a>

Bagian ini memberikan contoh daftar versi objek dari bucket dengan dukungan Penentuan Versi. Amazon S3 menyimpan informasi versi objek dalam subsumber daya *versi* yang dikaitkan dengan bucket. Untuk informasi selengkapnya, lihat [Opsi konfigurasi bucket tujuan umum](UsingBucket.md#bucket-config-options-intro). Untuk mencantumkan objek dalam bucket dengan dukungan Penentuan Versi, Anda memerlukan izin `ListBucketVersions`.

## Menggunakan konsol S3
<a name="view-object-versions"></a>

Ikuti langkah-langkah ini untuk menggunakan konsol Amazon S3 guna melihat berbagai versi objek.

**Untuk melihat beberapa versi objek**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di dalam daftar **Bucket**, pilih nama bucket yang berisi objek.

1. Untuk melihat daftar versi objek di bucket, pilih tombol **Tampilkan versi**. 

   Untuk setiap versi objek, konsol menunjukkan ID versi unik, tanggal dan waktu versi objek dibuat, dan properti lainnya. (Objek yang disimpan di bucket sebelum Anda mengatur status Penentuan Versi memiliki ID versi **null**.)

   Untuk mencantumkan objek tanpa versi, pilih tombol **Buat daftar versi**.

Anda juga dapat melihat, mengunduh, dan menghapus versi objek di panel ikhtisar objek di konsol. Untuk informasi selengkapnya, lihat [Melihat properti objek di konsol Amazon S3](view-object-properties.md).

**catatan**  
 Untuk mengakses versi objek yang lebih lama dari 300 versi, Anda harus menggunakan AWS CLI atau URL objek.

**penting**  
Anda dapat membatalkan penghapusan objek hanya jika objek tersebut dihapus sebagai versi terbaru (saat ini). Anda tidak dapat membatalkan penghapusan objek versi sebelumnya. Untuk informasi selengkapnya, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md).

## Menggunakan AWS SDKs
<a name="list-obj-version-enabled-bucket-sdk-examples"></a>

Contoh dalam bagian ini menunjukkan cara mengambil daftar objek dari bucket dengan dukungan Penentuan Versi. Setiap permintaan akan menampilkan hingga 1.000 versi, kecuali jika Anda menentukan nomor yang lebih rendah. Jika bucket berisi lebih banyak versi dari batas ini, Anda mengirimkan serangkaian permintaan untuk mengambil daftar semua versi. Proses mengembalikan hasil dalam "halaman” disebut *penomoran halaman*.

Untuk menunjukkan cara kerja penomoran halaman, contoh membatasi masing-masing respons pada dua versi objek. Setelah mengambil halaman pertama dari hasil, masing-masing contoh memeriksa untuk menentukan apakah daftar versi terpotong. Jika iya, contoh ini terus mengambil halaman hingga semua versi diambil. 

**catatan**  
Contoh berikut juga bekerja dengan bucket tanpa Penentuan Versi aktif, atau untuk objek yang tidak memiliki versi tersendiri. Dalam kasus tersebut, Amazon S3 mengembalikan daftar objek dengan ID versi `null`.

 Untuk informasi tentang menggunakan yang lain AWS SDKs, lihat [Pusat AWS Pengembang](https://aws.amazon.com/code/). 

------
#### [ Java ]

Untuk petunjuk cara membuat dan menguji sampel yang berfungsi, lihat [Memulai](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) di Panduan AWS SDK untuk Java Pengembang.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListVersionsRequest;
import com.amazonaws.services.s3.model.S3VersionSummary;
import com.amazonaws.services.s3.model.VersionListing;

public class ListKeysVersioningEnabledBucket {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Retrieve the list of versions. If the bucket contains more versions
            // than the specified maximum number of results, Amazon S3 returns
            // one page of results per request.
            ListVersionsRequest request = new ListVersionsRequest()
                    .withBucketName(bucketName)
                    .withMaxResults(2);
            VersionListing versionListing = s3Client.listVersions(request);
            int numVersions = 0, numPages = 0;
            while (true) {
                numPages++;
                for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) {
                    System.out.printf("Retrieved object %s, version %s\n",
                            objectSummary.getKey(),
                            objectSummary.getVersionId());
                    numVersions++;
                }
                // Check whether there are more pages of versions to retrieve. If
                // there are, retrieve them. Otherwise, exit the loop.
                if (versionListing.isTruncated()) {
                    versionListing = s3Client.listNextBatchOfVersions(versionListing);
                } else {
                    break;
                }
            }
            System.out.println(numVersions + " object versions retrieved in " + numPages + " pages");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

Untuk informasi tentang menyiapkan dan menjalankan contoh kode, lihat [Memulai SDK for .NET di AWSAWS SDK for](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) .NET *Developer Guide*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class ListObjectsVersioningEnabledBucketTest
    {
        static string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main(string[] args)
        {
            s3Client = new AmazonS3Client(bucketRegion);
            GetObjectListWithAllVersionsAsync().Wait();
        }

        static async Task GetObjectListWithAllVersionsAsync()
        {
            try
            {
                ListVersionsRequest request = new ListVersionsRequest()
                {
                    BucketName = bucketName,
                    // You can optionally specify key name prefix in the request
                    // if you want list of object versions of a specific object.

                    // For this example we limit response to return list of 2 versions.
                    MaxKeys = 2
                };
                do
                {
                    ListVersionsResponse response = await s3Client.ListVersionsAsync(request); 
                    // Process response.
                    foreach (S3ObjectVersion entry in response.Versions)
                    {
                        Console.WriteLine("key = {0} size = {1}",
                            entry.Key, entry.Size);
                    }

                    // If response is truncated, set the marker to get the next 
                    // set of keys.
                    if (response.IsTruncated)
                    {
                        request.KeyMarker = response.NextKeyMarker;
                        request.VersionIdMarker = response.NextVersionIdMarker;
                    }
                    else
                    {
                        request = null;
                    }
                } while (request != null);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------

## Penggunaan API REST
<a name="ListingtheObjectsinaVersioningEnabledBucket"></a>

**Example — Mencantumkan semua versi objek dalam bucket**  
Untuk mencantumkan semua versi dari objek dalam bucket, Anda menggunakan subsumber daya `versions` di permintaan `GET Bucket`. Amazon S3 dapat mengambil maksimum 1.000 objek, dan setiap versi objek dihitung sepenuhnya sebagai objek. Oleh karena itu, jika bucket berisi dua kunci (misalnya, `photo.gif` dan `picture.jpg`), dan kunci pertama memiliki 990 versi dan kunci kedua memiliki 400 versi, satu permintaan akan mengambil seluruh 990 versi `photo.gif` dan hanya 10 versi terbaru dari `picture.jpg`.  
Amazon S3 mengembalikan versi objek dalam urutan penyimpanannya, dengan versi yang disimpan paling akhir dikembalikan terlebih dahulu.  
Di permintaan `GET Bucket`, sertakan subsumber daya `versions`.  

```
1. GET /?versions HTTP/1.1
2. Host: bucketName.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 +0000
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

**Example — Mengambil semua versi kunci**  
 Untuk mengambil subset versi objek, Anda menggunakan parameter permintaan untuk `GET Bucket`. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html).   

1. Atur parameter `prefix` ke kunci objek yang ingin Anda ambil.

1. Kirim permintaan `GET Bucket` menggunakan subsumber daya `versions` dan `prefix`.

   `GET /?versions&prefix=objectName HTTP/1.1`

**Example — Mengambil objek menggunakan prefiks**  
Contoh berikut mengambil objek yang kuncinya adalah atau dimulai dengan `myObject`.  

```
1. GET /?versions&prefix=myObject HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```
Anda dapat menggunakan parameter permintaan lain untuk mengambil subset semua versi objek. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) dalam *Referensi API Amazon Simple Storage Service*.

**Example — Mengambil daftar objek tambahan jika respons terpotong**  
Jika jumlah objek yang dapat dikembalikan dalam permintaan `GET` melebihi nilai `max-keys`, respons mengandung `<isTruncated>true</isTruncated>`, dan menyertakan kunci pertama (dalam `NextKeyMarker`) dan ID versi pertama (dalam `NextVersionIdMarker`) yang memenuhi permintaan, tetapi tidak dikembalikan. Anda menggunakan nilai yang dikembalikan sebagai posisi awal pada permintaan berikutnya untuk mengambil objek tambahan yang memenuhi permintaan `GET`.   
Gunakan proses berikut untuk mengambil objek tambahan yang sesuai dengan permintaan `GET Bucket versions` dari bucket. Untuk informasi selengkapnya tentang `key-marker`, `version-id-marker`, `NextKeyMarker`, dan `NextVersionIdMarker`, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) di *Referensi API Amazon Simple Storage Service*.  
Berikut ini adalah tanggapan tambahan yang memenuhi permintaan `GET` asli:  
+ Tetapkan nilai dari `key-marker` ke kunci yang dikembalikan di `NextKeyMarker` dalam respons sebelumnya.
+ Tetapkan nilai dari `version-id-marker` ke ID versi yang dikembalikan di `NextVersionIdMarker` dalam respons sebelumnya.
+ Kirim permintaan `GET Bucket versions` menggunakan `key-marker` dan `version-id-marker`.

**Example — Mengambil objek yang dimulai dengan kunci dan ID versi tertentu**  

```
1. GET /?versions&key-marker=myObject&version-id-marker=298459348571 HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

## Menggunakan AWS CLI
<a name="list-obj-version-enabled-bucket-cli"></a>

Perintah berikut mengembalikan metadata tentang semua versi objek dalam bucket. 

```
aws s3api list-object-versions --bucket amzn-s3-demo-bucket1
```

Untuk informasi selengkapnya tentang `list-object-versions`, lihat [https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html) di *Referensi Perintah AWS CLI *.

# Mengambil versi objek dari bucket dengan dukungan Penentuan Versi
<a name="RetrievingObjectVersions"></a>

Penentuan Versi di Amazon S3 adalah cara menyimpan beberapa varian objek dalam bucket yang sama. Permintaan `GET` sederhana mengambil versi saat ini dari sebuah objek. Gambar berikut menunjukkan bagaimana `GET` mengembalikan versi objek saat ini, `photo.gif`.

![\[Ilustrasi yang menunjukkan bagaimana GET mengembalikan versi objek saat ini.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png)


Untuk mengambil versi tertentu, Anda harus menentukan ID versinya. Gambar berikut menunjukkan bahwa permintaan `GET versionId` mengambil versi objek yang ditentukan (tidak harus versi saat ini).

![\[Ilustrasi yang menunjukkan bagaimana GET versionId permintaan mengambil versi tertentu dari objek.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png)


Anda dapat mengambil versi objek di Amazon S3 menggunakan konsol AWS SDKs,, atau REST API.

**catatan**  
 Untuk mengakses versi objek yang lebih lama dari 300 versi, Anda harus menggunakan AWS CLI atau URL objek.

## Menggunakan konsol S3
<a name="retrieving-object-versions"></a>

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di dalam daftar **Bucket**, pilih nama bucket yang berisi objek.

1. Di daftar **Objek**, pilih nama objek.

1. Pilih **Versi**.

   Amazon S3 menampilkan semua versi untuk objek tersebut.

1. Pilih kotak centang di sebelah **ID Versi** untuk versi yang ingin Anda ambil.

1. Pilih **Tindakan**, pilih **Unduh**, dan simpan objek.

Anda juga dapat melihat, mengunduh, dan menghapus versi objek di panel ikhtisar objek. Untuk informasi selengkapnya, lihat [Melihat properti objek di konsol Amazon S3](view-object-properties.md).

**penting**  
Anda dapat membatalkan penghapusan objek hanya jika objek tersebut dihapus sebagai versi terbaru (saat ini). Anda tidak dapat membatalkan penghapusan objek versi sebelumnya. Untuk informasi selengkapnya, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md).

## Menggunakan AWS SDKs
<a name="retrieve-obj-version-sdks"></a>

Contoh untuk pengunggahan objek dalam bucket tanpa versi dan dengan dukungan Penentuan Versi adalah sama. Namun, untuk bucket dengan dukungan Penentuan Versi, Amazon S3 menetapkan nomor versi. Jika tidak, nomor versi adalah null.

Untuk contoh mengunduh objek yang menggunakan AWS SDKs Java, .NET, dan PHP, lihat [Mengunduh objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html).

Untuk contoh mencantumkan versi objek yang digunakan AWS SDKs untuk.NET dan Rust, lihat [Daftar versi objek dalam bucket Amazon S3](https://docs.aws.amazon.com/code-library/latest/ug/s3_example_s3_ListObjectVersions_section.html).

## Penggunaan API REST
<a name="retrieve-obj-version-rest"></a>

**Untuk mengambil versi objek tertentu**

1. Atur `versionId` ke ID versi objek yang ingin Anda ambil.

1. Kirim permintaan `GET Object versionId`.

**Example — Mengambil objek berversi**  
Permintaan berikut mengambil versi `L4kqtJlcpXroDTDmpUMLUo` dari `my-image.jpg`.  

```
1. GET /my-image.jpg?versionId=L4kqtJlcpXroDTDmpUMLUo HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Anda hanya dapat mengambil metadata dari suatu objek (bukan konten). Untuk informasi, lihat [Mengambil metadata versi objek](RetMetaOfObjVersion.md).

Untuk informasi tentang memulihkan versi objek sebelumnya, lihat [Memulihkan versi sebelumnya](RestoringPreviousVersions.md).

# Mengambil metadata versi objek
<a name="RetMetaOfObjVersion"></a>

Jika Anda hanya ingin mengambil metadata suatu objek (dan bukan kontennya), Anda menggunakan operasi `HEAD`. Secara default, Anda mendapatkan metadata versi terbaru. Untuk mengambil metadata versi objek tertentu, Anda menentukan ID versinya.

**Untuk mengambil metadata versi objek**

1. Atur `versionId` ke ID versi objek yang ingin Anda ambil metadatanya.

1. Kirim permintaan `HEAD Object versionId`.

**Example — Mengambil metadata dari objek berversi**  
Permintaan berikut mengambil metadata versi `3HL4kqCxf3vjVBH40Nrjfkd` dari `my-image.jpg`.  

```
1. HEAD /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Berikut ini menunjukkan respons sampel.

```
 1. HTTP/1.1 200 OK
 2. x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
 3. x-amz-request-id: 318BC8BC143432E5
 4. x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
 5. Date: Wed, 28 Oct 2009 22:32:00 GMT
 6. Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
 7. ETag: "fba9dede5f27731c9771645a39863328"
 8. Content-Length: 434234
 9. Content-Type: text/plain
10. Connection: close
11. Server: AmazonS3
```

# Memulihkan versi sebelumnya
<a name="RestoringPreviousVersions"></a>

Anda dapat menggunakan Penentuan Versi untuk mengambil versi sebelumnya dari objek. Ada dua pendekatan untuk melakukannya:
+ Salin versi objek sebelumnya ke dalam bucket yang sama.

  Objek yang disalin menjadi versi saat ini dari objek tersebut dan semua versi objek dipertahankan.
+ Hapus versi objek saat ini secara permanen.

  Ketika versi objek saat ini dihapus, Anda, akibatnya, mengubah versi sebelumnya menjadi versi saat ini dari objek tersebut.

Karena semua versi objek dipertahankan, Anda dapat membuat versi yang lebih awal dari versi saat ini dengan menyalin versi tertentu dari objek tersebut ke dalam bucket yang sama. Pada gambar berikut, objek sumber (ID = 111111) disalin ke dalam bucket yang sama. Amazon S3 memasok ID baru (88778877) dan menjadi versi objek saat ini. Jadi, bucket memiliki objek versi asli (111111) dan salinannya (88778877). Untuk informasi selengkapnya tentang mendapatkan versi sebelumnya dan kemudian mengunggahnya untuk menjadikannya versi saat ini, lihat [Mengambil versi objek dari bucket dengan dukungan Penentuan Versi](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RetrievingObjectVersions.html) dan [Mengunggah objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html).

![\[Ilustrasi yang menunjukkan penyalinan versi tertentu dari suatu objek ke dalam bucket yang sama untuk menjadikannya versi saat ini.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_COPY2.png)


`GET` berikutnya mengambil versi 88778877.

Gambar berikut menunjukkan bagaimana menghapus versi saat ini (121212) dari suatu objek menjadikan versi sebelumnya (111111) sebagai objek saat ini. Untuk informasi selengkapnya tentang menghapus objek, lihat [Menghapus satu objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html).

![\[Ilustrasi yang menunjukkan penghapusan versi objek saat ini meninggalkan versi sebelumnya sebagai objek saat ini.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_COPY_delete2.png)


`GET` berikutnya mengambil versi 111111.

**catatan**  
Untuk mengembalikan versi objek dalam batch, Anda dapat [menggunakan operasi `CopyObject`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html). Operasi salin dapat menyalin setiap objek yang ditentukan dalam manifes. Namun, ketahuilah bahwa objek tidak selalu disalin dalam urutan yang sama seperti yang tercantum dalam manifes. Untuk bucket berversi, jika mempertahankan urutan versi terkini/nonterkini bersifat penting, Anda harus menyalin semua versi nonterkini terlebih dahulu. Kemudian, setelah pekerjaan pertama selesai, salin versi terbaru pada pekerjaan berikutnya.

## Untuk mengembalikan versi objek sebelumnya
<a name="restoring-obj-version-version-enabled-bucket-examples"></a>

Untuk panduan selengkapnya tentang memulihkan objek yang dihapus, [lihat Bagaimana cara mengambil objek Amazon S3 yang telah dihapus dalam bucket berkemampuan versi?](https://repost.aws/knowledge-center/s3-undelete-configuration) di pusat AWS re:Post pengetahuan.

### Menggunakan konsol S3
<a name="retrieving-object-versions"></a>

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di dalam daftar **Bucket**, pilih nama bucket yang berisi objek.

1. Di daftar **Objek**, pilih nama objek.

1. Pilih **Versi**.

   Amazon S3 menampilkan semua versi untuk objek tersebut.

1. Pilih kotak centang di sebelah **ID Versi** untuk versi yang ingin Anda ambil.

1. Pilih **Tindakan**, pilih **Unduh**, dan simpan objek.

Anda juga dapat melihat, mengunduh, dan menghapus versi objek di panel ikhtisar objek. Untuk informasi selengkapnya, lihat [Melihat properti objek di konsol Amazon S3](view-object-properties.md).

**penting**  
Anda dapat membatalkan penghapusan objek hanya jika objek tersebut dihapus sebagai versi terbaru (saat ini). Anda tidak dapat membatalkan penghapusan objek versi sebelumnya. Untuk informasi selengkapnya, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md).

### Menggunakan AWS SDKs
<a name="restoring-obj-version-version-enabled-bucket-sdks"></a>

Untuk informasi tentang menggunakan yang lain AWS SDKs, lihat [Pusat AWS Pengembang](https://aws.amazon.com/code/). 

------
#### [ Python ]

Contoh kode Python berikut memulihkan versi objek berversi sebelumnya dengan menghapus semua versi yang terjadi setelah versi rollback yang ditentukan.

```
def rollback_object(bucket, object_key, version_id):
    """
    Rolls back an object to an earlier version by deleting all versions that
    occurred after the specified rollback version.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that holds the object to roll back.
    :param object_key: The object to roll back.
    :param version_id: The version ID to roll back to.
    """
    # Versions must be sorted by last_modified date because delete markers are
    # at the end of the list even when they are interspersed in time.
    versions = sorted(
        bucket.object_versions.filter(Prefix=object_key),
        key=attrgetter("last_modified"),
        reverse=True,
    )

    logger.debug(
        "Got versions:\n%s",
        "\n".join(
            [
                f"\t{version.version_id}, last modified {version.last_modified}"
                for version in versions
            ]
        ),
    )

    if version_id in [ver.version_id for ver in versions]:
        print(f"Rolling back to version {version_id}")
        for version in versions:
            if version.version_id != version_id:
                version.delete()
                print(f"Deleted version {version.version_id}")
            else:
                break

        print(f"Active version is now {bucket.Object(object_key).version_id}")
    else:
        raise KeyError(
            f"{version_id} was not found in the list of versions for " f"{object_key}."
        )
```

------

# Menghapus versi objek dari bucket dengan dukungan Penentuan Versi
<a name="DeletingObjectVersions"></a>

Anda dapat menghapus versi objek dari bucket Amazon S3 kapan pun Anda inginkan. Selain itu, Anda juga dapat menentukan aturan konfigurasi siklus hidup untuk objek yang memiliki siklus hidup yang ditentukan dengan baik guna meminta Amazon S3 untuk menghentikan versi objek saat ini atau menghapus versi objek nonterkini secara permanen. Jika bucket Anda mengaktifkan versi atau pembuatan versi ditangguhkan, tindakan konfigurasi siklus hidup berfungsi sebagai berikut:
+ Tindakan `Expiration` berlaku untuk versi objek saat ini. Alih-alih menghapus versi objek saat ini, Amazon S3 mempertahankan versi saat ini sebagai versi bukan saat ini dengan menambahkan *penanda hapus*, yang kemudian menjadi versi saat ini.
+ Tindakan `NoncurrentVersionExpiration` tersebut berlaku untuk versi objek nonterkini, dan Amazon S3 secara permanen menghapus versi objek ini. Anda tidak dapat memulihkan kembali objek yang dihapus secara permanen.

Untuk informasi selengkapnya tentang Siklus Hidup S3, lihat [Mengelola siklus hidup objek](object-lifecycle-mgmt.md) dan [Contoh konfigurasi Siklus Hidup S3](lifecycle-configuration-examples.md).

Untuk melihat berapa banyak versi objek saat ini dan bukan saat ini yang dimiliki bucket, Anda dapat menggunakan metrik Lensa Penyimpanan Amazon S3. Lensa Penyimpanan S3 adalah fitur analisis penyimpanan cloud yang dapat Anda gunakan untuk mendapatkan visibilitas seluruh organisasi ke dalam penggunaan dan aktivitas penyimpanan objek. Untuk informasi selengkapnya, lihat [Menggunakan Lensa Penyimpanan S3 untuk mengoptimalkan biaya penyimpanan Anda](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-optimize-storage.html?icmpid=docs_s3_user_guide_DeletingObjectVersions.html). Untuk daftar lengkap metrik, lihat [glosarium metrik Lensa Penyimpanan S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_replication.html).

**catatan**  
 Tarif Amazon S3 normal berlaku untuk setiap versi objek yang disimpan dan ditransfer, termasuk versi objek noncurrent. Untuk informasi selengkapnya, lihat [Harga Amazon S3](https://aws.amazon.com/s3/pricing/). 

## Menghapus kasus penggunaan permintaan
<a name="delete-request-use-cases"></a>

Permintaan `DELETE` memiliki kasus penggunaan berikut:
+ Saat Penentuan Versi diaktifkan, `DELETE` sederhana tidak dapat menghapus objek secara permanen. (Permintaan `DELETE` sederhana adalah permintaan yang tidak menentukan ID versi.) Alih-alih demikian, Amazon S3 memasukkan penanda hapus dalam bucket, dan marker tersebut menjadi versi objek saat ini dengan ID baru. 

  Saat Anda mencoba untuk `GET` objek yang versinya saat ini adalah penanda hapus, Amazon S3 berperilaku seolah-olah objek telah dihapus (meskipun belum dihapus) dan mengembalikan pesan kesalahan 404. Untuk informasi selengkapnya, lihat [Bekerja dengan penanda hapus](DeleteMarker.md).

  Gambar berikut menunjukkan bahwa `DELETE` sederhana tidak benar-benar menghapus objek tertentu. Sebaliknya, Amazon S3 menyisipkan penanda hapus.  
![\[Ilustrasi yang menunjukkan penyisipan penanda hapus.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)
+ Untuk menghapus objek dengan Penentuan Versi secara permanen, Anda harus menggunakan `DELETE Object versionId`.

  Gambar berikut menunjukkan bahwa menghapus versi objek tertentu secara permanen menghapus objek tersebut.  
![\[Diagram yang menunjukkan bagaimana DELETE Object versionId secara permanen menghapus versi objek tertentu.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)

## Untuk menghapus versi objek
<a name="delete-object-version"></a>

Anda dapat menghapus versi objek di Amazon S3 menggunakan konsol AWS SDKs, REST API, atau. AWS Command Line Interface

### Menggunakan konsol S3
<a name="deleting-object-versions"></a>

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di dalam daftar **Bucket**, pilih nama bucket yang berisi objek.

1. Di daftar **Objek**, pilih nama objek.

1. Pilih **Versi**.

   Amazon S3 menampilkan semua versi untuk objek tersebut.

1. Pilih kotak centang di samping **ID Versi** untuk versi yang ingin Anda hapus secara permanen.

1. Pilih **Hapus**.

1. Di **Hapus objek secara permanen?**, masukkan **permanently delete**.
**Awas**  
Saat Anda menghapus versi objek secara permanen, tindakan itu tidak dapat dibatalkan.

1. Pilih **Hapus objek**.

   Amazon S3 menghapus versi objek.

### Menggunakan AWS SDKs
<a name="delete-obj-version-version-enabled-bucket-sdks"></a>

Untuk contoh menghapus objek menggunakan AWS SDKs untuk Java, .NET, dan PHP, lihat[Menghapus objek Amazon S3](DeletingObjects.md). Contoh untuk menghapus objek dalam bucket tanpa versi dan dengan dukungan Penentuan Versi adalah sama. Namun, untuk bucket dengan dukungan Penentuan Versi, Amazon S3 menetapkan nomor versi. Jika tidak, nomor versi adalah null. 

Untuk informasi tentang menggunakan yang lain AWS SDKs, lihat [Pusat AWS Pengembang](https://aws.amazon.com/code/). 

------
#### [ Python ]

Contoh kode Python berikut secara permanen menghapus objek berversi dengan menghapus semua versinya.

```
def permanently_delete_object(bucket, object_key):
    """
    Permanently deletes a versioned object by deleting all of its versions.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that contains the object.
    :param object_key: The object to delete.
    """
    try:
        bucket.object_versions.filter(Prefix=object_key).delete()
        logger.info("Permanently deleted all versions of object %s.", object_key)
    except ClientError:
        logger.exception("Couldn't delete all versions of %s.", object_key)
        raise
```

------

### Penggunaan API REST
<a name="delete-obj-version-enabled-bucket-rest"></a>

**Untuk menghapus versi objek tertentu**
+ Di `DELETE`, tentukan ID versi.

**Example — Menghapus versi tertentu**  
Contoh berikut menghapus versi `UIORUnfnd89493jJFJ` dari `photo.gif`.  

```
1. DELETE /photo.gif?versionId=UIORUnfnd89493jJFJ HTTP/1.1 
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 12 Oct 2009 17:50:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
5. Content-Type: text/plain
6. Content-Length: 0
```

### Menggunakan AWS CLI
<a name="delete-obj-version-enabled-bucket-cli"></a>

Perintah berikut menghapus objek bernama test.txt dari bucket bernama `amzn-s3-demo-bucket1`. Untuk menghapus versi objek tertentu, Anda harus menjadi pemilik bucket dan harus menggunakan subsumber daya Id versi.

```
aws s3api delete-object --bucket amzn-s3-demo-bucket1 --key test.txt --version-id versionID
```

Untuk informasi selengkapnya tentang `delete-object`, lihat [https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) di *Referensi Perintah AWS CLI *.

Untuk informasi selengkapnya tentang menghapus versi objek, lihat topik berikut ini:
+ [Bekerja dengan penanda hapus](DeleteMarker.md)
+ [Menghapus penanda hapus untuk membuat versi yang lebih lama menjadi versi saat ini](ManagingDelMarkers.md#RemDelMarker)
+ [Menghapus objek dari bucket dengan dukungan penghapusan MFA](UsingMFADelete.md)

# Bekerja dengan penanda hapus
<a name="DeleteMarker"></a>

*Penanda hapus* di Amazon S3 adalah placeholder (atau penanda) untuk objek berversi yang ditentukan dalam permintaan `DELETE` sederhana. Permintaan `DELETE` sederhana adalah permintaan yang tidak menentukan ID versi. Karena objek berada dalam bucket dengan dukungan Penentuan Versi, objek tidak dihapus. Namun, penanda hapus membuat Amazon S3 berperilaku seolah-olah objek telah dihapus. Anda dapat menggunakan panggilan `DELETE` API Amazon S3 pada penanda hapus. Untuk melakukan ini, Anda harus membuat `DELETE` permintaan dengan menggunakan pengguna AWS Identity and Access Management (IAM) atau peran dengan izin yang sesuai.

Penanda hapus memiliki *nama kunci* (atau *kunci*) dan ID versi seperti objek lainnya. Namun, penanda hapus berbeda dengan objek lain dalam hal berikut:
+ Penanda hapus tidak memiliki data yang terkait dengannya.
+ Penanda penghapusan tidak terkait dengan nilai daftar kontrol akses (ACL).
+ Jika Anda mengeluarkan permintaan `GET` untuk penanda hapus, permintaan `GET` tidak mengambil apa pun karena penanda hapus tidak memiliki data. Khususnya, ketika permintaan `GET` Anda tidak menentukan `versionId`, Anda mendapatkan pesan kesalahan 404 (Tidak Ditemukan).

Penanda hapus menambah sedikit biaya penyimpanan di Amazon S3. Ukuran penyimpanan penanda hapus sama dengan ukuran nama kunci dari penanda hapus. Nama kunci adalah deretan karakter Unicode. Pengodean UTF-8 untuk nama kunci menambahkan 1-4 byte penyimpanan ke bucket Anda untuk setiap karakter dalam nama. Penanda hapus disimpan di kelas penyimpanan S3 Standard. 

Jika ingin mengetahui berapa banyak penanda hapus yang Anda miliki dan kelas penyimpanan apa yang disimpan, Anda dapat menggunakan Lensa Penyimpanan Amazon S3. Untuk informasi selengkapnya, lihat [Memantau aktivitas penyimpanan dan penggunaan Anda dengan Amazon S3 Storage Lens](storage_lens.md) dan [Glosarium metrik Lensa Penyimpanan Amazon S3](storage_lens_metrics_glossary.md).

Untuk informasi selengkapnya tentang nama kunci, lihat [Menamai objek Amazon S3](object-keys.md). Untuk informasi tentang menghapus penanda hapus, lihat [Mengelola penanda hapus](ManagingDelMarkers.md). 

Hanya Amazon S3 yang dapat membuat penanda hapus, dan hal ini dilakukan setiap kali Anda mengirim permintaan `DeleteObject` atas objek dalam bucket dengan dukungan Penentuan Versi atau Penentuan Versi ditangguhkan. Objek yang ditentukan dalam permintaan `DELETE` tidak benar-benar dihapus. Alih-alih demikian, penanda hapus menjadi versi objek saat ini. Nama kunci objek (atau kunci) menjadi kunci dari penanda hapus. 

Saat Anda mendapatkan objek tanpa menentukan `versionId` dalam permintaan, jika versinya saat ini adalah penanda hapus, Amazon S3 akan merespons dengan berikut:
+ Pesan kesalahan 404 (Tidak Ditemukan)
+ Header respons, `x-amz-delete-marker: true`

Saat Anda mendapatkan objek dengan menentukan `versionId` dalam permintaan, jika versi yang ditentukan adalah penanda hapus, Amazon S3 akan merespons dengan berikut:
+ Pesan kesalahan 405 (Metode Tidak Diizinkan)
+ Header respons, `x-amz-delete-marker: true`
+ Header respons, `Last-Modified: timestamp` (hanya saat menggunakan operasi [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)atau [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)API)

Header respons `x-amz-delete-marker: true` memberi tahu bahwa objek yang diakses adalah penanda hapus. Header respons ini tidak pernah mengembalikan `false`, karena ketika nilainya adalah `false`, versi objek saat ini atau yang ditentukan bukanlah penanda hapus.

Header respons `Last-Modified` menyediakan waktu pembuatan penanda hapus.

Gambar berikut menunjukkan cara panggilan API `GetObject` pada sebuah objek yang versinya saat ini adalah penanda hapus merespons dengan pesan kesalahan 404 (Tidak Ditemukan) dan header respons menyertakan `x-amz-delete-marker: true`.

![\[Ilustrasi yang menunjukkan panggilan GetObject untuk penanda hapus yang menampilkan pesan kesalahan 404 (Tidak Ditemukan).\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


Jika Anda melakukan panggilan `GetObject` pada objek dengan menentukan `versionId` dalam permintaan Anda, dan jika versi yang ditentukan adalah penanda hapus, Amazon S3 merespons dengan pesan kesalahan 405 (Metode Tidak Diizinkan) dan header respons menyertakan `x-amz-delete-marker: true` dan `Last-Modified: timestamp`.

![\[Ilustrasi yang menunjukkan GetObject panggilan untuk penanda hapus yang mengembalikan kesalahan 405 (Metode Tidak Diizinkan).\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound_405.png)


Bahkan jika ditimpa, penanda hapus tetap ada di versi objek Anda. Satu-satunya cara untuk membuat daftar penanda hapus (dan versi objek lainnya) adalah dengan menggunakan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html)permintaan. Anda dapat membuat permintaan ini Konsol Manajemen AWS dengan mencantumkan objek Anda di bucket tujuan umum dan memilih **Tampilkan versi**. Untuk informasi selengkapnya, lihat [Mencantumkan objek dalam bucket dengan dukungan Penentuan Versi](list-obj-version-enabled-bucket.md).

Gambar berikut menunjukkan bahwa permintaan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) atau [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html) tidak mengembalikan objek yang versinya saat ini adalah penanda hapus.

![\[Ilustrasi yang menunjukkan bagaimana ListObjects panggilan ListObjectsV2 atau tidak mengembalikan penanda penghapusan apa pun.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_GETBucketwithDeleteMarkers.png)


# Mengelola penanda hapus
<a name="ManagingDelMarkers"></a>

## Mengonfigurasi siklus hidup untuk membersihkan penanda hapus kedaluwarsa secara otomatis
<a name="LifecycleDelMarker"></a>

Penanda hapus objek yang kedaluwarsa adalah penanda yang semua versi objeknya dihapus dan hanya satu penanda hapus yang tersisa. Jika konfigurasi siklus hidup diatur untuk menghapus versi saat ini, atau tindakan `ExpiredObjectDeleteMarker` diatur secara eksplisit, Amazon S3 menghapus penanda hapus objek yang kedaluwarsa. Sebagai contoh, lihat [Menghapus penanda penghapusan objek yang kedaluwarsa dalam bucket berkemampuan versi](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7). 

## Menghapus penanda hapus untuk membuat versi yang lebih lama menjadi versi saat ini
<a name="RemDelMarker"></a>

Saat Anda menghapus sebuah objek dalam bucket dengan dukungan Penentuan Versi, semua versi tetap berada dalam bucket, dan Amazon S3 membuat penanda hapus untuk objek tersebut. Untuk membatalkan penghapusan objek, Anda harus menghapus penanda hapus ini. Untuk informasi selengkapnya tentang Penentuan Versi dan penanda hapus, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md).

Untuk menghapus penanda hapus secara permanen, Anda harus menyertakan ID versinya dalam permintaan `DeleteObject versionId`. Gambar berikut menunjukkan cara permintaan `DeleteObject versionId` menghapus penanda hapus secara permanen.

![\[Ilustrasi yang menunjukkan penghapusan penanda hapus menggunakan ID versinya.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarkerVersioned.png)


Efek dari menghapus penanda hapus adalah bahwa permintaan `GET` sederhana sekarang akan mengambil ID versi objek saat ini (121212). 

**catatan**  
Jika Anda menggunakan permintaan `DeleteObject` yang versinya saat ini adalah penanda hapus (tanpa menentukan ID versi penanda hapus), Amazon S3 tidak akan menghapus penanda hapus, melainkan `PUTs` penanda hapus lainnya.

Untuk menghapus penanda hapus dengan ID versi `NULL`, Anda harus meneruskan `NULL` sebagai ID versi dalam permintaan `DeleteObject`. Gambar berikut menunjukkan bagaimana permintaan `DeleteObject` sederhana dibuat tanpa ID versi yang versinya saat ini adalah penanda hapus, tidak menghapus apa pun, tetapi menambahkan penanda hapus dengan ID versi unik (7498372).

![\[Ilustrasi yang menunjukkan penghapusan penanda hapus menggunakan ID versi NULL.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarker.png)


## Menggunakan konsol S3
<a name="undelete-objects"></a>

Gunakan langkah-langkah berikut untuk memulihkan objek yang dihapus yang bukan merupakan folder dari bucket S3 Anda, termasuk objek yang ada di dalam folder tersebut. 

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Dari daftar **Bucket**, pilih nama bucket yang Anda inginkan.

1. Untuk melihat daftar **versi** objek di bucket, pilih tombol **Buat daftar versi**. Anda akan dapat melihat penanda hapus untuk objek yang dihapus. 

   

1. Untuk membatalkan penghapusan objek, Anda harus menghapus penanda hapus ini. Centang kotak di samping **penanda hapus** objek yang akan dipulihkan, lalu pilih **Hapus**.

1. Konfirmasi penghapusan pada halaman **Hapus objek**.

   1. Untuk **Hapus objek secara permanen?**, masukkan **permanently delete**.

   1. Pilih **Hapus objek**.

**catatan**  
Anda tidak dapat menggunakan konsol Amazon S3 untuk membatalkan penghapusan folder. Anda harus menggunakan AWS CLI atau SDK. Sebagai contoh, lihat [Bagaimana saya bisa mengambil objek Amazon S3 yang telah dihapus di bucket dengan dukungan Penentuan Versi?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-undelete-configuration/) di Pusat Pengetahuan AWS .

## Penggunaan API REST
<a name="delete-marker-rest-api"></a>

**Untuk menghapus penanda hapus secara permanen**

1. Tetapkan `versionId` ke ID versi ke penanda hapus yang ingin Anda hapus.

1. Kirim permintaan `DELETE Object versionId`.

**Example — Menghapus penanda hapus**  
Contoh berikut menghapus penanda hapus untuk versi `photo.gif` 4857693.  

```
1. DELETE /photo.gif?versionId=4857693 HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Saat Anda menghapus penanda hapus, Amazon S3 menyertakan berikut ini di dalam respons.

```
1. 204 NoContent 
2. x-amz-version-id: versionID 
3. x-amz-delete-marker: true
```

## Menggunakan AWS SDKs
<a name="remove-delete-marker-examples-sdk"></a>

Untuk informasi tentang menggunakan yang lain AWS SDKs, lihat [Pusat AWS Pengembang](https://aws.amazon.com/code/).

------
#### [ Python ]

Contoh kode Python berikut menunjukkan cara menghapus penanda hapus dari suatu objek dan dengan demikian menjadikan versi bukan saat ini yang terkini, versi objek saat ini.

```
def revive_object(bucket, object_key):
    """
    Revives a versioned object that was deleted by removing the object's active
    delete marker.
    A versioned object presents as deleted when its latest version is a delete marker.
    By removing the delete marker, we make the previous version the latest version
    and the object then presents as *not* deleted.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that contains the object.
    :param object_key: The object to revive.
    """
    # Get the latest version for the object.
    response = s3.meta.client.list_object_versions(
        Bucket=bucket.name, Prefix=object_key, MaxKeys=1
    )

    if "DeleteMarkers" in response:
        latest_version = response["DeleteMarkers"][0]
        if latest_version["IsLatest"]:
            logger.info(
                "Object %s was indeed deleted on %s. Let's revive it.",
                object_key,
                latest_version["LastModified"],
            )
            obj = bucket.Object(object_key)
            obj.Version(latest_version["VersionId"]).delete()
            logger.info(
                "Revived %s, active version is now %s  with body '%s'",
                object_key,
                obj.version_id,
                obj.get()["Body"].read(),
            )
        else:
            logger.warning(
                "Delete marker is not the latest version for %s!", object_key
            )
    elif "Versions" in response:
        logger.warning("Got an active version for %s, nothing to do.", object_key)
    else:
        logger.error("Couldn't get any version info for %s.", object_key)
```

------

# Menghapus objek dari bucket dengan dukungan penghapusan MFA
<a name="UsingMFADelete"></a>

Saat Anda mengonfigurasi penghapusan MFA, hanya pengguna root yang dapat menghapus versi objek secara permanen atau mengubah konfigurasi versi pada bucket S3 Anda. Anda harus menggunakan perangkat MFA untuk mengautentikasi pengguna root untuk melakukan tindakan hapus.

Jika konfigurasi Penentuan Versi bucket didukung penghapusan MFA, pemilik bucket harus menyertakan header permintaan `x-amz-mfa` dalam permintaan untuk secara permanen menghapus versi objek atau mengubah status Penentuan Versi bucket. Permintaan yang mencakup `x-amz-mfa` harus menggunakan HTTPS.

Nilai header adalah rangkaian nomor seri perangkat autentikasi Anda, spasi, dan kode autentikasi yang ditampilkan di atasnya. Jika Anda tidak menyertakan header permintaan ini, permintaan akan gagal.

Saat menggunakan AWS CLI sertakan informasi yang sama dengan nilai `mfa` parameter.

Untuk informasi selengkapnya tentang perangkat autentikasi, lihat [Autentikasi Multi-faktor](https://aws.amazon.com/iam/details/mfa/).

Untuk informasi selengkapnya tentang mengaktifkan penghapusan MFA, lihat [Mengonfigurasi penghapusan MFA](MultiFactorAuthenticationDelete.md).

**catatan**  
Menghapus objek dalam bucket berkemampuan versi yang diaktifkan penghapusan MFA tidak tersedia melalui file. Konsol Manajemen AWS

## Menggunakan AWS CLI
<a name="MFADeleteCLI"></a>

Untuk menghapus objek dalam bucket berkemampuan versi yang mengaktifkan penghapusan MFA, gunakan perintah berikut. Bila Anda menggunakan perintah contoh berikut, ganti `user input placeholders` dengan informasi Anda sendiri.

```
 aws s3api delete-object --bucket amzn-s3-demo-bucket --key OBJECT-KEY --version-id "VERSION ID" --mfa "MFA_DEVICE_SERIAL_NUMBER MFA_DEVICE_CODE"						
```

## Penggunaan API REST
<a name="MFADeleteAPI"></a>

Contoh berikut menghapus `my-image.jpg` (dengan versi yang ditentukan), yang ada dalam bucket yang dikonfigurasi dengan dukungan penghapusan MFA. 

Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html)di Referensi API Amazon Simple Storage Service

```
1. DELETE /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTPS/1.1
2. Host: bucketName.s3.amazonaws.com
3. x-amz-mfa: 20899872 301749
4. Date: Wed, 28 Oct 2009 22:32:00 GMT
5. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

# Mengonfigurasi izin objek berversi
<a name="VersionedObjectPermissionsandACLs"></a>

Izin untuk objek di Amazon S3 ditetapkan pada tingkat versi. Setiap versi mempunyai pemilik objeknya sendiri. Akun AWS Yang membuat versi objek adalah pemiliknya. Jadi, Anda dapat mengatur izin yang berbeda-beda untuk berbagai versi dari objek yang sama. Untuk melakukannya, Anda harus menentukan ID versi objek yang izinnya ingin Anda tetapkan di permintaan `PUT Object versionId acl`. Untuk penjelasan rinci dan petunjuk tentang penggunaan ACLs, lihat[Identity and Access Management untuk Amazon S3](security-iam.md).

**Example — Mengatur izin untuk versi objek**  
Permintaan berikut menetapkan izin penerima dengan ID pengguna kanonik*b4bf1b36f9716f094c3079dcf5ac9982d4f2847de46204d47448bc557fb5ac2a*, ke `FULL_CONTROL` pada kunci,, ID versi`my-image.jpg`,. `3HL4kqtJvjVBH40Nrjfkd`  

```
 1. PUT /my-image.jpg?acl&versionId=3HL4kqtJvjVBH40Nrjfkd HTTP/1.1
 2. Host: bucket.s3.amazonaws.com
 3. Date: Wed, 28 Oct 2009 22:32:00 GMT
 4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
 5. Content-Length: 124
 6.  
 7. <AccessControlPolicy>
 8.   <Owner>
 9.     <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
10.   </Owner>
11.   <AccessControlList>
12.     <Grant>
13.       <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
14.         <ID>a9a7b886d6fd24a52fe8ca5bef65f89a64e0193f23000e241bf9b1c61be666e9</ID>
15.       </Grantee>
16.       <Permission>FULL_CONTROL</Permission>
17.     </Grant>
18.   </AccessControlList>
19.   </AccessControlPolicy>
```

Demikian pula, untuk mendapatkan izin versi objek tertentu, Anda harus menentukan ID versinya di permintaan `GET Object versionId acl`. Anda perlu memasukkan ID versi karena, secara default, `GET Object acl` mengembalikan izin versi objek saat ini. 

**Example — Mengambil izin untuk versi objek tertentu**  
Dalam contoh berikut, Amazon S3 mengembalikan izin untuk kunci, `my-image.jpg`, ID versi, `DVBH40Nr8X8gUMLUo`.  

```
1. GET /my-image.jpg?versionId=DVBH40Nr8X8gUMLUo&acl HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU
```

Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html) dalam *Referensi API Amazon Simple Storage Service*.

# Bekerja dengan objek dalam bucket dengan Penentuan Versi ditangguhkan
<a name="VersionSuspendedBehavior"></a>

Di Amazon S3, Anda dapat menangguhkan Penentuan Versi untuk berhenti mengumpulkan versi baru dari objek yang sama dalam bucket. Anda mungkin melakukan ini karena Anda hanya menginginkan satu versi objek dalam bucket. Atau, mungkin Anda tidak ingin menambah biaya untuk beberapa versi. 

Saat Anda menangguhkan Penentuan Versi, objek yang ada di bucket tidak berubah. Perubahannya adalah cara Amazon S3 menangani objek di masa mendatang. Topik dalam bagian ini menjelaskan berbagai operasi objek dalam bucket dengan Penentuan Versi ditangguhkan, termasuk menambahkan, mengambil, dan menghapus objek.

Untuk informasi selengkapnya tentang Penentuan Versi S3, lihat [Mempertahankan beberapa versi objek dengan Versi S3](Versioning.md). Untuk informasi selengkapnya tentang pengambilan versi objek, lihat [Mengambil versi objek dari bucket dengan dukungan Penentuan Versi](RetrievingObjectVersions.md).

**Topics**
+ [Menambahkan objek ke bucket dengan Penentuan Versi ditangguhkan](AddingObjectstoVersionSuspendedBuckets.md)
+ [Mengambil objek dari bucket dengan Penentuan Versi ditangguhkan](RetrievingObjectsfromVersioningSuspendedBuckets.md)
+ [Menghapus objek dari bucket dengan Penentuan Versi ditangguhkan](DeletingObjectsfromVersioningSuspendedBuckets.md)

# Menambahkan objek ke bucket dengan Penentuan Versi ditangguhkan
<a name="AddingObjectstoVersionSuspendedBuckets"></a>

Anda dapat menambahkan objek ke bucket dengan Penentuan Versi ditangguhkan di Amazon S3 untuk membuat objek dengan ID versi null atau menimpa versi objek apa pun dengan ID versi yang cocok.

Setelah Anda menangguhkan Penentuan Versi di bucket, Amazon S3 secara otomatis menambahkan ID versi `null` ke setiap objek berikutnya yang disimpan (menggunakan `PUT`, `POST`, atau `CopyObject`) di bucket tersebut.

Gambar berikut menunjukkan cara Amazon S3 menambahkan ID versi dari `null` ke objek saat ditambahkan ke bucket dengan Penentuan Versi ditangguhkan.

![\[Amazon S3 menambahkan ID versi null ke grafik objek.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended.png)


Jika versi null sudah ada dalam bucket dan Anda menambahkan objek lain dengan kunci yang sama, objek tambahan akan menimpa versi null asli. 

Apabila terdapat objek berversi dalam bucket, versi yang Anda `PUT` menjadi versi objek saat ini. Gambar berikut menunjukkan cara menambahkan objek ke bucket yang berisi objek berversi yang tidak menimpa objek yang sudah berada dalam bucket. 

Dalam hal ini, versi 111111 sudah ada dalam bucket. Amazon S3 melampirkan ID versi null pada objek yang ditambahkan dan menyimpannya dalam bucket. Versi 111111 tidak ditimpa.

![\[Amazon S3 menambahkan ID versi null ke objek tanpa menimpa grafik versi 111111.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended3.png)


Jika versi null sudah ada di dalam bucket, versi null akan ditimpa, seperti yang ditunjukkan pada gambar berikut.

![\[Amazon S3 menambahkan ID versi null ke objek sambil menimpa grafik konten asli.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended4.png)


Meskipun kunci dan ID versi (`null`) dari versi null adalah sama sebelum dan sesudah `PUT`, isi versi null yang semula disimpan di bucket diganti dengan isi objek `PUT` ke dalam bucket.

# Mengambil objek dari bucket dengan Penentuan Versi ditangguhkan
<a name="RetrievingObjectsfromVersioningSuspendedBuckets"></a>

Permintaan `GET Object` mengembalikan versi objek saat ini, baik apakah Anda telah mengaktifkan Penentuan Versi pada bucket maupun tidak. Gambar berikut menunjukkan cara `GET` sederhana mengembalikan versi objek saat ini.

![\[Ilustrasi yang menunjukkan bagaimana sederhana GET mengembalikan versi objek saat ini.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_GET_suspended.png)


# Menghapus objek dari bucket dengan Penentuan Versi ditangguhkan
<a name="DeletingObjectsfromVersioningSuspendedBuckets"></a>

Anda dapat menghapus objek dari bucket dengan Penentuan Versi ditangguhkan untuk menghapus objek dengan ID versi null.

Jika Penentuan Versi ditangguhkan untuk sebuah bucket, permintaan `DELETE`:
+ Hanya dapat menghapus objek yang ID versinya adalah `null`.
+ Tidak menghapus apa pun jika tidak ada versi null dari objek dalam bucket.
+ Memasukkan penanda hapus ke dalam bucket.

Jika pembuatan versi bucket ditangguhkan, operasi akan menghapus objek yang memiliki nol. `versionId` Jika ada ID versi, Amazon S3 menyisipkan penanda hapus yang menjadi versi objek saat ini. Gambar berikut menunjukkan bagaimana sederhana `DELETE` menghapus versi null dan Amazon S3 menyisipkan penanda hapus di tempatnya sebagai gantinya dengan `null` ID versi.

![\[Ilustrasi yang menunjukkan penghapusan sederhana untuk menghapus objek dengan ID versi NULL.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspended.png)


Untuk menghapus objek yang memiliki a secara permanen`versionId`, Anda harus menyertakan objek `versionId` dalam permintaan. Karena penanda hapus tidak berisi konten apa pun, Anda akan kehilangan konten untuk `null` versi saat penanda hapus menggantikannya.

Gambar berikut menunjukkan bucket yang tidak memiliki versi null. Dalam hal ini, tidak `DELETE` menghapus apa-apa. Sebaliknya, Amazon S3 hanya menyisipkan penanda hapus.

![\[Ilustrasi yang menunjukkan penyisipan penanda hapus.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspendedNoNull.png)


Bahkan dalam bucket yang ditangguhkan versi, pemilik bucket dapat menghapus versi tertentu secara permanen dengan menyertakan ID versi dalam `DELETE` permintaan, kecuali izin untuk permintaan tersebut telah ditolak secara `DELETE` eksplisit. Misalnya, untuk menolak penghapusan objek apa pun yang memiliki ID `null` versi, Anda harus secara eksplisit menolak dan izin. `s3:DeleteObject` `s3:DeleteObjectVersions`

Gambar berikut menunjukkan bahwa menghapus versi objek tertentu akan secara permanen menghapus objek tersebut. Hanya pemilik bucket yang dapat menghapus versi objek tertentu.

![\[Ilustrasi yang menunjukkan penghapusan objek permanen menggunakan ID versi tertentu.\]](http://docs.aws.amazon.com/id_id/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


# Pemecahan masalah pembuatan versi
<a name="troubleshooting-versioning"></a>

Topik berikut ini dapat membantu Anda memecahkan beberapa masalah umum Penentuan Versi Amazon S3.

**Topics**
+ [Saya ingin memulihkan objek yang secara tidak sengaja dihapus dalam bucket dengan Penentuan Versi diaktifkan](#recover-objects)
+ [Saya ingin menghapus objek berversi secara permanen](#delete-objects-permanent)
+ [Saya mengalami penurunan kinerja setelah mengaktifkan Penentuan Versi bucket](#performance-degradation)

## Saya ingin memulihkan objek yang secara tidak sengaja dihapus dalam bucket dengan Penentuan Versi diaktifkan
<a name="recover-objects"></a>

Secara umum, ketika versi objek dihapus dari bucket S3, tidak ada cara bagi Amazon S3 untuk memulihkannya. Namun, jika Anda sudah mengaktifkan Penentuan Versi S3 di bucket S3, permintaan `DELETE` yang tidak menentukan ID versi tidak dapat menghapus objek secara permanen. Sebagai gantinya, penanda hapus ditambahkan sebagai placeholder. Penanda hapus ini menjadi versi objek saat ini. 

Untuk memverifikasi apakah objek yang dihapus telah dihapus secara permanen atau dihapus sementara (ditandai dengan penanda hapus), lakukan hal berikut: 

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di panel navigasi kiri, pilih **Bucket**.

1. Di dalam daftar **Bucket**, pilih nama bucket yang berisi objek.

1. Pada daftar **Objek**, Aktifkan tombol **Tampilkan versi** di sebelah kanan bilah pencarian, lalu cari objek yang dihapus di bilah pencarian. Tombol beralih ini hanya tersedia jika Penentuan Versi sebelumnya telah diaktifkan di bucket.

   Anda juga dapat menggunakan [Inventaris S3 untuk mencari objek yang dihapus](storage-inventory.md#storage-inventory-contents).

1. Jika Anda tidak dapat menemukan objek setelah mengalihkan **Tampilkan versi** atau membuat laporan inventaris, dan Anda juga tidak dapat menemukan [penanda hapus](DeleteMarker.md) objek, penghapusan bersifat permanen dan objek tidak dapat dipulihkan.



Anda juga dapat memverifikasi status objek yang dihapus dengan menggunakan operasi `HeadObject` API dari AWS Command Line Interface (AWS CLI). Untuk menggunakannya, ganti perintah `head-object` dengan `user input placeholders` informasi Anda sendiri: 

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html`

Jika Anda menjalankan perintah `head-object` pada objek berversi yang versinya saat ini adalah penanda hapus, Anda akan menerima kesalahan 404 Tidak Ditemukan. Contoh: 

Terjadi kesalahan (404) saat memanggil HeadObject operasi: Tidak Ditemukan

Jika Anda menjalankan perintah `head-object` pada objek berversi dan memberikan ID versi objek, Amazon S3 mengambil metadata objek, mengonfirmasi bahwa objek tersebut masih ada dan tidak dihapus secara permanen.

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

```
{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"Metadata": {}
}
```

Jika objek ditemukan dan versi terbaru adalah penanda hapus, versi objek sebelumnya masih akan ada. Karena penanda hapus adalah versi objek saat ini, Anda dapat memulihkan objek dengan menghapus penanda hapus. 

Setelah Anda menghapus penanda hapus secara permanen, versi terbaru kedua dari objek akan menjadi versi objek saat ini, sehingga objek Anda akan kembali tersedia. Untuk gambaran visual tentang bagaimana objek dipulihkan, lihat [Menghapus penanda hapus](ManagingDelMarkers.md#RemDelMarker).

Untuk menghapus versi objek tertentu, Anda harus menjadi pemilik bucket. Untuk menghapus penanda hapus secara permanen, Anda harus menyertakan ID versinya dalam permintaan `DeleteObject`. Untuk menghapus penanda hapus, gunakan perintah berikut, lalu ganti `user input placeholders` dengan informasi Anda sendiri: 

****  
`aws s3api delete-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

Untuk informasi selengkapnya tentang perintah `delete-object`, lihat [https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html](https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html) di *Referensi Perintah AWS CLI *. Untuk informasi selengkapnya tentang cara menghapus penanda hapus secara permanen, lihat. [Mengelola penanda hapus](ManagingDelMarkers.md)

## Saya ingin menghapus objek berversi secara permanen
<a name="delete-objects-permanent"></a>

Pada bucket dengan Penentuan Versi diaktifkan, permintaan `DELETE` tanpa ID versi tidak dapat menghapus objek secara permanen. Sebaliknya, permintaan semacam itu akan menyisipkan penanda hapus.

Untuk menghapus objek berversi secara permanen, Anda dapat memilih dari metode berikut:
+ Buat aturan Siklus Hidup S3 untuk menghapus versi tidak terkini secara permanen. Untuk menghapus versi tidak terkini secara permanen, pilih **Hapus versi objek tidak terkini secara permanen**, lalu masukkan nomor di bawah **Hari setelah objek menjadi tidak terkini**. Anda dapat secara opsional menentukan jumlah versi yang lebih baru untuk dipertahankan dengan memasukkan nilai di bawah **Jumlah versi yang lebih baru untuk dipertahankan**. Untuk informasi selengkapnya tentang membuat aturan ini, lihat [Menyetel konfigurasi Siklus Hidup S3](how-to-set-lifecycle-configuration-intro.md).
+ Hapus versi tertentu dengan menyertakan ID versi dalam permintaan `DELETE`. Untuk informasi selengkapnya, lihat [Cara menghapus objek berversi secara permanen](DeletingObjectVersions.md#delete-request-use-cases).
+ Buat aturan siklus hidup untuk mengakhiri versi saat ini. Untuk mengakhiri versi objek saat ini, pilih **Akhiri versi objek saat ini**, lalu tambahkan angka di bawah **Hari setelah pembuatan objek**. Untuk informasi selengkapnya tentang membuat aturan siklus hidup ini, lihat [Mengatur konfigurasi Siklus Hidup S3](how-to-set-lifecycle-configuration-intro.md).
+ Untuk menghapus semua objek berversi dan menghapus penanda secara permanen, buat dua aturan siklus hidup: satu untuk mengakhiri versi saat ini dan menghapus versi objek yang tidak terkini secara permanen, dan yang lainnya untuk menghapus penanda hapus objek yang kedaluwarsa.

Dalam bucket dengan Penentuan Versi yang diaktifkan, permintaan `DELETE` yang tidak menentukan ID versi hanya dapat menghapus objek dengan ID versi `NULL`. Jika objek diunggah saat Penentuan Versi diaktifkan, permintaan `DELETE`yang tidak menentukan ID versi akan membuat penanda hapus dari objek tersebut.

**catatan**  
Untuk bucket berkemampuan Kunci Objek S3, permintaan objek `DELETE` dengan ID versi objek yang dilindungi menyebabkan kesalahan 403 Akses Ditolak. Permintaan objek `DELETE` tanpa ID versi menambahkan penanda hapus sebagai versi terbaru dari objek dengan respons 200 OK. Objek yang dilindungi oleh Kunci Objek tidak dapat dihapus secara permanen sampai periode retensi dan penahanan hukumnya dihapus. Untuk informasi selengkapnya, lihat [Cara kerja Kunci Objek S3](object-lock.md#object-lock-overview).

## Saya mengalami penurunan kinerja setelah mengaktifkan Penentuan Versi bucket
<a name="performance-degradation"></a>

Penurunan kinerja dapat terjadi pada bucket berkemampuan Penentuan Versi jika ada terlalu banyak penanda hapus atau objek berversi, dan jika praktik terbaik tidak diikuti.

**Terlalu banyak penanda hapus**  
Setelah Anda mengaktifkan Penentuan Versi pada bucket, permintaan `DELETE` tanpa ID versi yang dibuat pada objek akan membuat penanda hapus dengan ID versi unik. Konfigurasi siklus hidup dengan aturan **Akhiri versi objek saat ini** menambahkan penanda hapus dengan ID versi unik ke setiap objek. Penanda hapus yang berlebihan dapat mengurangi kinerja dalam bucket.

Saat Penentuan Versi ditangguhkan pada bucket, Amazon S3 menandai ID versi sebagai `NULL` pada objek yang baru dibuat. Tindakan pengakhiran dalam bucket yang ditangguhkan Penentuan Versi menyebabkan Amazon S3 membuat penanda hapus dengan `NULL` sebagai ID versi. Dalam bucket yang ditangguhkan Penentuan Versi, penanda hapus `NULL` dibuat untuk permintaan penghapusan apa pun. Penanda hapus `NULL` ini juga disebut penanda hapus objek kedaluwarsa ketika semua versi objek dihapus dan hanya satu penanda hapus yang tersisa. Jika terlalu banyak penanda hapus `NULL` yang terakumulasi, akan terjadi penurunan kinerja dalam bucket.

**Terlalu banyak objek berversi**  
Jika bucket berkemampuan Penentuan Versi berisi objek dengan jutaan versi, peningkatan kesalahan 503 Layanan Tidak Tersedia dapat terjadi. Jika Anda menyadari adanya peningkatan signifikan dalam jumlah HTTP 503 Layanan Tidak Tersedia yang diterima untuk permintaan objek `PUT` atau `DELETE` ke bucket dengan Penentuan Versi yang diaktifkan, Anda kemungkinan memiliki satu atau beberapa objek dalam bucket yang memiliki jutaan versi. Jika Anda memiliki objek dengan jutaan versi, Amazon S3 secara otomatis membatasi permintaan ke bucket tersebut. Permintaan pembatasan melindungi bucket Anda dari jumlah lalu lintas permintaan yang berlebihan, yang dapat berpotensi mengganggu permintaan lain yang dilakukan ke bucket yang sama. 

Untuk menentukan objek mana yang memiliki jutaan versi, gunakan Inventaris S3. S3 Inventory menghasilkan laporan yang menyediakan daftar file datar dari objek dalam bucket. Untuk informasi selengkapnya, lihat [Membuat katalog dan menganalisis data Anda dengan S3 Inventory](storage-inventory.md).

Untuk memverifikasi apakah ada banyak objek berversi dalam bucket, gunakan metrik Lensa Penyimpanan S3 untuk melihat **Jumlah objek versi saat ini**, **Jumlah objek versi tidak terkini**, dan **Jumlah objek penanda hapus**. Untuk informasi lebih lanjut tentang metrik Lensa Penyimpanan, silakan lihat [Glosarium metrik Lensa Penyimpanan Amazon S3](storage_lens_metrics_glossary.md).

Tim Amazon S3 menganjurkan pelanggan untuk menyelidiki aplikasi yang berulang kali menimpa objek yang sama, yang berpotensi menciptakan jutaan versi untuk objek tersebut, sehingga memastikan apakah aplikasi bekerja sebagaimana mestinya. Misalnya, aplikasi menimpa objek yang sama setiap menit selama seminggu dapat membuat lebih dari sepuluh ribu versi. Kami merekomendasikan menyimpan kurang dari seratus ribu versi untuk setiap objek. Jika Anda memiliki kasus penggunaan yang membutuhkan jutaan versi untuk satu atau lebih objek, hubungi AWS Dukungan tim untuk bantuan dalam menentukan solusi yang lebih baik.

**Praktik terbaik**  
Untuk mencegah masalah penurunan performa terkait Penentuan Versi, kami sarankan Anda menerapkan praktik terbaik berikut:
+ Aktifkan aturan siklus hidup untuk mengakhiri versi objek sebelumnya. Misalnya, Anda dapat membuat aturan siklus hidup untuk mengakhiri versi tidak terkini setelah 30 hari objek menjadi tidak terkini. Anda juga dapat mempertahankan beberapa versi tidak terkini jika Anda tidak ingin menghapus semuanya. Untuk informasi selengkapnya, lihat [Mengatur konfigurasi Siklus Hidup S3](how-to-set-lifecycle-configuration-intro.md).
+ Aktifkan aturan siklus hidup untuk menghapus penanda penghapusan objek kedaluwarsa yang tidak memiliki objek data terkait di bucket. Untuk informasi selengkapnya, lihat [Menghapus penanda hapus objek kedaluwarsa](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7).

Untuk praktik terbaik pengoptimalan kinerja Amazon S3 tambahan, lihat [Pola desain praktik terbaik.](optimizing-performance.md)