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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
云服务器(按量付费),48vCPU 186GiB
简介: 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机器组

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
弹性计算 运维 监控
【阿里云弹性计算】云上自动化运维实践:基于阿里云ECS的自动化部署与管理
【5月更文挑战第27天】阿里云ECS自动化运维实践:借助ECS API和SDK实现自动化部署,通过Python示例展示实例创建。利用Ansible、Docker等工具进行配置管理和容器化,结合CloudMonitor和Auto Scaling实现监控告警及资源动态调整,提升运维效率和系统稳定性。
23 0
|
9天前
|
存储 机器学习/深度学习 弹性计算
【阿里云弹性计算】阿里云ECS实例选择指南:理解不同实例系列的适用场景
【5月更文挑战第24天】阿里云ECS实例系列包括计算优化型、内存优化型、存储优化型、GPU加速型和通用型,适用于不同场景。计算优化型适合计算密集型任务,内存优化型适用于内存数据库,存储优化型针对高I/O需求,GPU加速型用于图形处理和深度学习,通用型则平衡各类需求。选择时需考虑应用类型、性能需求、成本效益和可扩展性。提供的示例代码展示了如何使用阿里云CLI创建通用型实例。本文旨在帮助用户根据业务需求选择最适合的ECS实例。
46 1
|
11天前
|
弹性计算 数据挖掘 应用服务中间件
阿里云服务器通用算力型U1实例解析,实例性能、适用场景及常见问题参考
在阿里云服务器的所有实例规格中,通用算力型u1实例主打的是高性价比,通用算力型U1实例云服务器自推出以来,就受到了广大用户的关注,也是目前阿里云的活动中比较热门的云服务器实例,这个实例规格的性能要好于经济型e等共享型实例,价格又比计算型c7、通用型g7等其他企业级实例要低一些。本文将深入解析通用算力型U1实例的特点、适用场景以及价格优势,帮助用户更好地了解该云服务器实例。
阿里云服务器通用算力型U1实例解析,实例性能、适用场景及常见问题参考
|
12天前
|
存储 弹性计算 Linux
阿里云服务器购买常见三种购买方式及适用场景、图文教程及注意事项参考
阿里云服务器的购买方式主要有快速购买、自定义购买和活动购买这三种常见的方式。每种购买方式都有自己的适合场景,也有很多需要注意的地方,下面是这些购买方式的具体图文教程及注意事项,适合初次购买阿里云服务器的用户参考,从而选择适合自己的购买方式。
阿里云服务器购买常见三种购买方式及适用场景、图文教程及注意事项参考
|
12天前
|
存储 安全 物联网
裸金属服务器适合哪些场景使用,有哪些优势
裸金属架构虚拟系统无需安装操作系统或虚拟化软件,而是通过虚拟化技术直接将硬件资源分配给应用,这种架构消除了传统虚拟化技术中的操作系统层,使虚拟机能够直接访问物理硬件资源,实现了更高的性能和更低的延迟,从而提供接近物理机的性能和效率。
|
16天前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格特点、适用场景及最新价格参考
在阿里云服务器的实例规格中,有共享型也有企业型,一般用户选择较多的企业级实例规格有计算型、通用型、内存型,每一种实例规格又有多个实例规格族可选,不同的云服务器实例规格在架构、计算、存储、网络、安全等方面有着不同,因此,其适用场景也有所不同。本文来详细介绍一下阿里云服务器计算型、通用型、内存型主要实例计算、存储等性能及其适用场景,以供参考。
阿里云服务器计算型、通用型、内存型主要实例规格特点、适用场景及最新价格参考
|
18天前
|
存储 缓存 安全
阿里云服务器实例规格选型参考,根据上云场景选择适合自己的实例规格
对于很多新手用户来说,在初次选择阿里云服务器实例规格的时候,面对众多实例规格往往不知道如何选择,因为云服务器实例规格不同,价格也不一样,本文通过一些常见的选型场景推荐,便于大家在选择云服务器实例规格时做个参考。
阿里云服务器实例规格选型参考,根据上云场景选择适合自己的实例规格
|
18天前
|
编解码 缓存 安全
阿里云目前活动内各云服务器实例规格适用场景与价格参考
目前阿里云的活动中,云服务器有多种不同实例规格可选,实例规格定义了实例的基本属性:CPU和内存(包括CPU型号、主频等),但是不同实例规格所适用的场景是不一样的,价格也有很大差别,有的用户初次选购阿里云服务器可能并不知道这些实例规格的具体适用场景,下面是小编整理汇总的2024年截止目前阿里云的活动中云服务器实例规格适用场景与活动价格,以供参考。
阿里云目前活动内各云服务器实例规格适用场景与价格参考
|
18天前
|
运维 算法 物联网
五大智能运维场景
【5月更文挑战第3天】智能运维场景分5类:异常检测、根因诊断、故障自愈、事件预警、效能优化。
|
18天前
|
存储 运维 NoSQL
通过OOS实现定时备份Redis实例转储到OSS
基于阿里云 Redis 备份功能,现结合 OOS 推出自动转储至 OSS 的新方案,解决了数据安全风险、运维繁琐、成本增加和效率低下等问题。新方案亮点包括: 1. 数据安全性提高:备份文件自动上传至OSS,利用OSS的数据冗余存储,保证数据在硬件故障时的持久性和可用性。 2. 完全自动化:设置好定时规则后,备份和转储过程无需人工干预。 3. 多实例多地域集中管理:支持一次选择多个实例和跨区域备份,简化管理。 4. 灵活的备份策略和成本控制:自定义备份频率,并通过OSS生命周期管理策略控制成本。 5. 监控和告警:集成OSS和云监控,实时掌握备份状态,及时处理异常。
168 0
通过OOS实现定时备份Redis实例转储到OSS