View a markdown version of this page

Realizzazione Servizio AWS richieste utilizzando il AWS SDK for Java 2.x - AWS SDK for Java 2.x

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Realizzazione Servizio AWS richieste utilizzando il AWS SDK for Java 2.x

Utilizzo dei client di servizio per effettuare richieste

Dopo aver completato la procedura di configurazione dell'SDK e aver compreso come configurare i client di servizio, sei pronto per effettuare richieste a AWS servizi come Amazon S3, Amazon DynamoDB AWS Identity and Access Management, Amazon EC2 e altri.

Crea un client di servizio

Per effettuare una richiesta a un Servizio AWS, è necessario innanzitutto creare un'istanza di un client di servizio per quel servizio utilizzando il metodo static factory,. builder() Il builder() metodo restituisce un builder oggetto che consente di personalizzare il client di servizio. I metodi setter fluent restituiscono l'oggetto builder. In questo modo puoi concatenare chiamate al metodo per comodità e per avere un codice più leggibile. Dopo aver configurato le proprietà desiderate, chiamate il build() metodo per creare il client.

Ad esempio, il seguente frammento di codice crea un'istanza di un Ec2Client oggetto come client di servizio per Amazon EC2.

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

I client del servizio nell'SDK sono thread-safe. Per prestazioni ottimali, ti consigliamo di trattarli come oggetti di lunga durata. Ogni client dispone di una propria risorsa di pooling delle connessioni che viene rilasciata durante il processo di garbage collection del client.

Un oggetto client di servizio è immutabile, quindi è necessario creare un nuovo client per ogni servizio a cui si fanno richieste o se si desidera utilizzare una configurazione diversa per effettuare richieste allo stesso servizio.

La specifica del Region generatore di client del servizio non è richiesta per tutti i AWS servizi; tuttavia, è consigliabile impostare la regione per le chiamate API effettuate nelle applicazioni. Per ulteriori informazioni, consulta la selezione della AWS regione.

Configurazione predefinita del client

I generatori client dispongono di un altro metodo factory denominato create(). Questo metodo consente di creare un client del servizio con la configurazione predefinita. Utilizza la catena di provider predefinita per caricare le credenziali e la catena di Regione AWS provider predefinita. Se le credenziali o la regione non possono essere determinate dall'ambiente in cui è in esecuzione l'applicazione, la chiamata ha esito negativo. create Vedi Utilizzo delle credenziali e selezione della regione per ulteriori informazioni su come l'SDK determina le credenziali e la regione da utilizzare.

Ad esempio, il seguente frammento di codice crea un'istanza di un DynamoDbClient oggetto come client di servizio per Amazon DynamoDB:

DynamoDbClient dynamoDbClient = DynamoDbClient.create();

Configurare i client di servizio

Per informazioni dettagliate su come configurare i client di servizio, vedere Configurazione del client esternamente eConfigurazione del client in codice.

Chiudere il client di servizio

Come procedura consigliata, è consigliabile utilizzare un client di servizio per più chiamate al servizio API durante il ciclo di vita di un'applicazione. Tuttavia, se hai bisogno di un client di servizio per un uso singolo o non hai più bisogno del client di servizio, chiudilo.

Chiama il close() metodo quando il client di servizio non è più necessario per liberare risorse.

ec2Client.close();

Se hai bisogno di un client di servizio per un uso singolo, puoi creare un'istanza del client di servizio come risorsa in un'tryistruzione -with-resources. I client di servizio implementano l'Autoclosableinterfaccia, quindi il JDK chiama automaticamente il metodo alla fine dell'close()istruzione.

L'esempio seguente dimostra come utilizzare un client di servizio per una chiamata una tantum. Il StsClient chiamante Servizio di token di sicurezza AWS viene chiuso dopo aver restituito l'ID dell'account.

import software.amazon.awssdk.services.sts.StsClient; String getAccountID() { try (StsClient stsClient = StsClient.create()) { return stsClient.getCallerIdentity().account(); } }

Effettua richieste

Utilizza il client di servizio per effettuare richieste al corrispondente Servizio AWS.

Ad esempio, questo frammento di codice mostra come creare un RunInstancesRequest oggetto per creare una nuova istanza 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);

Anziché creare una richiesta e passare l'istanza, l'SDK fornisce un'API fluida che puoi utilizzare per creare una richiesta. Con l'API fluent puoi utilizzare un'espressione lambda Java per creare la richiesta «in linea».

L'esempio seguente riscrive l'esempio precedente utilizzando la versione del runInstances metodo che utilizza un builder per creare la richiesta.

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

Usa le richieste per sovrascrivere la configurazione del client

Sebbene un client di servizio sia immutabile, è possibile sovrascrivere molte delle sue impostazioni a livello di richiesta. Quando crei una richiesta, puoi fornire un'AwsRequestOverrideConfigurationistanza per fornire le impostazioni sostituite. Alcuni dei metodi che puoi utilizzare per sovrascrivere le impostazioni del client sono:

  • apiCallAttemptTimeout

  • apiCallTimeout

  • credentialProvider

  • compressionConfiguration

  • putHeader

Per un esempio di sovrascrittura delle impostazioni di un client con una richiesta, supponiamo di avere il seguente client S3 che utilizza le impostazioni predefinite.

S3Client s3Client = S3Client.create();

Volete scaricare un file di grandi dimensioni e assicurarvi che la richiesta non scada prima del termine del download. A tale scopo, aumentate i valori di timeout per una sola GetObject richiesta, come mostrato nel codice seguente.

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);

Gestione delle risposte

L'SDK restituisce un oggetto di risposta per la maggior parte delle operazioni di servizio. Il codice può elaborare le informazioni nell'oggetto di risposta in base alle esigenze dell'utente.

Ad esempio, il seguente frammento di codice stampa l'ID della prima istanza restituito con l'RunInstancesResponseoggetto della richiesta precedente.

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

Tuttavia, non tutte le operazioni restituiscono un oggetto di risposta con dati specifici del servizio. In queste situazioni, è possibile interrogare lo stato della risposta HTTP per sapere se l'operazione è andata a buon fine.

Ad esempio, il codice nel seguente frammento controlla la risposta HTTP per vedere se l'DeleteContactListoperazione di Amazon Simple Email Service è andata a buon fine.

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()); }