

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

# Bekerja dengan objek di dalam bucket direktori
<a name="directory-buckets-objects"></a>

Setelah membuat bucket direktori Amazon S3, Anda dapat bekerja dengan objek menggunakan konsol Amazon S3 AWS Command Line Interface ,AWS CLI(), dan file. AWS SDKs 

Untuk informasi selengkapnya tentang melakukan operasi massal, mengimpor, mengunggah, menyalin, menghapus, dan mengunduh objek dalam bucket direktori, lihat topik berikut.

**Topics**
+ [Mengimpor objek ke dalam bucket direktori](create-import-job.md)
+ [Bekerja dengan Siklus Hidup S3 untuk bucket direktori](directory-buckets-objects-lifecycle.md)
+ [Menggunakan Operasi Batch dengan bucket direktori](directory-buckets-objects-Batch-Ops.md)
+ [Menambahkan data ke objek dalam ember direktori](directory-buckets-objects-append.md)
+ [Mengganti nama objek dalam ember direktori](directory-buckets-objects-rename.md)
+ [Mengunggah objek ke ember direktori](directory-buckets-objects-upload.md)
+ [Menyalin objek dari atau ke ember direktori](directory-buckets-objects-copy.md)
+ [Menghapus objek dari ember direktori](directory-bucket-delete-object.md)
+ [Mengunduh objek dari ember direktori](directory-buckets-objects-GetExamples.md)
+ [Menghasilkan keranjang direktori objek URLs yang telah ditentukan sebelumnya untuk berbagi objek](directory-buckets-objects-generate-presigned-url-Examples.md)
+ [Mengambil metadata objek dari bucket direktori](directory-buckets-objects-HeadObjectExamples.md)
+ [Daftar objek dari ember direktori](directory-buckets-objects-listobjectsExamples.md)

# Mengimpor objek ke dalam bucket direktori
<a name="create-import-job"></a>

Setelah membuat bucket direktori di Amazon S3, Anda dapat mengisi bucket baru dengan data menggunakan tindakan impor. Impor adalah metode yang disederhanakan untuk membuat tugas Operasi Batch S3 guna menyalin objek dari bucket bertujuan umum ke bucket direktori. 

**catatan**  
Batas berikut berlaku untuk tugas impor:  
Bucket sumber dan bucket tujuan harus sama Wilayah AWS dan akun.
Bucket sumber tidak dapat berupa bucket direktori.
Objek yang lebih besar dari 5GB tidak didukung dan akan dihilangkan dari operasi salin.
Objek di kelas penyimpanan Glacier Flexible Retrieval, Glacier Deep Archive, Intelligent-Tiering Archive Access, dan Intelligent-Tiering Deep Archive harus dipulihkan sebelum dapat diimpor.
Objek yang diimpor dengan algoritma MD5 checksum dikonversi untuk menggunakan CRC32 checksum.
Objek yang diimpor menggunakan kelas penyimpanan Express One Zone, yang memiliki struktur harga berbeda dari kelas penyimpanan yang digunakan oleh bucket tujuan umum. Pertimbangkan perbedaan biaya ini saat mengimpor banyak objek.

Saat mengonfigurasi tugas impor, Anda menentukan bucket sumber atau awalan tempat objek yang ada akan disalin. Anda juga menyediakan peran AWS Identity and Access Management (IAM) yang memiliki izin untuk mengakses objek sumber. Amazon S3 kemudian memulai tugas Operasi Batch yang menyalin objek dan secara otomatis menerapkan kelas penyimpanan dan pengaturan checksum yang sesuai.

Untuk mengonfigurasi tugas impor, Anda menggunakan konsol Amazon S3.

## Menggunakan konsol Amazon S3
<a name="create-import-job-console-procedure"></a>

**Mengimpor objek ke dalam bucket direktori**

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**, lalu pilih tab bucket **Direktori**. Pilih tombol opsi di samping bucket direktori yang ingin Anda tempati untuk mengimpor objek.

1. Pilih **Impor**.

1. Untuk **Sumber**, masukkan bucket bertujuan umum (atau jalur bucket termasuk awalan) yang berisi objek yang ingin Anda impor. Untuk memilih bucket bertujuan umum yang ada dari daftar, pilih **Jelajahi S3**.

1. Untuk **Izin mengakses dan menyalin objek sumber**, lakukan salah satu hal berikut untuk menentukan peran IAM dengan izin yang diperlukan untuk mengimpor objek sumber Anda:
   + Untuk mengizinkan Amazon S3 membuat peran IAM baru atas nama Anda, pilih **Buat peran IAM baru**.
   + Untuk memilih peran IAM yang ada dari daftar, pilih **Pilih dari peran IAM yang ada**.
   + Untuk menentukan peran IAM yang ada dengan memasukkan Amazon Resource Name (ARN), pilih **Masukkan ARN peran IAM**, lalu masukkan ARN di bidang yang sesuai.

1. Tinjau informasi yang ditampilkan di bagian **Tujuan** dan **Pengaturan objek yang disalin**. Jika informasi di bagian **Tujuan** sudah benar, pilih **Impor** untuk memulai tugas penyalinan.

   Konsol Amazon S3 menampilkan status tugas baru Anda di halaman **Operasi Batch**. Untuk informasi selengkapnya tentang tugas, pilih tombol opsi di sebelah nama tugas, lalu pada menu **Tindakan**, pilih **Lihat detail**. Untuk membuka bucket direktori tempat objek akan diimpor, pilih **Lihat tujuan impor**.

# Bekerja dengan Siklus Hidup S3 untuk bucket direktori
<a name="directory-buckets-objects-lifecycle"></a>

 Siklus Hidup S3 membantu Anda menyimpan objek di S3 Express One Zone dalam bucket direktori dengan biaya efektif dengan menghapus objek kedaluwarsa atas nama Anda. Untuk mengelola siklus hidup objek Anda, buat konfigurasi Siklus Hidup S3 untuk bucket direktori Anda. Konfigurasi Siklus Hidup S3 adalah serangkaian aturan yang menetapkan tindakan yang diterapkan Amazon S3 pada sekelompok objek. Anda dapat mengatur konfigurasi Siklus Hidup Amazon S3 pada bucket direktori dengan menggunakan AWS Command Line Interface (AWS CLI), API REST AWS SDKs Amazon S3, dan. AWS CloudFormation 

Dalam konfigurasi siklus hidup, Anda menggunakan aturan untuk menentukan tindakan yang ingin dilakukan Amazon S3 pada objek Anda. Untuk objek yang disimpan dalam bucket direktori, Anda dapat membuat aturan siklus hidup untuk objek kedaluwarsa seiring bertambahnya usia. Anda juga dapat membuat aturan siklus hidup untuk menghapus unggahan multibagian yang tidak lengkap dalam bucket direktori pada frekuensi harian. 

Ketika Anda menambahkan konfigurasi Siklus Hidup ke dalam bucket, aturan konfigurasi berlaku untuk objek yang ada dan objek yang Anda tambahkan kemudian. Misalnya, jika Anda menambahkan aturan konfigurasi Siklus Hidup hari ini dengan tindakan kedaluwarsa yang menyebabkan objek dengan awalan tertentu kedaluwarsa 30 hari setelah pembuatan, S3 akan mengantri untuk menghapus objek yang ada yang berusia lebih dari 30 hari dan yang memiliki awalan yang ditentukan.

## Bagaimana Siklus Hidup S3 untuk bucket direktori berbeda
<a name="directory-bucket-lifecycle-differences"></a>

Untuk objek dalam bucket direktori, Anda dapat membuat aturan siklus hidup untuk menghapus objek kedaluwarsa dan menghapus unggahan multibagian yang tidak lengkap. Namun, Siklus Hidup S3 untuk bucket direktori tidak mendukung tindakan transisi antar kelas penyimpanan. 

**CreateSession**

Lifecycle menggunakan operasi publik `DeleteObject` dan `DeleteObjects` API untuk menghapus objek dalam bucket direktori. Untuk menggunakan operasi API ini, S3 Lifecycle akan menggunakan `CreateSession` API untuk membuat kredensil keamanan sementara untuk mengakses objek dalam bucket direktori. Untuk informasi selengkapnya, lihat [`CreateSession`di Referensi *API Amazon S3*](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html). 

Jika Anda memiliki kebijakan aktif yang menolak izin hapus ke prinsipal siklus hidup, ini akan mencegah Anda mengizinkan Siklus Hidup S3 untuk menghapus objek atas nama Anda. 

### Menggunakan kebijakan bucket untuk memberikan izin kepada prinsipal layanan Siklus Hidup S3
<a name="lifecycle-directory-bucket-policy"></a>

Kebijakan bucket berikut memberikan izin utama layanan Siklus Hidup S3 untuk membuat sesi untuk melakukan operasi seperti dan. `DeleteObject` `DeleteObjects` Ketika tidak ada mode sesi yang ditentukan dalam `CreateSession` permintaan, sesi dibuat dengan hak istimewa maksimum yang diizinkan oleh izin di (mencoba `ReadWrite` terlebih dahulu, kemudian `ReadOnly` jika `ReadWrite` tidak diizinkan). Namun, `ReadOnly` sesi tidak cukup untuk operasi siklus hidup yang memodifikasi atau menghapus objek. Oleh karena itu, contoh ini secara eksplisit memerlukan mode `ReadWrite` sesi dengan menggunakan kunci `s3express:SessionMode` kondisi.

**Example — Kebijakan bucket untuk mengizinkan `CreateSession` panggilan dengan mode `ReadWrite` sesi eksplisit untuk operasi siklus hidup**  

```
 { 
   "Version":"2008-10-17",		 	 	  
   "Statement":[
      {
         "Effect":"Allow",
         "Principal": {
            "Service":"lifecycle.s3.amazonaws.com"
          },
          "Action":"s3express:CreateSession", 
          "Condition": { 
             "StringEquals": {
                "s3express:SessionMode": "ReadWrite"
              }
           }, 
           "Resource":"arn:aws:s3express:us-east-2:412345678921:bucket/amzn-s3-demo-bucket--use2-az2--x-s3"
       }
   ] 
}
```

### Memantau aturan siklus hidup
<a name="lifecycle-directory-bucket-monitoring"></a>

Untuk objek yang disimpan dalam bucket direktori, S3 Lifecycle menghasilkan log peristiwa AWS CloudTrail manajemen dan data. Untuk informasi selengkapnya, lihat [contoh file CloudTrail log untuk S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-log-files.html). 

Untuk informasi selengkapnya tentang membuat konfigurasi siklus hidup dan memecahkan masalah terkait Siklus Hidup S3, lihat topik berikut: 

**Topics**

# Membuat dan mengelola konfigurasi Siklus Hidup untuk bucket direktori Anda
<a name="directory-bucket-create-lc"></a>

Anda dapat membuat konfigurasi siklus hidup untuk bucket direktori dengan menggunakan AWS Command Line Interface (AWS CLI), AWS SDKs dan REST. APIs

## Menggunakan AWS CLI
<a name="set-lifecycle-config-cli"></a>

Anda dapat menggunakan AWS CLI perintah berikut untuk mengelola konfigurasi Siklus Hidup S3:
+ `put-bucket-lifecycle-configuration`
+ `get-bucket-lifecycle-configuration`
+ `delete-bucket-lifecycle`

*Untuk petunjuk cara menyiapkan AWS CLI, lihat [Mengembangkan dengan Amazon S3 menggunakan AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) di Referensi API Amazon S3.*

Konfigurasi Amazon Siklus Hidup S3 adalah berkas XML. Tetapi ketika Anda menggunakan AWS CLI, Anda tidak dapat menentukan format XMLnya. Anda harus menentukan format JSON sebagai gantinya. Berikut ini adalah contoh konfigurasi siklus hidup XMLdan konfigurasi JSON setara yang dapat Anda tentukan dalam sebuah perintah. AWS CLI

Contoh AWS CLI berikut menempatkan kebijakan konfigurasi siklus hidup pada bucket direktori. Kebijakan ini menetapkan bahwa semua objek yang memiliki awalan bertanda (myprefix) dan ukuran objek yang ditentukan akan kedaluwarsa setelah 7 hari. Untuk menggunakan contoh ini, ganti masing-masing *user input placeholder* dengan informasi Anda sendiri.

Simpan kebijakan konfigurasi siklus ke file JSON. Dalam contoh ini, file tersebut bernama lifecycle1.json.

**Example**  

```
{
    "Rules": [
        {
        "Expiration": {
            "Days": 7
        },
        "ID": "Lifecycle expiration rule",
        "Filter": {
            "And": {
                "Prefix": "myprefix/",
                "ObjectSizeGreaterThan": 500,
                "ObjectSizeLessThan": 64000
            }
        },
        "Status": "Enabled"
    }
    ]
}
```
Kirim file JSON sebagai bagian dari perintah CLI `put-bucket-lifecycle-configuration`. Untuk menggunakan perintah ini, ganti masing-masing *user input placeholder* dengan informasi Anda sendiri.  

```
aws s3api put-bucket-lifecycle-configuration --region us-west-2 --profile default --bucket amzn-s3-demo-bucket--usw2-az1--x-s3 --lifecycle-configuration file://lc-policy.json --checksum-algorithm crc32c 
```

**Example**  

```
<LifecycleConfiguration>
    <Rule>
        <ID>Lifecycle expiration rule</ID>
        <Filter>
            <And>
                <Prefix>myprefix/</Prefix>
                <ObjectSizeGreaterThan>500</ObjectSizeGreaterThan>
                <ObjectSizeLessThan>64000</ObjectSizeLessThan>
            </And>
        </Filter>
        <Status>Enabled</Status>     
        <Expiration>
             <Days>7</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>
```

## Menggunakan AWS SDKs
<a name="directory-bucket-upload-sdks"></a>

------
#### [ SDK for Java ]

**Example**  

```
import software.amazon.awssdk.services.s3.model.PutBucketLifecycleConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketLifecycleConfigurationResponse;
import software.amazon.awssdk.services.s3.model.ChecksumAlgorithm;
import software.amazon.awssdk.services.s3.model.BucketLifecycleConfiguration;
import software.amazon.awssdk.services.s3.model.LifecycleRule;
import software.amazon.awssdk.services.s3.model.LifecycleRuleFilter;
import software.amazon.awssdk.services.s3.model.LifecycleExpiration;
import software.amazon.awssdk.services.s3.model.LifecycleRuleAndOperator;
import software.amazon.awssdk.services.s3.model.GetBucketLifecycleConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketLifecycleConfigurationRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketLifecycleRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketLifecycleResponse;
import software.amazon.awssdk.services.s3.model.AbortIncompleteMultipartUpload;

// PUT a Lifecycle policy
LifecycleRuleFilter objectExpirationFilter = LifecycleRuleFilter.builder().and(LifecycleRuleAndOperator.builder().prefix("dir1/").objectSizeGreaterThan(3L).objectSizeLessThan(20L).build()).build();
LifecycleRuleFilter mpuExpirationFilter = LifecycleRuleFilter.builder().prefix("dir2/").build();
       
LifecycleRule objectExpirationRule = LifecycleRule.builder().id("lc").filter(objectExpirationFilter).status("Enabled").expiration(LifecycleExpiration.builder()
                    .days(10)
                    .build())
                .build();
LifecycleRule mpuExpirationRule = LifecycleRule.builder().id("lc-mpu").filter(mpuExpirationFilter).status("Enabled").abortIncompleteMultipartUpload(AbortIncompleteMultipartUpload.builder()
                        .daysAfterInitiation(10)
                        .build())
                .build();
        
PutBucketLifecycleConfigurationRequest putLifecycleRequest = PutBucketLifecycleConfigurationRequest.builder()
                .bucket("amzn-s3-demo-bucket--usw2-az1--x-s3")
                .checksumAlgorithm(ChecksumAlgorithm.CRC32)
                .lifecycleConfiguration(
                        BucketLifecycleConfiguration.builder()
                                .rules(objectExpirationRule, mpuExpirationRule)
                                .build()
                ).build();

PutBucketLifecycleConfigurationResponse resp = client.putBucketLifecycleConfiguration(putLifecycleRequest);

// GET the Lifecycle policy 
GetBucketLifecycleConfigurationResponse getResp = client.getBucketLifecycleConfiguration(GetBucketLifecycleConfigurationRequest.builder().bucket("amzn-s3-demo-bucket--usw2-az1--x-s3").build());

// DELETE the Lifecycle policy
DeleteBucketLifecycleResponse delResp = client.deleteBucketLifecycle(DeleteBucketLifecycleRequest.builder().bucket("amzn-s3-demo-bucket--usw2-az1--x-s3").build());
```

------
#### [ SDK for Go ]

**Example**  

```
package main

import (
    "context"
    "log"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/aws/aws-sdk-go-v2/service/s3/types"
)
// PUT a Lifecycle policy
func putBucketLifecycleConfiguration(client *s3.Client, bucketName string ) error {
    lifecycleConfig := &s3.PutBucketLifecycleConfigurationInput{
        Bucket: aws.String(bucketName),
        LifecycleConfiguration: &types.BucketLifecycleConfiguration{
            Rules: []types.LifecycleRule{
                {
                    ID:     aws.String("lc"),
                    Filter: &types.LifecycleRuleFilter{
                        And: &types.LifecycleRuleAndOperator{
                            Prefix: aws.String("foo/"), 
                            ObjectSizeGreaterThan: aws.Int64(1000000), 
                            ObjectSizeLessThan:    aws.Int64(100000000), 
                            },
                        },
                    
                    Status: types.ExpirationStatusEnabled,
                    Expiration: &types.LifecycleExpiration{
                        Days: aws.Int32(int32(1)), 
                    },
                },
                {
                    ID:     aws.String("abortmpu"),
                    Filter: &types.LifecycleRuleFilter{
                        Prefix: aws.String("bar/"), 
                    },
                    Status: types.ExpirationStatusEnabled,
                    AbortIncompleteMultipartUpload: &types.AbortIncompleteMultipartUpload{
                        DaysAfterInitiation: aws.Int32(int32(5)), 
                    },
                },
            },
        },
    }
    _, err := client.PutBucketLifecycleConfiguration(context.Background(), lifecycleConfig)
    return err
}
// Get the Lifecycle policy
func getBucketLifecycleConfiguration(client *s3.Client, bucketName string) error {
    getLifecycleConfig := &s3.GetBucketLifecycleConfigurationInput{
        Bucket: aws.String(bucketName),
    }

    resp, err := client.GetBucketLifecycleConfiguration(context.Background(), getLifecycleConfig)
    if err != nil {
        return err
    }
    return nil
}
// Delete the Lifecycle policy
func deleteBucketLifecycleConfiguration(client *s3.Client, bucketName string) error {
    deleteLifecycleConfig := &s3.DeleteBucketLifecycleInput{
        Bucket: aws.String(bucketName),
    }
    _, err := client.DeleteBucketLifecycle(context.Background(), deleteLifecycleConfig)
    return err
}
func main() {
    cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion("us-west-2")) // Specify your region here
    if err != nil {
        log.Fatalf("unable to load SDK config, %v", err)
    }
    s3Client := s3.NewFromConfig(cfg)
    bucketName := "amzn-s3-demo-bucket--usw2-az1--x-s3" 
    putBucketLifecycleConfiguration(s3Client, bucketName)
    getBucketLifecycleConfiguration(s3Client, bucketName)
    deleteBucketLifecycleConfiguration(s3Client, bucketName)
    getBucketLifecycleConfiguration(s3Client, bucketName)
}
```

------
#### [ SDK for .NET ]

**Example**  

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

namespace Amazon.DocSamples.S3
{
    class LifecycleTest
    {
        private const string bucketName = "amzn-s3-demo-bucket--usw2-az1--x-s3";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;
        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            AddUpdateDeleteLifecycleConfigAsync().Wait();
        }

        private static async Task AddUpdateDeleteLifecycleConfigAsync()
        {
            try
            {
                var lifeCycleConfiguration = new LifecycleConfiguration()
                {
                    Rules = new List <LifecycleRule>
                        {
                            new LifecycleRule
                            {
                                 Id = "delete rule",
                                  Filter = new LifecycleFilter()
                                 {
                                     LifecycleFilterPredicate = new LifecyclePrefixPredicate()
                                     {
                                         Prefix = "projectdocs/"
                                     }
                                 },
                                 Status = LifecycleRuleStatus.Enabled,
                                 Expiration = new LifecycleRuleExpiration()
                                 {
                                       Days = 10
                                 }
                            }
                        }
                };

                // Add the configuration to the bucket. 
                await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration);

                // Retrieve an existing configuration. 
                lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);

                // Add a new rule.
                lifeCycleConfiguration.Rules.Add(new LifecycleRule
                {
                    Id = "mpu abort rule",
                    Filter = new LifecycleFilter()
                    {
                        LifecycleFilterPredicate = new LifecyclePrefixPredicate()
                        {
                            Prefix = "YearlyDocuments/"
                        }
                    },
                    Expiration = new LifecycleRuleExpiration()
                    {
                        Days = 10
                    },
                    AbortIncompleteMultipartUpload = new LifecycleRuleAbortIncompleteMultipartUpload()
                    {
                        DaysAfterInitiation = 10
                    }
                });

                // Add the configuration to the bucket. 
                await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration);

                // Verify that there are now two rules.
                lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);
                Console.WriteLine("Expected # of rulest=2; found:{0}", lifeCycleConfiguration.Rules.Count);

                // Delete the configuration.
                await RemoveLifecycleConfigAsync(client);

                // Retrieve a nonexistent configuration.
                lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);

            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered ***. 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);
            }
        }

        static async Task AddExampleLifecycleConfigAsync(IAmazonS3 client, LifecycleConfiguration configuration)
        {

            PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest
            {
                BucketName = bucketName,
                Configuration = configuration
            };
            var response = await client.PutLifecycleConfigurationAsync(request);
        }

        static async Task <LifecycleConfiguration> RetrieveLifecycleConfigAsync(IAmazonS3 client)
        {
            GetLifecycleConfigurationRequest request = new GetLifecycleConfigurationRequest
            {
                BucketName = bucketName
            };
            var response = await client.GetLifecycleConfigurationAsync(request);
            var configuration = response.Configuration;
            return configuration;
        }

        static async Task RemoveLifecycleConfigAsync(IAmazonS3 client)
        {
            DeleteLifecycleConfigurationRequest request = new DeleteLifecycleConfigurationRequest
            {
                BucketName = bucketName
            };
            await client.DeleteLifecycleConfigurationAsync(request);
        }
    }
}
```

------
#### [ SDK for Python ]

**Example**  

```
import boto3

client = boto3.client("s3", region_name="us-west-2")
bucket_name = 'amzn-s3-demo-bucket--usw2-az1--x-s3'

client.put_bucket_lifecycle_configuration(
    Bucket=bucket_name,
    ChecksumAlgorithm='CRC32',
    LifecycleConfiguration={
        'Rules': [
            {
                'ID': 'lc',
                'Filter': {
                    'And': {
                        'Prefix': 'foo/',
                        'ObjectSizeGreaterThan': 1000000,
                        'ObjectSizeLessThan': 100000000,
                    }
                },
                'Status': 'Enabled',
                'Expiration': {
                    'Days': 1
                }
            },
            {
                'ID': 'abortmpu',
                'Filter': {
                    'Prefix': 'bar/'
                },
                'Status': 'Enabled',
                'AbortIncompleteMultipartUpload': {
                    'DaysAfterInitiation': 5
                }
            }
        ]
    }
)

result = client.get_bucket_lifecycle_configuration(
    Bucket=bucket_name
)

client.delete_bucket_lifecycle(
    Bucket=bucket_name
)
```

------

# Memecahkan masalah Siklus Hidup S3 untuk bucket direktori
<a name="directory-buckets-lifecycle-troubleshooting"></a>

**Topics**
+ [Saya mengatur konfigurasi siklus hidup saya tetapi objek di ember direktori saya tidak kedaluwarsa](#troubleshoot-directory-bucket-lifecycle-1)
+ [Bagaimana cara memantau tindakan yang diambil oleh aturan siklus hidup saya?](#troubleshoot-directory-bucket-lifecycle-2)

## Saya mengatur konfigurasi siklus hidup saya tetapi objek di ember direktori saya tidak kedaluwarsa
<a name="troubleshoot-directory-bucket-lifecycle-1"></a>

Siklus Hidup S3 untuk bucket direktori menggunakan publik APIs untuk menghapus objek di S3 Express One Zone. Untuk menggunakan public level objek APIs, Anda harus memberikan izin `CreateSession` dan mengizinkan izin Siklus Hidup S3 untuk menghapus objek Anda. Jika Anda memiliki kebijakan aktif yang menolak penghapusan, ini akan mencegah Anda mengizinkan Siklus Hidup S3 menghapus objek atas nama Anda.

Penting untuk mengonfigurasi kebijakan bucket dengan benar untuk memastikan bahwa objek yang ingin dihapus memenuhi syarat untuk kedaluwarsa. Anda dapat memeriksa AWS CloudTrail log Anda untuk `AccessDenied` Trails untuk pemanggilan `CreateSession` API CloudTrail untuk memverifikasi apakah akses telah ditolak. Memeriksa CloudTrail log Anda dapat membantu Anda dalam memecahkan masalah akses dan mengidentifikasi akar penyebab kesalahan akses ditolak. Anda kemudian dapat memperbaiki kontrol akses yang salah dengan memperbarui kebijakan yang relevan. 

Jika Anda mengonfirmasi bahwa kebijakan bucket disetel dengan benar dan masih mengalami masalah, sebaiknya tinjau aturan siklus hidup untuk memastikan bahwa kebijakan tersebut diterapkan pada subset objek yang tepat. 

## Bagaimana cara memantau tindakan yang diambil oleh aturan siklus hidup saya?
<a name="troubleshoot-directory-bucket-lifecycle-2"></a>

 Anda dapat menggunakan log peristiwa AWS CloudTrail data untuk memantau tindakan yang diambil oleh Siklus Hidup S3 di bucket direktori. Untuk informasi selengkapnya, lihat [contoh file CloudTrail log](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-log-files.html).

# Menggunakan Operasi Batch dengan bucket direktori
<a name="directory-buckets-objects-Batch-Ops"></a>

Anda dapat menggunakan Operasi Batch Amazon S3 untuk melakukan operasi pada objek yang disimpan dalam bucket S3. Untuk mempelajari Operasi Batch S3, lihat [Melakukan operasi batch skala besar pada objek Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html).

Topik berikut membahas melakukan operasi batch pada objek yang disimpan di kelas penyimpanan S3 Express One Zone dalam bucket direktori.

**Topics**
+ [Menggunakan Operasi Batch dengan bucket direktori](#UsingBOPsDirectoryBuckets)
+ [Perbedaan utama](#UsingBOPsDirectoryBucketsKeyDiffs)

## Menggunakan Operasi Batch dengan bucket direktori
<a name="UsingBOPsDirectoryBuckets"></a>

Anda dapat melakukan operasi **Salin** dan operasi ** AWS Lambda fungsi Invoke** pada objek yang disimpan dalam bucket direktori. Dengan **Copy**, Anda dapat menyalin objek di antara bucket dengan tipe yang sama (misalnya, dari bucket direktori ke bucket direktori). Anda juga dapat menyalin antara bucket tujuan umum dan bucket direktori. Dengan ** AWS Lambda fungsi Invoke**, Anda dapat menggunakan fungsi Lambda untuk melakukan tindakan pada objek di bucket direktori Anda dengan kode yang Anda tentukan. 

**Menyalin objek**  
Anda dapat menyalin antara jenis bucket yang sama atau antara bucket direktori dan bucket tujuan umum. Saat menyalin ke bucket direktori, Anda harus menggunakan format Amazon Resource Name (ARN) yang benar untuk jenis bucket ini. Format ARN untuk bucket direktori adalah `arn:aws:s3express:region:account-id:bucket/bucket-base-name--x-s3`. 

**catatan**  
Menyalin objek di berbagai objek Wilayah AWS tidak didukung saat bucket sumber atau tujuan berada di Zona AWS Lokal. Bucket sumber dan tujuan harus memiliki induk Wilayah AWS yang sama. Bucket sumber dan tujuan dapat berupa jenis lokasi bucket yang berbeda (Availability Zone atau Local Zone).

Anda juga dapat mengisi bucket direktori Anda dengan data menggunakan tindakan **Impor** di konsol S3. **Impor** adalah metode yang disederhanakan untuk membuat pekerjaan Operasi Batch guna menyalin objek dari bucket tujuan umum ke bucket direktori. Untuk tugas **Impor** salinan dari bucket tujuan umum ke bucket direktori, S3 secara otomatis menghasilkan manifes. Untuk informasi selengkapnya, lihat [Mengimpor objek ke bucket direktori](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job.html) dan [Menentukan manifes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specify-batchjob-manifest.html).

**Memanggil fungsi Lambda () `LambdaInvoke`**  
Ada persyaratan khusus untuk menggunakan Operasi Batch untuk menginvokasi fungsi Lambda yang bertindak pada bucket direktori. Misalnya, Anda harus menyusun permintaan Lambda Anda dengan menggunakan skema pemanggilan v2 JSON, dan menentukan InvocationSchemaVersion 2.0 kapan Anda membuat pekerjaan. Untuk informasi selengkapnya, lihat [Memanggil AWS Lambda fungsi](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-invoke-lambda.html).

## Perbedaan utama
<a name="UsingBOPsDirectoryBucketsKeyDiffs"></a>

Berikut ini adalah daftar perbedaan utama saat Anda menggunakan Operasi Batch untuk melakukan operasi massal pada objek yang disimpan dalam bucket direktori dengan kelas penyimpanan S3 Express One Zone:
+ Untuk bucket direktori, SSE-S3 dan enkripsi sisi server dengan kunci AWS Key Management Service (AWS KMS) (SSE-KMS) didukung. Jika Anda membuat `CopyObject` permintaan yang menetapkan untuk menggunakan enkripsi sisi server dengan kunci yang disediakan pelanggan (SSE-C) pada bucket direktori (sumber atau tujuan), respons akan mengembalikan kesalahan HTTP. `400 (Bad Request)` 

  Sebaiknya enkripsi default bucket menggunakan konfigurasi enkripsi yang diinginkan dan Anda tidak mengganti enkripsi default bucket dalam `CreateSession` permintaan atau permintaan `PUT` objek. Kemudian, objek baru secara otomatis dienkripsi dengan pengaturan enkripsi yang diinginkan. Untuk informasi selengkapnya tentang perilaku pengesampingan enkripsi dalam bucket direktori dan cara mengenkripsi salinan objek baru dalam bucket direktori dengan SSE-KMS, lihat [Menentukan enkripsi sisi server](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html) dengan unggahan objek baru. AWS KMS 

  [Kunci Bucket S3 tidak didukung, saat Anda menyalin objek terenkripsi SSE-KMS dari bucket tujuan umum ke bucket direktori, dari bucket direktori ke bucket tujuan umum, atau antar bucket direktori, melalui operasi dalam Operasi Batch. Copy](#directory-buckets-objects-Batch-Ops) Dalam hal ini, Amazon S3 melakukan panggilan ke AWS KMS setiap kali permintaan salinan dibuat untuk objek yang dienkripsi KMS. Untuk informasi selengkapnya tentang penggunaan SSE-KMS pada bucket direktori, lihat dan. [Mengatur dan memantau enkripsi default untuk bucket direktori](s3-express-bucket-encryption.md) [Menggunakan enkripsi sisi server dengan AWS KMS kunci (SSE-KMS) di bucket direktori](s3-express-UsingKMSEncryption.md)
+ Objek dalam bucket direktori tidak dapat ditandai. Anda hanya dapat menentukan set tanda kosong. Secara default, Operasi Batch menyalin tanda. Jika Anda menyalin objek yang memiliki tag antara bucket tujuan umum dan bucket direktori, Anda akan menerima respons. `501 (Not Implemented)`
+ S3 Express One Zone menawarkan Anda opsi untuk memilih algoritma checksum yang digunakan untuk memvalidasi data Anda selama unggahan atau unduhan. Anda dapat memilih salah satu algoritma pemeriksaan integritas data Secure Hash Algorithms (SHA) atau Cyclic Redundancy Check (CRC) berikut:,, SHA-1, dan SHA-256. CRC32 CRC32 MD5checksum berbasis tidak didukung dengan kelas penyimpanan S3 Express One Zone. 
+ Secara default, semua bucket Amazon S3 menyetel setelan Kepemilikan Objek S3 ke pemilik bucket yang diberlakukan dan daftar kontrol akses () dinonaktifkan. ACLs Untuk bucket direktori, pengaturan ini tidak dapat dimodifikasi. Anda dapat menyalin objek dari bucket tujuan umum ke bucket direktori. Namun, Anda tidak dapat menimpa ACL default saat menyalin ke atau dari bucket direktori. 
+ Terlepas dari cara Anda menentukan manifes, daftar itu harus disimpan di dalam sebuah bucket yang bersifat umum. Operasi Batch tidak dapat mengimpor manifes yang ada dari (atau menyimpan manifes yang dihasilkan ke) bucket direktori. Namun, objek yang dijelaskan dalam manifes dapat disimpan dalam bucket direktori. 
+ Operasi Batch tidak dapat menentukan bucket direktori sebagai lokasi dalam laporan Inventaris S3. Laporan inventaris tidak mendukung bucket direktori. Anda dapat membuat file manifes untuk objek dalam bucket direktori dengan menggunakan operasi `ListObjectsV2` API untuk mencantumkan objek. Anda kemudian dapat memasukkan daftar dalam file CSV.

### Memberi Akses
<a name="BOPsAccess"></a>

 Untuk melakukan tugas penyalinan, Anda harus memiliki izin berikut:
+ Untuk menyalin objek dari satu bucket direktori ke bucket direktori lain, Anda harus memiliki izin `s3express:CreateSession`.
+ Untuk menyalin objek dari bucket direktori ke bucket tujuan umum, Anda harus memiliki izin `s3express:CreateSession` dan izin `s3:PutObject`untuk menulis salinan objek ke bucket tujuan. 
+ Untuk menyalin objek dari bucket tujuan umum ke bucket direktori, Anda harus memiliki `s3express:CreateSession` izin dan `s3:GetObject` izin untuk membaca objek sumber yang sedang disalin. 

   Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) dalam *Referensi API Amazon Simple Storage Service*.
+ Untuk menginvokasi fungsi Lambda, Anda harus memberikan izin ke sumber daya berdasarkan fungsi Lambda Anda. Untuk menentukan izin mana yang diperlukan, periksa operasi API yang sesuai. 

# Menambahkan data ke objek dalam ember direktori
<a name="directory-buckets-objects-append"></a>

Anda dapat menambahkan data ke akhir objek yang ada yang disimpan di kelas penyimpanan S3 Express One Zone di bucket direktori. Kami menyarankan Anda menggunakan kemampuan untuk menambahkan data ke objek jika data ditulis terus menerus selama periode waktu tertentu atau jika Anda perlu membaca objek saat Anda menulis ke objek. Menambahkan data ke objek adalah umum untuk kasus penggunaan seperti menambahkan entri log baru ke file log atau menambahkan segmen video baru ke file video saat ditranskode kemudian dialirkan. Dengan menambahkan data ke objek, Anda dapat menyederhanakan aplikasi yang sebelumnya menggabungkan data dalam penyimpanan lokal sebelum menyalin objek akhir ke Amazon S3.

Tidak ada persyaratan ukuran minimum untuk data yang dapat Anda tambahkan ke objek. Namun, ukuran maksimum data yang dapat Anda tambahkan ke objek dalam satu permintaan adalah 5GB. Ini adalah batas yang sama dengan ukuran permintaan terbesar saat mengunggah data menggunakan API Amazon S3 apa pun.

Dengan setiap operasi append yang berhasil, Anda membuat bagian dari objek dan setiap objek dapat memiliki hingga 10.000 bagian. Ini berarti Anda dapat menambahkan data ke objek hingga 10.000 kali. Jika objek dibuat menggunakan unggahan multipart S3, setiap bagian yang diunggah dihitung dengan total maksimum 10.000 bagian. Misalnya, Anda dapat menambahkan hingga 9.000 kali ke objek yang dibuat oleh unggahan multipart yang terdiri dari 1.000 bagian.

**catatan**  
 Jika Anda mencapai batas bagian, Anda akan menerima [TooManyParts](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject_Errors)kesalahan. Anda dapat menggunakan `CopyObject` API untuk mengatur ulang hitungan.

 Jika Anda ingin mengunggah bagian ke objek secara paralel dan Anda tidak perlu membaca bagian saat bagian sedang diunggah, kami sarankan Anda menggunakan unggahan multipart Amazon S3. Untuk informasi selengkapnya, lihat [Menggunakan unggahan multibagian](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-using-multipart-upload.html).

Menambahkan data ke objek hanya didukung untuk objek dalam bucket direktori yang disimpan di kelas penyimpanan S3 Express One Zone. Untuk informasi selengkapnya tentang S3 Express One Zone Zone, lihat [Memulai S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-getting-started.html).

Untuk mulai menambahkan data ke objek di bucket direktori Anda, Anda dapat menggunakan, AWS SDKs AWS CLI, dan API. `PutObject` Saat Anda membuat `PutObject` permintaan, Anda mengatur `x-amz-write-offset-bytes` header ke ukuran objek yang Anda tambahkan. Untuk menggunakan operasi `PutObject` API, Anda harus menggunakan `CreateSession` API untuk membuat kredenal keamanan sementara untuk mengakses objek di bucket direktori Anda. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)dan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)di Referensi *API Amazon S3*. 

Setiap operasi append yang berhasil ditagih sebagai `PutObject` permintaan. Untuk mempelajari lebih lanjut tentang harga, lihat [https://aws.amazon.com/s3/pricing/](https://aws.amazon.com/s3/pricing/). 

**catatan**  
Dimulai dengan rilis 1.12, Mountpoint untuk Amazon S3 mendukung penambahan data ke objek yang disimpan di S3 Express One Zone. Untuk memulai, Anda harus ikut serta dengan menyetel `--incremental-upload ` bendera. Untuk informasi lebih lanjut tentang Mountpoint, lihat [Bekerja dengan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mountpoint.html) Mountpoint. 

 Jika Anda menggunakan algoritma CRC (Cyclic Redundancy Check) saat mengunggah data yang ditambahkan, Anda dapat mengambil checksum berbasis CRC objek lengkap menggunakan permintaan atau. `HeadObject` `GetObject` Jika Anda menggunakan algoritma SHA-1 atau SHA-256 saat mengunggah data yang ditambahkan, Anda dapat mengambil checksum dari bagian yang ditambahkan dan memverifikasi integritasnya menggunakan checksum SHA yang dikembalikan pada tanggapan sebelumnya. PutObject Untuk informasi selengkapnya, lihat [Perlindungan dan enkripsi data](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-data-protection.html.html). 

## Menambahkan data ke objek Anda dengan menggunakan AWS CLI AWS SDKs , dan REST API
<a name="directory-bucket-append"></a>

Anda dapat menambahkan data ke objek Anda dengan menggunakan AWS Command Line Interface (AWS CLI), AWS SDKs dan REST API.

### Menggunakan AWS CLI
<a name="set-append--cli"></a>

`put-object`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk menambahkan data ke objek. Untuk menjalankan perintah ini, ganti *user input placeholders* dengan informasi Anda sendiri

```
aws s3api put-object --bucket amzn-s3-demo-bucket--azid--x-s3 --key sampleinput/file001.bin --body bucket-seed/file001.bin --write-offset-bytes size-of-sampleinput/file001.bin
```

### Menggunakan AWS SDKs
<a name="directory-bucket-append-sdks"></a>

------
#### [ SDK for Java ]

Anda dapat menggunakan AWS SDK untuk Java untuk menambahkan data ke objek Anda. 

```
var putObjectRequestBuilder = PutObjectRequest.builder()
                                              .key(key)
                                              .bucket(bucketName)
                                              .writeOffsetBytes(9);
var response = s3Client.putObject(putObjectRequestBuilder.build());
```

------
#### [ SDK for Python ]

```
s3.put_object(Bucket='amzn-s3-demo-bucket--use2-az2--x-s3', Key='2024-11-05-sdk-test', Body=b'123456789', WriteOffsetBytes=9)
```

------

### Penggunaan API REST
<a name="directory-bucket-append-api"></a>

 Anda dapat mengirim permintaan REST untuk menambahkan data ke objek. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject). 

# Mengganti nama objek dalam ember direktori
<a name="directory-buckets-objects-rename"></a>

Dengan menggunakan `RenameObject` operasi ini, Anda dapat mengganti nama objek yang ada secara atomik di bucket direktori yang menggunakan kelas penyimpanan S3 Express One Zone, tanpa pergerakan data apa pun. Anda dapat mengganti nama objek dengan menentukan nama objek yang ada sebagai sumber dan nama baru objek sebagai tujuan dalam bucket direktori yang sama. Operasi `RenameObject` API tidak akan berhasil pada objek yang diakhiri dengan karakter pembatas garis miring (`/`). Untuk informasi selengkapnya, lihat [Menamai objek Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html).

`RenameObject`Operasi biasanya selesai dalam milidetik terlepas dari ukuran objek. Kemampuan ini mempercepat aplikasi seperti manajemen file log, pemrosesan media, dan analisis data. Selain itu, `RenameObject` mempertahankan semua properti metadata objek, termasuk kelas penyimpanan, jenis enkripsi, tanggal pembuatan, tanggal modifikasi terakhir, dan properti checksum.

**catatan**  
`RenameObject`hanya didukung untuk objek yang disimpan di kelas penyimpanan S3 Express One Zone.

 Untuk memberikan akses ke `RenameObject` operasi, kami sarankan Anda menggunakan `CreateSession` operasi untuk otorisasi berbasis sesi. Secara khusus, Anda memberikan `s3express:CreateSession` izin ke bucket direktori dalam kebijakan bucket atau kebijakan berbasis identitas. Kemudian, Anda melakukan panggilan `CreateSession` API di bucket direktori untuk mendapatkan token sesi. Dengan token sesi di header permintaan Anda, Anda dapat membuat permintaan API untuk operasi ini. Setelah token sesi kedaluwarsa, Anda membuat panggilan `CreateSession` API lain untuk menghasilkan token sesi baru untuk digunakan. AWS CLI dan AWS SDKs akan membuat dan mengelola sesi Anda termasuk menyegarkan token sesi secara otomatis untuk menghindari gangguan layanan ketika sesi berakhir. Untuk informasi selengkapnya tentang otorisasi, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)di Referensi *API Amazon S3*. Untuk mempelajari lebih lanjut tentang operasi API titik akhir Zonal, lihat [Mengotorisasi operasi API titik akhir Zonal](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-create-session.html) dengan. `CreateSession` 

 Jika Anda tidak ingin menimpa objek yang ada, Anda dapat menambahkan header `If-None-Match` bersyarat dengan nilai `‘*’` dalam permintaan. `RenameObject` Amazon S3 mengembalikan `412 Precondition Failed` kesalahan jika nama objek sudah ada. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_RenameObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_RenameObject.html) di *Referensi API Amazon S3*. 

 `RenameObject`adalah operasi API titik akhir Zonal (operasi tingkat objek atau bidang data) yang dicatat. AWS CloudTrail Anda dapat menggunakan CloudTrail untuk mengumpulkan informasi tentang `RenameObject` operasi yang dilakukan pada objek Anda dalam ember direktori. Untuk informasi selengkapnya, lihat [Logging with AWS CloudTrail untuk bucket direktori](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone-logging.html) dan [contoh file CloudTrail log untuk bucket direktori](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-log-files.html). 

S3 Express One Zone adalah satu-satunya kelas penyimpanan yang mendukung`RenameObject`, yang harganya sama dengan`PUT`,, `COPY``POST`, dan `LIST` permintaan (per 1.000 permintaan) di S3 Express One Zone. Untuk informasi selengkapnya, lihat [Harga Amazon S3](https://aws.amazon.com/s3/pricing/). 

## Mengganti nama objek
<a name="directory-bucket-rename"></a>

Untuk mengganti nama objek di bucket direktori, Anda dapat menggunakan konsol Amazon S3, AWS CLI AWS SDKs, REST API, atau Mountpoint untuk Amazon S3 (versi 1.19.0 atau lebih tinggi).

### Menggunakan konsol S3
<a name="set-rename--console"></a>

**Untuk mengganti nama objek dalam ember direktori**

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, pilih **Bucket**, lalu pilih tab Ember **direktori**. Arahkan ke bucket direktori Amazon S3 yang berisi objek yang ingin diganti namanya.

1. Pilih kotak centang untuk objek yang ingin Anda ganti namanya.

1. Pada menu **Tindakan**, pilih **Ganti nama objek**.

1. Di kotak **Nama objek baru**, masukkan nama baru untuk objek tersebut.
**catatan**  
Jika Anda menentukan nama objek yang sama dengan objek yang ada, operasi akan gagal dan Amazon S3 mengembalikan kesalahan. `412 Precondition Failed` Panjang nama kunci objek tidak dapat melebihi 1.024 byte. Awalan yang termasuk dalam jumlah nama objek terhadap panjang total. 

1. Pilih **Ganti nama objek**. Amazon S3 mengganti nama objek Anda. 

### Menggunakan AWS CLI
<a name="set-rename--cli"></a>

`rename-object`Contoh menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk mengganti nama objek. Untuk menjalankan perintah ini, ganti *user input placeholders* dengan informasi Anda sendiri

Contoh berikut menunjukkan cara mengganti nama objek dengan pemeriksaan bersyarat pada objek sumber. ETag 

```
aws s3api rename-object \                                    
    --bucket amzn-s3-demo-bucket--usw2-az1--x-s3 \
    --key new-file.txt \
    --rename-source original-file.txt \
    --source-if-match "\"a1b7c3d2e5f6\""
```

Perintah ini melakukan hal berikut:
+ Mengganti nama objek dari *original-file.txt* ke *new-file.txt* dalam ember *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori.
+ Hanya melakukan penggantian nama jika objek sumber ETag cocok dengan "*a1b7c3d4e5f6*”.

Jika ETag tidak cocok, operasi akan gagal dengan `412 Precondition Failed` kesalahan. 

Contoh berikut menunjukkan cara mengganti nama objek dengan pemeriksaan bersyarat pada nama objek yang ditentukan baru.

```
aws s3api rename-object \
    --bucket amzn-s3-demo-bucket--usw2-az1--x-s3 \
    --key new-file.txt \
    --rename-source amzn-s3-demo-bucket--usw2-az1--x-s3/original-file.txt \
    --destination-if-none-match "\"e5f3g7h8i9j0\""
```

Perintah ini melakukan hal berikut:
+ Mengganti nama objek dari *original-file.txt* ke *new-file.txt* dalam ember *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori.
+ Hanya melakukan operasi ganti nama jika objek ada dan objek ETag tidak cocok "*e5f3g7h8i9j0*”.

Jika objek sudah ada dengan nama yang ditentukan baru dan pencocokan ETag, operasi akan gagal dengan `412 Precondition Failed` kesalahan. 

### Menggunakan AWS SDKs
<a name="directory-bucket-rename-sdks"></a>

------
#### [ SDK for Java ]

Anda dapat menggunakan AWS SDK untuk Java untuk mengganti nama objek Anda. Untuk menggunakan contoh-contoh ini, ganti *user input placeholders* dengan informasi Anda sendiri

Contoh berikut menunjukkan cara membuat `RenameObjectRequest` menggunakan AWS SDK for Java

```
String key = "key";
String newKey = "new-key";
String expectedETag = "e5f3g7h8i9j0";
RenameObjectRequest renameRequest = RenameObjectRequest.builder()
    .bucket(amzn-s3-demo-bucket--usw2-az1--x-s3)
    .key(newKey)
    .renameSource(key)
    .destinationIfMatch(e5f3g7h8i9j0)
    .build();
```

Kode ini melakukan hal berikut:
+ Buat permintaan untuk mengganti nama objek dari "*key*" menjadi "*new-key*" di ember *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori.
+ Termasuk kondisi bahwa penggantian nama hanya akan terjadi jika objek ETag cocok "*e5f3g7h8i9j0*”. 
+ Jika ETag tidak cocok atau objek tidak ada, operasi akan gagal.

Contoh berikut menunjukkan cara membuat `RenameObjectRequest` dengan kondisi none-match menggunakan AWS SDK for Java.

```
String key = "key";
String newKey = "new-key";
String noneMatchETag = "e5f3g7h8i9j0";
RenameObjectRequest renameRequest = RenameObjectRequest.builder()
    .bucket(amzn-s3-demo-bucket--usw2-az1--x-s3)
    .key(newKey)
    .renameSource(key)
    .destinationIfNoneMatch(noneMatchETag)
    .build();
```

Kode ini melakukan hal berikut:
+ Membuat permintaan untuk mengganti nama objek dari "*key*" menjadi "*new-key*" di ember *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori.
+ Termasuk kondisi yang digunakan `.destinationIfNoneMatch(noneMatchETag)` yang memastikan penggantian nama hanya akan terjadi jika objek tujuan ETag tidak cocok "*e5f3g7h8i9j0*”.

Operasi akan gagal dengan `412 Precondition Failed` kesalahan jika ada objek dengan nama yang ditentukan baru dan memiliki yang ditentukan ETag. 

------
#### [ SDK for Python ]

Anda dapat menggunakan SDK untuk Python untuk mengganti nama objek Anda. Untuk menggunakan contoh ini, ganti *user input placeholders* dengan informasi Anda sendiri.

Contoh berikut menunjukkan cara mengganti nama objek menggunakan AWS SDK for Python (Boto3).

```
def basic_rename(bucket, source_key, destination_key):
    try:
        s3.rename_object(
            Bucket=amzn-s3-demo-bucket--usw2-az1--x-s3,
            Key=destination_key,
            RenameSource=f"{source_key}"
        )
        print(f"Successfully renamed {source_key} to {destination_key}")
    except ClientError as e:
        print(f"Error renaming object: {e}")
```

Kode ini melakukan hal berikut:
+ Mengganti nama objek dari *source\$1key* ke *destination\$1key* dalam ember *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori.
+ Mencetak pesan sukses jika penggantian nama objek Anda berhasil atau mencetak pesan kesalahan jika gagal.

Contoh berikut menunjukkan cara mengganti nama objek dengan `SourceIfMatch` dan `DestinationIfNoneMatch` kondisi menggunakan AWS SDK for Python (Boto3).

```
def rename_with_conditions(bucket, source_key, destination_key, source_etag, dest_etag):
    try:
        s3.rename_object(
            Bucket=amzn-s3-demo-bucket--usw2-az1--x-s3,
            Key=destination_key,
            RenameSource=f"{amzn-s3-demo-bucket--usw2-az1--x-s3}/{source_key}",
            SourceIfMatch=source_ETag,
            DestinationIfNoneMatch=dest_ETag
        )
        print(f"Successfully renamed {source_key} to {destination_key} with conditions")
    except ClientError as e:
        print(f"Error renaming object: {e}")
```

Kode ini melakukan hal berikut:
+ Melakukan operasi penggantian nama bersyarat dan menerapkan dua kondisi, `SourceIfMatch` dan. `DestinationIfNoneMatch` Kombinasi kondisi ini memastikan bahwa objek belum dimodifikasi dan bahwa objek belum ada dengan nama yang ditentukan baru. 
+ Mengganti nama objek dari *source\$1key* ke *destination\$1key* dalam ember *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori.
+ Mencetak pesan sukses jika penggantian nama objek Anda berhasil, atau mencetak pesan kesalahan jika gagal atau jika kondisi tidak terpenuhi.

------
#### [ SDK for Rust ]

Anda dapat menggunakan SDK for Rust untuk mengganti nama objek Anda. Untuk menggunakan contoh ini, ganti *user input placeholders* dengan informasi Anda sendiri.

Contoh berikut menunjukkan cara mengganti nama objek di bucket *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori menggunakan SDK untuk Rust.

```
async fn basic_rename_example(client: &Client) -> Result<(), Box<dyn Error>> {
    let response = client
        .rename_object()
        .bucket(" amzn-s3-demo-bucket--usw2-az1--x-s3")
        .key("new-name.txt")  // New name/path for the object
        .rename_source("old-name.txt")  // Original object name/path
        .send()
        .await?;
    Ok(())
}
```

Kode ini melakukan hal berikut:
+ Membuat permintaan untuk mengganti nama objek dari "*old-name.tx*" menjadi "*new-name.txt*" di ember *amzn-s3-demo-bucket--usw2-az1--x-s3* direktori.
+ Mengembalikan `Result` jenis untuk menangani potensi kesalahan. 

------

### Penggunaan API REST
<a name="directory-bucket-rename-api"></a>

 Anda dapat mengirim permintaan REST untuk mengganti nama objek. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_RenameObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_RenameObject.html) di *Referensi API Amazon S3*. 

### Menggunakan Mountpoint untuk Amazon S3
<a name="directory-bucket-rename-api"></a>

 Dimulai dengan versi 1.19.0 atau lebih tinggi, Mountpoint untuk Amazon S3 mendukung penggantian nama objek di S3 Express One Zone. Untuk informasi lebih lanjut tentang Mountpoint, lihat [Bekerja dengan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mountpoint.html) Mountpoint.

# Mengunggah objek ke ember direktori
<a name="directory-buckets-objects-upload"></a>

Setelah membuat bucket direktori Amazon S3, Anda dapat mengunggah objek ke dalamnya. Contoh berikut menunjukkan cara mengunggah objek ke bucket direktori dengan menggunakan konsol S3 dan file. AWS SDKs Untuk informasi tentang operasi upload objek massal dengan S3 Express One Zone, lihat[Manajemen objek](directory-bucket-high-performance.md#s3-express-features-object-management). 

## Menggunakan konsol S3
<a name="directory-bucket-upload-console"></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 panel navigasi kiri, pilih **Bucket direktori**.

1. Pilih nama bucket yang ingin Anda unggah folder atau file Anda.

1. Dalam daftar **Objek**, pilih **Unggah**.

1. Pada halaman **Unggah**, lakukan salah satu hal berikut: 
   + Seret dan lepas file dan folder ke area unggahan bertitik.
   + Pilih **Tambahkan file** atau **Tambah folder**, pilih file atau folder yang akan diunggah, lalu pilih **Buka** atau **Unggah**.

1. Di bawah **Checksum**, pilih **fungsi Checksum** yang ingin Anda gunakan. 

   (Opsional) Jika Anda mengunggah satu objek yang berukuran kurang dari 16 MB, Anda juga dapat menentukan nilai checksum yang telah dihitung sebelumnya. Saat Anda memberikan nilai yang telah dihitung sebelumnya, Amazon S3 membandingkannya dengan nilai yang dihitung dengan menggunakan fungsi checksum yang dipilih. Jika nilai tidak cocok, unggahan tidak akan dimulai. 

1. Opsi di bagian **Izin** dan **Properti** secara otomatis diatur ke pengaturan default dan tidak dapat dimodifikasi. Blokir Akses Publik diaktifkan secara otomatis, dan Versi S3 dan Kunci Objek S3 tidak dapat diaktifkan untuk bucket direktori. 

   **(Opsional) Jika Anda ingin menambahkan metadata dalam pasangan nilai kunci ke objek Anda, perluas bagian **Properti**, lalu di bagian Metadata, pilih Tambahkan **metadata**.**

1. Untuk mengunggah file dan folder yang terdaftar, pilih **Unggah**.

   Amazon S3 mengunggah objek dan folder Anda. Setelah unggahan selesai, Anda melihat pesan sukses di halaman **Unggahan: status**.

## Menggunakan AWS SDKs
<a name="directory-bucket-upload-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  

```
public static void putObject(S3Client s3Client, String bucketName, String objectKey, Path filePath) {
       //Using File Path to avoid loading the whole file into memory
       try {
           PutObjectRequest putObj = PutObjectRequest.builder()
                   .bucket(bucketName)
                   .key(objectKey)
                   //.metadata(metadata)
                   .build();
           s3Client.putObject(putObj, filePath);               
           System.out.println("Successfully placed " + objectKey +" into bucket "+bucketName);
                                              
       }
       
       catch (S3Exception e) {
           System.err.println(e.getMessage());
           System.exit(1);
       }
}
```

------
#### [ SDK for Python ]

**Example**  

```
import boto3
import botocore
from botocore.exceptions import ClientError
    
    
def put_object(s3_client, bucket_name, key_name, object_bytes):
    """  
    Upload data to a directory bucket.
    :param s3_client: The boto3 S3 client
    :param bucket_name: The bucket that will contain the object
    :param key_name: The key of the object to be uploaded
    :param object_bytes: The data to upload
    """
    try:
        response = s3_client.put_object(Bucket=bucket_name, Key=key_name,
                             Body=object_bytes)
        print(f"Upload object '{key_name}' to bucket '{bucket_name}'.") 
        return response
    except ClientError:    
        print(f"Couldn't upload object '{key_name}' to bucket '{bucket_name}'.")
        raise

def main():
    # Share the client session with functions and objects to benefit from S3 Express One Zone auth key
    s3_client = boto3.client('s3')
    # Directory bucket name must end with --zone-id--x-s3
    resp = put_object(s3_client, 'doc-bucket-example--use1-az5--x-s3', 'sample.txt', b'Hello, World!')
    print(resp)

if __name__ == "__main__":
    main()
```

------

## Menggunakan AWS CLI
<a name="directory-upload-object-cli"></a>

`put-object`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk meng-upload objek dari Amazon S3. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

```
aws s3api put-object --bucket bucket-base-name--zone-id--x-s3 --key sampleinut/file001.bin --body bucket-seed/file001.bin
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) dalam *AWS CLI Referensi Perintah*.

**Topics**
+ [Menggunakan unggahan multibagian dengan bucket direktori](s3-express-using-multipart-upload.md)

# Menggunakan unggahan multibagian dengan bucket direktori
<a name="s3-express-using-multipart-upload"></a>

Anda dapat menggunakan proses upload multipart untuk mengunggah satu objek sebagai satu set bagian. Setiap bagian merupakan bagian data objek yang saling berkaitan. Anda dapat mengunggah bagian-bagian objek tersebut secara independen dan dengan urutan apa pun. Jika ada transmisi bagian mana pun yang gagal, Anda dapat mentransmisikan ulang bagian tersebut tanpa memengaruhi bagian lainnya. Setelah semua bagian objek Anda diunggah, Amazon S3 merakit bagian-bagian ini dan menciptakan objek. Secara umum, saat ukuran objek Anda mencapai 100 MB, Anda harus mempertimbangkan untuk menggunakan unggahan multibagian daripada mengunggah objek tersebut dalam satu operasi.

Penggunaan unggahan multibagian memberikan keuntungan sebagai berikut:
+ **Peningkatan throughput**–Anda dapat mengunggah bagian-bagian secara paralel untuk meningkatkan throughput. 
+ **Pemulihan cepat dari masalah jaringan apa pun** - Ukuran bagian yang lebih kecil meminimalkan dampak memulai ulang unggahan yang gagal karena kesalahan jaringan.
+ **Jeda dan pelanjutan pengunggahan objek**–Anda dapat mengunggah bagian-bagian objek kapan saja. Setelah Anda memulai unggahan multipart, tidak ada tanggal kedaluwarsa. Anda harus secara eksplisit menyelesaikan atau membatalkan unggahan multipart.
+ **Mulai unggahan sebelum Anda mengetahui ukuran akhir objek**–Anda dapat mengunggah sebuah objek selagi Anda membuatnya. 

Kami menyarankan Anda menggunakan unggahan multipart dengan cara berikut:
+ Jika Anda mengunggah objek besar melalui jaringan bandwidth tinggi yang stabil, gunakan unggahan multipart untuk memaksimalkan penggunaan bandwidth yang tersedia dengan mengunggah bagian objek secara paralel untuk kinerja multi-threaded.
+ Jika Anda mengunggah melalui jaringan jerawatan, gunakan unggahan multibagian untuk meningkatkan ketahanan terhadap kesalahan jaringan dengan menghindari pengunggahan dimulai ulang. Saat menggunakan unggahan multibagian, Anda perlu mencoba mengunggah kembali hanya bagian yang terputus selama pengunggahan. Anda tidak perlu mengunggah ulang objek Anda dari awal.

Saat Anda menggunakan unggahan multibagian untuk mengunggah objek ke kelas penyimpanan Amazon S3 Express One Zone dalam bucket direktori, proses pengunggahan multibagian mirip dengan proses menggunakan unggahan multibagian untuk mengunggah objek ke bucket tujuan umum. Namun, ada beberapa perbedaan penting. 

Untuk informasi selengkapnya tentang penggunaan unggahan multibagian untuk mengunggah objek ke S3 Express One Zone, lihat topik berikut.

**Topics**
+ [Proses pengunggahan multipart](#s3-express-mpu-process)
+ [Checksum dengan operasi unggahan multibagian](#s3-express-mpuchecksums)
+ [Operasi pengunggahan multibagian serentak](#s3-express-distributedmpupload)
+ [Unggahan dan harga multipart](#s3-express-mpuploadpricing)
+ [Operasi dan izin API unggahan multibagian](#s3-express-mpuAndPermissions)
+ [Contoh](#directory-buckets-multipart-upload-examples)

## Proses pengunggahan multipart
<a name="s3-express-mpu-process"></a>

Upload multipart adalah proses tiga langkah: 
+ Anda memulai unggahan.
+ Anda mengunggah bagian objek.
+ Setelah Anda mengunggah semua bagian, Anda menyelesaikan unggahan multibagian.



Setelah menerima permintaan upload multipart lengkap, Amazon S3 membuat objek dari bagian yang diunggah, dan Anda kemudian dapat mengakses objek seperti halnya objek lain di bucket Anda. 

**Menginisiasi unggahan multibagian**  
Saat Anda mengirim permintaan untuk memulai unggahan multibagian, Amazon S3 mengirimkan respons dengan ID unggahan, yang merupakan pengidentifikasi unik untuk unggahan multibagian Anda. Anda harus menyertakan ID unggahan ini setiap kali Anda mengunggah bagian, mendaftar bagian, menyelesaikan unggahan, atau membatalkan sebuah unggahan. 

**Pengunggahan bagian-bagian**  
Saat mengunggah sebuah bagian, selain ID pengunggahan, Anda harus menentukan nomor bagiannya. Saat Anda menggunakan unggahan multibagian dengan S3 Express One Zone, nomor bagian multipart harus berupa nomor bagian yang berurutan. Jika Anda mencoba menyelesaikan permintaan unggahan multibagian dengan nomor bagian yang tidak berurutan, kesalahan `HTTP 400 Bad Request` (Pesanan Bagian Tidak Valid) akan dihasilkan. 

Nomor bagian secara unik mengidentifikasi bagian dan posisinya dalam objek yang Anda unggah. Jika Anda mengunggah bagian baru dengan menggunakan nomor bagian yang sama dengan bagian yang diunggah sebelumnya, bagian yang diunggah sebelumnya akan ditimpa. 

Setiap kali Anda mengunggah bagian, Amazon S3 mengembalikan header tag entitas (ETag) dalam responsnya. Untuk setiap unggahan bagian, Anda harus mencatat nomor bagian dan ETag nilainya. ETagNilai untuk semua unggahan bagian objek akan tetap sama, tetapi setiap bagian akan diberi nomor bagian yang berbeda. Anda harus memasukkan nilai-nilai ini dalam permintaan selanjutnya untuk menyelesaikan unggahan multibagian.

Amazon S3 secara otomatis mengenkripsi semua objek baru yang diunggah ke bucket S3. Saat melakukan pengunggahan multibagian, jika Anda tidak menentukan informasi enkripsi dalam permintaan, pengaturan enkripsi bagian yang diunggah diatur ke konfigurasi enkripsi default bucket tujuan. Konfigurasi enkripsi default bucket Amazon S3 selalu diaktifkan dan diatur secara minimum ke enkripsi di sisi server dengan kunci terkelola Amazon S3 (SSE-S3). Untuk bucket direktori, SSE-S3 dan enkripsi sisi server dengan AWS KMS kunci (SSE-KMS) didukung. Untuk informasi selengkapnya, lihat [Perlindungan data dan enkripsi](s3-express-data-protection.md).

**Penyelesaian unggahan multibagian**  
Saat Anda menyelesaikan unggahan multibagian, Amazon S3 membuat objek dengan menggabungkan bagian-bagian dalam urutan menaik berdasarkan nomor bagian. Setelah permintaan *selesai* sepenuhnya, bagiantersebut tidak akan ada lagi. 

Permintaan *unggahan multibagian lengkap* Anda harus menyertakan ID unggahan dan daftar nomor bagian dan ETag nilai yang sesuai. Respons Amazon S3 mencakup ETag yang secara unik mengidentifikasi data objek gabungan. ETag Ini bukan MD5 hash dari data objek. 

**Pendaftaran unggahan multibagian**  
Anda dapat mendaftar bagian-bagian dari unggahan multibagian tertentu atau semua unggahan multibagian yang sedang berlangsung. Operasi daftar bagian menampilkan informasi bagian yang telah Anda unggah untuk unggahan multibagian tertentu. Untuk setiap permintaan daftar bagian, Amazon S3 akan menampilkan informasi bagian untuk unggahan multibagian tertentu, hingga maksimum 1.000 bagian. Jika ada lebih dari 1.000 bagian dalam unggahan multibagian, Anda harus menggunakan penomoran halaman untuk mengambil semua bagian. 

Daftar suku cadang yang dikembalikan tidak termasuk bagian yang belum selesai diunggah. Dengan menggunakan operasi *daftar unggahan multibagian*, Anda dapat memperoleh daftar unggahan multibagian yang sedang berlangsung.

Unggahan multibagian yang sedang berlangsung adalah unggahan yang telah Anda mulai, tetapi belum selesai atau dibatalkan. Setiap permintaan akan ditampilkan sebanyak maksimum 1.000 unggahan multibagian. Jika ada lebih dari 1.000 unggahan multibagian yang sedang berlangsung, Anda harus mengirim permintaan tambahan untuk mengambil unggahan multibagian yang tersisa. Gunakan pendaftaran yang ditampilkan untuk verifikasi. Jangan menggunakan hasil pendaftaran ini saat mengirim permintaan *selesaikan unggahan multibagian*. Sebagai gantinya, pertahankan daftar nomor bagian Anda sendiri yang Anda tentukan saat mengunggah bagian dan ETag nilai terkait yang dikembalikan Amazon S3.

Untuk informasi selengkapnya tentang daftar unggahan multibagian, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)di *Referensi API Amazon Simple Storage Service*. 

## Checksum dengan operasi unggahan multibagian
<a name="s3-express-mpuchecksums"></a>

Saat Anda mengunggah objek, Anda dapat menentukan algoritma checksum untuk memeriksa integritas objek. MD5 tidak didukung untuk bucket direktori. Anda dapat menentukan salah satu algoritma pemeriksaan integritas data Secure Hash Algorithms (SHA) atau Cyclic Redundancy Check (CRC) berikut:
+ CRC32 
+ CRC32C 
+ SHA-1
+ SHA-256

Anda dapat menggunakan Amazon S3 REST API atau AWS SDKs untuk mengambil nilai checksum untuk masing-masing bagian dengan menggunakan atau. `GetObject` `HeadObject` Jika Anda ingin mengambil nilai checksum untuk masing-masing bagian dari unggahan multibagian yang masih dalam proses, Anda dapat menggunakan `ListParts`.

**penting**  
Saat menggunakan algoritma checksum sebelumnya, nomor bagian multipart harus menggunakan nomor bagian berurutan. Jika Anda mencoba menyelesaikan permintaan unggahan multibagian dengan nomor bagian yang tidak berurutan, Amazon S3 menghasilkan kesalahan `HTTP 400 Bad Request` (Pesanan Bagian Tidak Valid).

 Untuk informasi selengkapnya tentang cara kerja checksum dengan objek unggahan multibagian, lihat. [Memeriksa integritas objek di Amazon S3](checking-object-integrity.md)

## Operasi pengunggahan multibagian serentak
<a name="s3-express-distributedmpupload"></a>

Dalam lingkungan pengembangan terdistribusi, aplikasi Anda dapat memulai beberapa pembaruan pada objek yang sama secara bersamaan. Misalnya, aplikasi Anda mungkin memulai beberapa unggahan multipart dengan menggunakan kunci objek yang sama. Untuk setiap unggahan ini, aplikasi Anda kemudian dapat mengunggah bagian dan mengirim sebuah permintaan menyelesaikan unggahan ke Amazon S3 untuk membuat objek. Untuk S3 Express One Zone, waktu pembuatan objek adalah tanggal penyelesaian unggahan multibagian.

**penting**  
Pembuatan versi tidak didukung untuk objek yang disimpan dalam bucket direktori.

## Unggahan dan harga multipart
<a name="s3-express-mpuploadpricing"></a>

Setelah Anda memulai unggahan multibagian, Amazon S3 akan menyimpan semua bagian hingga Anda menyelesaikan atau membatalkan unggahan. Sepanjang masa pakainya, Anda akan ditagih untuk semua penyimpanan, bandwidth, dan permintaan untuk unggahan multibagian ini dan bagian terkaitnya. Jika Anda membatalkan unggahan multibagian, Amazon S3 menghapus artefak unggahan dan bagian apa pun yang telah Anda unggah, dan Anda tidak lagi ditagih untuk itu. Tidak ada biaya penghapusan awal untuk menghapus unggahan multibagian yang tidak lengkap, terlepas dari kelas penyimpanan yang ditentukan. Untuk informasi selengkapnya tentang harga, lihat [Harga Amazon S3](https://aws.amazon.com/s3/pricing/).

**penting**  
Jika permintaan upload multipart lengkap tidak berhasil dikirim, bagian objek tidak dirakit dan objek tidak dibuat. Anda akan ditagih untuk semua penyimpanan yang terkait dengan bagian yang diunggah. Penting bagi Anda untuk menyelesaikan unggahan multibagian agar objek dibuat atau membatalkan unggahan multibagian untuk menghapus bagian yang diunggah.   
Sebelum dapat menghapus bucket direktori, Anda harus menyelesaikan atau membatalkan semua unggahan multipart yang sedang berlangsung. Bucket direktori tidak mendukung konfigurasi Siklus Hidup S3. Jika perlu, Anda dapat mencantumkan unggahan multibagian aktif, lalu membatalkan unggahan, lalu menghapus bucket. 

## Operasi dan izin API unggahan multibagian
<a name="s3-express-mpuAndPermissions"></a>

Untuk mengizinkan akses ke operasi API manajemen objek pada bucket direktori, Anda memberikan `s3express:CreateSession` izin dalam kebijakan bucket atau kebijakan berbasis identitas AWS Identity and Access Management (IAM).

Anda harus memiliki izin yang diperlukan untuk menggunakan operasi pengunggahan multibagian. Anda dapat menggunakan kebijakan bucket atau kebijakan berbasis identitas IAM untuk memberikan izin kepada prinsipal IAM untuk melakukan operasi ini. Tabel berikut mencantumkan izin yang diperlukan untuk berbagai operasi pengunggahan multibagian. 

Anda dapat mengidentifikasi inisiator unggahan multipart melalui elemen. `Initiator` Jika inisiator adalah Akun AWS, elemen ini memberikan informasi yang sama dengan `Owner` elemen. Jika inisiator adalah seorang pengguna IAM, elemen ini akan menyediakan ARN pengguna dan nama tampilan.


| Tindakan | Izin yang diperlukan | 
| --- | --- | 
|  Membuat unggahan multibagian  |  Untuk membuat unggahan multipart, Anda harus diizinkan untuk melakukan `s3express:CreateSession` tindakan pada bucket direktori.   | 
|  Memulai upload multipart  |  Untuk memulai unggahan multipart, Anda harus diizinkan untuk melakukan `s3express:CreateSession` tindakan pada bucket direktori.   | 
| Unggah bagian |  Untuk mengunggah bagian, Anda harus diizinkan untuk melakukan `s3express:CreateSession` tindakan pada bucket direktori.  Agar inisiator dapat mengunggah bagian, pemilik bucket harus mengizinkan inisiator untuk melakukan `s3express:CreateSession` tindakan pada bucket direktori.  | 
| Unggah bagian (salin) |  Untuk mengunggah bagian, Anda harus diizinkan untuk melakukan `s3express:CreateSession` tindakan pada bucket direktori.  Agar inisiator dapat mengunggah bagian untuk sebuah objek, pemilik bucket harus mengizinkan inisiator untuk melakukan tindakan `s3express:CreateSession` pada objek.  | 
| Selesaikan unggahan multibagian |  Untuk menyelesaikan unggahan multibagian, Anda harus diizinkan untuk melakukan `s3express:CreateSession` tindakan pada bucket direktori.  Agar inisiator dapat menyelesaikan unggahan multibagian, pemilik bucket harus mengizinkan inisiator untuk melakukan `s3express:CreateSession` tindakan pada objek.  | 
| Pembatalan sebuah unggahan multipart |  Untuk membatalkan unggahan multibagian, Anda harus diizinkan untuk melakukan tindakan. `s3express:CreateSession`  Agar inisiator membatalkan unggahan multibagian, inisiator harus diberikan akses izin eksplisit untuk melakukan tindakan. `s3express:CreateSession`   | 
| Daftar bagian |  Untuk mencantumkan bagian-bagian dalam unggahan multibagian, Anda harus diizinkan untuk melakukan `s3express:CreateSession` tindakan pada bucket direktori.  | 
| Membuat daftar unggahan multibagian yang sedang berlangsung |  Untuk membuat daftar unggahan multipart yang sedang berlangsung ke bucket, Anda harus diizinkan melakukan `s3:ListBucketMultipartUploads` tindakan pada bucket tersebut.  | 

### Dukungan operasi API untuk unggahan multipart
<a name="s3-express-mpu-apis"></a>

Bagian berikut dalam Referensi API Amazon Simple Storage Service menjelaskan operasi Amazon S3 REST API untuk unggahan multipart. 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)

## Contoh
<a name="directory-buckets-multipart-upload-examples"></a>

Untuk menggunakan unggahan multibagian untuk mengunggah objek ke S3 Express One Zone dalam bucket direktori, lihat contoh berikut.

**Topics**
+ [Membuat unggahan multibagian](#directory-buckets-multipart-upload-examples-create)
+ [Mengunggah bagian-bagian dari unggahan multipart](#directory-buckets-multipart-upload-examples-upload-part)
+ [Menyelesaikan unggahan multibagian](#directory-buckets-multipart-upload-examples-complete)
+ [Membatalkan unggahan multibagian](#directory-buckets-multipart-upload-examples-abort)
+ [Membuat operasi salin unggahan multibagian](#directory-buckets-multipart-upload-examples-upload-part-copy)
+ [Mencantumkan unggahan multipart yang sedang berlangsung](#directory-buckets-multipart-upload-examples-list)
+ [Cantumkan bagian-bagian dari unggahan multipart](#directory-buckets-multipart-upload-examples-list-parts)

### Membuat unggahan multibagian
<a name="directory-buckets-multipart-upload-examples-create"></a>

**catatan**  
Untuk bucket direktori, saat Anda melakukan `CreateMultipartUpload` operasi dan `UploadPartCopy` operasi, enkripsi default bucket harus menggunakan konfigurasi enkripsi yang diinginkan, dan header permintaan yang Anda berikan dalam `CreateMultipartUpload` permintaan harus sesuai dengan konfigurasi enkripsi default bucket tujuan. 

Contoh berikut menunjukkan cara membuat unggahan multipart. 

#### Menggunakan AWS SDKs
<a name="directory-buckets-multipart-upload-create-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  

```
/**
 * This method creates a multipart upload request that generates a unique upload ID that is used to track
 * all the upload parts
 *
 * @param s3
 * @param bucketName - for example, 'doc-example-bucket--use1-az4--x-s3'
 * @param key
 * @return
 */
 private static String createMultipartUpload(S3Client s3, String bucketName, String key) {
 
     CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() 
             .bucket(bucketName)
             .key(key)
             .build();
             
     String uploadId = null;
     
     try {
         CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest);
         uploadId = response.uploadId();
     }
     catch (S3Exception e) {
         System.err.println(e.awsErrorDetails().errorMessage());
         System.exit(1);
     }
     return uploadId;
```

------
#### [ SDK for Python ]

**Example**  

```
def create_multipart_upload(s3_client, bucket_name, key_name):
    '''
   Create a multipart upload to a directory bucket
   
   :param s3_client: boto3 S3 client
   :param bucket_name: The destination bucket for the multipart upload
   :param key_name: The key name for the object to be uploaded
   :return: The UploadId for the multipart upload if created successfully, else None
   '''
   
   try:
        mpu = s3_client.create_multipart_upload(Bucket = bucket_name, Key = key_name)
        return mpu['UploadId'] 
    except ClientError as e:
        logging.error(e)
        return None
```

------

#### Menggunakan AWS CLI
<a name="directory-bucket-multipart-upload-create-cli"></a>

Contoh ini menunjukkan cara membuat unggahan multipart ke bucket direktori dengan menggunakan file. AWS CLI Perintah ini memulai unggahan multipart ke bucket direktori *bucket-base-name* -- *zone-id* --x-s3 untuk objek. *KEY\$1NAME* Untuk menggunakan perintah ganti *user input placeholders* dengan informasi Anda sendiri.

```
aws s3api create-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME
```

Untuk informasi selengkapnya, lihat [create-multipart-upload](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-multipart-upload.html) di AWS Command Line Interface.

### Mengunggah bagian-bagian dari unggahan multipart
<a name="directory-buckets-multipart-upload-examples-upload-part"></a>

Contoh berikut menunjukkan cara mengunggah bagian dari unggahan multipart. 

#### Menggunakan AWS SDKs
<a name="directory-buckets-multipart-upload-part-sdks"></a>

------
#### [ SDK for Java 2.x ]

Contoh berikut menunjukkan cara memecah satu objek menjadi beberapa bagian dan kemudian mengunggah bagian-bagian tersebut ke bucket direktori dengan menggunakan SDK for Java 2.x. 

**Example**  

```
/**
 * This method creates part requests and uploads individual parts to S3 and then returns all the completed parts
 *
 * @param s3
 * @param bucketName
 * @param key
 * @param uploadId
 * @throws IOException
 */
 private static ListCompletedPartmultipartUpload(S3Client s3, String bucketName, String key, String uploadId, String filePath) throws IOException {

        int partNumber = 1;
        ListCompletedPart completedParts = new ArrayList<>();
        ByteBuffer bb = ByteBuffer.allocate(1024 * 1024 * 5); // 5 MB byte buffer

        // read the local file, breakdown into chunks and process
        try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) {
            long fileSize = file.length();
            int position = 0;
            while (position < fileSize) {
                file.seek(position);
                int read = file.getChannel().read(bb);

                bb.flip(); // Swap position and limit before reading from the buffer.
                UploadPartRequest uploadPartRequest = UploadPartRequest.builder()
                        .bucket(bucketName)
                        .key(key)
                        .uploadId(uploadId)
                        .partNumber(partNumber)
                        .build();

                UploadPartResponse partResponse = s3.uploadPart(
                        uploadPartRequest,
                        RequestBody.fromByteBuffer(bb));

                CompletedPart part = CompletedPart.builder()
                        .partNumber(partNumber)
                        .eTag(partResponse.eTag())
                        .build();
                completedParts.add(part);

                bb.clear();
                position += read;
                partNumber++;
            }
        } 
        
        catch (IOException e) {
            throw e;
        }
        return completedParts;
    }
```

------
#### [ SDK for Python ]

Contoh berikut menunjukkan cara memecah satu objek menjadi beberapa bagian dan kemudian mengunggah bagian-bagian tersebut ke bucket direktori dengan menggunakan SDK untuk Python. 

**Example**  

```
def multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_size):
    '''
    Break up a file into multiple parts and upload those parts to a directory bucket

    :param s3_client: boto3 S3 client
    :param bucket_name: Destination bucket for the multipart upload
    :param key_name: Key name for object to be uploaded and for the local file that's being uploaded
    :param mpu_id: The UploadId returned from the create_multipart_upload call
    :param part_size: The size parts that the object will be broken into, in bytes. 
                      Minimum 5 MiB, Maximum 5 GiB. There is no minimum size for the last part of your multipart upload.
    :return: part_list for the multipart upload if all parts are uploaded successfully, else None
    '''
    
    part_list = []
    try:
        with open(key_name, 'rb') as file:
            part_counter = 1
            while True:
                file_part = file.read(part_size)
                if not len(file_part):
                    break
                upload_part = s3_client.upload_part(
                    Bucket = bucket_name,
                    Key = key_name,
                    UploadId = mpu_id,
                    Body = file_part,
                    PartNumber = part_counter
                )
                part_list.append({'PartNumber': part_counter, 'ETag': upload_part['ETag']})
                part_counter += 1
    except ClientError as e:
        logging.error(e)
        return None
    return part_list
```

------

#### Menggunakan AWS CLI
<a name="directory-bucket-multipart-upload-part-cli"></a>

Contoh ini menunjukkan cara memecah satu objek menjadi beberapa bagian dan kemudian mengunggah bagian-bagian tersebut ke bucket direktori dengan menggunakan file AWS CLI. Untuk menggunakan perintah ganti *user input placeholders* dengan informasi Anda sendiri.

```
aws s3api upload-part --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --part-number 1 --body LOCAL_FILE_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA"
```

Untuk informasi selengkapnya, lihat [bagian unggahan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/upload-part.html) di. AWS Command Line Interface

### Menyelesaikan unggahan multibagian
<a name="directory-buckets-multipart-upload-examples-complete"></a>

Contoh berikut menunjukkan cara menyelesaikan unggahan multipart. 

#### Menggunakan AWS SDKs
<a name="directory-buckets-multipart-upload-complete-sdks"></a>

------
#### [ SDK for Java 2.x ]

Contoh berikut menunjukkan cara menyelesaikan upload multipart dengan menggunakan SDK for Java 2.x.

**Example**  

```
/**
 * This method completes the multipart upload request by collating all the upload parts
 * @param s3
 * @param bucketName - for example, 'doc-example-bucket--usw2-az1--x-s3'
 * @param key
 * @param uploadId
 * @param uploadParts
 */
 private static void completeMultipartUpload(S3Client s3, String bucketName, String key, String uploadId, ListCompletedPart uploadParts) {
        CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder()
                .parts(uploadParts)
                .build();

        CompleteMultipartUploadRequest completeMultipartUploadRequest =
                CompleteMultipartUploadRequest.builder()
                        .bucket(bucketName)
                        .key(key)
                        .uploadId(uploadId)
                        .multipartUpload(completedMultipartUpload)
                        .build();

        s3.completeMultipartUpload(completeMultipartUploadRequest);
    }

    public static void multipartUploadTest(S3Client s3, String bucketName, String key, String localFilePath)  {
        System.out.println("Starting multipart upload for: " + key);
        try {
            String uploadId = createMultipartUpload(s3, bucketName, key);
            System.out.println(uploadId);
            ListCompletedPart parts = multipartUpload(s3, bucketName, key, uploadId, localFilePath);
            completeMultipartUpload(s3, bucketName, key, uploadId, parts);
            System.out.println("Multipart upload completed for: " + key);
        } 
        
        catch (Exception e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
```

------
#### [ SDK for Python ]

Contoh berikut menunjukkan cara menyelesaikan upload multipart dengan menggunakan SDK untuk Python.

**Example**  

```
def complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list):
    '''
    Completes a multipart upload to a directory bucket

    :param s3_client: boto3 S3 client
    :param bucket_name: The destination bucket for the multipart upload
    :param key_name: The key name for the object to be uploaded
    :param mpu_id: The UploadId returned from the create_multipart_upload call
    :param part_list: The list of uploaded part numbers with their associated ETags 
    :return: True if the multipart upload was completed successfully, else False
    '''
    
    try:
        s3_client.complete_multipart_upload(
            Bucket = bucket_name,
            Key = key_name,
            UploadId = mpu_id,
            MultipartUpload = {
                'Parts': part_list
            }
        )
    except ClientError as e:
        logging.error(e)
        return False
    return True
    
if __name__ == '__main__':
    MB = 1024 ** 2
    region = 'us-west-2'
    bucket_name = 'BUCKET_NAME'
    key_name = 'OBJECT_NAME'
    part_size = 10 * MB
    s3_client = boto3.client('s3', region_name = region)
    mpu_id = create_multipart_upload(s3_client, bucket_name, key_name)
    if mpu_id is not None:
        part_list = multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_size)
        if part_list is not None:
            if complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list):
                print (f'{key_name} successfully uploaded through a ultipart upload to {bucket_name}')
            else:
                print (f'Could not upload {key_name} hrough a multipart upload to {bucket_name}')
```

------

#### Menggunakan AWS CLI
<a name="directory-bucket-multipart-upload-complete-cli"></a>

Contoh ini menunjukkan cara menyelesaikan unggahan multipart untuk bucket direktori dengan menggunakan file. AWS CLI Untuk menggunakan perintah ganti *user input placeholders* dengan informasi Anda sendiri.

```
aws s3api complete-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA" --multipart-upload file://parts.json
```

Contoh ini mengambil struktur JSON yang menjelaskan bagian-bagian dari upload multipart yang harus dipasang kembali ke dalam file lengkap. Dalam contoh ini, `file://` awalan digunakan untuk memuat struktur JSON dari file di folder lokal bernama. `parts`

parts.json:

```
parts.json
{
  "Parts": [
    {
      "ETag": "6b78c4a64dd641a58dac8d9258b88147",
      "PartNumber": 1
    }
  ]
}
```

Untuk informasi selengkapnya, lihat [complete-multipart-upload](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html) di AWS Command Line Interface.

### Membatalkan unggahan multibagian
<a name="directory-buckets-multipart-upload-examples-abort"></a>

Contoh berikut menunjukkan cara membatalkan unggahan multipart. 

#### Menggunakan AWS SDKs
<a name="directory-bucket-multipart-upload-abort-sdk"></a>

------
#### [ SDK for Java 2.x ]

Contoh berikut menunjukkan cara membatalkan upload multipart dengan menggunakan SDK for Java 2.x.

**Example**  

```
public static void abortMultiPartUploads( S3Client s3, String bucketName ) {

         try {
             ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder()
                     .bucket(bucketName)
                     .build();

             ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest);
             ListMultipartUpload uploads = response.uploads();

             AbortMultipartUploadRequest abortMultipartUploadRequest;
             for (MultipartUpload upload: uploads) {
                 abortMultipartUploadRequest = AbortMultipartUploadRequest.builder()
                         .bucket(bucketName)
                         .key(upload.key())
                         .uploadId(upload.uploadId())
                         .build();

                 s3.abortMultipartUpload(abortMultipartUploadRequest);
             }

         } 
         
         catch (S3Exception e) {
             System.err.println(e.getMessage());
             System.exit(1);
         }
     }
```

------
#### [ SDK for Python ]

Contoh berikut menunjukkan cara membatalkan upload multipart dengan menggunakan SDK untuk Python.

**Example**  

```
import logging
import boto3
from botocore.exceptions import ClientError


def abort_multipart_upload(s3_client, bucket_name, key_name, upload_id):
    '''
    Aborts a partial multipart upload in a directory bucket.
    
    :param s3_client: boto3 S3 client
    :param bucket_name: Bucket where the multipart upload was initiated - for example, 'doc-example-bucket--usw2-az1--x-s3'
    :param key_name: Name of the object for which the multipart upload needs to be aborted
    :param upload_id: Multipart upload ID for the multipart upload to be aborted
    :return: True if the multipart upload was successfully aborted, False if not
    '''
    try:
        s3_client.abort_multipart_upload(
            Bucket = bucket_name,
            Key = key_name,
            UploadId = upload_id
        )
    except ClientError as e:
        logging.error(e)
        return False
    return True


if __name__ == '__main__':
    region = 'us-west-2'
    bucket_name = 'BUCKET_NAME'
    key_name = 'KEY_NAME'
        upload_id = 'UPLOAD_ID'
    s3_client = boto3.client('s3', region_name = region)
    if abort_multipart_upload(s3_client, bucket_name, key_name, upload_id):
        print (f'Multipart upload for object {key_name} in {bucket_name} bucket has been aborted')
    else:
        print (f'Unable to abort multipart upload for object {key_name} in {bucket_name} bucket')
```

------

#### Menggunakan AWS CLI
<a name="directory-bucket-multipart-upload-complete-cli"></a>

Contoh berikut menunjukkan cara membatalkan upload multipart dengan menggunakan file. AWS CLI Untuk menggunakan perintah ganti *user input placeholders* dengan informasi Anda sendiri.

```
aws s3api abort-multipart-upload --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEAX5hFw-MAQAAAAB0OxUFeA7LTbWWFS8WYwhrxDxTIDN-pdEEq_agIHqsbg"
```

Untuk informasi selengkapnya, lihat [abort-multipart-upload](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/abort-multipart-upload.html) di AWS Command Line Interface.

### Membuat operasi salin unggahan multibagian
<a name="directory-buckets-multipart-upload-examples-upload-part-copy"></a>

**catatan**  
[Untuk mengenkripsi salinan bagian objek baru dalam bucket direktori dengan SSE-KMS, Anda harus menentukan SSE-KMS sebagai konfigurasi enkripsi default bucket direktori dengan kunci KMS (khususnya, kunci yang dikelola pelanggan).](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) [Kunci yang dikelola AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/s3`) tidak didukung. Konfigurasi SSE-KMS Anda hanya dapat mendukung 1 [kunci terkelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) per bucket direktori selama masa pakai bucket. Setelah menentukan kunci terkelola pelanggan untuk SSE-KMS, Anda tidak dapat mengganti kunci terkelola pelanggan untuk konfigurasi SSE-KMS bucket. Anda tidak dapat menentukan setelan enkripsi sisi server untuk salinan bagian objek baru dengan SSE-KMS di header permintaan. [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) Selain itu, header permintaan yang Anda berikan dalam `CreateMultipartUpload` permintaan harus sesuai dengan konfigurasi enkripsi default bucket tujuan. 
Kunci Bucket S3 tidak didukung, saat Anda menyalin objek terenkripsi SSE-KMS dari bucket tujuan umum ke bucket direktori, dari bucket direktori ke bucket tujuan umum, atau di antara bucket direktori, hingga. [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) Dalam hal ini, Amazon S3 melakukan panggilan ke AWS KMS setiap kali permintaan salinan dibuat untuk objek yang dienkripsi KMS.

Contoh berikut menunjukkan cara menyalin objek dari satu bucket ke bucket lainnya menggunakan unggahan multipart. 

#### Menggunakan AWS SDKs
<a name="directory-bucket-multipart-upload-copy-sdk"></a>

------
#### [ SDK for Java 2.x ]

Contoh berikut menunjukkan cara menggunakan unggahan multipart untuk menyalin objek secara terprogram dari satu bucket ke bucket lainnya dengan menggunakan SDK for Java 2.x.

**Example**  

```
/**
 * This method creates a multipart upload request that generates a unique upload ID that is used to track
 * all the upload parts.
 *
 * @param s3
 * @param bucketName
 * @param key
 * @return
 */
 private static String createMultipartUpload(S3Client s3, String bucketName, String key) {
        CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder()
                .bucket(bucketName)
                .key(key)
                .build();
        String uploadId = null;
        try {
            CreateMultipartUploadResponse response = s3.createMultipartUpload(createMultipartUploadRequest);
            uploadId = response.uploadId();
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return uploadId;
  }

  /**
   * Creates copy parts based on source object size and copies over individual parts
   *
   * @param s3
   * @param sourceBucket
   * @param sourceKey
   * @param destnBucket
   * @param destnKey
   * @param uploadId
   * @return
   * @throws IOException
   */
    public static ListCompletedPart multipartUploadCopy(S3Client s3, String sourceBucket, String sourceKey, String destnBucket, String destnKey, String uploadId) throws IOException {

        // Get the object size to track the end of the copy operation.
        HeadObjectRequest headObjectRequest = HeadObjectRequest
                .builder()
                .bucket(sourceBucket)
                .key(sourceKey)
                .build();
        HeadObjectResponse response = s3.headObject(headObjectRequest);
        Long objectSize = response.contentLength();

        System.out.println("Source Object size: " + objectSize);

        // Copy the object using 20 MB parts.
        long partSize = 20 * 1024 * 1024;
        long bytePosition = 0;
        int partNum = 1;
        ListCompletedPart completedParts = new ArrayList<>();
        while (bytePosition < objectSize) {
            // The last part might be smaller than partSize, so check to make sure
            // that lastByte isn't beyond the end of the object.
            long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1);

            System.out.println("part no: " + partNum + ", bytePosition: " + bytePosition + ", lastByte: " + lastByte);

            // Copy this part.
            UploadPartCopyRequest req = UploadPartCopyRequest.builder()
                    .uploadId(uploadId)
                    .sourceBucket(sourceBucket)
                    .sourceKey(sourceKey)
                    .destinationBucket(destnBucket)
                    .destinationKey(destnKey)
                    .copySourceRange("bytes="+bytePosition+"-"+lastByte)
                    .partNumber(partNum)
                    .build();
            UploadPartCopyResponse res = s3.uploadPartCopy(req);
            CompletedPart part = CompletedPart.builder()
                    .partNumber(partNum)
                    .eTag(res.copyPartResult().eTag())
                    .build();
            completedParts.add(part);
            partNum++;
            bytePosition += partSize;
        }
        return completedParts;
    }


    public static void multipartCopyUploadTest(S3Client s3, String srcBucket, String srcKey, String destnBucket, String destnKey)  {
        System.out.println("Starting multipart copy for: " + srcKey);
        try {
            String uploadId = createMultipartUpload(s3, destnBucket, destnKey);
            System.out.println(uploadId);
            ListCompletedPart parts = multipartUploadCopy(s3, srcBucket, srcKey,destnBucket,  destnKey, uploadId);
            completeMultipartUpload(s3, destnBucket, destnKey, uploadId, parts);
            System.out.println("Multipart copy completed for: " + srcKey);
        } catch (Exception e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
```

------
#### [ SDK for Python ]

Contoh berikut menunjukkan cara menggunakan unggahan multipart untuk menyalin objek secara terprogram dari satu bucket ke bucket lainnya dengan menggunakan SDK untuk Python.

**Example**  

```
import logging
import boto3
from botocore.exceptions import ClientError

def head_object(s3_client, bucket_name, key_name):
    '''
    Returns metadata for an object in a directory bucket

    :param s3_client: boto3 S3 client
    :param bucket_name: Bucket that contains the object to query for metadata
    :param key_name: Key name to query for metadata
    :return: Metadata for the specified object if successful, else None
    '''

    try:
        response = s3_client.head_object(
            Bucket = bucket_name,
            Key = key_name
        )
        return response
    except ClientError as e:
        logging.error(e)
        return None
    
def create_multipart_upload(s3_client, bucket_name, key_name):
    '''
    Create a multipart upload to a directory bucket

    :param s3_client: boto3 S3 client
    :param bucket_name: Destination bucket for the multipart upload
    :param key_name: Key name of the object to be uploaded
    :return: UploadId for the multipart upload if created successfully, else None
    '''
    
    try:
        mpu = s3_client.create_multipart_upload(Bucket = bucket_name, Key = key_name)
        return mpu['UploadId'] 
    except ClientError as e:
        logging.error(e)
        return None

def multipart_copy_upload(s3_client, source_bucket_name, key_name, target_bucket_name, mpu_id, part_size):
    '''
    Copy an object in a directory bucket to another bucket in multiple parts of a specified size
    
    :param s3_client: boto3 S3 client
    :param source_bucket_name: Bucket where the source object exists
    :param key_name: Key name of the object to be copied
    :param target_bucket_name: Destination bucket for copied object
    :param mpu_id: The UploadId returned from the create_multipart_upload call
    :param part_size: The size parts that the object will be broken into, in bytes. 
                      Minimum 5 MiB, Maximum 5 GiB. There is no minimum size for the last part of your multipart upload.
    :return: part_list for the multipart copy if all parts are copied successfully, else None
    '''
    
    part_list = []
    copy_source = {
        'Bucket': source_bucket_name,
        'Key': key_name
    }
    try:
        part_counter = 1
        object_size = head_object(s3_client, source_bucket_name, key_name)
        if object_size is not None:
            object_size = object_size['ContentLength']
        while (part_counter - 1) * part_size <object_size:
            bytes_start = (part_counter - 1) * part_size
            bytes_end = (part_counter * part_size) - 1
            upload_copy_part = s3_client.upload_part_copy (
                Bucket = target_bucket_name,
                CopySource = copy_source,
                CopySourceRange = f'bytes={bytes_start}-{bytes_end}',
                Key = key_name,
                PartNumber = part_counter,
                UploadId = mpu_id
            )
            part_list.append({'PartNumber': part_counter, 'ETag': upload_copy_part['CopyPartResult']['ETag']})
            part_counter += 1
    except ClientError as e:
        logging.error(e)
        return None
    return part_list

def complete_multipart_upload(s3_client, bucket_name, key_name, mpu_id, part_list):
    '''
    Completes a multipart upload to a directory bucket

    :param s3_client: boto3 S3 client
    :param bucket_name: Destination bucket for the multipart upload
    :param key_name: Key name of the object to be uploaded
    :param mpu_id: The UploadId returned from the create_multipart_upload call
    :param part_list: List of uploaded part numbers with associated ETags 
    :return: True if the multipart upload was completed successfully, else False
    '''
    
    try:
        s3_client.complete_multipart_upload(
            Bucket = bucket_name,
            Key = key_name,
            UploadId = mpu_id,
            MultipartUpload = {
                'Parts': part_list
            }
        )
    except ClientError as e:
        logging.error(e)
        return False
    return True

if __name__ == '__main__':
    MB = 1024 ** 2
    region = 'us-west-2'
    source_bucket_name = 'SOURCE_BUCKET_NAME'
    target_bucket_name = 'TARGET_BUCKET_NAME'
    key_name = 'KEY_NAME'
    part_size = 10 * MB
    s3_client = boto3.client('s3', region_name = region)
    mpu_id = create_multipart_upload(s3_client, target_bucket_name, key_name)
    if mpu_id is not None:
        part_list = multipart_copy_upload(s3_client, source_bucket_name, key_name, target_bucket_name, mpu_id, part_size)
        if part_list is not None:
            if complete_multipart_upload(s3_client, target_bucket_name, key_name, mpu_id, part_list):
                print (f'{key_name} successfully copied through multipart copy from {source_bucket_name} to {target_bucket_name}')
            else:
                print (f'Could not copy {key_name} through multipart copy from {source_bucket_name} to {target_bucket_name}')
```

------

#### Menggunakan AWS CLI
<a name="directory-bucket-multipart-upload-copy-cli"></a>

Contoh berikut menunjukkan cara menggunakan unggahan multibagian untuk menyalin objek secara terprogram dari satu bucket ke bucket direktori menggunakan file. AWS CLI Untuk menggunakan perintah ganti *user input placeholders* dengan informasi Anda sendiri.

```
aws s3api upload-part-copy --bucket bucket-base-name--zone-id--x-s3 --key TARGET_KEY_NAME --copy-source SOURCE_BUCKET_NAME/SOURCE_KEY_NAME --part-number 1 --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBnJ4cxKMAQAAAABiNXpOFVZJ1tZcKWib9YKE1C565_hCkDJ_4AfCap2svg"
```

Untuk informasi selengkapnya, lihat [upload-part-copy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/upload-part-copy.html                         ) di AWS Command Line Interface.

### Mencantumkan unggahan multipart yang sedang berlangsung
<a name="directory-buckets-multipart-upload-examples-list"></a>

Untuk mencantumkan unggahan multibagian yang sedang berlangsung ke bucket direktori, Anda dapat menggunakan file AWS SDKs, atau file. AWS CLI

#### Menggunakan AWS SDKs
<a name="directory-bucket-multipart-upload-list-sdk"></a>

------
#### [ SDK for Java 2.x ]

Contoh berikut menunjukkan cara membuat daftar unggahan multipart yang sedang berlangsung (tidak lengkap) dengan menggunakan SDK for Java 2.x.

**Example**  

```
 public static void listMultiPartUploads( S3Client s3, String bucketName) {
        try {
            ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder()
                .bucket(bucketName)
                .build();
                
            ListMultipartUploadsResponse response = s3.listMultipartUploads(listMultipartUploadsRequest);
            List MultipartUpload uploads = response.uploads();
            for (MultipartUpload upload: uploads) {
                System.out.println("Upload in progress: Key = \"" + upload.key() + "\", id = " + upload.uploadId());
            }
      }
      catch (S3Exception e) {
            System.err.println(e.getMessage());
            System.exit(1);
      }
  }
```

------
#### [ SDK for Python ]

Contoh berikut menunjukkan cara membuat daftar unggahan multipart yang sedang berlangsung (tidak lengkap) dengan menggunakan SDK untuk Python.

**Example**  

```
import logging
import boto3
from botocore.exceptions import ClientError

def list_multipart_uploads(s3_client, bucket_name):
    '''
    List any incomplete multipart uploads in a directory bucket in e specified gion

    :param s3_client: boto3 S3 client
    :param bucket_name: Bucket to check for incomplete multipart uploads
    :return: List of incomplete multipart uploads if there are any, None if not
    '''
    
    try:
        response = s3_client.list_multipart_uploads(Bucket = bucket_name)
        if 'Uploads' in response.keys():
            return response['Uploads']
        else:
            return None 
    except ClientError as e:
        logging.error(e)

if __name__ == '__main__':
    bucket_name = 'BUCKET_NAME'
    region = 'us-west-2'
    s3_client = boto3.client('s3', region_name = region)
    multipart_uploads = list_multipart_uploads(s3_client, bucket_name)
    if multipart_uploads is not None:
        print (f'There are {len(multipart_uploads)} ncomplete multipart uploads for {bucket_name}')
    else:
        print (f'There are no incomplete multipart uploads for {bucket_name}')
```

------

#### Menggunakan AWS CLI
<a name="directory-bucket-multipart-upload-list-cli"></a>

Contoh berikut menunjukkan cara membuat daftar unggahan multipart yang sedang berlangsung (tidak lengkap) dengan menggunakan. AWS CLI Untuk menggunakan perintah ganti *user input placeholders* dengan informasi Anda sendiri.

```
aws s3api list-multipart-uploads --bucket bucket-base-name--zone-id--x-s3
```

Untuk informasi selengkapnya, lihat [list-multipart-uploads](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-multipart-uploads.html                         ) di AWS Command Line Interface.

### Cantumkan bagian-bagian dari unggahan multipart
<a name="directory-buckets-multipart-upload-examples-list-parts"></a>

Contoh berikut menunjukkan cara membuat daftar bagian dari unggahan multipart ke bucket direktori.

#### Menggunakan AWS SDKs
<a name="directory-bucket-multipart-upload-list-parts-sdk"></a>

------
#### [ SDK for Java 2.x ]

Contoh berikut menunjukkan cara membuat daftar bagian dari unggahan multipart ke bucket direktori dengan menggunakan SDK for Java 2.x.

```
public static void listMultiPartUploadsParts( S3Client s3, String bucketName, String objKey, String uploadID) {
         
         try {
             ListPartsRequest listPartsRequest = ListPartsRequest.builder()
                 .bucket(bucketName)
                 .uploadId(uploadID)
                 .key(objKey)
                 .build();

             ListPartsResponse response = s3.listParts(listPartsRequest);
             ListPart parts = response.parts();
             for (Part part: parts) {
                 System.out.println("Upload in progress: Part number = \"" + part.partNumber() + "\", etag = " + part.eTag());
             }

         } 
         
         catch (S3Exception e) {
             System.err.println(e.getMessage());
             System.exit(1);
         }
         
         
     }
```

------
#### [ SDK for Python ]

Contoh berikut menunjukkan cara membuat daftar bagian dari unggahan multipart ke bucket direktori dengan menggunakan SDK untuk Python.

```
import logging
import boto3
from botocore.exceptions import ClientError

def list_parts(s3_client, bucket_name, key_name, upload_id):
    '''
    Lists the parts that have been uploaded for a specific multipart upload to a directory bucket.
    
    :param s3_client: boto3 S3 client
    :param bucket_name: Bucket that multipart uploads parts have been uploaded to
    :param key_name: Name of the object that has parts uploaded
    :param upload_id: Multipart upload ID that the parts are associated with
    :return: List of parts associated with the specified multipart upload, None if there are no parts
    '''
    parts_list = []
    next_part_marker = ''
    continuation_flag = True
    try:
        while continuation_flag:
            if next_part_marker == '':
                response = s3_client.list_parts(
                    Bucket = bucket_name,
                    Key = key_name,
                    UploadId = upload_id
                )
            else:
                response = s3_client.list_parts(
                    Bucket = bucket_name,
                    Key = key_name,
                    UploadId = upload_id,
                    NextPartMarker = next_part_marker
                )
            if 'Parts' in response:
                for part in response['Parts']:
                    parts_list.append(part)
                if response['IsTruncated']:
                    next_part_marker = response['NextPartNumberMarker']
                else:
                    continuation_flag = False
            else:
                continuation_flag = False
        return parts_list
    except ClientError as e:
        logging.error(e)
        return None

if __name__ == '__main__':
    region = 'us-west-2'
    bucket_name = 'BUCKET_NAME'
    key_name = 'KEY_NAME'
    upload_id = 'UPLOAD_ID'
    s3_client = boto3.client('s3', region_name = region)
    parts_list = list_parts(s3_client, bucket_name, key_name, upload_id)
    if parts_list is not None:
        print (f'{key_name} has {len(parts_list)} parts uploaded to {bucket_name}')
    else:
        print (f'There are no multipart uploads with that upload ID for {bucket_name} bucket')
```

------

#### Menggunakan AWS CLI
<a name="directory-bucket-multipart-upload-list-parts-cli"></a>

Contoh berikut menunjukkan cara membuat daftar bagian dari unggahan multipart ke bucket direktori dengan menggunakan file. AWS CLI Untuk menggunakan perintah ganti *user input placeholders* dengan informasi Anda sendiri.

```
aws s3api list-parts --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA"
```

Untuk informasi selengkapnya, lihat [bagian daftar](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-parts.html) di. AWS Command Line Interface

# Menyalin objek dari atau ke ember direktori
<a name="directory-buckets-objects-copy"></a>

Operasi penyalinan membuat salinan objek yang sudah disimpan di Amazon S3. Anda dapat menyalin objek antara bucket direktori dan bucket tujuan umum. Anda juga dapat menyalin objek di dalam bucket dan di bucket dengan tipe yang sama, misalnya, dari bucket direktori ke bucket direktori. 

**catatan**  
Menyalin objek di berbagai objek Wilayah AWS tidak didukung saat bucket sumber atau tujuan berada di Zona AWS Lokal. Bucket sumber dan tujuan harus memiliki induk Wilayah AWS yang sama. Bucket sumber dan tujuan dapat berupa jenis lokasi bucket yang berbeda (Availability Zone atau Local Zone).

Anda dapat membuat salinan objek hingga 5 GB dalam satu operasi atom. Namun, untuk menyalin objek yang lebih besar dari 5 GB, Anda harus menggunakan operasi API unggahan multibagian. Untuk informasi selengkapnya, lihat [Menggunakan unggahan multibagian dengan bucket direktori](s3-express-using-multipart-upload.md).

**Izin**  
 Untuk menyalin objek, Anda harus memiliki izin berikut:
+ Untuk menyalin objek dari satu bucket direktori ke bucket direktori lain, Anda harus memiliki izin `s3express:CreateSession`.
+ Untuk menyalin objek dari bucket direktori ke bucket tujuan umum, Anda harus memiliki izin `s3express:CreateSession` dan izin `s3:PutObject`untuk menulis salinan objek ke bucket tujuan. 
+ Untuk menyalin objek dari bucket tujuan umum ke bucket direktori, Anda harus memiliki `s3express:CreateSession` izin dan `s3:GetObject` izin untuk membaca objek sumber yang sedang disalin. 

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

**Enkripsi**  
Amazon S3 secara otomatis mengenkripsi semua objek baru yang diunggah ke bucket S3. Konfigurasi enkripsi default bucket S3 selalu diaktifkan dan diatur secara minimum ke enkripsi di sisi server dengan kunci terkelola Amazon S3 (SSE-S3). 

Untuk bucket direktori, SSE-S3 dan enkripsi sisi server dengan kunci AWS Key Management Service (AWS KMS) (SSE-KMS) didukung. Jika bucket tujuan adalah bucket direktori, sebaiknya enkripsi default bucket tujuan menggunakan konfigurasi enkripsi yang diinginkan dan Anda tidak mengganti enkripsi default bucket. Kemudian, objek baru secara otomatis dienkripsi dengan pengaturan enkripsi yang diinginkan. Selain itu, Kunci Bucket S3 tidak didukung, saat Anda menyalin objek terenkripsi SSE-KMS dari bucket tujuan umum ke bucket direktori, dari bucket direktori ke bucket tujuan umum, atau di antara bucket direktori, hingga. [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) Dalam hal ini, Amazon S3 melakukan panggilan ke AWS KMS setiap kali permintaan salinan dibuat untuk objek yang dienkripsi KMS. Untuk informasi selengkapnya tentang perilaku pengesampingan enkripsi dalam bucket direktori, lihat [Menentukan enkripsi sisi server dengan unggahan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html) objek baru. AWS KMS 

Untuk bucket tujuan umum, Anda dapat menggunakan SSE-S3 (default), enkripsi sisi server dengan () kunci (SSE-KMS), enkripsi sisi server dua lapis dengan AWS Key Management Service kunci (DSSE-KMS), atau enkripsi sisi server dengan AWS KMS kunci yang disediakan pelanggan (SSE-C).AWS KMS

Jika Anda membuat permintaan salinan yang menetapkan untuk menggunakan DSSE-KMS atau SSE-C untuk bucket direktori (baik bucket sumber atau tujuan), respons akan menampilkan kesalahan.

**Tag**  
Bucket direktori tidak mendukung tanda. Jika Anda menyalin objek yang memiliki tag dari bucket tujuan umum ke bucket direktori, Anda akan menerima `501 (Not Implemented)` respons HTTP. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) dalam *Referensi API Amazon Simple Storage Service*.

**ETags**  
Tag entitas (ETags) untuk S3 Express One Zone adalah string alfanumerik acak dan bukan checksum. MD5 Untuk membantu memastikan integritas objek, gunakan checksum tambahan.

**Checksum tambahan**  
S3 Express One Zone menawarkan kepada Anda opsi untuk memilih algoritma checksum yang digunakan untuk memvalidasi data Anda selama mengunggah atau mengunduh. Anda dapat memilih salah satu algoritma pemeriksaan integritas data Secure Hash Algorithms (SHA) atau Cyclic Redundancy Check (CRC) berikut:, C, SHA-1, dan SHA-256. CRC32 CRC32 MD5checksum berbasis tidak didukung dengan kelas penyimpanan S3 Express One Zone. 

Untuk informasi selengkapnya, lihat [Praktik terbaik checksum tambahan S3](s3-express-optimizing-performance.md#s3-express-optimizing-performance-checksums).

**Fitur yang didukung**  
Untuk informasi selengkapnya tentang fitur Amazon S3 mana yang didukung untuk S3 Express One Zone, lihat. [Perbedaan untuk ember direktori](s3-express-differences.md) 

## Menggunakan konsol S3 (salin ke bucket direktori)
<a name="directory-bucket-copy-console"></a>

**catatan**  
Batasan dan batasan saat Anda menyalin objek ke bucket direktori dengan konsol adalah sebagai berikut:  
`Copy`Tindakan ini berlaku untuk semua objek dalam folder yang ditentukan (awalan). Objek yang ditambahkan ke folder ini saat tindakan sedang berlangsung mungkin terpengaruh.
Objek yang dienkripsi dengan kunci enkripsi yang disediakan pelanggan (SSE-C) tidak dapat disalin dengan menggunakan konsol S3. Untuk menyalin objek yang dienkripsi dengan SSE-C, gunakan, AWS SDK AWS CLI, atau Amazon S3 REST API.
Objek yang disalin tidak akan mempertahankan pengaturan Object Lock dari objek asli.
Jika bucket tempat Anda menyalin objek menggunakan pengaturan yang diberlakukan pemilik bucket untuk Kepemilikan Objek S3, objek tidak ACLs akan disalin ke tujuan yang ditentukan.
Jika Anda ingin menyalin objek ke bucket yang menggunakan setelan diberlakukan pemilik bucket untuk Kepemilikan Objek S3, pastikan bucket sumber juga menggunakan setelan yang diberlakukan pemilik bucket, atau hapus semua hibah ACL objek ke akun dan grup lain. AWS 
Objek yang disalin dari bucket tujuan umum ke bucket direktori tidak akan menyimpan tag objek ACLs, atau nilai Etag. Nilai checksum dapat disalin, tetapi tidak setara dengan Etag. Nilai checksum dapat berubah dibandingkan dengan saat ditambahkan.
 Semua objek yang disalin ke bucket direktori akan dengan pengaturan yang diberlakukan pemilik bucket untuk Kepemilikan Objek S3.

**Untuk menyalin objek dari bucket tujuan umum atau bucket direktori ke bucket direktori**

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, jenis bucket yang ingin Anda salin objek:
   + Untuk menyalin dari ember tujuan umum, pilih tab **Bucket tujuan umum**.
   + Untuk menyalin dari bucket direktori, pilih tab **Directory buckets**.

1. Pilih bucket tujuan umum atau bucket direktori yang berisi objek yang ingin Anda salin.

1. Pilih tab **Objek**. Pada halaman **Objek**, pilih kotak centang di sebelah kiri nama objek yang ingin Anda salin.

1. Pada menu **Tindakan**, pilih **Salin**.

   Halaman **Salin** muncul.

1. Di bawah **Tujuan**, pilih **ember Direktori** untuk jenis tujuan Anda. Untuk menentukan jalur tujuan, pilih **Browse S3**, navigasikan ke tujuan, lalu pilih tombol opsi di sebelah kiri tujuan. Pilih **Pilih tujuan** di sudut kanan bawah. 

   Atau, masukkan jalur tujuan. 

1. Di bawah **Pengaturan salinan tambahan**, pilih apakah Anda ingin **Menyalin setelan sumber**, **Jangan tentukan pengaturan**, atau **Tentukan pengaturan**. **Pengaturan sumber salin** adalah opsi default. Jika Anda hanya ingin menyalin objek tanpa atribut pengaturan sumber, pilih **Jangan tentukan pengaturan**. Pilih **Tentukan pengaturan** untuk menentukan pengaturan enkripsi sisi server, checksum, dan metadata.

1. Pilih **Salin** di sudut kanan bawah. Amazon S3 menyalin objek Anda ke tujuan.

## Menggunakan konsol S3 (salin ke bucket tujuan umum)
<a name="directory-bucket-copy-console"></a>

**catatan**  
Batasan dan batasan saat Anda menyalin objek ke bucket tujuan umum dengan konsol adalah sebagai berikut:  
`Copy`Tindakan ini berlaku untuk semua objek dalam folder yang ditentukan (awalan). Objek yang ditambahkan ke folder ini saat tindakan sedang berlangsung mungkin terpengaruh.
Objek yang dienkripsi dengan kunci enkripsi yang disediakan pelanggan (SSE-C) tidak dapat disalin dengan menggunakan konsol S3. Untuk menyalin objek yang dienkripsi dengan SSE-C, gunakan, AWS SDK AWS CLI, atau Amazon S3 REST API.
Objek yang disalin tidak akan mempertahankan pengaturan Object Lock dari objek asli.
Jika bucket tempat Anda menyalin objek menggunakan pengaturan yang diberlakukan pemilik bucket untuk Kepemilikan Objek S3, objek tidak ACLs akan disalin ke tujuan yang ditentukan.
Jika Anda ingin menyalin objek ke bucket yang menggunakan setelan diberlakukan pemilik bucket untuk Kepemilikan Objek S3, pastikan bucket sumber juga menggunakan setelan yang diberlakukan pemilik bucket, atau hapus semua hibah ACL objek ke akun dan grup lain. AWS 

**Untuk menyalin objek dari bucket direktori ke bucket tujuan umum**

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. Pilih tab **Ember direktori**.

1. Pilih bucket direktori yang berisi objek yang ingin Anda salin.

1. Pilih tab **Objek**. Pada halaman **Objek**, pilih kotak centang di sebelah kiri nama objek yang ingin Anda salin.

1. Pada menu **Tindakan**, pilih **Salin**.

    

1. Di bawah **Tujuan**, pilih **Bucket tujuan umum** untuk jenis tujuan Anda. Untuk menentukan jalur tujuan, pilih **Browse S3**, navigasikan ke tujuan, dan pilih tombol opsi di sebelah kiri tujuan. Pilih **Pilih tujuan** di sudut kanan bawah. 

   Atau, masukkan jalur tujuan. 

1. Di bawah **Pengaturan salinan tambahan**, pilih apakah Anda ingin **Menyalin setelan sumber**, **Jangan tentukan pengaturan**, atau **Tentukan pengaturan**. **Pengaturan sumber salin** adalah opsi default. Jika Anda hanya ingin menyalin objek tanpa atribut pengaturan sumber, pilih **Jangan tentukan pengaturan**. Pilih **Tentukan pengaturan** untuk menentukan pengaturan untuk kelas penyimpanan, tag objek ACLs, metadata, enkripsi sisi server, dan checksum tambahan.

1. Pilih **Salin** di sudut kanan bawah. Amazon S3 menyalin objek Anda ke tujuan.

## Menggunakan AWS SDKs
<a name="directory-bucket-copy-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  

```
 public static void copyBucketObject (S3Client s3, String sourceBucket, String objectKey, String targetBucket) {
      CopyObjectRequest copyReq = CopyObjectRequest.builder()
          .sourceBucket(sourceBucket)
          .sourceKey(objectKey)
          .destinationBucket(targetBucket)
          .destinationKey(objectKey)
          .build();
       String temp = "";
                                             
       try {
           CopyObjectResponse copyRes = s3.copyObject(copyReq);
           System.out.println("Successfully copied " + objectKey +" from bucket " + sourceBucket +" into bucket "+targetBucket);
       }
       
       catch (S3Exception e) {
           System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);
       }
 }
```

------

## Menggunakan AWS CLI
<a name="directory-copy-object-cli"></a>

`copy-object`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk menyalin objek dari satu bucket ke bucket lain. Anda dapat menyalin objek di antara jenis bucket. Untuk menjalankan perintah ini, ganti placeholder input pengguna dengan informasi Anda sendiri.

```
aws s3api copy-object --copy-source SOURCE_BUCKET/SOURCE_KEY_NAME --key TARGET_KEY_NAME --bucket TARGET_BUCKET_NAME
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html) dalam *AWS CLI Referensi Perintah*.

# Menghapus objek dari ember direktori
<a name="directory-bucket-delete-object"></a>

Anda dapat menghapus objek dari bucket direktori Amazon S3 dengan menggunakan konsol Amazon S3 AWS Command Line Interface ,AWS CLI(), atau. AWS SDKs Untuk informasi selengkapnya, lihat [Bekerja dengan bucket direktori](directory-buckets-overview.md) dan [S3 Express One Zone](directory-bucket-high-performance.md#s3-express-one-zone).

**Awas**  
Menghapus objek tidak dapat dibatalkan.
Tindakan ini menghapus semua objek yang telah ditentukan. Saat menghapus folder, tunggu hingga tindakan penghapusannya selesai sebelum menambahkan objek baru ke folder tersebut. Jika tidak, objek baru mungkin juga terhapus.

**catatan**  
Saat Anda menghapus beberapa objek secara terprogram dari bucket direktori, perhatikan hal berikut:  
Kunci objek dalam permintaan `DeleteObjects` harus berisi setidaknya satu karakter spasi non-putih. String dari semua karakter spasi putih tidak didukung.
Kunci objek dalam `DeleteObjects` permintaan tidak dapat berisi karakter kontrol Unicode, kecuali untuk baris baru (`\n`), tab (`\t`), dan carriage return (`\r`).

## Menggunakan konsol S3
<a name="delete-object-directory-bucket-console"></a>

**Untuk menghapus 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 panel navigasi kiri, pilih **Bucket direktori**.

1. Pilih bucket direktori yang berisi objek yang ingin Anda hapus.

1. Pilih tab **Objek**. Dalam daftar **Objek**, pilih kotak centang di sebelah kiri objek atau objek yang ingin Anda hapus.

1. Pilih **Hapus**.

   

1. Pada halaman **Hapus objek**, masukkan **permanently delete** di kotak teks.

1. Pilih **Hapus objek**.

## Menggunakan AWS SDKs
<a name="delete-object-directory-bucket-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  
Contoh berikut menghapus objek dalam bucket direktori dengan menggunakan file. AWS SDK for Java 2.x  

```
static void deleteObject(S3Client s3Client, String bucketName, String objectKey) {


        
        try {
            
            DeleteObjectRequest del = DeleteObjectRequest.builder()
                    .bucket(bucketName)
                    .key(objectKey)
                    .build();

            s3Client.deleteObject(del);
            
            System.out.println("Object " + objectKey + " has been deleted");
            
            
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        
    }
```

------
#### [ SDK for Python ]

**Example**  
Contoh berikut menghapus objek dalam bucket direktori dengan menggunakan file. AWS SDK untuk Python (Boto3)  

```
import logging
import boto3
from botocore.exceptions import ClientError

def delete_objects(s3_client, bucket_name, objects):
    '''
    Delete a list of objects in a directory bucket

    :param s3_client: boto3 S3 client
    :param bucket_name: Bucket that contains objects to be deleted; for example, 'doc-example-bucket--usw2-az1--x-s3'
    :param objects: List of dictionaries that specify the key names to delete
    :return: Response output, else False
    '''

    try:
        response = s3_client.delete_objects(
            Bucket = bucket_name,
            Delete = {
                'Objects': objects
            } 
        )
        return response
    except ClientError as e:
        logging.error(e)
        return False
    

if __name__ == '__main__':
    region = 'us-west-2'
    bucket_name = 'BUCKET_NAME'
    objects = [
        {
            'Key': '0.txt'
        },
        {
            'Key': '1.txt'
        },
        {
            'Key': '2.txt'
        },
        {
            'Key': '3.txt'
        },
        {
            'Key': '4.txt'
        }
    ]
    
    s3_client = boto3.client('s3', region_name = region)
    results = delete_objects(s3_client, bucket_name, objects)
    if results is not None:
        if 'Deleted' in results:
            print (f'Deleted {len(results["Deleted"])} objects from {bucket_name}')
        if 'Errors' in results:
            print (f'Failed to delete {len(results["Errors"])} objects from {bucket_name}')
```

------

## Menggunakan AWS CLI
<a name="directory-download-object-cli"></a>

`delete-object`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk menghapus objek dari bucket direktori. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

```
aws s3api delete-object --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME 
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) dalam *AWS CLI Referensi Perintah*.

`delete-objects`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk menghapus objek dari bucket direktori. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

`delete.json`File tersebut adalah sebagai berikut: 

```
{
    "Objects": [
        {
            "Key": "0.txt"
        },
        {
            "Key": "1.txt"
        },
        {
            "Key": "2.txt"
        },
        {
            "Key": "3.txt"
        }
    ]
}
```

`delete-objects`Contoh perintah adalah sebagai berikut:

```
aws s3api delete-objects --bucket bucket-base-name--zone-id--x-s3 --delete file://delete.json 
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) dalam *AWS CLI Referensi Perintah*.

# Mengunduh objek dari ember direktori
<a name="directory-buckets-objects-GetExamples"></a>

 Contoh kode berikut menunjukkan cara membaca data dari (mengunduh) objek di bucket direktori Amazon S3 dengan menggunakan operasi `GetObject` API. 

## Menggunakan AWS SDKs
<a name="directory-bucket-copy-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  
Contoh kode berikut menunjukkan cara membaca data dari objek dalam ember direktori dengan menggunakan AWS SDK for Java 2.x.   

```
public static void getObject(S3Client s3Client, String bucketName, String objectKey) {
     try {
         GetObjectRequest objectRequest = GetObjectRequest
            .builder()
            .key(objectKey)
            .bucket(bucketName)
            .build();
            
         ResponseBytes GetObjectResponse objectBytes = s3Client.getObjectAsBytes(objectRequest);
         byte[] data = objectBytes.asByteArray();
         
         //Print object contents to console
         String s = new String(data, StandardCharsets.UTF_8);
         System.out.println(s);
    }
    
    catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
}
```

------
#### [ SDK for Python ]

**Example**  
Contoh kode berikut menunjukkan cara membaca data dari objek dalam ember direktori dengan menggunakan AWS SDK untuk Python (Boto3).   

```
import boto3
from botocore.exceptions import ClientError
from botocore.response import StreamingBody

def get_object(s3_client: boto3.client, bucket_name: str, key_name: str) -> StreamingBody:
    """
    Gets the object.
    :param s3_client:
    :param bucket_name: The bucket that contains the object. 
    :param key_name: The key of the object to be downloaded.
    :return: The object data in bytes.
    """
    try:
        response = s3_client.get_object(Bucket=bucket_name, Key=key_name)
        body = response['Body'].read()
        print(f"Got object '{key_name}' from bucket '{bucket_name}'.")
    except ClientError:
        print(f"Couldn't get object '{key_name}' from bucket '{bucket_name}'.")
        raise
    else:
        return body
        
def main():
    s3_client = boto3.client('s3')
    resp = get_object(s3_client, 'doc-example-bucket--use1-az4--x-s3', 'sample.txt')
    print(resp)
    
if __name__ == "__main__":
     main()
```

------

## Menggunakan AWS CLI
<a name="directory-download-object-cli"></a>

Contoh perintah `get-object` berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk mengunduh objek dari Amazon S3. Perintah ini mendapatkan objek `KEY_NAME` dari bucket direktori`bucket-base-name--zone-id--x-s3`. Objek akan diunduh ke file yang bernama `LOCAL_FILE_NAME`. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

```
aws s3api get-object --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME LOCAL_FILE_NAME
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object.html) dalam *AWS CLI Referensi Perintah*.

# Menghasilkan keranjang direktori objek URLs yang telah ditentukan sebelumnya untuk berbagi objek
<a name="directory-buckets-objects-generate-presigned-url-Examples"></a>

 Contoh kode berikut menunjukkan cara membuat presigned URLs untuk berbagi objek dari bucket direktori Amazon S3.

## Menggunakan AWS CLI
<a name="directory-download-object-cli"></a>

Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk menghasilkan URL presigned untuk objek dari Amazon S3. Perintah ini menghasilkan URL presigned untuk objek `KEY_NAME` dari bucket `bucket-base-name--zone-id--x-s3` direktori. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

```
aws s3 presign s3://bucket-base-name--zone-id--x-s3/KEY_NAME --expires-in 7200
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html) dalam *AWS CLI Referensi Perintah*.

# Mengambil metadata objek dari bucket direktori
<a name="directory-buckets-objects-HeadObjectExamples"></a>

Contoh AWS SDK dan AWS CLI berikut menunjukkan cara menggunakan `HeadObject` operasi API `GetObjectAttributes` dan untuk mengambil metadata dari objek di bucket direktori Amazon S3 tanpa mengembalikan objek itu sendiri. 

## Menggunakan AWS SDKs
<a name="directory-bucket-copy-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  

```
public static void headObject(S3Client s3Client, String bucketName, String objectKey) {
     try {
         HeadObjectRequest headObjectRequest = HeadObjectRequest
                 .builder()
                 .bucket(bucketName)
                 .key(objectKey)
                 .build();
         HeadObjectResponse response = s3Client.headObject(headObjectRequest);
         System.out.format("Amazon S3 object: \"%s\" found in bucket: \"%s\" with ETag: \"%s\"", objectKey, bucketName, response.eTag());
     }
     catch (S3Exception e) {
         System.err.println(e.awsErrorDetails().errorMessage());
```

------

## Menggunakan AWS CLI
<a name="directory-head-object-cli"></a>

`head-object`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk mengambil metadata dari objek. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

```
aws s3api head-object --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/head-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/head-object.html) dalam *AWS CLI Referensi Perintah*.

`get-object-attributes`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk mengambil metadata dari objek. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

```
aws s3api get-object-attributes --bucket bucket-base-name--zone-id--x-s3 --key KEY_NAME --object-attributes "StorageClass" "ETag" "ObjectSize"
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object-attributes.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object-attributes.html) dalam *AWS CLI Referensi Perintah*.

# Daftar objek dari ember direktori
<a name="directory-buckets-objects-listobjectsExamples"></a>

 Contoh kode berikut menunjukkan cara mencantumkan objek dalam bucket direktori Amazon S3 dengan menggunakan operasi `ListObjectsV2` API. 

## Menggunakan AWS CLI
<a name="directory-download-object-cli"></a>

`list-objects-v2`Contoh perintah berikut menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk daftar objek dari Amazon S3. Perintah ini mencantumkan objek dari bucket direktori`bucket-base-name--zone-id--x-s3`. Untuk menjalankan perintah ini, ganti `user input placeholders` dengan informasi Anda sendiri.

```
aws s3api list-objects-v2 --bucket bucket-base-name--zone-id--x-s3
```

Untuk informasi selengkapnya, lihat [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-objects-v2.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-objects-v2.html) dalam *AWS CLI Referensi Perintah*.