

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

# HTTP アクションメッセージのバッチ処理
<a name="http_batching"></a>

バッチ処理を使用して、1 つのリクエストで複数の HTTP アクションメッセージを送信できます。

## 概要:
<a name="batching_overview"></a>

バッチ処理を使用すると、 AWS IoT Core ルールエンジンから HTTP エンドポイントにバッチでメッセージを送信できます。この機能は、HTTP アクションの実行数を減らすことでコストを削減し、新しい接続の確立に関連するオーバーヘッドを減らすことで効率を向上させるのに役立ちます。

**注記**  
バッチ処理された HTTP アクションは 1 つのアクションとして計測されます。 AWS IoT Core ルールエンジンからダウンストリームサービスに出力されるバッチ処理されたアウトバウンドペイロードのサイズに基づいて、5 kiB 単位で計測されます。詳細については、[AWS IoT Core 料金表ページ](https://aws.amazon.com/iot-core/pricing/) を参照してください。

IoT ルールアクションの定義でバッチ処理を有効にすると、次のパラメータを設定できるようになります。

`maxBatchOpenMs`  
送信メッセージが他のメッセージがバッチを作成するのを待機する最大時間 (ミリ秒単位）。設定が高いほど、バッチ処理された HTTP アクションのレイテンシーが長くなります。  
最小値: 5 ミリ秒。最大値: 200 ミリ秒。  
デフォルト値: 20 ミリ秒  
[置換テンプレート](iot-substitution-templates.md)をサポート: いいえ

`maxBatchSize`  
1 回の IoT ルールアクション実行でまとめてバッチ処理されるメッセージの最大数。  
最小値: 2 メッセージ。最大値: 10 メッセージ  
デフォルト値: 10 メッセージ  
[置換テンプレート](iot-substitution-templates.md)をサポート: いいえ

`maxBatchSizeBytes`  
メッセージバッチの最大サイズ、バイト単位。  
最小値: 100 バイト。最大値: 131,072 バイト  
デフォルト値: 5120 バイト  
[置換テンプレート](iot-substitution-templates.md)をサポート: いいえ

**重要**  
複数のバッチパラメータを指定すると、最初の制限に達するとバッチ処理が完了します。たとえば、最大バッチオープン時間として 100 ミリ秒、最大バッチサイズとして 5 kiB を指定し、ルールエンジンが 100 ミリ秒以内に 2 kiB のみをバッチ処理する場合、2 kiB バッチが作成されて送信されます。

## バッチでの HTTP ヘッダーの使用
<a name="batching_http_headers"></a>

HTTP アクションでヘッダーを使用する場合、バッチ処理されたリクエストは、バッチに追加された最後のメッセージ (最後に発行したメッセージではない) のヘッダー値を使用します。次のいずれかのヘッダー値を使用することをお勧めします。
+ バッチ内のすべてのメッセージで同一
+ すべてのメッセージに適用可能 (認証情報など)

ヘッダーは HTTP リクエストとともに送信され、メッセージ本文の一部ではありません。

**注記**  
バッチ処理が有効になっている場合:  
バッチ処理されたリクエストには、バッチが JSON 配列として送信されるため、 `Content-Type: application/json`ヘッダーが自動的に含まれます。
バッチ内の最後のメッセージが、発行した最後のメッセージであることを保証することはできません。これは、バッチに書き込まれた最後のメッセージです。

## ペイロードの例
<a name="batching_payload"></a>

次の例は、HTTP エンドポイントに送信されるバッチ処理されたメッセージペイロードの構造を示しています。

```
[
  {
    "user_id": "user1",
    "steps_today": 1000
  },
  {
    "user_id": "user2",
    "steps_today": 21000
  },
  {
    "user_id": "user8",
    "steps_today": 1500
  },
  ...
]
```

## 制限事項
<a name="batching_limitations"></a>

バッチ処理の制限は次のとおりです。
+ AWS IoT Core は、メッセージの全体的な順序付けを保証しません。バッチ処理は各ホストでローカルに実行されるため、バッチ内のメッセージが受信された順序とは異なる順序で処理される可能性があります。
+ AWS IoT Core は、受信者側でメッセージ処理をサポートしていません。ダウンストリームサービスがデータをバッチで受け入れて処理するように設定されていることを確認するのはお客様の責任です。
+ クロスアカウントバッチ処理は、メッセージが同じリソース識別子 (HTTP URL またはリソース ARN) 宛てであってもサポートされていません。
+ AWS IoT Core は、バッチサイズが指定した設定を満たすことを保証するものではありません。バッチは、タイミングとメッセージフローに基づいて設定された制限よりも小さい場合があります。
+ バッチ処理が有効になっている場合、バイナリペイロード (UTF-8 以外のデータ) はサポートされていません。UTF-8 テキストペイロード (JSON など) のみが受け入れられます。バイナリデータを送信するには、base64 でエンコードしてから HTTP アクションに送信し、受信エンドポイントでデコードします。たとえば、IoT ルールの[エンコード関数](iot-sql-functions.html#iot-function-encode)を使用してバイナリペイロードをエンコードできます。または、IoT デバイスでバイナリペイロードをエンコードして公開することもできます AWS IoT Core。

## バッチ処理のエラーアクション
<a name="batching_errors"></a>

エラーアクション定義で別のバッチロジックを定義することはできません。ただし、プライマリアクションでバッチ処理ロジックを定義している場合、エラーアクションはバッチ処理をサポートします。

バッチリクエストが失敗すると、 AWS IoT Core ルールエンジンは [HTTP アクションの再試行ロジック](https-rule-action.md#https-rule-action-retry-logic)に従います。最後の再試行後、失敗したバッチ全体に対してエラーアクションが呼び出されます。

バッチ処理が有効になっているエラーメッセージの例を次に示します。

```
{
    "ruleName": "FailedTopicRule",
    "topic": "topic/rulesengine",
    "payloadsWithMetadata": [
        {
            "id": 1,
            "cloudwatchTraceId": "bebd6d93-6d4a-899e-9e40-56e82252d2be",
            "clientId": "Test",
            "sourceIp": "10.0.0.0",
            "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0="
        },
        {
            "id": 2,
            "cloudwatchTraceId": "af94d3b8-0b18-1dbf-2c7d-513f5cb9e2e1",
            "clientId": "Test",
            "sourceIp": "10.0.0.0",
            "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0="
        },
        {
            "id": 3,
            "cloudwatchTraceId": "ca441266-c2ce-c916-6aee-b9e5c7831675",
            "clientId": "Test",
            "sourceIp": "10.0.0.0",
            "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0="
        }
    ],
    "failures": [
        {
            "affectedIds": [
                1,
                2,
                3
            ],
            "failedAction": "HttpAction",
            "failedResource": "https://example.foobar.com/HttpAction",
            "errorMessage": "HttpAction failed to make a request to the specified endpoint. StatusCode: 500. Reason: Internal Server Error."
        },
        {
            "affectedIds": [
                3
            ],
            "failedAction": "S3Action",
            "failedResource": "amzn-s3-demo-bucket",
            "errorMessage": "Failed to put S3 object. The error received was The specified bucket does not exist"
        },
        {
            "affectedIds": [
                3
            ],
            "failedAction": "LambdaAction",
            "failedResource": "arn:aws:lambda:us-west-2:123456789012:function:dummy",
            "errorMessage": "Failed to invoke lambda function. Received Server error from Lambda. The error code is 403"
        }
    ]
}
```

**注記**  
バッチ処理されたアクションの失敗は、より大きなエラーアクションペイロードも生成するため、サイズによるエラーアクションの失敗の可能性が高くなる可能性があります。`ErrorActionFailure` メトリクスを使用して、エラーアクションの失敗をモニタリングできます。詳細については「[ルールアクションのメトリクス](metrics_dimensions.md#rule-action-metrics)」を参照してください。

## を使用した HTTP アクションメッセージのバッチ処理 AWS CLI
<a name="batching_procedure"></a>

### バッチ処理によるルールアクションの作成または更新
<a name="batching_create_update_rule"></a>

1. 適切な AWS CLI コマンドを使用して、ルールを作成または更新します。
   + 新しいルールを作成するには、[create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html) コマンドを使用します。

     ```
     aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```
   + 既存のルールを更新するには、 [replace-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/replace-topic-rule.html) コマンドを使用します。

     ```
     aws iot replace-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```

1. トピックルールペイロードで enableBatching パラメータを true に設定して、バッチ処理機能を有効にします。

   ```
   {
           "topicRulePayload": {
           "sql": "SELECT * FROM 'some/topic'", 
           "ruleDisabled": false,
           "awsIotSqlVersion": "2016-03-23", 
           "actions": [
               { 
                   "http": { 
                       "url": "https://www.example.com/subpath",
                       "confirmationUrl": "https://www.example.com", 
                       "headers": [
                           { 
                               "key": "static_header_key", 
                               "value": "static_header_value" 
                           },
                           { 
                               "key": "substitutable_header_key", 
                               "value": "${value_from_payload}" 
                            }
                       ],
                       "enableBatching": true,
                       "batchConfig": {
                          "maxBatchOpenMs": 100,
                          "maxBatchSize": 5,
                          "maxBatchSizeBytes": 1024
                       }
                   }
               }
         ]
   }
   ```

1. バッチ処理パラメータを設定します。すべてのバッチパラメータを指定する必要はありません。1、2、または 3 つのバッチパラメータすべてを指定できます。バッチパラメータを指定しない場合、ルールエンジンはそのパラメータをデフォルト値で更新します。バッチパラメータとそのデフォルト値の詳細については、[「HTTP パラメータ](https-rule-action.md#https-rule-action-parameters)」を参照してください。