

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

# Amazon Simple Notification Service を使用する
<a name="examples-simple-notification-service"></a>

Amazon Simple Notification Service では、アプリケーションからのリアルタイムの通知メッセージを複数の通信チャネル経由でサブスクライバーに簡単にプッシュできます。このトピックでは、Amazon SNS の基本機能の一部を実行する方法について説明します。

## トピックの作成
<a name="sns-create-topic"></a>

**トピック**は、メッセージの送信先システムを定義する通信チャネルの論理的なグループです。たとえば、AWS Lambda や HTTP ウェブフックへのメッセージのファンアウトなどです。Amazon SNS にメッセージを送信すると、トピックで定義されているチャネルに配信されます。これにより、サブスクライバーがメッセージを使用できるようになります。

トピックを作成するには、最初に、ビルダーの `name()` メソッドを使用して設定されたトピックの名前で [CreateTopicRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/CreateTopicRequest.html) オブジェクトを構築します。その後、[SnsClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/SnsClient.html) の `createTopic()` メソッドを使用して、リクエストオブジェクトを Amazon SNS に送信します。次のコードスニペットに示すように、このリクエストの結果を [CreateTopicResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/CreateTopicResponse.html) オブジェクトとしてキャプチャできます。

 **インポート** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
import software.amazon.awssdk.services.sns.model.CreateTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
```

 **Code** 

```
    public static String createSNSTopic(SnsClient snsClient, String topicName ) {

        CreateTopicResponse result = null;
        try {
            CreateTopicRequest request = CreateTopicRequest.builder()
                    .name(topicName)
                    .build();

            result = snsClient.createTopic(request);
            return result.topicArn();
        } catch (SnsException e) {

            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/CreateTopic.java) で完全な例をご覧ください。

## Amazon SNS トピックをリストする
<a name="sns-crelistate-topics"></a>

既存の Amazon SNS トピックのリストを取得するには、[ListTopicsRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/ListTopicsRequest.html) オブジェクトを構築します。次に、Amazon SNS の `listTopics()` メソッドを使用して、リクエストオブジェクトを `SnsClient` に送信します。このリクエストの結果は、[ListTopicsResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/ListTopicsResponse.html) オブジェクトとしてキャプチャできます。

次のコードスニペットは、リクエストの HTTP ステータスコードと、Amazon SNS トピックの Amazon リソースネーム (ARN) のリストを出力します。

 **インポート** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.ListTopicsRequest;
import software.amazon.awssdk.services.sns.model.ListTopicsResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
```

 **Code** 

```
    public static void listSNSTopics(SnsClient snsClient) {

        try {
            ListTopicsRequest request = ListTopicsRequest.builder()
                   .build();

            ListTopicsResponse result = snsClient.listTopics(request);
            System.out.println("Status was " + result.sdkHttpResponse().statusCode() + "\n\nTopics\n\n" + result.topics());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/ListTopics.java) で完全な例をご覧ください。

## トピックへのエンドポイントのサブスクライブ
<a name="sns-subscribe-endpoint-topic"></a>

トピックを作成したら、そのトピックのエンドポイントとなる通信チャネルを設定できます。メッセージは、Amazon SNS による受信後にこれらのエンドポイントに配信されます。

通信チャネルをトピックのエンドポイントとして設定するには、そのエンドポイントをトピックにサブスクライブします。開始するには、[SubscribeRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/SubscribeRequest.html) オブジェクトを構築します。通信チャネル (`lambda` や `email` など) を `protocol()` として指定します。`endpoint()` を関連する出力場所 (Lambda 関数の ARN や E メールアドレスなど) に設定し、サブスクライブするトピックの ARN を `topicArn()` として設定します。`SnsClient` の `subscribe()` メソッドを使用して、リクエストオブジェクトを Amazon SNS に送信します。このリクエストの結果は、[SubscribeResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/SubscribeResponse.html) オブジェクトとしてキャプチャできます。

次のコードスニペットは、トピックに E メールアドレスをサブスクライブする方法を示しています。

 **インポート** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;
```

 **Code** 

```
    public static void subEmail(SnsClient snsClient, String topicArn, String email) {

        try {
            SubscribeRequest request = SubscribeRequest.builder()
                .protocol("email")
                .endpoint(email)
                .returnSubscriptionArn(true)
                .topicArn(topicArn)
                .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/SubscribeEmail.java) で完全な例をご覧ください。

## トピックへのメッセージの発行
<a name="sns-publish-message-topic"></a>

トピックと 1 つ以上のエンドポイントを設定したら、そのトピックにメッセージを発行できます。開始するには、[PublishRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/PublishRequest.html) オブジェクトを構築します。送信する `message()` と、送信先のトピック (`topicArn()`) の ARN を指定します。次に、Amazon SNS の `publish()` メソッドを使用して、リクエストオブジェクトを `SnsClient` に送信します。このリクエストの結果は、[PublishResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/PublishResponse.html) オブジェクトとして取得できます。

 **インポート** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
```

 **Code** 

```
    public static void pubTopic(SnsClient snsClient, String message, String topicArn) {

        try {
            PublishRequest request = PublishRequest.builder()
                .message(message)
                .topicArn(topicArn)
                .build();

            PublishResponse result = snsClient.publish(request);
            System.out.println(result.messageId() + " Message sent. Status is " + result.sdkHttpResponse().statusCode());

         } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
         }
    }
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/PublishTopic.java) で完全な例をご覧ください。

## トピックからのエンドポイントの登録解除
<a name="sns-unsubscribe-endpoint-topic"></a>

トピックのエンドポイントとして設定されている通信チャネルを削除できます。その後、トピック自体は引き続き存在し、そのトピックに設定されている他のエンドポイントにメッセージを配信します。

トピックのエンドポイントとしての通信チャネルを削除するには、そのエンドポイントをトピックから登録解除します。開始するには、[UnsubscribeRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/UnsubscribeRequest.html) オブジェクトを構築し、登録解除するトピックの ARN を `subscriptionArn()` として設定します。次に、`unsubscribe()` の `SnsClient` メソッドを使用して、リクエストオブジェクトを SNS に送信します。このリクエストの結果は、[UnsubscribeResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/UnsubscribeResponse.html) オブジェクトとしてキャプチャできます。

 **インポート** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.UnsubscribeRequest;
import software.amazon.awssdk.services.sns.model.UnsubscribeResponse;
```

 **Code** 

```
    public static void unSub(SnsClient snsClient, String subscriptionArn) {

        try {
            UnsubscribeRequest request = UnsubscribeRequest.builder()
                .subscriptionArn(subscriptionArn)
                .build();

            UnsubscribeResponse result = snsClient.unsubscribe(request);

            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode()
                + "\n\nSubscription was removed for " + request.subscriptionArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/Unsubscribe.java) で完全な例をご覧ください。

## トピックの削除
<a name="sns-delete-topic"></a>

Amazon SNS トピックを削除するには、最初に、トピックの ARN をビルダーの `topicArn()` メソッドとして設定して [DeleteTopicRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/DeleteTopicRequest.html) オブジェクトを構築します。次に、Amazon SNS の `deleteTopic()` メソッドを使用して、リクエストオブジェクトを `SnsClient` に送信します。次のコードスニペットに示すように、このリクエストの結果を [DeleteTopicResponse](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sns/model/DeleteTopicResponse.html) オブジェクトとしてキャプチャできます。

 **インポート** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.DeleteTopicRequest;
import software.amazon.awssdk.services.sns.model.DeleteTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
```

 **Code** 

```
    public static void deleteSNSTopic(SnsClient snsClient, String topicArn ) {

        try {
            DeleteTopicRequest request = DeleteTopicRequest.builder()
                .topicArn(topicArn)
                .build();

            DeleteTopicResponse result = snsClient.deleteTopic(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/sns/src/main/java/com/example/sns/DeleteTopic.java) で完全な例をご覧ください。

詳細については、「[Amazon Simple Notification Service デベロッパーガイド](https://docs.aws.amazon.com/sns/latest/dg/)」を参照してください。