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'Autoclosable
interface, 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
// 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 AwsRequestOverrideConfiguration
-
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.
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'RunInstancesResponse
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 DeleteContactList
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
SdkClientException
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.