

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 更新、暫停和繼續訂閱者
<a name="eb-custom-bus-update"></a>

`UpdateSubscriber` 會變更適當的訂閱者。您省略的頂層成員會保留其預存值；您提供的組態物件會取代整個預存物件，因此若要變更一個篩選條件，請將 `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 %}"
        }
    }
}
```

下表列出請求的每個成員，以及提供請求的功能。


| 請求成員 | Effect | 
| --- | --- | 
| Description | 取代描述。空白或空白值會將其清除。 | 
| State | 在 RUNNING和 之間移動訂閱者STOPPED；請參閱 [暫停和繼續](#eb-custom-bus-update-pause) | 
| ResumePosition | STOPPED 要RUNNING轉換的 恢復的位置 | 
| InvokeConfiguration | 取代交付角色和目標參數。 TargetArn會保持原狀。 | 
| FilterConfiguration | 保留、清除或取代整個篩選條件組態；請參閱 [更新篩選條件](#eb-custom-bus-update-filters) | 
| BatchConfiguration | 取代整個批次處理組態 | 
| Transformer | 取代整個轉換器。Type 設定為 RAW以移除中繼資料或 JSONata 轉換器。 | 
| RetryPolicy | 取代整個重試政策。省略的成員會採用其預設值：5 次重試嘗試、300 秒，以及 RetryStrategyALL，這是重試每個失敗類別的唯一值。 | 
| OnFailureConfiguration | 取代整個故障中組態。傳送 {}以移除目的地；如果沒有目的地，則會在重試用盡時捨棄事件。 | 
| LogConfiguration | 取代整個記錄組態。傳送 {}以還原預設值 LevelOFF和 IncludePayload ON\_ERROR\_ONLY，這會關閉交付記錄。 | 

`Name`、`EventBusArn`、`Type`、`StartingPosition`、 `PointInTimeConfiguration`和 `TargetArn`識別訂閱者或修正其起點且無法變更；標籤會透過 `TagResource`和 變更`UntagResource`。更新回應會攜帶訂閱者的身分、狀態、開始位置和 `LastModifiedTime`；使用 回讀組態`DescribeSubscriber`。

更新永遠不會移動訂閱者在匯流排上的位置：它不會倒轉、略過或重播。若要在新組態下重新傳遞過去的事件，請改為使用起始位置建立新的訂閱者；請參閱 [將保留的事件重播給訂閱者](eb-custom-bus-replay.md)。

## 故障診斷：您未變更的更新清除設定
<a name="eb-custom-bus-update-cleared"></a>

更新會取代您整體提供的每個組態物件；請參閱 [您可以變更的內容](#eb-custom-bus-update-properties)。

徵狀  
更新後，您未觸控的篩選條件、日誌設定、重試限制或保留期間會預設為返回，且不會傳回錯誤。

原因  
更新會讓省略的頂層成員保持不變，但會取代整個提供的區塊。傳遞 `FilterConfiguration`、`RetryPolicy`、 `LogConfiguration`或 `StorageConfiguration`以變更一個欄位的更新會清除區塊的其他欄位。事件來源已更新，但未`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'
```

驗證  
第二個描述顯示區塊的每個欄位，其中包含您預期的值。

## 更新篩選條件
<a name="eb-custom-bus-update-filters"></a>

若要取代篩選條件，請傳遞 ，`FilterConfiguration`其`Filters`清單會保留訂閱者應擁有的每個篩選條件；EventBridge 會將不同範圍的篩選條件與 AND 結合。若要移除每個篩選條件，請傳遞`FilterConfiguration`為 `{}`。


| 請求 | 結果 | 
| --- | --- | 
| FilterConfiguration 省略 | 儲存的篩選條件會保留 | 
| FilterConfiguration 是 {} | 每個儲存的篩選條件都會移除 | 
| Filters 是非空白清單 | 清單經過驗證，並取代整個篩選條件組態 | 
| Filters 是空的清單，或是Language沒有 Filters | InvalidInputException；提供的 FilterConfiguration 必須至少包含一個篩選條件 | 

在任何連續 24 小時內，每個訂閱用戶的篩選條件變更限制為 24。只有一組範圍和模式的變更才會計算；重新提交相同的 `FilterConfiguration` 則不會。第 25 次變更會失敗，並顯示 `FILTER_CHANGE_LIMIT_EXCEEDED`。此限制不是 Service Quota 且無法提高，因此持續重寫篩選條件的設計應該改為將不同的值發佈到事件中，並對其進行篩選一次。

## 已比對事件使用的組態
<a name="eb-custom-bus-update-inflight"></a>

EventBridge 會將事件比對至訂閱者，並在不同的時間傳遞事件，並記錄每個事件的篩選條件版本。變更篩選條件相符項目的更新會建立新的篩選條件版本，EventBridge 會將轉換器和目標參數與它一起存放。與舊轉換器和目標參數一起交付變更之前符合的事件；使用新轉換器之後符合的事件。在訂閱者停止並繼續後，相同的 保留。


| 篩選條件更新 | 建立新的篩選條件版本 | 
| --- | --- | 
| 變更模式 | 是 | 
| 變更哪些範圍具有篩選條件 | 是 | 
| 新增第一個篩選條件 | 是 | 
| 清除所有篩選條件 | 是，儲存篩選條件時 | 
| 重新排序對等篩選條件 | 否 | 
| 僅變更 Language | 否 | 

因此，當篩選條件和轉換器或目標參數形成一個行為時，請在相同的請求中變更它們。下列請求會將新的`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`確認儲存的內容，而不是每個元件都已切換。更新之後，請發佈測試事件並檢查目標承載，再依賴新的行為。

每個使用它的帳戶一次只有一個訂閱者會在匯流排上建立或刪除執行；並行呼叫會失敗，並出現 `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`區塊。


| 條件 | 錯誤 | 
| --- | --- | 
| 訂閱者不存在 | ResourceNotFoundException | 
| 訂閱者已撤銷 | InvalidStateException | 
| 請求具有多個目標參數區塊 | InvalidInputException | 
| 目標參數與儲存的目標類型不相符 | InvalidInputException | 
| 目標不支援轉換器 | InvalidInputException | 
| JSONata 表達式無效 | InvalidInputException | 
| 批次處理值超出目標的限制 | InvalidInputException | 