View a markdown version of this page

サブスクライバーの更新、一時停止、再開 - Amazon EventBridge

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

サブスクライバーの更新、一時停止、再開

UpdateSubscriber によってサブスクライバーが変更されます。省略した最上位メンバーは保存された値を保持します。指定した設定オブジェクトは、保存されたオブジェクト全体を置き換えるため、1 つのフィルターを変更するには、保持するすべてのフィルターFilterConfigurationで 全体を渡します。サブスクライバーを一時停止するには を渡します--state STOPPED。再開するには --state RUNNINGを渡します--resume-position。

変更できること

次のリクエストは、サブスクライバーの 全体を置き換えるためInvokeConfiguration、サブスクライバーが保持する必要があるロールとすべてのターゲットパラメータに名前を付けます。 TargetArnは更新の一部ではありません。サブスクライバーのターゲットは変更できません。

{ "SubscriberArn": "arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890", "InvokeConfiguration": { "RoleArn": "arn:aws:iam::111122223333:role/NewSubscriberTargetRole", "SqsParameters": { "MessageGroupId": "{% $events.Data.customerId %}" } } }

次の表に、リクエストの各メンバーとその提供内容を示します。

リクエストメンバー効果
Description説明を置き換えます。空または空白の値はクリアします。
Stateサブスクライバーを RUNNINGと の間で移動しますSTOPPED。「」を参照してください。 一時停止と再開
ResumePositionRUNNING 移行STOPPEDする が再開される場所
InvokeConfiguration配信ロールとターゲットパラメータを置き換えます。 はそのままTargetArn残ります。
FilterConfigurationフィルター設定全体を保持、クリア、または置き換えます。「」を参照してください。 フィルターの更新
BatchConfigurationバッチ処理設定全体を置き換えます
Transformerトランスフォーマー全体を置き換えます。メタデータまたは JSONata トランスフォーマーRAWを削除するには、 Typeに設定します。
RetryPolicy再試行ポリシー全体を置き換えます。省略されたメンバーのデフォルトは、5 回の再試行、300 秒、およびすべての失敗カテゴリALLを再試行する唯一の値である RetryStrategy です。
OnFailureConfiguration失敗時の設定全体を置き換えます。送信先を削除{}するために送信します。送信先がない場合、再試行回数が経過するとイベントは削除されます。
LogConfigurationログ記録設定全体を置き換えます。を送信{}してデフォルトの LevelOFFと IncludePayload を復元しON_ERROR_ONLY、配信ログをオフにします。

Name、EventBusArn、、Type、StartingPosition、および はサブスクライバーTargetArnを識別するかPointInTimeConfiguration、開始点を修正し、変更することはできません。タグは TagResourceおよび を通じて変更されますUntagResource。更新レスポンスは、サブスクライバーの ID、状態、開始位置、および を保持しますLastModifiedTime。設定を で読み返しますDescribeSubscriber。

更新によってバス上のサブスクライバーの位置が移動されることはありません。巻き戻したり、スキップしたり、再生したりすることはありません。新しい設定で過去のイベントを再配信するには、代わりに開始位置で新しいサブスクライバーを作成します。「」を参照してください保持されたイベントをサブスクライバーに再生する。

トラブルシューティング: 変更しなかった設定がクリアされた更新

更新により、指定した各設定オブジェクト全体が置き換えられます。「」を参照してください変更できること。

症状

更新後、タッチしなかったフィルター、ログ設定、再試行制限、または保持期間がデフォルトに戻され、エラーは返されません。

原因

更新では、省略された最上位メンバーは変更されませんが、指定されたブロック全体が置き換えられます。FilterConfiguration、、LogConfiguration、または を渡StorageConfigurationして 1 つのフィールドを変更する更新ではRetryPolicy、ブロックの他のフィールドがクリアされます。なしで更新されたイベントソースPatternはパターンなしで戻り、すべてのイベントに拡張されます。

ソリューション

リソースを読み、ブロック全体を変更し、ブロック全体を書き戻してから、もう一度読み取ります。リードバックは唯一の確認です。これは、作成および更新レスポンスがすべてのフィールドをエコーするわけではないためです。

aws eventsv2 describe-subscriber --subscriber-arn "$SUBSCRIBER_ARN" --query 'LogConfiguration' aws eventsv2 update-subscriber --subscriber-arn "$SUBSCRIBER_ARN" \ --log-configuration '{ "Level": "INFO", "IncludePayload": "FULL" }' aws eventsv2 describe-subscriber --subscriber-arn "$SUBSCRIBER_ARN" --query 'LogConfiguration'
検証

2 番目の説明は、ブロックのすべてのフィールドと意図した値を示しています。

フィルターの更新

フィルターを置き換えるには、サブスクライバーが持つ必要があるすべてのフィルターをFiltersリストが保持FilterConfigurationする を渡します。EventBridge は、さまざまなスコープのフィルターを AND と組み合わせます。すべてのフィルターを削除するには、 を FilterConfigurationとして渡します{}。

[リクエスト]結果
FilterConfiguration 省略保存されたフィルターは残ります
FilterConfiguration は {}すべての保存済みフィルターが削除されます
Filters は空でないリストですリストが検証され、フィルター設定全体が置き換えられます。
Filters は空のリストであるか、 Language なしで提供されます。 FiltersInvalidInputException; 指定された には少なくとも 1 つのフィルターが含まれているFilterConfiguration必要があります

フィルターの変更は、任意のローリング 24 時間でサブスクライバーごとに 24 に制限されます。スコープとパターンのセットの変更のみがカウントされます。同一の を再送信FilterConfigurationしてもカウントされません。25 回目の変更は で失敗しますFILTER_CHANGE_LIMIT_EXCEEDED。この制限は Service Quota ではなく、引き上げることができないため、フィルターを継続的に書き換える設計では、代わりにさまざまな値をイベントに発行し、一度フィルタリングする必要があります。

すでに一致したイベントが使用する設定

EventBridge はイベントをサブスクライバーに一致させ、異なる時間に配信し、各イベントに一致したフィルターのバージョンを記録します。フィルターの一致内容を変更する更新により、新しいフィルターバージョンが作成され、EventBridge はトランスフォーマーとターゲットパラメータをそこに保存します。変更が古いトランスフォーマーとターゲットパラメータで配信される前に一致したイベント。新しいトランスフォーマーとターゲットパラメータを使用した後に一致したイベント。サブスクライバーが停止して再開すると、同じ が保持されます。

フィルターの更新新しいフィルターバージョンを作成します。
パターンの変更はい
フィルターがあるスコープの変更はい
最初のフィルターの追加はい
すべてのフィルターをクリアするはい、フィルターが保存された日時
同等のフィルターの順序変更いいえ
のみの変更 Languageいいえ

したがって、フィルターとトランスフォーマーまたはターゲットパラメータが 1 つの動作を形成する場合は、同じリクエストで変更します。次のリクエストは、新しいDATAフィルターと記述されたトランスフォーマーをペアリングするため、一致しないペアでイベントが配信されることはありません。

{ "SubscriberArn": "arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890", "FilterConfiguration": { "Filters": [ { "Scope": "DATA", "Pattern": "{\"type\":[\"priority\"]}" } ] }, "Transformer": { "Type": "JSONATA", "JsonataConfiguration": { "Expression": "{% {\"version\": 2, \"event\": $events.Data} %}" } } }

トランスフォーマーまたはターゲットパラメータのみを変更する更新では、フィルターバージョンは作成されません。伝播されると、新しい設定は、まだ配信を待っているイベントと、後で再試行するイベントに適用されます。配信ロール、再試行ポリシー、障害発生時の送信先、バッチ処理、ログ記録の設定は、イベントに一致したバージョンにかかわらず、常に最新の伝達値を受け取ります。EventBridge は、再試行のためにトランスフォーマーとターゲットパラメータを再度評価できるため、 などの時間依存または非決定的な JSONata 関数は、試行ごとに異なる結果を生成$now()できます。再試行されたリクエストが同じバイトを保持すると仮定しないでください。

UpdateSubscriber は変更を返す前に保存し、配信コンポーネントは伝達の遅延後にそれを受け取ります。その間、イベントは以前の設定を引き続き使用できます。 は、すべてのコンポーネントが切り替えたのではなく、保存されているものDescribeSubscriberを確認します。更新後、新しい動作に依存する前に、テストイベントを発行し、ターゲットペイロードを確認します。

バスでは、バスを使用するすべてのアカウントで、一度に 1 人のサブスクライバーのみが作成または削除を実行します。同時呼び出しは で失敗しますConcurrentModificationException。再試行します。

一時停止と再開

サブスクライバーStateは、 が である間のみ を配信しますRUNNING。これを STOPPEDに設定すると一時停止します。イベントは保持期間によって制限され、バスに蓄積され続けます。に設定するとRUNNING、 はバックログの処理ResumePositionを決定します。

  • LAST_PROCESSED、デフォルト: 配信が停止した場所から続行するため、サブスクライバーの停止中に発行されたすべてのイベントが最初に最も古い状態で配信されます。

  • LATEST: バックログをスキップし、今後公開されるイベントのみを配信します。リプレイ中のサブスクライバーはそれを使用できません。オープンエンドリプレイはまだ追いついており、制限付きリプレイがライブイベントに到達することはありません。

aws eventsv2 update-subscriber \ --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890 \ --state STOPPED aws eventsv2 update-subscriber \ --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890 \ --state RUNNING \ --resume-position LAST_PROCESSED

ResumePosition は、状態を から STOPPED に移動する呼び出しでのみ受け入れられますRUNNING。その呼び出しでEventBridge は最初にサブスクライバーの配信エンドポイントを再度検出できるようにします。このステップが失敗すると、呼び出しは を返しInternalException、何も保存されず、サブスクライバーは のままになるためSTOPPED、リクエストを再試行します。バス所有者が取り消したサブスクライバーはどちらの状態でも配信されません。「」を参照してくださいサブスクライバーまたはイベントソースの取り消し。

更新が返す可能性のあるエラー

EventBridge は、更新された設定をサブスクライバーの保存されたターゲットタイプに対して検証するため、ターゲットが Lambda 関数であるサブスクライバーの SqsParametersブロックは拒否されます。

Conditionエラー
サブスクライバーが存在しませんResourceNotFoundException
サブスクライバーが取り消されましたInvalidStateException
リクエストに複数のターゲットパラメータブロックがあるInvalidInputException
ターゲットパラメータが保存されたターゲットタイプと一致しませんInvalidInputException
トランスフォーマーはターゲットでサポートされていませんInvalidInputException
JSONata 式が無効ですInvalidInputException
バッチ処理値がターゲットの制限を超えていますInvalidInputException