Amazon PutEventsで を使用してイベントを送信する EventBridge - Amazon EventBridge

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

Amazon PutEventsで を使用してイベントを送信する EventBridge

PutEvents アクションは、1 回のリクエスト EventBridge で複数のイベントを に送信します。詳細については、「Amazon EventBridge API リファレンスPutEvents」の「」とAWS CLI 「 コマンドリファレンス」の「put-events」を参照してください。

PutEvents リクエストでサポートされているエントリの数は制限されています。詳細については、「Amazon EventBridge クォータ」を参照してください。PutEvents オペレーションでは、リクエストの自然な順序ですべてのエントリを処理するように試みます。を呼び出すとPutEvents、 は各イベントに一意の ID を EventBridge 割り当てます。

次の Java コードの例では、2 つの同じイベントを に送信します EventBridge。

AWS SDK for Java Version 2.x
EventBridgeClient eventBridgeClient = EventBridgeClient.builder().build(); PutEventsRequestEntry requestEntry = PutEventsRequestEntry.builder() .resources("resource1", "resource2") .source("com.mycompany.myapp") .detailType("myDetailType") .detail("{ \"key1\": \"value1\", \"key2\": \"value2\" }") .build(); List < PutEventsRequestEntry > requestEntries = new ArrayList < PutEventsRequestEntry > (); requestEntries.add(requestEntry); PutEventsRequest eventsRequest = PutEventsRequest.builder() .entries(requestEntries) .build(); PutEventsResponse result = eventBridgeClient.putEvents(eventsRequest); for (PutEventsResultEntry resultEntry: result.entries()) { if (resultEntry.eventId() != null) { System.out.println("Event Id: " + resultEntry.eventId()); } else { System.out.println("PutEvents failed with Error Code: " + resultEntry.errorCode()); } }
AWS SDK for Java Version 1.0
EventBridgeClient eventBridgeClient = EventBridgeClient.builder().build(); PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); PutEventsRequest request = new PutEventsRequest() .withEntries(requestEntry, requestEntry); PutEventsResult result = awsEventsClient.putEvents(request); for (PutEventsResultEntry resultEntry : result.getEntries()) { if (resultEntry.getEventId() != null) { System.out.println("Event Id: " + resultEntry.getEventId()); } else { System.out.println("Injection failed with Error Code: " + resultEntry.getErrorCode()); } }

このコードの実行後、PutEvents の結果には応答配列のエントリが含まれます。応答配列の各エントリは、リクエストとレスポンスの最初から最後までの順番に、リクエスト配列のエントリと対応します。応答 Entries 配列には、常にリクエスト配列と同じ数のエントリが含まれます。

PutEvents での失敗の処理

デフォルトでは、リクエスト内の個々のエントリが失敗した場合、 はリクエスト内の残りのエントリの処理 EventBridge を続行します。レスポンスの Entries 配列には、成功したエントリと失敗したエントリの両方を含めることができます。成功しなかったエントリを検出し、それ以降の呼び出しに含める必要があります。

成功した結果エントリには、Id 値が含まれ、失敗した結果エントリには ErrorCode および ErrorMessage の値が含まれます。ErrorCode はエラーのタイプを示します。ErrorMessage にはエラーに関する詳細が指定されます。以下の例では、PutEvents リクエストに対して 3 つの結果エントリがあります。2 番目のエントリは成功していません。

{ "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, { "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] }
注記

PutEvents を使用して、存在しないイベントバスにイベントを発行する場合、 EventBridge イベントマッチングは対応するルールを見つけられず、イベントは削除されます。 EventBridge は200レスポンスを送信しますが、リクエストに失敗したり、リクエストレスポンスFailedEntryCountの値にイベントを含めたりすることはありません。

失敗したエントリは、以降の PutEvents リクエストに含めることができます。最初に、失敗したエントリがあるかどうかを調べるために、PutEventsResultFailedRecordCount パラメータを確認します。ゼロでない場合、Null でない ErrorCode を持つ各 Entry を後続のリクエストに追加することができます。以下は、エラーハンドラーの例です。

PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); List<PutEventsRequestEntry> putEventsRequestEntryList = new ArrayList<>(); for (int i = 0; i < 3; i++) { putEventsRequestEntryList.add(requestEntry); } PutEventsRequest putEventsRequest = new PutEventsRequest(); putEventsRequest.withEntries(putEventsRequestEntryList); PutEventsResult putEventsResult = awsEventsClient.putEvents(putEventsRequest); while (putEventsResult.getFailedEntryCount() > 0) { final List<PutEventsRequestEntry> failedEntriesList = new ArrayList<>(); final List<PutEventsResultEntry> PutEventsResultEntryList = putEventsResult.getEntries(); for (int i = 0; i < PutEventsResultEntryList.size(); i++) { final PutEventsRequestEntry putEventsRequestEntry = putEventsRequestEntryList.get(i); final PutEventsResultEntry putEventsResultEntry = PutEventsResultEntryList.get(i); if (putEventsResultEntry.getErrorCode() != null) { failedEntriesList.add(putEventsRequestEntry); } } putEventsRequestEntryList = failedEntriesList; putEventsRequest.setEntries(putEventsRequestEntryList); putEventsResult = awsEventsClient.putEvents(putEventsRequest); }

を使用したイベントの送信 AWS CLI

を使用してカスタムイベント AWS CLI を に送信 EventBridge し、処理できます。次の例では、1 つのカスタムイベントを に配置します EventBridge。

aws events put-events \ --entries '[{"Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": ["resource1", "resource2"], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"}]'

カスタムイベントを含むJSONファイルを作成することもできます。

[ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ]

次に、 を使用してこのファイルからエントリを AWS CLI 読み取り、イベントを送信するには、コマンドプロンプトで次のように入力します。

aws events put-events --entries file://entries.json

PutEvents イベントエントリサイズの計算

PutEvents アクション EventBridge を使用してカスタムイベントを に送信すると、複数のイベントエントリを 1 つのリクエストにバッチ処理して効率を高めることができます。ただし、エントリの合計サイズは 256KB未満である必要があります。イベントを送信する前に、エントリサイズを計算できます。

注記

サイズ制限はエントリに適用されます。エントリがサイズ制限未満であっても、イベントJSON表現に必要な文字とキーのため、 のイベント EventBridge は常にエントリサイズよりも大きくなります。詳細については、「Amazon のイベント EventBridge」を参照してください。

EventBridge はPutEventsRequestEntryサイズを次のように計算します。

  • 指定されている場合、Time パラメータは 14 バイトです。

  • Source および DetailTypeパラメータは、UTF-8 エンコードされた形式のバイト数です。

  • 指定した場合、 Detailパラメータは UTF-8 でエンコードされた形式のバイト数です。

  • 指定した場合、 Resourcesパラメータの各エントリは、UTF-8 エンコードされた形式のバイト数です。

以下の Java コード例は、指定された PutEventsRequestEntry オブジェクトのサイズを計算します。

int getSize(PutEventsRequestEntry entry) { int size = 0; if (entry.getTime() != null) { size += 14; } size += entry.getSource().getBytes(StandardCharsets.UTF_8).length; size += entry.getDetailType().getBytes(StandardCharsets.UTF_8).length; if (entry.getDetail() != null) { size += entry.getDetail().getBytes(StandardCharsets.UTF_8).length; } if (entry.getResources() != null) { for (String resource : entry.getResources()) { if (resource != null) { size += resource.getBytes(StandardCharsets.UTF_8).length; } } } return size; }
注記

エントリサイズが 256 KB より大きい場合は、イベントを Amazon S3 バケットにアップロードし、Object URLPutEvents エントリに含めることをお勧めします。