

 **Halaman ini hanya untuk pelanggan lama layanan Amazon Glacier menggunakan Vaults dan REST API asli dari 2012.**

Jika Anda mencari solusi penyimpanan arsip, sebaiknya gunakan kelas penyimpanan Amazon Glacier di Amazon S3, S3 Glacier Instant Retrieval, S3 Glacier Flexible Retrieval, dan S3 Glacier Deep Archive. Untuk mempelajari lebih lanjut tentang opsi penyimpanan ini, lihat kelas penyimpanan [Amazon Glacier](https://aws.amazon.com/s3/storage-classes/glacier/).

Amazon Glacier (layanan berbasis brankas mandiri asli) tidak lagi menerima pelanggan baru. Amazon Glacier adalah layanan mandiri dengan miliknya APIs sendiri yang menyimpan data di brankas dan berbeda dari Amazon S3 dan kelas penyimpanan Amazon S3 Glacier. Data Anda yang ada akan tetap aman dan dapat diakses di Amazon Glacier tanpa batas waktu. Tidak diperlukan migrasi. Untuk penyimpanan arsip jangka panjang berbiaya rendah, AWS rekomendasikan kelas [penyimpanan Amazon S3 Glacier](https://aws.amazon.com/s3/storage-classes/glacier/), yang memberikan pengalaman pelanggan yang unggul dengan APIs berbasis ember S3, ketersediaan penuh, biaya lebih rendah, Wilayah AWS dan integrasi layanan. AWS Jika Anda ingin meningkatkan kemampuan, pertimbangkan untuk bermigrasi ke kelas penyimpanan Amazon S3 Glacier dengan menggunakan [Panduan Solusi AWS kami untuk mentransfer data dari kubah Amazon Glacier ke kelas penyimpanan Amazon S3 Glacier](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/).

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

# Langkah 3: Unggah Arsip ke Vault di Amazon Glacier
<a name="getting-started-upload-archive"></a>

Pada langkah ini, Anda akan mengunggah arsip sampel ke vault yang Anda buat pada langkah sebelumnya (lihat). [Langkah 2: Buat Vault di Amazon Glacier](getting-started-create-vault.md) Bergantung pada platform pengembangan yang Anda gunakan, pilih salah satu tautan di akhir bagian ini.

**penting**  
Setiap operasi arsip, seperti mengunggah, mengunduh, atau menghapus, mengharuskan Anda untuk menggunakan ( AWS Command Line Interface CLI) atau menulis kode. Tidak ada dukungan konsol untuk operasi arsip. Misalnya, untuk mengunggah data, seperti foto, video, dan dokumen lainnya, Anda harus menggunakan AWS CLI atau menulis kode untuk membuat permintaan, dengan menggunakan REST API secara langsung atau dengan menggunakan AWS SDKs.   
Untuk menginstal AWS CLI, lihat [AWS Command Line Interface](https://aws.amazon.com/cli/). Untuk informasi selengkapnya tentang penggunaan Amazon Glacier dengan, [AWS CLI lihat Referensi AWS CLI untuk Amazon](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html) Glacier. Untuk contoh penggunaan untuk mengunggah arsip AWS CLI ke Amazon Glacier, lihat Menggunakan Amazon Glacier [with](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-glacier.html) the. AWS Command Line Interface

Arsip adalah objek apa pun, seperti foto, video, atau dokumen yang Anda simpan di vault. Arsip adalah unit dasar penyimpanan di Amazon Glacier. Anda dapat mengunggah arsip dalam satu permintaan. Untuk arsip besar, Amazon Glacier menyediakan operasi API unggahan multibagian yang memungkinkan Anda mengunggah arsip dalam beberapa bagian. 

Pada bagian memulai ini, Anda mengunggah arsip sampel dalam satu permintaan. Untuk latihan ini, Anda menentukan file yang berukuran lebih kecil. Untuk file yang lebih besar, unggahan multipart cocok untuk digunakan. Untuk informasi selengkapnya, lihat [Mengunggah Arsip Besar dalam Beberapa Bagian (Unggahan Multipart)](uploading-archive-mpu.md).

**Topics**
+ [Unggah Arsip ke Vault di Amazon Glacier dengan Menggunakan AWS SDK untuk Java](getting-started-upload-archive-java.md)
+ [Unggah Arsip ke Vault di Amazon Glacier dengan Menggunakan AWS SDK untuk .NET](getting-started-upload-archive-dotnet.md)

# Unggah Arsip ke Vault di Amazon Glacier dengan Menggunakan AWS SDK untuk Java
<a name="getting-started-upload-archive-java"></a>

Contoh kode Java berikut menggunakan API tingkat tinggi AWS SDK untuk Java untuk mengunggah arsip sampel ke vault. Dalam contoh kode, perhatikan hal berikut: 
+ Contoh membuat instans dari kelas `AmazonGlacierClient`. 
+ Contoh menggunakan operasi `upload` API `ArchiveTransferManager` kelas dari API tingkat tinggi. AWS SDK untuk Java
+ Contohnya menggunakan Wilayah Barat AS (Oregon) (`us-west-2`).

Untuk step-by-step petunjuk tentang cara menjalankan contoh ini, lihat[Menjalankan Contoh Java untuk Amazon Glacier Menggunakan Eclipse](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java). Anda harus memperbarui kode seperti yang ditunjukkan dengan nama file arsip yang ingin Anda unggah.

**catatan**  
Amazon Glacier menyimpan inventaris semua arsip di brankas Anda. Ketika Anda mengunggah arsip dalam contoh berikut, arsip tidak akan muncul di vault di konsol manajemen hingga inventaris vault telah diperbarui. Pembaruan ini biasanya terjadi sekali sehari. 

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/glacier#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.glacier.GlacierClient;
import software.amazon.awssdk.services.glacier.model.UploadArchiveRequest;
import software.amazon.awssdk.services.glacier.model.UploadArchiveResponse;
import software.amazon.awssdk.services.glacier.model.GlacierException;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class UploadArchive {

    static final int ONE_MB = 1024 * 1024;

    public static void main(String[] args) {
        final String usage = """

                Usage:   <strPath> <vaultName>\s

                Where:
                   strPath - The path to the archive to upload (for example, C:\\AWS\\test.pdf).
                   vaultName - The name of the vault.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String strPath = args[0];
        String vaultName = args[1];
        File myFile = new File(strPath);
        Path path = Paths.get(strPath);
        GlacierClient glacier = GlacierClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String archiveId = uploadContent(glacier, path, vaultName, myFile);
        System.out.println("The ID of the archived item is " + archiveId);
        glacier.close();
    }

    public static String uploadContent(GlacierClient glacier, Path path, String vaultName, File myFile) {
        // Get an SHA-256 tree hash value.
        String checkVal = computeSHA256(myFile);
        try {
            UploadArchiveRequest uploadRequest = UploadArchiveRequest.builder()
                    .vaultName(vaultName)
                    .checksum(checkVal)
                    .build();

            UploadArchiveResponse res = glacier.uploadArchive(uploadRequest, path);
            return res.archiveId();

        } catch (GlacierException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }

    private static String computeSHA256(File inputFile) {
        try {
            byte[] treeHash = computeSHA256TreeHash(inputFile);
            System.out.printf("SHA-256 tree hash = %s\n", toHex(treeHash));
            return toHex(treeHash);

        } catch (IOException ioe) {
            System.err.format("Exception when reading from file %s: %s", inputFile, ioe.getMessage());
            System.exit(-1);

        } catch (NoSuchAlgorithmException nsae) {
            System.err.format("Cannot locate MessageDigest algorithm for SHA-256: %s", nsae.getMessage());
            System.exit(-1);
        }
        return "";
    }

    public static byte[] computeSHA256TreeHash(File inputFile) throws IOException,
            NoSuchAlgorithmException {

        byte[][] chunkSHA256Hashes = getChunkSHA256Hashes(inputFile);
        return computeSHA256TreeHash(chunkSHA256Hashes);
    }

    /**
     * Computes an SHA256 checksum for each 1 MB chunk of the input file. This
     * includes the checksum for the last chunk, even if it's smaller than 1 MB.
     */
    public static byte[][] getChunkSHA256Hashes(File file) throws IOException,
            NoSuchAlgorithmException {

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        long numChunks = file.length() / ONE_MB;
        if (file.length() % ONE_MB > 0) {
            numChunks++;
        }

        if (numChunks == 0) {
            return new byte[][] { md.digest() };
        }

        byte[][] chunkSHA256Hashes = new byte[(int) numChunks][];
        FileInputStream fileStream = null;

        try {
            fileStream = new FileInputStream(file);
            byte[] buff = new byte[ONE_MB];

            int bytesRead;
            int idx = 0;

            while ((bytesRead = fileStream.read(buff, 0, ONE_MB)) > 0) {
                md.reset();
                md.update(buff, 0, bytesRead);
                chunkSHA256Hashes[idx++] = md.digest();
            }

            return chunkSHA256Hashes;

        } finally {
            if (fileStream != null) {
                try {
                    fileStream.close();
                } catch (IOException ioe) {
                    System.err.printf("Exception while closing %s.\n %s", file.getName(),
                            ioe.getMessage());
                }
            }
        }
    }

    /**
     * Computes the SHA-256 tree hash for the passed array of 1 MB chunk
     * checksums.
     */
    public static byte[] computeSHA256TreeHash(byte[][] chunkSHA256Hashes)
            throws NoSuchAlgorithmException {

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[][] prevLvlHashes = chunkSHA256Hashes;
        while (prevLvlHashes.length > 1) {
            int len = prevLvlHashes.length / 2;
            if (prevLvlHashes.length % 2 != 0) {
                len++;
            }

            byte[][] currLvlHashes = new byte[len][];
            int j = 0;
            for (int i = 0; i < prevLvlHashes.length; i = i + 2, j++) {

                // If there are at least two elements remaining.
                if (prevLvlHashes.length - i > 1) {

                    // Calculate a digest of the concatenated nodes.
                    md.reset();
                    md.update(prevLvlHashes[i]);
                    md.update(prevLvlHashes[i + 1]);
                    currLvlHashes[j] = md.digest();

                } else { // Take care of the remaining odd chunk
                    currLvlHashes[j] = prevLvlHashes[i];
                }
            }

            prevLvlHashes = currLvlHashes;
        }

        return prevLvlHashes[0];
    }

    /**
     * Returns the hexadecimal representation of the input byte array
     */
    public static String toHex(byte[] data) {
        StringBuilder sb = new StringBuilder(data.length * 2);
        for (byte datum : data) {
            String hex = Integer.toHexString(datum & 0xFF);

            if (hex.length() == 1) {
                // Append leading zero.
                sb.append("0");
            }
            sb.append(hex);
        }
        return sb.toString().toLowerCase();
    }
}
```
+  Untuk detail API, lihat [UploadArchive](https://docs.aws.amazon.com/goto/SdkForJavaV2/glacier-2012-06-01/UploadArchive)di *Referensi AWS SDK for Java 2.x API*. 

# Unggah Arsip ke Vault di Amazon Glacier dengan Menggunakan AWS SDK untuk .NET
<a name="getting-started-upload-archive-dotnet"></a>

Contoh kode C\$1 berikut menggunakan API tingkat tinggi AWS SDK untuk .NET untuk mengunggah arsip sampel ke vault. Dalam contoh kode, perhatikan hal berikut:

 
+ Contoh ini membuat instance `ArchiveTransferManager` kelas untuk titik akhir Wilayah Amazon Glacier yang ditentukan.
+ Contoh kode menggunakan Wilayah AS Barat (Oregon) (`us-west-2`). 
+ Contoh menggunakan operasi `Upload` API `ArchiveTransferManager` kelas untuk mengunggah arsip Anda. Untuk arsip kecil, operasi ini mengunggah arsip langsung ke Amazon Glacier. Untuk arsip yang lebih besar, operasi ini menggunakan operasi API unggahan multibagian di Amazon Glacier untuk membagi unggahan menjadi beberapa bagian untuk pemulihan kesalahan yang lebih baik, jika ada kesalahan yang ditemui saat streaming data ke Amazon Glacier.

Untuk step-by-step petunjuk tentang cara menjalankan contoh berikut, lihat[Menjalankan Contoh Kode](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet). Anda harus memperbarui kode seperti yang ditunjukkan dengan nama brankas Anda dan nama file arsip yang akan diunggah. 

**catatan**  
Amazon Glacier menyimpan inventaris semua arsip di brankas Anda. Saat Anda mengunggah arsip dalam contoh berikut, arsip tidak akan muncul di vault di konsol manajemen hingga inventaris vault diperbarui. Pembaruan ini biasanya terjadi sekali sehari. 

**Example — Mengunggah Arsip dengan Menggunakan API Tingkat Tinggi AWS SDK untuk .NET**  <a name="GS_ExampleUploadArchiveDotNet"></a>

```
using System;
using Amazon.Glacier;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.ca.docsamples
{
    class ArchiveUploadHighLevel_GettingStarted
    {
        static string vaultName = "examplevault";
        static string archiveToUpload = "*** Provide file name (with full path) to upload ***";

        public static void Main(string[] args)
        {
            try
            {
                var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);
                // Upload an archive.
                string archiveId = manager.Upload(vaultName, "getting started archive test", archiveToUpload).ArchiveId;
                Console.WriteLine("Copy and save the following Archive ID for the next step."); 
                Console.WriteLine("Archive ID: {0}", archiveId);
                Console.WriteLine("To continue, press Enter");
                Console.ReadKey();
            }
            catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }
            catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
            catch (Exception e) { Console.WriteLine(e.Message); }
            Console.WriteLine("To continue, press Enter");
            Console.ReadKey();
        }
    }
}
```