

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

# Amazon SQS Java SDKの例
<a name="sqs-java-tutorials"></a>

AWS SDK for Java を使用すると、Amazon SQS やその他の AWS のサービス とやり取りする Java アプリケーションを構築できます。
+ SDK をインストールしてセットアップする[開始方法](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getting-started.html)の*AWS SDK for Java 2.xデベロッパーガイド*を参照してください。
+ キューの作成やメッセージの送信方法など、基本的な操作については、「*AWS SDK for Java 2.x 開発ガイド*」の「[Amazon SQS メッセージキューの使用](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/sqs-examples.html)」を参照してください。
+ このガイドには、次のような追加の Amazon SQS 機能の例も含まれています。
  + [Amazon SQS キューにおけるサーバー側の暗号化の使用](sqs-java-configure-sse.md)
  + [Amazon SQS キューのタグの設定](sqs-java-add-update-remove-tag-queue.md)
  + [Amazon SQS キューへのメッセージ属性の送信](sqs-java-send-message-with-attributes.md)

# Amazon SQS キューにおけるサーバー側の暗号化の使用
<a name="sqs-java-configure-sse"></a>

を使用して AWS SDK for Java 、Amazon SQS キューにサーバー側の暗号化 (SSE) を追加します。各キューは AWS Key Management Service (AWS KMS) KMS キーを使用してデータ暗号化キーを生成します。この例では AWS Amazon SQS のマネージド KMS キーを使用します。

SSE および KMS キーのロールの使用における詳しい情報については、「[Amazon SQS での保管中の暗号化](sqs-server-side-encryption.md)」をご参照ください。

## 既存のキューに SSE を追加
<a name="sqs-java-configure-sse-existing-queue"></a>

既存のキューのサーバーサイドの暗号化を有効にするには、`[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)`メソッドを使用して`KmsMasterKeyId`属性を設定します。

次のコード例では、 を Amazon SQS の AWS マネージド KMS キー AWS KMS key として設定します。また、この例では、[AWS KMS key 再利用期間](sqs-server-side-encryption.md#sqs-sse-key-terms)を 140 秒に設定します。

 サンプルコードを実行する前に、 AWS 認証情報が設定されていることを確認してください。詳細については、「 *AWS SDK for Java 2.x デベロッパーガイド*[」の「開発用の AWS 認証情報とリージョンの設定](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials)」を参照してください。

```
    public static void addEncryption(String queueName, String kmsMasterKeyAlias) {
        SqsClient sqsClient = SqsClient.create();

        GetQueueUrlRequest urlRequest = GetQueueUrlRequest.builder()
                .queueName(queueName)
                .build();

        GetQueueUrlResponse getQueueUrlResponse;
        try {
            getQueueUrlResponse = sqsClient.getQueueUrl(urlRequest);
        } catch (QueueDoesNotExistException e) {
            LOGGER.error(e.getMessage(), e);
            throw new RuntimeException(e);
        }
        String queueUrl = getQueueUrlResponse.queueUrl();


        Map<QueueAttributeName, String> attributes = Map.of(
                QueueAttributeName.KMS_MASTER_KEY_ID, kmsMasterKeyAlias,
                QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS, "140" // Set the data key reuse period to 140 seconds.
        );                                                                  // This is how long SQS can reuse the data key before requesting a new one from KMS.

        SetQueueAttributesRequest attRequest = SetQueueAttributesRequest.builder()
                .queueUrl(queueUrl)
                .attributes(attributes)
                .build();
        try {
            sqsClient.setQueueAttributes(attRequest);
            LOGGER.info("The attributes have been applied to {}", queueName);
        } catch (InvalidAttributeNameException | InvalidAttributeValueException e) {
            LOGGER.error(e.getMessage(), e);
            throw new RuntimeException(e);
        } finally {
            sqsClient.close();
        }
    }
```

## キューのSSEの無効化
<a name="sqs-java-disable-sse"></a>

既存のキューに対してサーバーサイドの暗号化を無効にするには、`SetQueueAttributes` メソッドを使用して、`KmsMasterKeyId`属性を空の文字列に設定します。

**重要**  
`null` は、の有効な値ではありません。`KmsMasterKeyId`

## SSEを使用してキューを作成する
<a name="sqs-java-configure-sse-create-queue"></a>

キューの作成時にSSEを有効にするには、API メソッド`KmsMasterKeyId`に属性`[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`を追加します。

以下の例では、SSE を有効にして新しいキューを作成する方法を示します。このキューは、Amazon SQS の AWS マネージド KMS キーを使用します。また、この例では、[AWS KMS key 再利用期間](sqs-server-side-encryption.md#sqs-sse-key-terms)を 160 秒に設定します。

 サンプルコードを実行する前に、 AWS 認証情報が設定されていることを確認してください。詳細については、「 *AWS SDK for Java 2.x デベロッパーガイド*」の[「開発用の AWS 認証情報とリージョンの設定](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials)」を参照してください。

```
// Create an SqsClient for the specified Region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Create a hashmap for the attributes. Add the key alias and reuse period to the hashmap.
HashMap<QueueAttributeName, String> attributes = new HashMap<QueueAttributeName, String>();
final String kmsMasterKeyAlias = "alias/aws/sqs";  // the alias of the AWS managed KMS key for Amazon SQS.
attributes.put(QueueAttributeName.KMS_MASTER_KEY_ID, kmsMasterKeyAlias);
attributes.put(QueueAttributeName.KMS_DATA_KEY_REUSE_PERIOD_SECONDS, "140");				

// Add the attributes to the CreateQueueRequest.
CreateQueueRequest createQueueRequest =
                CreateQueueRequest.builder()
                        .queueName(queueName)
                        .attributes(attributes)
                        .build();
sqsClient.createQueue(createQueueRequest);
```

## SSE属性の取得
<a name="sqs-java-get-sse-attributes"></a>

キュー属性の取得の詳細については、*Amazon Simple キューサービス API リファレンス*の[例](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html#API_GetQueueAttributes_Examples)をご参照ください。

特定のキューの KMS キー ID またはデータキーの再利用期間を取得する場合、`[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)` メソッドを実行して `KmsMasterKeyId` および `KmsDataKeyReusePeriodSeconds` 値を取得します。

# Amazon SQS キューのタグの設定
<a name="sqs-java-add-update-remove-tag-queue"></a>

コスト配分タグを使用して、Amazon SQSキューの整理および識別するようにします。 AWS SDK for Javaを使用してタグを設定する方法を以下の例に示します。詳細については、「[Amazon SQSコスト配分タグ](sqs-queue-tags.md)」を参照してください。

 サンプルコードを実行する前に、 AWS 認証情報が設定されていることを確認してください。詳細については、「 *AWS SDK for Java 2.x デベロッパーガイド*」の[「開発用の AWS 認証情報とリージョンの設定](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials)」を参照してください。

## タグを一覧表にする
<a name="sqs-java-list-tags"></a>

キューのタグを一覧表示するには、`ListQueueTags`の方法を使用します。

```
// Create an SqsClient for the specified region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Get the queue URL.
String queueName = "MyStandardQ1";
GetQueueUrlResponse getQueueUrlResponse =
        sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();

// Create the ListQueueTagsRequest.
final ListQueueTagsRequest listQueueTagsRequest = 
                                  ListQueueTagsRequest.builder().queueUrl(queueUrl).build();

// Retrieve the list of queue tags and print them.
final ListQueueTagsResponse listQueueTagsResponse =
                                  sqsClient.listQueueTags(listQueueTagsRequest);
System.out.println(String.format("ListQueueTags: \tTags for queue %s are %s.\n",
                queueName, listQueueTagsResponse.tags() ));
```

## タグの追加または更新するには
<a name="sqs-java-add-tags"></a>

キューのタグ値を追加または更新するには、`TagQueue`の方法を使用します。

```
 // Create an SqsClient for the specified Region.
SqsClient sqsClient = SqsClient.builder().region(Region.US_WEST_1).build();

// Get the queue URL.
String queueName = "MyStandardQ1";
GetQueueUrlResponse getQueueUrlResponse =
        sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
String queueUrl = getQueueUrlResponse.queueUrl();	

// Build a hashmap of the tags.
final HashMap<String, String> addedTags = new HashMap<>();
        addedTags.put("Team", "Development");
        addedTags.put("Priority", "Beta");
        addedTags.put("Accounting ID", "456def");

//Create the TagQueueRequest and add them to the queue.
final TagQueueRequest tagQueueRequest = TagQueueRequest.builder()
        .queueUrl(queueUrl)
        .tags(addedTags)
        .build();
sqsClient.tagQueue(tagQueueRequest);
```

## タグの削除
<a name="sqs-java-remove-tags"></a>

キューから1つ以上のタグを削除するには、`UntagQueue`の方法を使用します。次の例では、`Accounting ID` タグを 削除しています。

```
 
// Create the UntagQueueRequest.
final UntagQueueRequest untagQueueRequest = UntagQueueRequest.builder()
        .queueUrl(queueUrl)
        .tagKeys("Accounting ID")
        .build();
        
// Remove the tag from this queue.
sqsClient.untagQueue(untagQueueRequest);
```

# Amazon SQS キューへのメッセージ属性の送信
<a name="sqs-java-send-message-with-attributes"></a>

*メッセージ属性*をメッセージに使用すると、構造化メタデータ (タイムスタンプ、地理空間データ、署名、識別子) などを指定することができます。詳細については、「[Amazon SQS メッセージ属性](sqs-message-metadata.md#sqs-message-attributes)」を参照してください。

 サンプルコードを実行する前に、 AWS 認証情報が設定されていることを確認してください。詳細については、「 *AWS SDK for Java 2.x デベロッパーガイド*」の[「開発用の AWS 認証情報とリージョンの設定](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials)」を参照してください。

## 属性の定義
<a name="sqs-java-define-attributes"></a>

メッセージの属性を定義するには、`[MessageAttributeValue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_MessageAttributeValue.html)` データタイプを使用する以下のコードを追加します。詳細については、「[メッセージ属性コンポーネント](sqs-message-metadata.md#message-attribute-components)」および「[メッセージ属性のデータ型](sqs-message-metadata.md#message-attribute-data-types)」を参照してください。

はメッセージ本文とメッセージ属性のチェックサム AWS SDK for Java を自動的に計算し、Amazon SQS が返すデータと比較します。詳細については、*[AWS SDK for Java 2.x デベロッパーガイド](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/)*を参照してください。他のプログラミング言語については、「[メッセージ属性のMD5メッセージダイジェストの計算](sqs-message-metadata.md#sqs-attributes-md5-message-digest-calculation)」を参照してください。

------
#### [ String ]

この例では、値が`String`である、`Name`という名前の`Jane`属性を定義します。

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("Name", new MessageAttributeValue()
.withDataType("String")
.withStringValue("Jane"));
```

------
#### [ Number ]

この例では、値が`Number`である、`AccurateWeight`という名前の`230.000000000000000001`属性を定義します。

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("AccurateWeight", new MessageAttributeValue()
.withDataType("Number")
.withStringValue("230.000000000000000001"));
```

------
#### [ Binary ]

この例では、初期化されていない10バイト配列の値を持つ、`Binary`という名前の`ByteArray`属性を定義します。

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("ByteArray", new MessageAttributeValue()
.withDataType("Binary")
.withBinaryValue(ByteBuffer.wrap(new byte[10])));
```

------
#### [ String (custom) ]

この例では、値が`String.EmployeeId`である、`EmployeeId`という名前のカスタム属性`ABC123456`を定義します。

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("EmployeeId", new MessageAttributeValue()
.withDataType("String.EmployeeId")
.withStringValue("ABC123456"));
```

------
#### [ Number (custom) ]

この例では、値が`Number.AccountId`である、`AccountId`という名前のカスタム属性`000123456`を定義します。

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("AccountId", new MessageAttributeValue()
.withDataType("Number.AccountId")
.withStringValue("000123456"));
```

**注記**  
ベースデータタイプは`Number`であるため、`[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)`メソッドは`123456`を返します。

------
#### [ Binary (custom) ]

この例では、初期化されていない10バイト配列の値を持つ、`Binary.JPEG`という名前のカスタム属性`ApplicationIcon`を定義します。

```
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
messageAttributes.put("ApplicationIcon", new MessageAttributeValue()
.withDataType("Binary.JPEG")
.withBinaryValue(ByteBuffer.wrap(new byte[10])));
```

------

## 属性を含むメッセージの送信
<a name="sqs-java-send-attributes"></a>

この例では、`SendMessageRequest`メッセージを送信する前に属性を追加します。

```
// Send a message with an attribute.
final SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.withMessageBody("This is my message text.");
sendMessageRequest.withQueueUrl(myQueueUrl);
sendMessageRequest.withMessageAttributes(messageAttributes);
sqs.sendMessage(sendMessageRequest);
```

**重要**  
First-In-First-Out(FIFO)キューにメッセージを送信する場合は、メッセージグループIDを提供した`sendMessage`後*で、* メソッドが実行されることを確認します。  
`[SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)`の代わりに`[SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)` を使用する場合は、バッチの各メッセージに対してメッセージ属性を指定する必要があります。