运维编排场景系列-----给ECS实例自动打TAG

简介: Tag简介和场景 对于一般的资源管理需求,都是针对一个用户下数量较多的情况,当实例等数量较多时,对实例进行运维管理等操作就会变得比较困难,有时候甚至需要采取拆分账号的方式管理不同部门或者不同用途的资源。

Tag简介和场景

对于一般的资源管理需求,都是针对一个用户下数量较多的情况,当实例等数量较多时,对实例进行运维管理等操作就会变得比较困难,有时候甚至需要采取拆分账号的方式管理不同部门或者不同用途的资源。如果采用Tag进行资源的分类管理,会大大简化这个问题。


首先,我们可以针对实例的使用场景进行分类,在一般的开发场景中,机器一般有多个分类:开发测试环境、打包环境、生产环境等。这些机器的运维管理是绝对隔绝的,因此要在Tag上对其进行区分,在开发测试机器上,可以增加标签(增加方式详见下一节)key为env、value为test;在生产机器上,可以增加标签key为env、value为product。形成如下图的机器分类。

 

1560305741415-2cb02da3-5caa-491c-90a5-bd                                           

 

我们可以使用不同的维度来给机器打Tag,

以万网的场景需求为给机器以kernelVersion,osType等场景来打Tag.  osType分为linux,windows. kernerlVersion为uname -r的返回结果

 

解决方案

针对以上需求总结下来

1.根据当前实例的OsType字段给当前实例打个key为osType的tag

2.根据当前实例中的uname -r的运行结果打一个key为kernelVersion的tag

 

针对以上场景我们可以构建两个运维编排脚本

按OSType打Tag

   输入: tagKey的名字,和InstanceId 以及运维编排服务以客户身份扮演的角色名

   输出: 当前机器的osType

   运行步骤:

          a) 指定InstanceId调用DescribeInstances接口并获取到OsType

          b) 调用TagResources给Tag的Key设定为输入的TagKey Value指定为a步骤的输出结果,实例ID指定为输入的InstanceId

    这样我们就完成了根据OsType打Tag的操作,模板如下

{
  "FormatVersion": "OOS-2019-06-01",
  "Description": "tag instance by os type",
  "Parameters": {
    "InstanceId": {
      "Type": "String",
      "Description": "the InstanceId to tag",
      "MinLength": 1,
      "MaxLength": 30
    },
    "TagKey": {
      "Type": "String",
      "Description": "the tag key you specified"
    },
    "OOSAssumeRole": {
      "Type": "String",
      "Description": "The RAM role to be assumed by OOS.",
      "Default": "OOSServiceRole"
    }
  },
  "RamRole": "{{OOSAssumeRole}}",
  "Tasks": [
    {
      "Name": "queryInstanceOsType",
      "Action": "ACS::ExecuteApi",
      "Description": "",
      "Properties": {
        "API": "DescribeInstances",
        "Service": "ECS",
        "Parameters": {
          "InstanceIds": [
            "{{ InstanceId }}"
          ]
        }
      },
      "Outputs": {
        "OsType": {
          "ValueSelector": "Instances.Instance[].OSType",
          "Type": "String"
        }
      }
    },
    {
      "Name": "tagResources",
      "Action": "ACS::ExecuteApi",
      "Description": "create the command to install logtail agent.",
      "Properties": {
        "API": "TagResources",
        "Service": "ECS",
        "Parameters": {
          "ResourceType": "Instance",
          "ResourceIds": [
            "{{ InstanceId }}"
          ],
          "Tags": [
            {
              "Key": "{{ TagKey }}",
              "Value": "{{ queryInstanceOsType.OsType }}"
            }
          ]
        }
      }
    }
  ],
  "Outputs": {
    "OsType": {
      "Type": "String",
      "Value": "{{ queryInstanceOsType.OsType}}"
    }
  }
}

 

打开运维编排控制台并创建模板TagByOsType

image.png                                           

 

执行模板

image.png                                           

 

设置参数 指定实例ID和TagKey执行

image.png                                           

 

我们看到刚刚执行已经执行成功

 

image.png                                           

并且可以看到当前执行的详细细节

image.png                                           

再看刚刚的实例多了个osType:linux的tag

image.png                                           

 

按KernelVersion打Tag

   输入: tagKey的名字,要在机器上执行的命令 当前场景是uname -r 以及运维编排服务以客户身份扮演的角色名

   输出:打tag的value

   运行步骤:

          a) 指定InstanceId调用DescribeInstances检查当前实例是否是Running状态          

          b) 调用云助手来到当前实例执行命令并等待执行结束获取到执行结果

          c) 调用TagResources给Tag的Key设定为输入的TagKey Value指定为b步骤的输出结果,实例ID指定为输入的InstanceId

    这样我们就完成了根据在执行机器执行命令根据命令结果打Tag的操作,模板如下

 

{
	"FormatVersion": "OOS-2019-06-01",
	"Description": "Tag ECS Instance by the RunCommand invocation result.",
	"Parameters": {
		"InstanceId": {
			"Type": "String",
			"Description": "the Instance Id to operate in linux.",
			"MinLength": 1,
			"MaxLength": 30
		},
		"CommandContent": {
			"Type": "String",
			"Description": "command content to run in linux ecs."
		},
		"TagKey": {
			"Type": "String",
			"Description": "tag specific key you want to tag on the instance."
		},
		"OOSAssumeRole": {
			"Type": "String",
			"Description": "oos assume this role to execution task.",
			"Default": "OOSServiceRole"
		}
	},
	"RamRole": "{{OOSAssumeRole}}",
	"Tasks": [{
			"Name": "checkInstanceReady",
			"Action": "ACS::CheckFor",
			"Description": "describe instances with specified parameters, refer them here: https://help.aliyun.com/document_detail/63440.html",
			"Properties": {
				"API": "DescribeInstances",
				"Service": "ECS",
				"PropertySelector": "Instances.Instance[].Status",
				"DesiredValues": [
					"Running"
				],
				"Parameters": {
					"InstanceIds": ["{{ InstanceId }}"]
				}
			}
		},
		{
			"Name": "queryInstanceCommandOutput",
			"Action": "ACS::ECS::RunCommand",
			"Description": "",
			"Properties": {
				"commandContent": "{{CommandContent}}",
				"type": "RunShellScript",
				"instanceId": "{{InstanceId}}"
			},
			"Outputs": {
				"CommandOutput": {
					"Type": "String",
					"ValueSelector": "InvocationResult[].Output"
				}
			}
		},
		{
			"Name": "tagResources",
			"Action": "ACS::ExecuteApi",
			"Description": "create the command to install logtail agent.",
			"Properties": {
				"API": "TagResources",
				"Service": "ECS",
				"Parameters": {
					"ResourceType": "Instance",
					"ResourceIds": [
						"{{ InstanceId }}"
					],
					"Tags": [{
						"Key": "{{TagKey}}",
						"Value": {
							"Fn::Base64Decode": "{{ queryInstanceCommandOutput.CommandOutput }}"
						}
					}]
				}
			}
		}
	],
	"Outputs": {
		"tagValue": {
			"Type": "String",
			"Value": {
				"Fn::Base64Decode": "{{ queryInstanceCommandOutput.CommandOutput}}"
			}
		}
	}
}

 

 

image.png                                           

执行结束后我们看结果符合预期实例上多了个kernelVersion:3.10.0-xxx的tag

 

image.png                                           

 

 

总结

以上我们介绍了如果使用运维编排方便的给实例打Tag, 我们会把相应的场景抽象成公共模板,方便使用,并挖掘更多的类似运维场景。运维编排致力于解决客户运维的核心场景问题,以Ops As Code的方式提升客户自动化能力。目前处于内测中,欢迎体验和测试。



欢迎使用OOS

OOS管理控制台的链接
如果您遇到链接打不开的问题,请复制此链接到您的浏览器导航栏然后打开:
https://home.console.aliyun.com/redirect.htm?productId=ecs&path=automation/region/

OOS帮助文档的链接
OOS客户支持钉钉群:23330931

系列文章

最佳实践

玩转运维编排服务的权限:Assume Role+Pass Role

场景系列

运维编排场景系列-----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
弹性计算 运维 安全
带你读《云上自动化运维宝典》——ECS省钱指南来啦!万字长文教你如何选择与业务形态最匹配的付费方式(1)
带你读《云上自动化运维宝典》——ECS省钱指南来啦!万字长文教你如何选择与业务形态最匹配的付费方式(1)
625 0
|
10月前
|
弹性计算 人工智能 运维
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
阿里云操作系统控制台提供了便捷的服务器监控与管理功能,简化了运维工作。通过将多台服务器纳入统一监控平台,用户可以快速查看CPU、内存、磁盘和网络等关键资源的使用情况,避免了逐一远程连接查询的繁琐操作。此外,该工具支持自动化数据汇总,极大地方便了日报、周报和月报的编写。测试过程中,系统展示了良好的稳定性和响应速度,尤其在网络抖动和大文件健康状态测试中表现出色。整体体验流畅,显著提升了运维效率。 操作系统控制台地址:[点击访问](https://alinux.console.aliyun.com/)
361 26
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
|
10月前
|
运维 监控 前端开发
Zabbix告警分析新革命:DeepSeek四大创新场景助力智能运维
面对日益复杂的IT环境,高效分析监控数据并快速响应成为运维的关键挑战。本文深入探讨了DeepSeek与Zabbix结合的创新应用,包括一键式智能告警分析、Zabbix文档知识库助手及钉钉告警增强功能。通过部署指南和实用脚本,展示了如何提升故障排查效率,为运维工程师提供高效解决方案。
1005 5
|
弹性计算 运维 安全
ECS系统如何高效运维|开发者分享会
今天分享的内容来自阿里云弹性计算技术专家郑大禹的“ECS系统高效运维实践”。全文围绕ECS运维的痛点和挑战、如何实现高效运维以及典型案例分享这3个主题内容进行讲解。
111743 4
|
机器学习/深度学习 人工智能 运维
|
运维 自然语言处理 开发者
作为一名运维人员,使用通义灵码个人版处理日常工作中的代码相关任务,极大地提升了我的工作效率。以下是我使用通义灵码的具体实践场景、效果和心得,以及相应的截图。
作为一名运维人员,我使用通义灵码处理日常工作中的代码任务,效率提升了30%。通义灵码帮助我快速理解复杂代码、生成准确的代码注释,并能从自然语言生成代码示例,大幅减少了代码编写和理解的时间。
415 3
|
弹性计算 JSON 运维
阿里云ECS实例运维属性-如何控制实例的宕机表现
介绍如何通过运维属性指定阿里云ECS的宕机运维表现等
|
存储 边缘计算 运维
边缘计算问题之OpenYurt 对边缘计算场景中的运维难题如何解决
边缘计算问题之OpenYurt 对边缘计算场景中的运维难题如何解决
139 1
|
弹性计算 运维 Kubernetes
阿里云ECS与混合云策略结合,提供云上云下无缝对接,提升业务灵活性和运维效率。
【7月更文挑战第3天】阿里云ECS与混合云策略结合,提供云上云下无缝对接,提升业务灵活性和运维效率。ECS支持多种计费模式和先进架构,保证低延迟计算。混合云融合公有云灵活性与私有云安全,实现资源最优配置。通过VPC互通、应用迁移、数据同步实践,确保安全合规,助力企业数字化转型。阿里云服务展示技术实力,支持企业在混合云时代抓住机遇。
507 3