

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

# を使用した AWS のサービス リクエストの実行 AWS SDK for Java 2.x
<a name="work-witih-clients"></a>

## サービスクライアントを使用したリクエストの実行
<a name="using-service-client"></a>

[SDK のセットアップ](setup.md)のステップを完了し、[サービスクライアントの設定](configuring-service-clients.md)方法を理解したら、Amazon S3、Amazon DynamoDB、、 AWS Identity and Access Management Amazon EC2 などの AWS サービスにリクエストを行う準備が整います。

### サービスクライアントを作成する
<a name="work-with-clients-create"></a>

にリクエストを行うには AWS のサービス、まず静的ファクトリメソッド を使用して、そのサービスのサービスクライアントをインスタンス化する必要があります`builder()`。`builder()` メソッドは、サービスクライアントをカスタマイズできる `builder` オブジェクトを返します。fluent setter メソッドでは `builder` オブジェクトが返るため、利便性とコードの可読性を高めるためにメソッドの呼び出しをチェーンすることができます。必要なプロパティを設定した後、`build()` メソッドを呼び出してクライアントを作成します。

例として、以下のコードスニペットは、`Ec2Client` オブジェクトを Amazon EC2 のサービスクライアントとしてインスタンス化します。

```
Region region = Region.US_WEST_2;
Ec2Client ec2Client = Ec2Client.builder()
        .region(region)
        .build();
```

**注記**  
SDK のサービスクライアントはスレッドセーフです。最高のパフォーマンスを得るには、長期間使用するオブジェクトとしてこれらを処理します。各クライアントには、クライアントがガーベージコレクションの対象になった場合にリリースされる独自の接続プールリソースを備えています。  
サービスクライアントオブジェクトはイミュータブルであるため、リクエストを実行する各サービスについて、または同じサービスにリクエストを実行するために異なる設定を使用する場合は、新しいクライアントを作成する必要があります。  
サービスクライアントビルダー`Region`で を指定することは、すべての AWS サービスに必須ではありませんが、アプリケーションで実行する API コールのリージョンを設定するのがベストプラクティスです。詳細については、「[AWS リージョンの選択](region-selection.md)」を参照してください。

### デフォルトのクライアント設定
<a name="using-default-client"></a>

このクライアントビルダーには、`create()` という名前の別のファクトリメソッドがあります。このメソッドでは、サービスクライアントがデフォルト設定で作成されます。[デフォルトのプロバイダーチェーン](credentials-chain.md)を使用して、認証情報と[デフォルトの AWS リージョン プロバイダーチェーン](region-selection.md#automatically-determine-the-aws-region-from-the-environment)をロードします。アプリケーションを実行している環境から認証情報またはリージョンを決定できない場合、`create` の呼び出しは失敗します。SDK が認証情報および使用するリージョンを決定する方法の詳細については、「[認証情報の使用](credentials.md)」および「[リージョンの選択](region-selection.md)」を参照してください。

例えば、以下のコードスニペットは、`DynamoDbClient` オブジェクトを Amazon DynamoDB のサービスクライアントとしてインスタンス化します。

```
DynamoDbClient dynamoDbClient = DynamoDbClient.create();
```

### サービスクライアントを設定する
<a name="using-configure-service-clients"></a>

サービスクライアントの設定方法の詳細については、「[クライアントの外部設定](configuring-service-clients-ext.md)」および「[コードでのクライアント設定](configuring-service-clients-code.md)」を参照してください。

### サービスクライアントを閉じる
<a name="using-closing-client"></a>

ベストプラクティスとして、アプリケーションの存続期間中の複数の API サービス呼び出しにはサービスクライアントを使用する必要があります。ただし、サービスクライアントを 1 回だけ使用する必要がある場合や、サービスクライアントが不要になったら閉じます。

サービスクライアントが不要になったら、`close()` メソッドを呼び出してリソースを解放します。

```
ec2Client.close();
```

サービスクライアントを 1 回だけ使用する必要がある場合は、`try`-with-resources ステートメントでサービスクライアントをリソースとしてインスタンス化できます。サービスクライアントは `[Autoclosable](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/AutoCloseable.html)` インターフェースを実装するため、JDK はステートメントの最後で自動的に `close()` メソッドを呼び出します。

以下の例は、サービスクライアントを使用して 1 回限りのコールを実行する方法を示しています。`StsClient` を呼び出す AWS Security Token Service は、アカウント ID を返した後で閉じられます。

```
import software.amazon.awssdk.services.sts.StsClient;

String getAccountID() {
    try (StsClient stsClient = StsClient.create()) {
       return stsClient.getCallerIdentity().account();
    }
}
```

## リクエストを発行する
<a name="using-making-requests"></a>

サービスクライアントを使用して、対応する にリクエストを行います AWS のサービス。

例えば、このコードスニペットは、`RunInstancesRequest` オブジェクトを作成して新しい Amazon EC2 インスタンスを作成する方法を示しています。

```
// Create the request by using the fluid setter methods of the request builder.
RunInstancesRequest runInstancesRequest = RunInstancesRequest.builder()
        .imageId(amiId)
        .instanceType(InstanceType.T1_MICRO)
        .maxCount(1)
        .minCount(1)
        .build();

// Use the configured request with the service client.
RunInstancesResponse response = ec2Client.runInstances(runInstancesRequest);
```

SDK は、リクエストを作成してインスタンスに渡すのではなく、リクエストの作成に使用できる Fluent API を提供します。Fluent API を使用すると、Java Lambda 式を使用してリクエストを「インライン」で作成できます。

次の例では、[ビルダーを使用して](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/Ec2Client.html#runInstances(java.util.function.Consumer))リクエストを作成する `runInstances` メソッドのバージョンを使用して、前の例を書き換えています。

```
// Create the request by using a lambda expression.
RunInstancesResponse response = ec2.runInstances(r -> r
                .imageId(amiId)
                .instanceType(InstanceType.T1_MICRO)
                .maxCount(1)
                .minCount(1));
```

### リクエストを使用してクライアント設定を上書きする
<a name="using-override-client-config-request"></a>

サービスクライアントは変更不可能ですが、その設定の多くをリクエストレベルで上書きできます。リクエストを構築するときに、[AwsRequestOverrideConfiguration](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/AwsRequestOverrideConfiguration.html) インスタンスを指定して、設定を上書きできます。クライアント設定を上書きするために使用できるメソッドには、次のようなものがあります。
+ `apiCallAttemptTimeout`
+ `apiCallTimeout`
+ `credentialProvider`
+ `compressionConfiguration`
+ `putHeader`

リクエストでクライアント設定を上書きする例として、デフォルト設定を使用する次の S3 クライアントがあると想定してください。

```
S3Client s3Client = S3Client.create();
```

大きなファイルをダウンロードし、ダウンロードが完了する前にリクエストがタイムアウトしないようにする必要があります。これを行うには、次のコードに示すように、1 つの `GetObject`リ クエストのみのタイムアウト値を増やします。

------
#### [ Standard API ]

```
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder()
    .apiCallTimeout(Duration.ofSeconds(100L))
    .apiCallAttemptTimeout(Duration.ofSeconds(25L))
    .build();

GetObjectRequest request = GetObjectRequest.builder()
    .bucket("amzn-s3-demo-bucket")
    .key("demo-key")
    .overrideConfiguration(overrideConfiguration)
    .build();

s3Client.getObject(request, myPath);
```

------
#### [ Fluent API ]

```
s3Client.getObject(b -> b
        .bucket("amzn-s3-demo-bucket")
        .key("demo-key")
        .overrideConfiguration(c -> c
            .apiCallTimeout(Duration.ofSeconds(100L))
            .apiCallAttemptTimeout(Duration.ofSeconds(25L))),
    myPath);
```

------

## レスポンスを処理する
<a name="using-handling-responses"></a>

SDK は、ほとんどのサービスオペレーションのレスポンスオブジェクトを返します。コードは、必要に応じてレスポンスオブジェクト内の情報を処理できます。

たとえば、次のコードスニペットは、前のリクエストの [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/model/RunInstancesResponse.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/model/RunInstancesResponse.html) オブジェクトで返された最初のインスタンス ID を出力します。

```
RunInstancesResponse runInstancesResponse = ec2Client.runInstances(runInstancesRequest);
System.out.println(runInstancesResponse.instances().get(0).instanceId());
```

ただし、すべてのオペレーションがサービス固有のデータを含むレスポンスオブジェクトを返すわけではありません。このような状況では、HTTP レスポンスのステータスをクエリして、オペレーションが成功したかどうかを確認することができます。

たとえば、次のスニペットのコードは、HTTP レスポンスをチェックして、Amazon Simple Email Service の [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sesv2/SesV2Client.html#deleteContactList(software.amazon.awssdk.services.sesv2.model.DeleteContactListRequest)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sesv2/SesV2Client.html#deleteContactList(software.amazon.awssdk.services.sesv2.model.DeleteContactListRequest)) オペレーションが成功したかどうかを確認します。

```
SesV2Client sesv2Client = SesV2Client.create();

DeleteContactListRequest request = DeleteContactListRequest.builder()
    .contactListName("ExampleContactListName")
    .build();

DeleteContactListResponse response = sesv2Client.deleteContactList(request);
if (response.sdkHttpResponse().isSuccessful()) {
    System.out.println("Contact list deleted successfully");
} else {
    System.out.println("Failed to delete contact list. Status code: " + response.sdkHttpResponse().statusCode());
}
```