Commencez avec 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.

Commencez avec le AWS SDK for Java 2.x

AWS SDK for Java 2.x Fournit Java APIs pour Amazon Web Services (AWS). À l'aide deSDK, vous pouvez créer des applications Java qui fonctionnent avec Amazon S3, Amazon EC2, DynamoDB, et plus encore.

Ce didacticiel explique comment utiliser Apache Maven pour définir les dépendances SDK pour Java 2.x, puis écrire du code permettant de se connecter Amazon S3 pour télécharger un fichier.

Pour terminer ce didacticiel, procédez comme suit :

Étape 1 : Configuration de ce didacticiel

Avant de commencer ce didacticiel, vous devez disposer des éléments suivants :

  • Autorisation d'accès Amazon S3

  • Un environnement de développement Java configuré pour accéder Services AWS via l'authentification unique au AWS IAM Identity Center

Suivez les instructions ci-dessous Présentation de la configuration pour vous préparer à ce didacticiel. Une fois que vous avez configuré votre environnement de développement avec un accès par authentification unique pour Java SDK et que vous disposez d'une session de portail d' AWS accès active, passez à l'étape 2 de ce didacticiel.

Étape 2 : Création du projet

Pour créer le projet de ce didacticiel, vous devez exécuter une commande Maven qui vous invite à saisir des informations sur la configuration du projet. Une fois toutes les entrées saisies et confirmées, Maven termine la création du projet en créant un pom.xml et crée des fichiers Java stub.

  1. Ouvrez un terminal ou une fenêtre d'invite de commande et naviguez jusqu'au répertoire de votre choix, par exemple, votre Home dossier Desktop ou.

  2. Entrez la commande suivante sur le terminal et appuyez surEnter.

    mvn archetype:generate \ -DarchetypeGroupId=software.amazon.awssdk \ -DarchetypeArtifactId=archetype-app-quickstart \ -DarchetypeVersion=2.27.21
  3. Entrez la valeur répertoriée dans la deuxième colonne pour chaque invite.

    Invite Valeur à saisir
    Define value for property 'service': s3
    Define value for property 'httpClient': apache-client
    Define value for property 'nativeImage': false
    Define value for property 'credentialProvider' identity-center
    Define value for property 'groupId': org.example
    Define value for property 'artifactId': getstarted
    Define value for property 'version' 1.0-SNAPSHOT: <Enter>
    Define value for property 'package' org.example: <Enter>
  4. Une fois la dernière valeur saisie, Maven répertorie les choix que vous avez effectués. Confirmez en saisissant You entrez à nouveau des valeurs en saisissant N.

Maven crée le dossier de projet nommé getstarted en fonction de la artifactId valeur que vous avez saisie. Dans le getstarted dossier, trouvez un README.md fichier que vous pouvez consulter, un pom.xml fichier et un src répertoire.

Maven crée l'arborescence de répertoires suivante.

getstarted ├── README.md ├── pom.xml └── src ├── main │   ├── java │   │   └── org │   │   └── example │   │   ├── App.java │   │   ├── DependencyFactory.java │   │   └── Handler.java │   └── resources │   └── simplelogger.properties └── test └── java └── org └── example └── HandlerTest.java 10 directories, 7 files

Ce qui suit montre le contenu du fichier de pom.xml projet.

La dependencyManagement section contient une dépendance par rapport à Amazon S3 AWS SDK for Java 2.x et possède une dépendance par rapport à Amazon S3. dependencies Le projet utilise Java 1.8 en raison de la 1.8 valeur des maven.compiler.target propriétés maven.compiler.source et.

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>getstarted</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.shade.plugin.version>3.2.1</maven.shade.plugin.version> <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version> <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version> <aws.java.sdk.version>2.27.21</aws.java.sdk.version> <-------- SDK version picked up from archetype version. <slf4j.version>1.7.28</slf4j.version> <junit5.version>5.8.1</junit5.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>${aws.java.sdk.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <-------- S3 dependency <exclusions> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>netty-nio-client</artifactId> </exclusion> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>sso</artifactId> <-------- Required for identity center authentication. </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>ssooidc</artifactId> <-------- Required for identity center authentication. </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> <-------- HTTP client specified. <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>${slf4j.version}</version> </dependency> <!-- Needed to adapt Apache Commons Logging used by Apache HTTP Client to Slf4j to avoid ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl during runtime --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <!-- Test Dependencies --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>${junit5.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven.compiler.plugin.version}</version> </plugin> </plugins> </build> </project>

Étape 3 : Écrire le code

Le code suivant montre la App classe créée par Maven. La main méthode est le point d'entrée dans l'application, qui crée une instance de la Handler classe puis appelle sa sendRequest méthode.

package org.example; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class App { private static final Logger logger = LoggerFactory.getLogger(App.class); public static void main(String... args) { logger.info("Application starts"); Handler handler = new Handler(); handler.sendRequest(); logger.info("Application ends"); } }

La DependencyFactory classe créée par Maven contient la méthode s3Client factory qui construit et renvoie une S3Clientinstance. L'S3Clientinstance utilise une instance du client basé sur ApacheHTTP. Cela est dû au fait que vous avez indiqué quel client utiliser apache-client lorsque Maven vous a demandé quel HTTP client utiliser.

Cela DependencyFactory est indiqué dans le code suivant.

package org.example; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.s3.S3Client; /** * The module containing all dependencies required by the {@link Handler}. */ public class DependencyFactory { private DependencyFactory() {} /** * @return an instance of S3Client */ public static S3Client s3Client() { return S3Client.builder() .httpClientBuilder(ApacheHttpClient.builder()) .build(); } }

La Handler classe contient la logique principale de votre programme. Lorsqu'une instance de Handler est créée dans la App classe, elle DependencyFactory fournit le client de S3Client service. Votre code utilise l'S3Clientinstance pour appeler le service Amazon S3.

Maven génère la Handler classe suivante avec un TODO commentaire. L'étape suivante du didacticiel remplace le code TODOpar.

package org.example; import software.amazon.awssdk.services.s3.S3Client; public class Handler { private final S3Client s3Client; public Handler() { s3Client = DependencyFactory.s3Client(); } public void sendRequest() { // TODO: invoking the api calls using s3Client. } }

Pour compléter la logique, remplacez l'intégralité du contenu de la Handler classe par le code suivant. La sendRequest méthode est renseignée et les importations nécessaires sont ajoutées.

Le code crée d'abord un nouveau compartiment S3 avec la dernière partie du nom généré System.currentTimeMillis() afin de rendre le nom du compartiment unique.

Après avoir créé le compartiment dans la createBucket() méthode, le programme télécharge un objet à l'aide de la putObjectméthode deS3Client. Le contenu de l'objet est une chaîne simple créée avec la RequestBody.fromString méthode.

Enfin, le programme supprime l'objet suivi du bucket dans la cleanUp méthode.

package org.example; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.HeadBucketRequest; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import software.amazon.awssdk.services.s3.model.S3Exception; public class Handler { private final S3Client s3Client; public Handler() { s3Client = DependencyFactory.s3Client(); } public void sendRequest() { String bucket = "bucket" + System.currentTimeMillis(); String key = "key"; createBucket(s3Client, bucket); System.out.println("Uploading object..."); s3Client.putObject(PutObjectRequest.builder().bucket(bucket).key(key) .build(), RequestBody.fromString("Testing with the {sdk-java}")); System.out.println("Upload complete"); System.out.printf("%n"); cleanUp(s3Client, bucket, key); System.out.println("Closing the connection to {S3}"); s3Client.close(); System.out.println("Connection closed"); System.out.println("Exiting..."); } public static void createBucket(S3Client s3Client, String bucketName) { try { s3Client.createBucket(CreateBucketRequest .builder() .bucket(bucketName) .build()); System.out.println("Creating bucket: " + bucketName); s3Client.waiter().waitUntilBucketExists(HeadBucketRequest.builder() .bucket(bucketName) .build()); System.out.println(bucketName + " is ready."); System.out.printf("%n"); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } public static void cleanUp(S3Client s3Client, String bucketName, String keyName) { System.out.println("Cleaning up..."); try { System.out.println("Deleting object: " + keyName); DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucketName).key(keyName).build(); s3Client.deleteObject(deleteObjectRequest); System.out.println(keyName + " has been deleted."); System.out.println("Deleting bucket: " + bucketName); DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder().bucket(bucketName).build(); s3Client.deleteBucket(deleteBucketRequest); System.out.println(bucketName + " has been deleted."); System.out.printf("%n"); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } System.out.println("Cleanup complete"); System.out.printf("%n"); } }

Étape 4 : créer et exécuter l'application

Une fois que le projet est créé et contient la Handler classe complète, créez et exécutez l'application.

  1. Assurez-vous que vous disposez d'une session IAM Identity Center active. Pour ce faire, exécutez la AWS Command Line Interface commande aws sts get-caller-identity et vérifiez la réponse. Si vous n'avez pas de session active, consultez cette section pour obtenir des instructions.

  2. Ouvrez un terminal ou une fenêtre d'invite de commande et accédez au répertoire de votre projetgetstarted.

  3. Utilisez la commande suivante pour créer votre projet :

    mvn clean package
  4. Utilisez la commande suivante pour exécuter l'application.

    mvn exec:java -Dexec.mainClass="org.example.App"

Pour afficher le nouveau bucket et le nouvel objet créés par le programme, effectuez les opérations suivantes.

  1. DansHandler.java, commentez la ligne cleanUp(s3Client, bucket, key) dans la sendRequest méthode et enregistrez le fichier.

  2. Reconstruisez le projet en exécutantmvn clean package.

  3. Exécutez à nouveau mvn exec:java -Dexec.mainClass="org.example.App" pour télécharger l'objet texte une fois de plus.

  4. Connectez-vous à la console S3 pour afficher le nouvel objet dans le compartiment nouvellement créé.

Après avoir consulté le fichier, supprimez l'objet, puis supprimez le compartiment.

Réussite

Si votre projet Maven a été créé et s'est exécuté sans erreur, alors félicitations ! Vous avez créé avec succès votre première application Java à l'aide de la version 2.x SDK pour Java.

Nettoyage

Pour nettoyer les ressources que vous avez créées au cours de ce didacticiel, procédez comme suit :

  • Si ce n'est pas déjà fait, dans la console S3, supprimez tous les objets et les compartiments créés lors de l'exécution de l'application.

  • Supprimez le dossier du projet (getstarted).

Étapes suivantes

Maintenant que vous connaissez les notions de base, vous pouvez en apprendre davantage sur les points suivants :