运维编排场景系列-----给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
目录
相关文章
|
11月前
|
运维 前端开发 JavaScript
半夜服务器告警不再错过!运维人员必备的语音通知方案
为解决深夜服务器宕机错过告警的问题,本文介绍一款专为个人开发者与运维人员设计的语音通知方案。通过电话直接推送重要告警,确保第一时间响应,避免故障扩大。支持多种编程语言调用,配置简单,3步即可完成,实时性强,适合各类关键业务场景。
807 5
|
10月前
|
运维 监控 安全
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
231 0
|
11月前
|
运维 Prometheus 监控
“服务器又宕了?”别急,智能运维教你如何未卜先知!
“服务器又宕了?”别急,智能运维教你如何未卜先知!
257 0
|
弹性计算 人工智能 运维
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
阿里云操作系统控制台提供了便捷的服务器监控与管理功能,简化了运维工作。通过将多台服务器纳入统一监控平台,用户可以快速查看CPU、内存、磁盘和网络等关键资源的使用情况,避免了逐一远程连接查询的繁琐操作。此外,该工具支持自动化数据汇总,极大地方便了日报、周报和月报的编写。测试过程中,系统展示了良好的稳定性和响应速度,尤其在网络抖动和大文件健康状态测试中表现出色。整体体验流畅,显著提升了运维效率。 操作系统控制台地址:[点击访问](https://alinux.console.aliyun.com/)
463 26
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
|
弹性计算 Ubuntu Linux
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS自动化部署。支持Ubuntu 22.04/20.04、CentOS 7.7-7.9及Alibaba Cloud Linux 3.2104 LTS。前提条件:ECS实例需运行中且有公网。步骤:选择Docker扩展并安装,验证成功通过命令`docker -v`查看版本号。
1146 79
|
机器学习/深度学习 人工智能 运维
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
575 14
|
运维 安全 开发工具
GitHub 热门开源运维工具 Websoft9:如何实现服务器管理效率翻倍?
Websoft9 提供 200+ 开源应用一键部署,支持容器化隔离、GitOps 自动化和企业级安全防护,助力服务器管理效率提升 80%。
503 1
|
运维
阿里云服务器批量执行命令(系统运维管理oos)
阿里云【系统运维管理oos】批量执行详情
305 5
|
机器学习/深度学习 人工智能 运维
基于AI的自动化服务器管理:解锁运维的未来
基于AI的自动化服务器管理:解锁运维的未来
1188 0
|
弹性计算 运维 Ubuntu
使用阿里云服务器自动搭建WordPress网站流程,超简单by系统运维管理OOS
本教程介绍如何使用阿里云服务器(ECS)和系统运维管理OOS自动搭建WordPress网站,支持Ubuntu、CentOS及Alibaba Cloud Linux等操作系统。前提条件包括ECS实例处于运行中、有公网IP且安全组已开启80端口。安装步骤简单:进入ECS快速购买控制台选择预装WordPress,确认下单后通过管理控制台查看实例详情并开放安全组端口。最后,通过实例公网IP访问,出现WordPress登录页即表示安装成功。

热门文章

最新文章