

 **このページは、ボールトと 2012 年リリース当時の REST API を使用する、Amazon Glacier サービスの既存のお客様のみを対象としています。**

アーカイブストレージソリューションをお探しの場合は、Amazon S3 の Amazon Glacier ストレージクラス (S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive) を使用することをお勧めします。これらのストレージオプションの詳細については、「[Amazon Glacier ストレージクラス](https://aws.amazon.com/s3/storage-classes/glacier/)」を参照してください。

Amazon Glacier (元のスタンドアロンボールトベースのサービス) は、新規顧客を受け入れなくなりました。Amazon Glacier は、ボールトにデータを保存する独自の API を備えたスタンドアロンサービスであり、Amazon S3 および Amazon S3 Glacier ストレージクラスとは異なります。既存のデータは Amazon Glacier で無期限に安全性が確保され、引き続きアクセス可能です。移行は必要ありません。低コストの長期アーカイブストレージの場合、 は [Amazon S3 Glacier ストレージクラス](https://aws.amazon.com/s3/storage-classes/glacier/) AWS を推奨します。これにより、S3 バケットベースの APIs、低コスト、 AWS サービス統合で優れたカスタマーエクスペリエンスを実現できます。 AWS リージョン 拡張機能が必要な場合は、[Amazon Glacier ボールトから Amazon S3 Glacier ストレージクラスにデータを転送するためのAWS ソリューションガイダンス](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/)を使用して、Amazon S3 Glacier ストレージクラスへの移行を検討してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# を使用した大きなアーカイブのアップロード AWS SDK for .NET
<a name="uploading-an-archive-mpu-using-dotnet"></a>

両方[高レベル API と低レベル API](using-aws-sdk.md).NET 用の Amazon SDK で提供されているには、大きなアーカイブを部分的にアップロードするためのメソッドがあります (「」[Amazon Glacier へのアーカイブのアップロード](uploading-an-archive.md))。

 
+ 高レベル API には、どのサイズのアーカイブのアップロードにも使用できるメソッドが用意されています。このメソッドは、アップロードするファイルに応じて、単一オペレーションでアーカイブをアップロードするか、Amazon Glacier (Amazon Glacier) のマルチパートアップロードのサポートを使用してパート単位でアーカイブをアップロードします。
+ 低レベル API は、基本となる REST 実装にほぼ対応しています。つまり、1 回のオペレーションで小さいアーカイブをアップロードするメソッド、および大きなアーカイブに対してマルチパートアップロードをサポートするメソッドのグループが用意されています。このセクションでは、低レベル API を使用してパート単位で大きなアーカイブをアップロードする方法について説明します。

高レベル API と低レベル API の詳細については、「[Amazon Glacier でのAWS SDK for .NET の使用](using-aws-sdk-for-dot-net.md)」を参照してください。

**Topics**
+ [の高レベル API を使用したパート単位での大規模なアーカイブのアップロード AWS SDK for .NET](#uploading-an-archive-in-parts-highlevel-using-dotnet)
+ [の低レベル API を使用したパート単位での大きなアーカイブのアップロード AWS SDK for .NET](#uploading-an-archive-in-parts-lowlevel-using-dotnet)

## の高レベル API を使用したパート単位での大規模なアーカイブのアップロード AWS SDK for .NET
<a name="uploading-an-archive-in-parts-highlevel-using-dotnet"></a>

高レベル API の同じメソッドを使用して、小さいアーカイブまたは大きなアーカイブをアップロードします。高レベル API メソッドでは、アーカイブのサイズに基づいて、アーカイブを 1 回のオペレーションでアップロードするか、Amazon Glacier に用意されているマルチパートアップロード API を使用するかを決定します。詳細については、「[の高レベル API を使用したアーカイブのアップロード AWS SDK for .NET](uploading-an-archive-single-op-using-dotnet.md#uploading-an-archive-single-op-highlevel-using-dotnet)」を参照してください。

## の低レベル API を使用したパート単位での大きなアーカイブのアップロード AWS SDK for .NET
<a name="uploading-an-archive-in-parts-lowlevel-using-dotnet"></a>

アップロードを細かくコントロールするために、低レベル API を使用して、リクエストの設定やレスポンスの処理を行うことができます。以下に、 AWS SDK for .NETを使用してパート単位で大きなアーカイブをアップロードする手順を示します。

 

1. `AmazonGlacierClient` クラスのインスタンス（クライアント）を作成します。

   アーカイブを保存する AWS リージョンを指定する必要があります。このクライアントを使用して実行するすべてのオペレーションは、その AWS リージョンに適用されます。

1. `InitiateMultipartUpload` メソッドを呼び出し、マルチパートアップロードを開始します。

   アーカイブのアップロード先となるボールト名、アーカイブのパートをアップロードするために使用するパートサイズ、およびオプションの説明を指定する必要があります。この情報は、`InitiateMultipartUploadRequest` クラスのインスタンスを作成することによって指定します。Amazon Glacier により、レスポンスとしてアップロード ID が返されます。

1. `UploadMultipartPart` メソッドを呼び出し、パートをアップロードします。

   アップロードするパートごとに、ボールト名、このパートでアップロードされる最終的にアセンブルされたアーカイブ内のバイト範囲、パートデータのチェックサム、およびアップロード ID を指定する必要があります。

1. `CompleteMultipartUpload` メソッドを呼び出し、マルチパートアップロードを完了します。

   アップロード ID、アーカイブ全体のチェックサム、アーカイブのサイズ (アップロードしたすべてのパートを組み合わせたサイズ)、およびボールト名を指定する必要があります。Amazon Glacier は、アップロードされたパートからアーカイブを構築し、アーカイブ ID を返します。

### 例: .Amazon SDK for .NET を使用してパート単位で大きなアーカイブをアップロードする
<a name="upload-archive-mpu-dotnet-example"></a>

次の C\$1 コード例では AWS SDK for .NET 、 を使用してアーカイブをボールト () にアップロードします`examplevault`。この例を実行するための詳しい手順については、「[コード例の実行](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)」を参照してください。ここに示したコードは、アップロードするファイルの名前で更新する必要があります。

**Example**  

```
using System;
using System.Collections.Generic;
using System.IO;
using Amazon.Glacier;
using Amazon.Glacier.Model;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class ArchiveUploadMPU
  {
    static string vaultName       = "examplevault";
    static string archiveToUpload = "*** Provide file name (with full path) to upload ***";
    static long partSize          = 4194304; // 4 MB.

    public static void Main(string[] args)
    {
      AmazonGlacierClient client;
      List<string> partChecksumList = new List<string>();
      try
      {
         using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2)) 
        {
          Console.WriteLine("Uploading an archive.");
          string uploadId  = InitiateMultipartUpload(client);
          partChecksumList = UploadParts(uploadId, client);
          string archiveId = CompleteMPU(uploadId, client, partChecksumList);
          Console.WriteLine("Archive ID: {0}", archiveId);
        }
        Console.WriteLine("Operations successful. 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();
    }

    static string InitiateMultipartUpload(AmazonGlacierClient client)
    {
      InitiateMultipartUploadRequest initiateMPUrequest = new InitiateMultipartUploadRequest()
      {

        VaultName = vaultName,
        PartSize = partSize,
        ArchiveDescription = "Test doc uploaded using MPU."
      };

      InitiateMultipartUploadResponse initiateMPUresponse = client.InitiateMultipartUpload(initiateMPUrequest);

      return initiateMPUresponse.UploadId;
    }

    static List<string> UploadParts(string uploadID, AmazonGlacierClient client)
    {
      List<string> partChecksumList = new List<string>();
      long currentPosition = 0;
      var buffer = new byte[Convert.ToInt32(partSize)];

      long fileLength = new FileInfo(archiveToUpload).Length;
      using (FileStream fileToUpload = new FileStream(archiveToUpload, FileMode.Open, FileAccess.Read))
      {
        while (fileToUpload.Position < fileLength)
        {
          Stream uploadPartStream = GlacierUtils.CreatePartStream(fileToUpload, partSize);
          string checksum = TreeHashGenerator.CalculateTreeHash(uploadPartStream);
          partChecksumList.Add(checksum);
          // Upload part.
          UploadMultipartPartRequest uploadMPUrequest = new UploadMultipartPartRequest()
          {

            VaultName = vaultName,
            Body = uploadPartStream,
            Checksum = checksum,
            UploadId = uploadID
          };
          uploadMPUrequest.SetRange(currentPosition, currentPosition + uploadPartStream.Length - 1);
          client.UploadMultipartPart(uploadMPUrequest);

          currentPosition = currentPosition + uploadPartStream.Length;
        }
      }
      return partChecksumList;
    }

    static string CompleteMPU(string uploadID, AmazonGlacierClient client, List<string> partChecksumList)
    {
      long fileLength = new FileInfo(archiveToUpload).Length;
      CompleteMultipartUploadRequest completeMPUrequest = new CompleteMultipartUploadRequest()
      {
        UploadId = uploadID,
        ArchiveSize = fileLength.ToString(),
        Checksum = TreeHashGenerator.CalculateTreeHash(partChecksumList),
        VaultName = vaultName
      };

      CompleteMultipartUploadResponse completeMPUresponse = client.CompleteMultipartUpload(completeMPUrequest);
      return completeMPUresponse.ArchiveId;
    }
  }
}
```