

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

# サブスクライバーの更新、一時停止、再開
<a name="eb-custom-bus-update"></a>

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

## 変更できること
<a name="eb-custom-bus-update-properties"></a>

次のリクエストは、サブスクライバーの 全体を置き換えるため`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。「」を参照してください。 [一時停止と再開](#eb-custom-bus-update-pause) | 
| ResumePosition | RUNNING 移行STOPPEDする が再開される場所 | 
| InvokeConfiguration | 配信ロールとターゲットパラメータを置き換えます。 はそのままTargetArn残ります。 | 
| FilterConfiguration | フィルター設定全体を保持、クリア、または置き換えます。「」を参照してください。 [フィルターの更新](#eb-custom-bus-update-filters) | 
| 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`。

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

## トラブルシューティング: 変更しなかった設定がクリアされた更新
<a name="eb-custom-bus-update-cleared"></a>

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

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

原因  
更新では、省略された最上位メンバーは変更されませんが、指定されたブロック全体が置き換えられます。`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 番目の説明は、ブロックのすべてのフィールドと意図した値を示しています。

## フィルターの更新
<a name="eb-custom-bus-update-filters"></a>

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


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

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

## すでに一致したイベントが使用する設定
<a name="eb-custom-bus-update-inflight"></a>

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`。再試行します。

## 一時停止と再開
<a name="eb-custom-bus-update-pause"></a>

サブスクライバー`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`、リクエストを再試行します。バス所有者が取り消したサブスクライバーはどちらの状態でも配信されません。「」を参照してください[サブスクライバーまたはイベントソースの取り消し](eb-custom-bus-access-revoke.md)。

## 更新が返す可能性のあるエラー
<a name="eb-custom-bus-update-errors"></a>

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


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