需求
需要将RocketMQ实例上的标签同步到实例所包含的topic 和 group 上
实现原理
- 查询RocketMQ实例标签
- 是否继承topic
- 将指定实例标签继承到topic
- 是否继承group
- 将指定实例标签继承到group
操作步骤
- 先创建子模版 模板名称为Ons_topicExtendInstanceTags,具体脚本参考下面子模板代码。
- 再创建子模板 模板名称为Ons_groupExtendInstanceTags,具体脚本参考下面子模板代码。
- 最后创建父模版,并将父模版中的子模版执行名称,改成第1、2步里自己创建模版时的名称,如果使用上述名称就不需要修改。具体脚本参考下面父模板代码。
- 创建执行
- 选择需要继承的地域
- 选择需要继承的标签
- 选择需要继承资源类型
- 选择相关key是否覆盖
- 在 消息队列 RocketMQ 版控制台查看执行效果。
模板
子模版:根据实例Id以及其他条件更新Topic 的标签
模板名称:Ons_topicExtendInstanceTags
FormatVersionOOS-2019-06-01 Description标签继承 Parameters regionId TypeString Description enThe id of region zh-cn地域ID Label enRegion zh-cn地域 AssociationPropertyRegionId Default'{{ ACS::RegionId }}' instanceId TypeString Description enThe id of OnsInstance zh-cnRocketMQ实例ID Label enInstanceId zh-cnRocketMQ实例ID tagKeys TypeList Description标签Key的集合 isUpdate TypeBoolean Description是否覆盖 DefaultfalseRamRole''TasksNamegetOnsInstanceAndTags ActionACSExecuteAPI DescriptionListTagResources Properties ServiceONS APIListTagResources Parameters RegionId'{{ regionId }}' ResourceId'{{instanceId}}' ResourceTypeinstance Outputs onsTags TypeJson ValueSelector'.TagResources | map(select( .TagKey | test("^(?!acs).*"))) | map(select(.TagKey as $tagKey | {{tagKeys}} | index($tagKey) >=0)) 'NamegetTopicAndTags ActionACSExecuteAPI DescriptionOnsTopicList Properties ServiceOns APIOnsTopicList Parameters RegionId'{{ regionId }}' InstanceId'{{instanceId}}' Outputs updateTopicAndTags TypeList ValueSelector.Data.PublishInfoDo | "Topic".Topic"Tags":.TagsNametagResources ActionACSExecuteAPI DescriptionTagTopics Properties ServiceOns APITagResources Parameters RegionId'{{ regionId }}' ResourceId Fn::JqAll .Topic '{{ACS::TaskLoopItem}}' Tag Fn::If'{{isUpdate}}'Fn::JqAll '.[] |{"Key":.TagKey, "Value": .TagValue} ''{{getOnsInstanceAndTags.onsTags}}'Fn::JqAll '.Tags.Tag as $topicTags | {{getOnsInstanceAndTags.onsTags}} | map(select(.TagKey as $tagKey | [$topicTags[].Key] | index($tagKey) <0)) |.[] |{"Key":.TagKey, "Value": .TagValue}''{{ACS::TaskLoopItem}}' ResourceTypetopic InstanceId'{{instanceId}}' Outputs reqResult TypeJson ValueSelector.RequestId Loop RateControl ModeConcurrency MaxErrors100 Concurrency1 Items'{{getTopicAndTags.updateTopicAndTags}}' Outputs tagResult AggregateTypeFnListJoin AggregateFieldreqResult
子模版:根据实例Id 以及输入条件更新Group 的标签
模板名称:Ons_groupExtendInstanceTags
FormatVersionOOS-2019-06-01 Description标签继承 Parameters regionId TypeString Description enThe id of region zh-cn地域ID Label enRegion zh-cn地域 AssociationPropertyRegionId Default'{{ ACS::RegionId }}' instanceId TypeString Description enThe id of OnsInstance zh-cn实例ID Label enInstanceId zh-cn实例ID tagKeys TypeList Description标签Key的集合 isUpdate TypeBoolean Description是否覆盖 DefaultfalseRamRole''TasksNamegetOnsInstanceAndTags ActionACSExecuteAPI DescriptionListTagResources Properties ServiceONS APIListTagResources Parameters RegionId'{{ regionId }}' ResourceId'{{instanceId}}' ResourceTypeinstance Outputs onsTags TypeJson ValueSelector'.TagResources | map(select( .TagKey | test("^(?!acs).*"))) | map(select(.TagKey as $tagKey | {{tagKeys}} | index($tagKey) >=0)) 'NamegetGroupAndTags ActionACSExecuteAPI DescriptionOnsGroupList Properties ServiceOns APIOnsGroupList Parameters RegionId'{{ regionId }}' InstanceId'{{instanceId}}' Outputs updateGroupAndTags TypeList ValueSelector.Data.SubscribeInfoDo | "Group".GroupId"Tags":.TagsNametagResources ActionACSExecuteAPI DescriptionTagGroups Properties ServiceOns APITagResources Parameters RegionId'{{ regionId }}' ResourceId Fn::JqAll .Group '{{ACS::TaskLoopItem}}' Tag Fn::If'{{isUpdate}}'Fn::JqAll '.[] |{"Key":.TagKey, "Value": .TagValue} ''{{getOnsInstanceAndTags.onsTags}}'Fn::JqAll '.Tags.Tag as $groupTags | {{getOnsInstanceAndTags.onsTags}} | map(select(.TagKey as $tagKey | [$groupTags[].Key] | index($tagKey) <0)) |.[] |{"Key":.TagKey, "Value": .TagValue}''{{ACS::TaskLoopItem}}' ResourceTypegroup InstanceId'{{instanceId}}' Outputs reqResult TypeJson ValueSelector.RequestId Loop RateControl ModeConcurrency MaxErrors100 Concurrency1 Items'{{getGroupAndTags.updateGroupAndTags}}' Outputs tagResult AggregateTypeFnListJoin AggregateFieldreqResult
父模版:按照输入条件同步某个地域下所有Ons 实例的Topic 和Group 的标签
模板名称:RocketMQInstanceTagInherit
FormatVersionOOS-2019-06-01 Description标签继承 Parameters regionIds TypeList Description enThe id of region zh-cn地域ID Label enRegion zh-cn地域 AssociationPropertyRegionId tags TypeList AssociationPropertyTags AssociationPropertyMetadata ResourceTypeALIYUNMQINSTANCE Description消息队列RocketMQ实例上的标签,选择需要继承到topic/group上的标签键及标签值 resourceTypes TypeList Description所选择继承的资源类型 AllowedValuestopic group isUpdate TypeBoolean Description如果被继承的资源存在相同key但是value不相同时是否覆盖value DefaultfalseRamRole''TasksNamegetOnsInstance ActionACSExecuteAPI DescriptionOnsInstanceInServiceList Properties ServiceONS APIOnsInstanceInServiceList Parameters RegionId'{{ACS::TaskLoopItem}}' Outputs onsInstance TypeList ValueSelector'.Data.InstanceVO[] |. + {"RegionId": "{{ACS::TaskLoopItem}}" }' Loop RateControl ModeConcurrency MaxErrors100 Concurrency1 Items'{{regionIds}}' Outputs allOnsInstances AggregateTypeFnListJoin AggregateFieldonsInstance NameisTagTopic ActionACSChoice Description enChoose next task by resource type zh-cn根据资源类型选择下一个任务 Properties DefaultTaskisTagGroup ChoicesWhen Fn::Equalstrue Fn::JqFirst contains("topic") '{{resourceTypes}}' NextTasktagTopic NametagTopic ActionACSTemplate Description enUpdate topic tags by ons instance tags zh-cn通过RocketMQ实例标签更新Topic的标签 Properties TemplateNameOns_topicExtendInstanceTags Parameters regionId Fn::JqFirst .RegionId '{{ACS::TaskLoopItem}}' instanceId Fn::JqFirst .InstanceId '{{ACS::TaskLoopItem}}' tagKeys Fn::JqAll ..Key '{{tags}}' isUpdate'{{isUpdate}}' Loop RateControl ModeConcurrency MaxErrors100 Concurrency1 Items Fn::JqAll .'{{getOnsInstance.allOnsInstances}}' Outputs tagResult AggregateTypeFnListJoin AggregateFieldreqResult NameisTagGroup ActionACSChoice Description enChoose next task by resource type zh-cn根据资源类型选择下一个任务 Properties DefaultTaskACSEND ChoicesWhen Fn::Equalstrue Fn::JqFirst contains("group") '{{resourceTypes}}' NextTasktagGroup NametagGroup ActionACSTemplate Description enUpdate snapshot tags by ecs instance tags zh-cn通过RocketMQ实例标签更新Group的标签 Properties TemplateNameOns_groupExtendInstanceTags Parameters regionId Fn::JqFirst .RegionId '{{ACS::TaskLoopItem}}' instanceId Fn::JqFirst .InstanceId '{{ACS::TaskLoopItem}}' tagKeys Fn::JqAll ..Key '{{tags}}' isUpdate'{{isUpdate}}' Loop RateControl ModeConcurrency MaxErrors100 Concurrency1 Items Fn::JqAll .'{{getOnsInstance.allOnsInstances}}' Outputs tagResult AggregateTypeFnListJoin AggregateFieldreqResult

