

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

# 並列転送を使用するように Java ベースの S3 非同期クライアントを設定する
<a name="s3-async-client-multipart"></a>

バージョン 2.27.5 以降、標準の Java ベースの S3 非同期クライアントは、自動並列転送 (マルチパートアップロードおよびダウンロード) をサポートしています。Java ベースの S3 非同期クライアントを作成するときに、並列転送のサポートを設定します。

このセクションでは、並列転送を有効にする方法と設定をカスタマイズする方法について説明します。

## `S3AsyncClient` のインスタンスの作成
<a name="s3-async-client-multipart-create"></a>

[ビルダー](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClientBuilder.html)で `multipart*` メソッドを呼び出さずに `S3AsyncClient` インスタンスを作成する場合、並列転送は有効になりません。次の各ステートメントは、マルチパートアップロードとダウンロードのサポートなしで Java ベースの S3 非同期クライアントを作成します。

### マルチパートサポート*なしで*作成する
<a name="s3-async-client-mp-off"></a>

**Example**  

```
import software.amazon.awssdk.auth.credentials.ProcessCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3AsyncClient;


S3AsyncClient s3Client = S3AsyncClient.create();

S3AsyncClient s3Client2 = S3AsyncClient.builder().build();

S3AsyncClient s3Client3 = S3AsyncClient.builder()
        .credentialsProvider(ProcessCredentialsProvider.builder().build())
        .region(Region.EU_NORTH_1)
        .build();
```

### マルチパートサポート*付きで*作成する
<a name="s3-async-client-mp-on"></a>

デフォルト設定で並列転送を有効にするには、ビルダーで `multipartEnabled` を呼び出し、次の例に示すように `true` を渡します。

**Example**  

```
S3AsyncClient s3AsyncClient2 = S3AsyncClient.builder()
        .multipartEnabled(true)
        .build();
```

デフォルト値は、 `thresholdInBytes` および `minimumPartSizeInBytes` 設定では 8 MiB です。

マルチパート設定をカスタマイズすると、次に示すように並列転送が自動的に有効になります。

**Example**  

```
import software.amazon.awssdk.services.s3.S3AsyncClient;
import static software.amazon.awssdk.transfer.s3.SizeConstant.MB;


S3AsyncClient s3AsyncClient2 = S3AsyncClient.builder()
        .multipartConfiguration(b -> b
                .thresholdInBytes(16 * MB)
                .minimumPartSizeInBytes(10 * MB))
        .build();
```

## サイズが不明なストリームのアップロード
<a name="java-async-client-stream-unknown-size"></a>

マルチパートが有効になっている Java ベースの S3 非同期クライアントは、合計サイズが事前にわからない入力ストリームを効率的に処理できます。

```
public PutObjectResponse asyncClient_multipart_stream_unknown_size(String bucketName, String key, InputStream inputStream) {

    S3AsyncClient s3AsyncClient = S3AsyncClient.builder().multipartEnabled(true).build();
    ExecutorService executor = Executors.newSingleThreadExecutor();
    AsyncRequestBody body = AsyncRequestBody.fromInputStream(inputStream, null, executor); // 'null' indicates that the
                                                                                           // content length is unknown.
    CompletableFuture<PutObjectResponse> responseFuture =
            s3AsyncClient.putObject(r -> r.bucket(bucketName).key(key), body)
                    .exceptionally(e -> {
                        if (e != null) {
                            logger.error(e.getMessage(), e);
                        }
                        return null;
                    });

    PutObjectResponse response = responseFuture.join(); // Wait for the response.
    executor.shutdown();
    return response;
}
```

このアプローチにより、切り捨てられたオブジェクトやアップロードの失敗など、コンテンツの長さを手動で指定した場合に発生する可能性のある問題を回避できます。