翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SDK for Java 2.x の使用を開始する
AWS SDK for Java 2.x には、 Amazon Web Services () 用の Java APIs が用意されていますAWS。SDK を使用すると、 Amazon S3、 Amazon EC2、 DynamoDBなどで動作する Java アプリケーションを構築できます。
このチュートリアルでは、Apache Maven
このチュートリアルを完了するには、次の手順に従ってください。
ステップ 1: このチュートリアルのために設定する
このチュートリアルを開始する前に、以下を実行する必要があります
-
アクセス許可 Amazon S3
-
へのシングルサインオン AWS のサービス を使用して にアクセスするように設定された Java 開発環境 AWS IAM Identity Center
設定の概要 の手順に従って、このチュートリアルの設定を行ってください。Java SDK のシングルサインオンアクセスを使用して開発環境を設定し、アクティブな AWS アクセスポータルセッション を作成したら、このチュートリアルのステップ 2 に進みます。
ステップ 2: プロジェクトを作成する
このチュートリアル用のプロジェクトを作成するには、プロジェクトの設定方法に関する入力を求める Maven コマンドを実行します。すべての入力と確認が完了すると、Maven は pom.xml
を作成してプロジェクトの構築を終了し、スタブ Java ファイルを作成します。
-
ターミナルまたはコマンドプロンプトウィンドウを開き、
Desktop
やHome
フォルダなど、任意のディレクトリに移動します。 -
ターミナルに以下のコマンドを入力して、
Enter
を押します。mvn archetype:generate \ -DarchetypeGroupId=software.amazon.awssdk \ -DarchetypeArtifactId=archetype-app-quickstart \ -DarchetypeVersion=2.20.43
-
各プロンプトの 2 列目にリストされている値を入力します。
プロンプト 入力する値 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>
-
最後の値を入力すると、Maven は選択した内容を一覧表示します。
Y
を入力して確認するか、N
を入力して値を再入力します。
Maven は、入力した getstarted
値に基づいて artifactId
という名前が付けられたプロジェクトフォルダーを作成します。getstarted
フォルダー内で、レビューできる README.md
ファイル、pom.xml
ファイル、および src
ディレクトリを検索します。
Maven は以下のディレクトリーツリーを構築します。
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
以下は、pom.xml
プロジェクトファイルの内容を示しています。
dependencyManagement
セクションには AWS SDK for Java 2.x に対する依存関係が含まれており、dependencies
セクションには Amazon S3 に対する依存関係があります。プロジェクトでは Java 1.8 が使用されています。これは、maven.compiler.source
、maven.compiler.target
およびプロパティに 1.8
値があるためです。
<?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.20.43</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>
ステップ 3: コードを記述する
次のコードは Maven によって作成された App
クラスを示しています。main
メソッドはアプリケーションへのエントリポイントであり、Handler
クラスのインスタンスを作成してその sendRequest
メソッドを呼び出します。
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"); } }
Maven が作成する DependencyFactory
クラスには、S3Client
s3Client
ファクトリメソッドが含まれています。S3Client
インスタンスは Apache ベースの HTTP クライアントのインスタンスを使用します。これは、どの HTTP クライアントを使用するかを Maven が求めたときに apache-client
が指定されたためです。
DependencyFactory
は次のコードに示されています。
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(); } }
Handler
クラスにはプログラムのメインロジックが含まれています。Handler
のインスタンスが App
クラス内で作成されると、DependencyFactory
は S3Client
サービスクライアントを配置します。コードは、S3Client
インスタンスを使用して Amazon S3 サービスを呼び出します。
Maven は TODO
コメント付きの次の Handler
クラスを生成します。チュートリアルの次のステップでは、TODO
をコードに置き換えます。
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. } }
ロジックを設定するには、Handler
クラスのすべてのコンテンツを次のコードに置き換えます。sendRequest
メソッドが入力され、必要なインポートが追加されます。
このコードはまず、バケット名を一意にするために、System.currentTimeMillis()
を使用して生成された名前の最後の部分を使用して新しい S3 バケットを作成します。
createBucket()
メソッドでバケットを作成すると、プログラムは S3Client
の putObject
RequestBody.fromString
メソッドで作成された単純な文字列です。
最後に、プログラムは、cleanUp
メソッド内のオブジェクトを削除し、その後にバケットを削除します。
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"); } }
ステップ 4: アプリケーションを構築して実行する
プロジェクトが作成され、完全な Handler
クラスを含めたら、アプリケーションを構築して実行します。
-
IAM Identity Center セッションがアクティブであることを確認してください。そのためには、 AWS Command Line Interface コマンド
aws sts get-caller-identity
を実行してレスポンスを確認します。アクティブなセッションがない場合は、このセクションの手順を参照してください。 -
ターミナルまたはコマンドプロンプトウィンドウを開いて、プロジェクトディレクトリ
getstarted
に移動します。 -
プロジェクトを構築するには、以下のコマンドを使用します。
mvn clean package
-
次のコマンドを使用して、アプリケーションを実行します。
mvn exec:java -Dexec.mainClass="org.example.App"
プログラムが作成した新しいバケットとオブジェクトを表示するには、次のステップを実行します。
-
Handler.java
で、sendRequest
メソッド内のcleanUp(s3Client, bucket, key)
行をコメントアウトし、ファイルを保存します。 -
mvn clean package
を実行してプロジェクトを再構築します。 -
mvn exec:java -Dexec.mainClass="org.example.App"
を再実行してテキストオブジェクトをもう一度アップロードします。 -
S3 コンソール
にサインインして、新しく作成されたバケット内の新しい対象を表示します。
ファイルを表示した後、オブジェクトを削除し、その後にバケットを削除します。
成功
Maven プロジェクトがエラーなしで構築および実行された場合は、正常に完了しています! Java 2.x 用 SDK を使用して最初の Java アプリケーションを正常に構築しました。
クリーンアップ
このチュートリアルで作成されたリソースをクリーンアップするには、以下を行います。
-
まだ行っていない場合は、S3 コンソール
で、アプリケーションの実行時に作成されたオブジェクトとバケットをすべて削除します。 -
プロジェクトフォルダ (
getstarted
) を削除します。
次のステップ
これで基本を理解したので、次の事項を学習する準備が整いました。