パフォーマンスの高い S3 クライアントを使用する: AWS CRTベースの S3 クライアント - AWS SDK for Java 2.x

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

パフォーマンスの高い S3 クライアントを使用する: AWS CRTベースの S3 クライアント

Common AWS Runtime (CRT) 上に構築された AWS CRTベースの S3 クライアントは、代替の S3 非同期クライアントです。Amazon S3 のマルチパートアップロードAPIとバイト範囲フェッチ を自動的に使用することで、パフォーマンスと信頼性が向上した Amazon Simple Storage Service (Amazon S3) との間でオブジェクトを転送します。 https://docs.aws.amazon.com/whitepapers/latest/s3-optimizing-performance-best-practices/use-byte-range-fetches.html

AWS CRTベースの S3 クライアントは、ネットワーク障害が発生した場合の転送の信頼性を向上させます。ファイル転送を最初からやり直すことなく、失敗した個別の部分を再試行することで、信頼性を改善しています。

さらに、 AWS CRTベースの S3 クライアントは、拡張された接続プーリングとドメインネームシステム (DNS) の負荷分散を提供し、スループットも向上します。

AWS CRTのSDK標準 S3 非同期クライアントの代わりに ベースの S3 クライアントを使用し、その改善されたスループットをすぐに活用できます。

AWS CRTの ベースのコンポーネント SDK

このトピックで説明されている AWS CRTベースの S3 クライアントと AWS CRTベースのHTTPクライアントは、 の異なるコンポーネントですSDK。

AWS CRTベースの S3 クライアントS3AsyncClient インターフェイスの実装であり、Amazon S3 サービスの操作に使用されます。これは S3AsyncClient インターフェイスの Java ベースの実装に代わるもので、いくつかの利点があります。

AWS CRTベースのHTTPクライアントはインターフェイスの実装SdkAsyncHttpClientであり、一般的なHTTP通信に使用されます。これは SdkAsyncHttpClient インターフェースの Netty 実装に代わるもので、いくつかの利点があります。

どちらのコンポーネントも AWS Common Runtime のライブラリを使用していますが、 AWS CRTベースの S3 クライアントは aws-c-s3 つのライブラリを使用し、S3 マルチパートアップロードAPI機能をサポートしています。 AWS CRTベースのHTTPクライアントは汎用であるため、S3 マルチパートアップロードAPI機能をサポートしていません。

AWS CRTベースの S3 クライアントを使用するための依存関係を追加する

AWS CRTベースの S3 クライアントを使用するには、Maven プロジェクトファイルに次の 2 つの依存関係を追加します。この例は、使用する最小バージョンを示しています。Maven central リポジトリで s3aws-crt のアーティファクトの最新バージョンを検索します。

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.27.21</version> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.30.11</version> </dependency>

AWS CRTベースの S3 クライアントのインスタンスを作成する

次のコードスニペットに示すように、デフォルト設定で AWS CRTベースの S3 クライアントのインスタンスを作成します。

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

クライアントを設定するには、クライアントビルダーを使用します AWS CRT。ビルダーメソッドを変更することで、標準の S3 非同期クライアントから AWS CRTベースのクライアントに切り替えることができます。

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_WEST_2) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * 1025 * 1024L) .build();
注記

標準ビルダーの設定の一部は、現在 AWS CRTクライアントビルダーでサポートされていない場合があります。スタンダードビルダーを取得するには、S3AsyncClient#builder() を呼び出します。

AWS CRTベースの S3 クライアントを使用する

AWS CRTベースの S3 クライアントを使用して Amazon S3 APIオペレーションを呼び出します。次の例は、 で使用可能な PutObjectおよび GetObjectオペレーションを示しています AWS SDK for Java。

import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.PutObjectResponse; S3AsyncClient s3Client = S3AsyncClient.crtCreate(); // Upload a local file to Amazon S3. PutObjectResponse putObjectResponse = s3Client.putObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncRequestBody.fromFile(Paths.get(<FILE_NAME>))) .join(); // Download an object from Amazon S3 to a local file. GetObjectResponse getObjectResponse = s3Client.getObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncResponseTransformer.toFile(Paths.get(<FILE_NAME>))) .join();

設定の制限

AWS CRTベースの S3 クライアントと Java ベースの S3 非同期クライアントは同等の機能 を提供し、 AWS CRTベースの S3 クライアントはパフォーマンスエッジを提供します。ただし、 AWS CRTベースの S3 クライアントには、Java ベースの S3 非同期クライアントが持つ設定がありません。設定は次のとおりです。

  • クライアントレベルの設定: APIコール試行タイムアウト、圧縮実行インターセプター、メトリクスパブリッシャー、カスタム実行属性、カスタムアドバンストオプション、カスタムスケジュールされたエグゼキュターサービス、カスタムヘッダー

  • リクエストレベルの設定: カスタム署名者、認証情報プロバイダー、API通話試行タイムアウト

設定の違いの完全なリストについては、 APIリファレンスを参照してください。

Java ベースの S3 非同期クライアント AWS CRTベースの S3 クライアント
クライアントレベルの設定

リクエストレベルの設定

クライアントレベルの設定

リクエストレベルの設定なし