需求
需要将RocketMQ实例上的标签同步到实例所包含的topic 和 group 上
实现原理
- 查询RocketMQ实例标签
- 是否继承topic
- 将指定实例标签继承到topic
- 是否继承group
- 将指定实例标签继承到group
操作步骤
- 先创建子模版 模板名称为Ons_topicExtendInstanceTags,具体脚本参考下面子模板代码。
- 再创建子模板 模板名称为Ons_groupExtendInstanceTags,具体脚本参考下面子模板代码。
- 最后创建父模版,并将父模版中的子模版执行名称,改成第1、2步里自己创建模版时的名称,如果使用上述名称就不需要修改。具体脚本参考下面父模板代码。
- 创建执行
- 选择需要继承的地域
- 选择需要继承的标签
- 选择需要继承资源类型
- 选择相关key是否覆盖
- 在 消息队列 RocketMQ 版控制台查看执行效果。
模板
子模版:根据实例Id以及其他条件更新Topic 的标签
模板名称:Ons_topicExtendInstanceTags
FormatVersion OOS-2019-06-01 Description 标签继承 Parameters regionId Type String Description en The id of region zh-cn 地域ID Label en Region zh-cn 地域 AssociationProperty RegionId Default'{{ ACS::RegionId }}' instanceId Type String Description en The id of OnsInstance zh-cn RocketMQ实例ID Label en InstanceId zh-cn RocketMQ实例ID tagKeys Type List Description 标签Key的集合 isUpdate Type Boolean Description 是否覆盖 DefaultfalseRamRole''TasksName getOnsInstanceAndTags Action ACS ExecuteAPI Description ListTagResources Properties Service ONS API ListTagResources Parameters RegionId'{{ regionId }}' ResourceId'{{instanceId}}' ResourceType instance Outputs onsTags Type Json ValueSelector'.TagResources | map(select( .TagKey | test("^(?!acs).*"))) | map(select(.TagKey as $tagKey | {{tagKeys}} | index($tagKey) >=0)) 'Name getTopicAndTags Action ACS ExecuteAPI Description OnsTopicList Properties Service Ons API OnsTopicList Parameters RegionId'{{ regionId }}' InstanceId'{{instanceId}}' Outputs updateTopicAndTags Type List ValueSelector .Data.PublishInfoDo | "Topic" .Topic"Tags":.TagsName tagResources Action ACS ExecuteAPI Description TagTopics Properties Service Ons API TagResources Parameters RegionId'{{ regionId }}' ResourceId Fn::Jq All .Topic '{{ACS::TaskLoopItem}}' Tag Fn::If'{{isUpdate}}'Fn::Jq All '.[] |{"Key":.TagKey, "Value": .TagValue} ''{{getOnsInstanceAndTags.onsTags}}'Fn::Jq All '.Tags.Tag as $topicTags | {{getOnsInstanceAndTags.onsTags}} | map(select(.TagKey as $tagKey | [$topicTags[].Key] | index($tagKey) <0)) |.[] |{"Key":.TagKey, "Value": .TagValue}''{{ACS::TaskLoopItem}}' ResourceType topic InstanceId'{{instanceId}}' Outputs reqResult Type Json ValueSelector .RequestId Loop RateControl Mode Concurrency MaxErrors100 Concurrency1 Items'{{getTopicAndTags.updateTopicAndTags}}' Outputs tagResult AggregateType Fn ListJoin AggregateField reqResult
子模版:根据实例Id 以及输入条件更新Group 的标签
模板名称:Ons_groupExtendInstanceTags
FormatVersion OOS-2019-06-01 Description 标签继承 Parameters regionId Type String Description en The id of region zh-cn 地域ID Label en Region zh-cn 地域 AssociationProperty RegionId Default'{{ ACS::RegionId }}' instanceId Type String Description en The id of OnsInstance zh-cn 实例ID Label en InstanceId zh-cn 实例ID tagKeys Type List Description 标签Key的集合 isUpdate Type Boolean Description 是否覆盖 DefaultfalseRamRole''TasksName getOnsInstanceAndTags Action ACS ExecuteAPI Description ListTagResources Properties Service ONS API ListTagResources Parameters RegionId'{{ regionId }}' ResourceId'{{instanceId}}' ResourceType instance Outputs onsTags Type Json ValueSelector'.TagResources | map(select( .TagKey | test("^(?!acs).*"))) | map(select(.TagKey as $tagKey | {{tagKeys}} | index($tagKey) >=0)) 'Name getGroupAndTags Action ACS ExecuteAPI Description OnsGroupList Properties Service Ons API OnsGroupList Parameters RegionId'{{ regionId }}' InstanceId'{{instanceId}}' Outputs updateGroupAndTags Type List ValueSelector .Data.SubscribeInfoDo | "Group" .GroupId"Tags":.TagsName tagResources Action ACS ExecuteAPI Description TagGroups Properties Service Ons API TagResources Parameters RegionId'{{ regionId }}' ResourceId Fn::Jq All .Group '{{ACS::TaskLoopItem}}' Tag Fn::If'{{isUpdate}}'Fn::Jq All '.[] |{"Key":.TagKey, "Value": .TagValue} ''{{getOnsInstanceAndTags.onsTags}}'Fn::Jq All '.Tags.Tag as $groupTags | {{getOnsInstanceAndTags.onsTags}} | map(select(.TagKey as $tagKey | [$groupTags[].Key] | index($tagKey) <0)) |.[] |{"Key":.TagKey, "Value": .TagValue}''{{ACS::TaskLoopItem}}' ResourceType group InstanceId'{{instanceId}}' Outputs reqResult Type Json ValueSelector .RequestId Loop RateControl Mode Concurrency MaxErrors100 Concurrency1 Items'{{getGroupAndTags.updateGroupAndTags}}' Outputs tagResult AggregateType Fn ListJoin AggregateField reqResult
父模版:按照输入条件同步某个地域下所有Ons 实例的Topic 和Group 的标签
模板名称:RocketMQInstanceTagInherit
FormatVersion OOS-2019-06-01 Description 标签继承 Parameters regionIds Type List Description en The id of region zh-cn 地域ID Label en Region zh-cn 地域 AssociationProperty RegionId tags Type List AssociationProperty Tags AssociationPropertyMetadata ResourceType ALIYUN MQ INSTANCE Description 消息队列RocketMQ实例上的标签,选择需要继承到topic/group上的标签键及标签值 resourceTypes Type List Description 所选择继承的资源类型 AllowedValues topic group isUpdate Type Boolean Description 如果被继承的资源存在相同key但是value不相同时是否覆盖value DefaultfalseRamRole''TasksName getOnsInstance Action ACS ExecuteAPI Description OnsInstanceInServiceList Properties Service ONS API OnsInstanceInServiceList Parameters RegionId'{{ACS::TaskLoopItem}}' Outputs onsInstance Type List ValueSelector'.Data.InstanceVO[] |. + {"RegionId": "{{ACS::TaskLoopItem}}" }' Loop RateControl Mode Concurrency MaxErrors100 Concurrency1 Items'{{regionIds}}' Outputs allOnsInstances AggregateType Fn ListJoin AggregateField onsInstance Name isTagTopic Action ACS Choice Description en Choose next task by resource type zh-cn 根据资源类型选择下一个任务 Properties DefaultTask isTagGroup ChoicesWhen Fn::Equals true Fn::Jq First "topic" ) contains('{{resourceTypes}}' NextTask tagTopic Name tagTopic Action ACS Template Description en Update topic tags by ons instance tags zh-cn 通过RocketMQ实例标签更新Topic的标签 Properties TemplateName Ons_topicExtendInstanceTags Parameters regionId Fn::Jq First .RegionId '{{ACS::TaskLoopItem}}' instanceId Fn::Jq First .InstanceId '{{ACS::TaskLoopItem}}' tagKeys Fn::Jq All . .Key '{{tags}}' isUpdate'{{isUpdate}}' Loop RateControl Mode Concurrency MaxErrors100 Concurrency1 Items Fn::Jq All .'{{getOnsInstance.allOnsInstances}}' Outputs tagResult AggregateType Fn ListJoin AggregateField reqResult Name isTagGroup Action ACS Choice Description en Choose next task by resource type zh-cn 根据资源类型选择下一个任务 Properties DefaultTask ACS END ChoicesWhen Fn::Equals true Fn::Jq First "group" ) contains('{{resourceTypes}}' NextTask tagGroup Name tagGroup Action ACS Template Description en Update snapshot tags by ecs instance tags zh-cn 通过RocketMQ实例标签更新Group的标签 Properties TemplateName Ons_groupExtendInstanceTags Parameters regionId Fn::Jq First .RegionId '{{ACS::TaskLoopItem}}' instanceId Fn::Jq First .InstanceId '{{ACS::TaskLoopItem}}' tagKeys Fn::Jq All . .Key '{{tags}}' isUpdate'{{isUpdate}}' Loop RateControl Mode Concurrency MaxErrors100 Concurrency1 Items Fn::Jq All .'{{getOnsInstance.allOnsInstances}}' Outputs tagResult AggregateType Fn ListJoin AggregateField reqResult