

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 更新、暂停和恢复订阅者
<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 %}"
        }
    }
}
```

下表列出了请求的每个成员以及提供请求的作用。


| 申请会员 | 效果 | 
| --- | --- | 
| Description | 替换描述。空值或空值将其清除。 | 
| State | 在RUNNING和之间移动订户STOPPED；请参阅 [暂停和恢复](#eb-custom-bus-update-pause) | 
| ResumePosition | RUNNING过渡STOPPED到哪里可以恢复 | 
| InvokeConfiguration | 替换交付角色和目标参数。TargetArn保持原样。 | 
| FilterConfiguration | 保留、清除或替换整个过滤器配置；请参阅 [更新过滤器](#eb-custom-bus-update-filters) | 
| BatchConfiguration | 取代整个批处理配置 | 
| Transformer | 替换整个变压器。设置TypeRAW为可删除元数据或 Jsonata 转换器。 | 
| RetryPolicy | 取代整个重试策略。省略的成员采用其默认值：5 次重试，300 秒 RetryStrategyALL，唯一的值是重试每个失败类别。 | 
| OnFailureConfiguration | 替换整个失败配置。发送{}以移除目的地；如果没有目的地，则当事件的重试次数用尽时，该事件将被丢弃。 | 
| LogConfiguration | 替换整个日志配置。发送{}以恢复默认值，LevelOFF和 IncludePayloadON\_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`、`LogConfiguration``RetryPolicy`、或更改一个字段的更新`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>

要替换过滤器，请传递 a，`FilterConfiguration`其`Filters`列表包含订阅者应拥有的所有过滤器； EventBridge 将适用于不同范围的过滤器与 AND 组合在一起。要移除所有过滤器，请传递 `FilterConfiguration` as `{}`。


| 请求 | 结果 | 
| --- | --- | 
| FilterConfiguration省略 | 存储的过滤器会保留 | 
| FilterConfiguration 是 {} | 所有存储的过滤器都被移除 | 
| Filters是一个非空列表 | 该列表经过验证并取代了整个过滤器配置 | 
| Filters是一个空列表，或者给出Language时没有给出 Filters | InvalidInputException；提供的FilterConfiguration必须包含至少一个过滤器 | 

在任何过去 24 小时内，每位订阅者的筛选条件更改限制为 24 次。只有对范围和模式集合的更改才算在内；重新提交相同的范围和模式`FilterConfiguration`不重要。第 25 次更改失败`FILTER_CHANGE_LIMIT_EXCEEDED`了。此限制不是服务配额，不能提高，因此持续重写过滤器的设计应改为将变化的值发布到事件中，并对其进行一次过滤。

## 已匹配的事件使用哪种配置
<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>

订阅者仅在交付时交付`RUNNING`。`State`将其设置`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 | 