

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# を使用したシンプルなアプリケーションの作成 AWS SDK for Java 2.x
<a name="get-started-tutorial"></a>

このチュートリアルでは、[Apache Maven](https://maven.apache.org/) を使用して SDK for Java 2.x の依存関係を定義し、 Amazon S3 に接続してファイルをアップロードするコードを記述する方法を説明します。

このチュートリアルを完了するには、次の手順に従ってください。
+  [ステップ 1: このチュートリアルのために設定する](#get-started-setup) 
+  [ステップ 2: プロジェクトを作成する](#get-started-projectsetup) 
+  [ステップ 3: コードを記述する](#get-started-code) 
+  [ステップ 4: アプリケーションを構築して実行する](#get-started-run) 

## ステップ 1: このチュートリアルのために設定する
<a name="get-started-setup"></a>

このチュートリアルを開始する前に、以下を実行する必要があります
+ アクセス許可 Amazon S3
+ へのシングルサインオン AWS のサービス を使用して にアクセスするように設定された Java 開発環境 AWS IAM アイデンティティセンター

[設定の概要](setup.md#setup-overview) の手順に従って、このチュートリアルの設定を行ってください。Java SDK の[シングルサインオンアクセスを使用して開発環境を設定し](get-started-auth.md#setup-credentials)、[アクティブな AWS アクセスポータルセッション](get-started-auth.md#setup-login-sso)を作成したら、このチュートリアルのステップ 2 に進みます。

## ステップ 2: プロジェクトを作成する
<a name="get-started-projectsetup"></a>

このチュートリアル用のプロジェクトを作成するには、プロジェクトの設定方法に関する入力を求める Maven コマンドを実行します。すべての入力と確認が完了すると、Maven は `pom.xml` を作成してプロジェクトの構築を終了し、スタブ Java ファイルを作成します。

1. ターミナルまたはコマンドプロンプトウィンドウを開き、`Desktop` や `Home` フォルダなど、任意のディレクトリに移動します。

1. ターミナルに以下のコマンドを入力して、`Enter` を押します。

   ```
   mvn archetype:generate \
     -DarchetypeGroupId=software.amazon.awssdk \
     -DarchetypeArtifactId=archetype-app-quickstart \
     -DarchetypeVersion=2.27.21
   ```

1. 各プロンプトの 2 列目にリストされている値を入力します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sdk-for-java/latest/developer-guide/get-started-tutorial.html)

1. 最後の値を入力すると、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` プロジェクトファイルの内容を示しています。

### `pom.xml`
<a name="projectsetup-collapse2"></a>

`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.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>
```

## ステップ 3: コードを記述する
<a name="get-started-code"></a>

次のコードは Maven によって作成された `App` クラスを示しています。`main` メソッドはアプリケーションへのエントリポイントであり、`Handler` クラスのインスタンスを作成してその `sendRequest` メソッドを呼び出します。

### `App` クラス
<a name="projectsetup-collapse2"></a>

```
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` クラスには、[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html) インスタンスを構築して返す `s3Client` ファクトリメソッドが含まれています。`S3Client` インスタンスは Apache ベースの HTTP クライアントのインスタンスを使用します。これは、どの HTTP クライアントを使用するかを Maven が求めたときに `apache-client` が指定されたためです。

`DependencyFactory` は次のコードに示されています。

### `DependencyFactory` クラス
<a name="code-collapse2"></a>

```
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`* をコードに置き換えます。

### Maven によって生成された `Handler` クラス
<a name="code-collapsible3"></a>

```
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` メソッドが入力され、必要なインポートが追加されます。

### `Handler` クラス、実装済み
<a name="code-collapse4"></a>

このコードはまず、バケット名を一意にするために、`System.currentTimeMillis()` を使用して生成された名前の最後の部分を使用して新しい S3 バケットを作成します。

`createBucket()` メソッドでバケットを作成すると、プログラムは `S3Client` の [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#putObject(software.amazon.awssdk.services.s3.model.PutObjectRequest,software.amazon.awssdk.core.sync.RequestBody)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#putObject(software.amazon.awssdk.services.s3.model.PutObjectRequest,software.amazon.awssdk.core.sync.RequestBody)) メソッドを使用してオブジェクトをアップロードします。オブジェクトの内容は、`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: アプリケーションを構築して実行する
<a name="get-started-run"></a>

プロジェクトが作成され、完全な `Handler` クラスを含めたら、アプリケーションを構築して実行します。

1. IAM Identity Center セッションがアクティブであることを確認してください。これを行うには、 AWS Command Line Interface コマンドを実行してレスポンス`aws sts get-caller-identity`を確認します。アクティブなセッションがない場合は、[このセクション](get-started-auth.md#setup-login-sso)の手順を参照してください。

1. ターミナルまたはコマンドプロンプトウィンドウを開いて、プロジェクトディレクトリ `getstarted` に移動します。

1. プロジェクトを構築するには、以下のコマンドを使用します。

   ```
   mvn clean package
   ```

1. 次のコマンドを使用して、アプリケーションを実行します。

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

プログラムが作成した新しいバケットとオブジェクトを表示するには、次のステップを実行します。

1. `Handler.java` で、`sendRequest` メソッド内の `cleanUp(s3Client, bucket, key)` 行をコメントアウトし、ファイルを保存します。

1. `mvn clean package` を実行してプロジェクトを再構築します。

1. `mvn exec:java -Dexec.mainClass="org.example.App"` を再実行してテキストオブジェクトをもう一度アップロードします。

1. [S3 コンソール](https://console.aws.amazon.com/s3/)にサインインして、新しく作成されたバケット内の新しい対象を表示します。

ファイルを表示した後、オブジェクトを削除し、その後にバケットを削除します。

### Success
<a name="get-started-success"></a>

Maven プロジェクトがエラーなしで構築および実行された場合は、正常に完了しています\$1 Java 2.x 用 SDK を使用して最初の Java アプリケーションを正常に構築しました。

### クリーンアップ
<a name="cleanup"></a>

このチュートリアルで作成されたリソースをクリーンアップするには、以下を行います。
+ まだ行っていない場合は、[S3 コンソール](https://console.aws.amazon.com/s3/)で、アプリケーションの実行時に作成されたオブジェクトとバケットをすべて削除します。
+ プロジェクトフォルダ (`getstarted`) を削除します。

## 次の手順
<a name="get-started-next"></a>

これで基本を理解したので、次の事項を学習する準備が整いました。
+  [の使用 Amazon S3](examples-s3.md) 
+  、、および[さまざまなデータベースサービス](examples-databases.md)など[Amazon EC2](examples-ec2.md)、[他の の操作 Amazon Web Services](work-with-services.md) [DynamoDB](examples-dynamodb.md) 
+  [SDK を使用する](using.md) 
+  [AWS SDK for Java](security.md) のセキュリティ**