このページは、2012 年にリリースされた当初のボールトと REST API を使用する、S3 Glacier サービスの既存のお客様を対象としたものです。
アーカイブストレージソリューションをお探しの場合は、Amazon S3 の S3 Glacier ストレージクラス (S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive) を使用することをお勧めします。これらのストレージオプションの詳細については、「Amazon S3 ユーザーガイド」の「S3 Glacier ストレージクラス
AWS SDK for Java を使用して 1 回のオペレーションでアーカイブをアップロードする
両方高レベル API と低レベル APIAmazon SDK for Java で提供されており、アーカイブをアップロードする方法を提供します。
トピック
AWS SDK for Java の高レベル API を使用してアーカイブをアップロードする
高レベル API の ArchiveTransferManager
クラスには、ボールトへのアーカイブのアップロードに使用できる upload
メソッドが用意されています。
注記
upload
メソッドを使用して、小さなアーカイブや大きなアーカイブをアップロードできます。このメソッドでは、アップロードするアーカイブのサイズに応じて、1 回のオペレーションでアップロードするか、マルチパートアップロード API を使用してアーカイブをパート単位でアップロードするかを決定します。
例: AWS SDK for Java の高レベル API を使用してアーカイブをアップロードする
次の Java コード例では、米国西部(オレゴン リージョン (us-west-2
)のボールト (examplevault
) にアーカイブをアップロードします。サポートされているAWSリージョンとエンドポイントのリストについては、「Amazon S3 Glacier へのアクセス」を参照してください。
この例を実行するための詳しい手順については、「Eclipse を使用した Amazon S3 Glacier の Java 実行例」を参照してください。ここに示したコードは、アップロードするボールトの名前とファイルの名前で更新する必要があります。
import java.io.File;
import java.io.IOException;
import java.util.Date;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.transfer.ArchiveTransferManager;
import com.amazonaws.services.glacier.transfer.UploadResult;
public class ArchiveUploadHighLevel {
public static String vaultName = "*** provide vault name ***";
public static String archiveToUpload = "*** provide name of file to upload ***";
public static AmazonGlacierClient client;
public static void main(String[] args) throws IOException {
ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();
client = new AmazonGlacierClient(credentials);
client.setEndpoint("https://glacier.us-west-2.amazonaws.com/");
try {
ArchiveTransferManager atm = new ArchiveTransferManager(client, credentials);
UploadResult result = atm.upload(vaultName, "my archive " + (new Date()), new File(archiveToUpload));
System.out.println("Archive ID: " + result.getArchiveId());
} catch (Exception e)
{
System.err.println(e);
}
}
}
AWS SDK for Java の低レベル API を使用して 1 回のオペレーションでアーカイブをアップロードする
低レベル API には、アーカイブに関するあらゆるオペレーションのメソッドが用意されています。以下では、AWS SDK for Java を使用してアーカイブをアップロードするステップを説明します。
-
AmazonGlacierClient
クラスのインスタンス(クライアント)を作成します。アーカイブのアップロード先となる AWS リージョンを指定する必要があります。このクライアントを使用して実行するすべてのオペレーションは、そのAWSリージョンに適用されます。
-
UploadArchiveRequest
クラスのインスタンスを作成することにより、リクエスト情報を指定します。アップロードするデータのほかにも、ペイロードのチェックサム (SHA-256 木構造ハッシュ)、ボールト名、データのコンテンツの長さ、およびアカウント ID を指定する必要があります。
アカウント ID を指定しなかった場合には、リクエストに署名する際に使用した認証情報に関連付けられているアカウント ID が使用されます。詳細については、「Amazon S3 Glacier でのAWS SDK for Javaの使用」を参照してください。
-
リクエストオブジェクトをパラメータとして指定して、
uploadArchive
メソッドを実行します。レスポンスでは、Amazon S3 Glacier (S3 Glacier) によって新しくアップロードされたアーカイブのアーカイブ ID が返されます。
以下の Java コードスニペットは、前述の手順を示しています。
AmazonGlacierClient client;
UploadArchiveRequest request = new UploadArchiveRequest()
.withVaultName("*** provide vault name ***")
.withChecksum(checksum)
.withBody(new ByteArrayInputStream(body))
.withContentLength((long)body.length);
UploadArchiveResult uploadArchiveResult = client.uploadArchive(request);
System.out.println("Location (includes ArchiveID): " + uploadArchiveResult.getLocation());
例: AWS SDK for Java の低レベル API を使用して 1 回のオペレーションでアーカイブをアップロードする
以下の Java コード例では、AWS SDK for Java を使用してボールト (examplevault
) にアーカイブをアップロードします。この例を実行するための詳しい手順については、「Eclipse を使用した Amazon S3 Glacier の Java 実行例」を参照してください。ここに示したコードは、アップロードするボールトの名前とファイルの名前で更新する必要があります。
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.TreeHashGenerator;
import com.amazonaws.services.glacier.model.UploadArchiveRequest;
import com.amazonaws.services.glacier.model.UploadArchiveResult;
public class ArchiveUploadLowLevel {
public static String vaultName = "*** provide vault name ****";
public static String archiveFilePath = "*** provide to file upload ****";
public static AmazonGlacierClient client;
public static void main(String[] args) throws IOException {
ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();
client = new AmazonGlacierClient(credentials);
client.setEndpoint("https://glacier.us-east-1.amazonaws.com/");
try {
// First open file and read.
File file = new File(archiveFilePath);
InputStream is = new FileInputStream(file);
byte[] body = new byte[(int) file.length()];
is.read(body);
// Send request.
UploadArchiveRequest request = new UploadArchiveRequest()
.withVaultName(vaultName)
.withChecksum(TreeHashGenerator.calculateTreeHash(new File(archiveFilePath)))
.withBody(new ByteArrayInputStream(body))
.withContentLength((long)body.length);
UploadArchiveResult uploadArchiveResult = client.uploadArchive(request);
System.out.println("ArchiveID: " + uploadArchiveResult.getArchiveId());
} catch (Exception e)
{
System.err.println("Archive not uploaded.");
System.err.println(e);
}
}
}