View a markdown version of this page

更新、暂停和恢复订阅者 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

更新、暂停和恢复订阅者

UpdateSubscriber在原地更改订阅者。您省略的顶级成员会保留其存储值;您提供的配置对象会替换整个存储对象,因此,要更改一个筛选器,请将完整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替换整个变压器。设置TypeRAW为可删除元数据或 Jsonata 转换器。
RetryPolicy取代整个重试策略。省略的成员采用其默认值:5 次重试,300 秒 RetryStrategyALL,唯一的值是重试每个失败类别。
OnFailureConfiguration替换整个失败配置。发送{}以移除目的地;如果没有目的地,则当事件的重试次数用尽时,该事件将被丢弃。
LogConfiguration替换整个日志配置。发送{}以恢复默认值,LevelOFF和 IncludePayloadON_ERROR_ONLY,这会关闭交付注销功能。

Name、EventBusArn、Type、StartingPosition、PointInTimeConfiguration、和TargetArn标识订阅者或固定其起始点且无法更改;标签更改为TagResource和UntagResource。更新响应包含订阅者的身份、状态、起始位置以及LastModifiedTime;使用读回配置DescribeSubscriber。

更新永远不会移动订阅者在总线上的位置:它不会倒带、跳过或重播。要在新配置下重新传送过去的活动,请改为创建一个具有起始位置的新订阅者;请参阅向订阅者重播保留的事件。

疑难解答:更新清除了您未更改的设置

更新将替换您提供的每个配置对象作为一个整体;请参阅你可以改变什么。

症状

更新后,您未触及的筛选器、日志设置、重试限制或保留期将恢复为默认值,并且未返回任何错误。

原因

更新会使省略的顶级成员保持不变,但会替换所提供的整个区块。传递FilterConfiguration、LogConfigurationRetryPolicy、或更改一个字段的更新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,FilterConfiguration其Filters列表包含订阅者应拥有的所有过滤器; EventBridge 将适用于不同范围的过滤器与 AND 组合在一起。要移除所有过滤器,请传递 FilterConfiguration as {}。

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

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

已匹配的事件使用哪种配置

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。重试。

暂停和恢复

订阅者仅在交付时交付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,因此重试请求。公交车所有者已撤销的订阅者不在任何一个州交付;请参阅撤销订阅者或事件源。

更新可能返回的错误

EventBridge 根据订阅者的存储目标类型验证更新的配置,因此目标为 Lambda 函数的订阅者上的SqsParameters区块会被拒绝。

条件错误
订阅者不存在ResourceNotFoundException
订阅者已被撤销InvalidStateException
该请求有多个目标参数块InvalidInputException
目标参数与存储的目标类型不匹配InvalidInputException
目标不支持变压器InvalidInputException
JSonata 表达式无效InvalidInputException
批处理值超出目标限制InvalidInputException