Utilisez le AWS SDK for Java 2.x - AWS SDK for Java 2.x

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisez le AWS SDK for Java 2.x

Après avoir suivi les étapes décrites dans Configuration du SDK et avoir compris comment configurer les clients de service, vous êtes prêt à envoyer des demandes à AWS des services tels qu'Amazon S3, Amazon AWS Identity and Access Management DynamoDB, Amazon EC2, etc.

Travaillez avec les clients du service dans AWS SDK for Java 2.x

Création d'un client de service

Pour envoyer une demande à un Service AWS, vous devez d'abord instancier un client de service pour ce service en utilisant la méthode static factory,. builder() La builder() méthode renvoie un builder objet qui vous permet de personnaliser le client de service. Les méthodes setter courantes renvoient l'objet builder pour vous permettre de chaîner les appels de méthode pour plus de commodité et pour obtenir un code plus lisible. Après avoir configuré les propriétés souhaitées, appelez la build() méthode pour créer le client.

À titre d'exemple, l'extrait de code suivant instancie un Ec2Client objet en tant que client de service pour Amazon. EC2

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

Les clients de service du kit SDK sont thread-safe. Pour de meilleures performances, traitez-les comme des objets à longue durée de vie. Chaque client possède sa propre ressource de groupe de connexion qui est libérée lorsque le client est nettoyé de la mémoire.

Un objet client de service est immuable. Vous devez donc créer un nouveau client pour chaque service auquel vous envoyez des demandes, ou si vous souhaitez utiliser une configuration différente pour envoyer des demandes au même service.

Il n'est pas nécessaire de spécifier le générateur de clients Region dans le service pour tous les AWS services ; toutefois, il est recommandé de définir la région pour les appels d'API que vous effectuez dans vos applications. Voir AWS la sélection des régions pour plus d'informations.

Configuration du client par défaut

Les générateurs client ont une autre méthode de fabrique nommée create(). Cette méthode crée un client de service avec la configuration par défaut. Il utilise la chaîne de fournisseurs par défaut pour charger les informations d'identification et la chaîne Région AWS de fournisseurs par défaut. Si les informations d'identification ou la région ne peuvent pas être déterminées à partir de l'environnement dans lequel l'application s'exécute, l'appel create échoue. Consultez les sections Utilisation des informations d'identification et Sélection de la région pour plus d'informations sur la manière dont le SDK détermine les informations d'identification et la région à utiliser.

Par exemple, l'extrait de code suivant instancie un DynamoDbClient objet en tant que client de service pour Amazon DynamoDB :

DynamoDbClient dynamoDbClient = DynamoDbClient.create();

Configuration des clients de service

Pour plus de détails sur la configuration des clients de service, reportez-vous aux Configuration du client en externe sections etConfiguration du client dans le code.

Fermer le client de service

Il est recommandé d'utiliser un client de service pour plusieurs appels de service d'API au cours du cycle de vie d'une application. Toutefois, si vous avez besoin d'un client de service pour une utilisation unique ou si vous n'avez plus besoin du client de service, fermez-le.

Appelez la close() méthode lorsque le client de service n'est plus nécessaire pour libérer des ressources.

ec2Client.close();

Si vous avez besoin d'un client de service pour une utilisation unique, vous pouvez instancier le client de service en tant que ressource dans une instruction try -with-resources. Les clients du service implémentent l'Autoclosableinterface, de sorte que le JDK appelle automatiquement la close() méthode à la fin de l'instruction.

L'exemple suivant montre comment utiliser un client de service pour un appel ponctuel. Le StsClient qui appelle le AWS Security Token Service est fermé après avoir renvoyé l'identifiant du compte.

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

Faites des demandes

Utilisez le client de service pour faire des demandes au correspondant Service AWS.

Par exemple, cet extrait de code montre comment créer un RunInstancesRequest objet pour créer une nouvelle instance 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);

Plutôt que de créer une demande et de transmettre l'instance, le SDK fournit une API fluide que vous pouvez utiliser pour créer une demande. Avec l'API Fluent, vous pouvez utiliser une expression Java lambda pour créer la demande « en ligne ».

L'exemple suivant réécrit l'exemple précédent en utilisant la version de la runInstances méthode qui utilise un générateur pour créer la demande.

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

Utiliser des demandes pour annuler la configuration du client

Bien qu'un client de service soit immuable, vous pouvez modifier bon nombre de ses paramètres au niveau de la demande. Lorsque vous créez une demande, vous pouvez fournir une AwsRequestOverrideConfigurationinstance pour fournir les paramètres remplacés. Voici certaines des méthodes que vous pouvez utiliser pour modifier les paramètres du client :

  • apiCallAttemptTimeout

  • apiCallTimeout

  • credentialProvider

  • compressionConfiguration

  • putHeader

Pour un exemple de remplacement d'un paramètre client par une demande, supposons que le client S3 suivant utilise les paramètres par défaut.

S3Client s3Client = S3Client.create();

Vous souhaitez télécharger un fichier volumineux et vous assurer que la demande n'expire pas avant la fin du téléchargement. Pour ce faire, augmentez les valeurs de délai d'expiration pour une seule GetObject demande, comme indiqué dans le code suivant.

Standard API
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() .apiCallTimeout(Duration.ofSeconds(100L)) .apiCallAttemptTimeout(Duration.ofSeconds(25L)) .build(); GetObjectRequest request = GetObjectRequest.builder() .bucket("DOC-EXAMPLE-BUCKET") .key("DOC-EXAMPLE-KEY") .overrideConfiguration(overrideConfiguration) .build(); s3Client.getObject(request, myPath);
Fluent API
s3Client.getObject(b -> b .bucket("DOC-EXAMPLE-BUCKET") .key("DOC-EXAMPLE-KEY") .overrideConfiguration(c -> c .apiCallTimeout(Duration.ofSeconds(100L)) .apiCallAttemptTimeout(Duration.ofSeconds(25L))), myPath);

Gérer les réponses

Le SDK renvoie un objet de réponse pour la plupart des opérations de service. Votre code peut traiter les informations contenues dans l'objet de réponse en fonction de vos besoins.

Par exemple, l'extrait de code suivant affiche le premier identifiant d'instance renvoyé avec l'RunInstancesResponseobjet de la demande précédente.

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

Cependant, toutes les opérations ne renvoient pas d'objet de réponse contenant des données spécifiques au service. Dans ces situations, vous pouvez demander l'état de la réponse HTTP pour savoir si l'opération a réussi.

Par exemple, le code de l'extrait suivant vérifie la réponse HTTP pour vérifier si le DeleteContactListfonctionnement d'Amazon Simple Email Service s'est déroulé correctement.

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

Gérer les exceptions

Le SDK utilise des exceptions d'exécution (ou non contrôlées), vous permettant ainsi de contrôler avec précision la gestion des erreurs et de garantir que la gestion des exceptions évolue en fonction de votre application.

Une SdkServiceException, ou l'une de ses sous-classes, est la forme d'exception la plus courante émise par le SDK. Ces exceptions représentent les réponses du AWS service. Vous pouvez également gérer un SdkClientExceptionproblème qui se produit en cas de problème côté client (c'est-à-dire dans votre environnement de développement ou d'application), tel qu'une panne de connexion réseau.

Cet extrait de code montre une façon de gérer les exceptions de service lorsque vous chargez un fichier vers. Amazon S3 L'exemple de code détecte à la fois les exceptions du client et du serveur, enregistre les détails et fait exister l'application.

Region region = Region.US_WEST_2; s3Client = S3Client.builder() .region(region) .build(); try { PutObjectRequest putObjectRequest = PutObjectRequest.builder() .bucket(bucketName) .key(key) .build(); s3Client.putObject(putObjectRequest, RequestBody.fromString("SDK for Java test")); } catch (S3Exception se) { System.err.println("Service exception thrown."); System.err.println(se.awsErrorDetails().errorMessage()); } catch (SdkClientExeption ce){ System.err.println("Client exception thrown."); System.err.println(ce.getMessage()); } finally { System.exit(1); }

Consultez la section Gestion des exceptions pour plus d'informations.

Utilisez des serveurs

Le traitement de certaines demandes prend du temps, comme la création d'une nouvelle table DynamoDB ou d'un nouveau Amazon S3 compartiment. Pour vous assurer que la ressource est prête avant que votre code ne continue de s'exécuter, utilisez un serveur.

Par exemple, cet extrait de code crée une nouvelle table (« MyTable ») dans DynamoDB, attend que la table ait un ACTIVE statut, puis imprime la réponse :

DynamoDbClient dynamoDbClient = DynamoDbClient.create(); DynamoDbWaiter dynamoDbWaiter = dynamoDbClient.waiter(); WaiterResponse<DescribeTableResponse> waiterResponse = dynamoDbWaiter.waitUntilTableExists(r -> r.tableName("myTable")); waiterResponse.matched().response().ifPresent(System.out::println);

Voir Utilisation de serveurs pour plus d'informations.