亚马逊AWS官方博客

通过 AWS Systems Manager OpsCenter 和 Systems Manager Automation 实现自动化的运维管理

概述

随着企业对亚马逊云服务的深入使用,必将面临大规模云服务的运维效率问题。为此 AWS 提供了 Systems Manager 来帮助客户查看、管理和控制 AWS 服务上的基础设施,处理日常运维事件。Systems Manager 简化了企业运维人员对资源和应用程序的管理,缩短了检测和解决运营问题的时间,并使企业运维人员能够大规模安全地运营和管理云基础设施。如下是 AWS Systems Manager 实现企业自动化运维的技术栈概览。本文将着重介绍其中的 OpsCenter 和 Automation 部分,这两部分是云资源集中化自动运维实现的核心环节。

图一 AWS Systems Manager 技术栈概览

Systems Manager OpsCenter 是查看、处理和修复与 AWS 服务相关的问题的操作中心,为企业运维人员提供了标准且统一的体验,可以缩短调查相关问题、修复问题的时间,并减少手工操作带来的错误。运维人员可以在 OpsCenter 中统一管理多账号、多 region 的操作,即在此处管理与 AWS 资源相关的运营工作项(OpsItems)。通过与 Amazon CloudWatch、Amazon CloudWatch Application Insights、Amazon EventBridge、Amazon DevOps Guru、AWS Config、AWS Security Hub 和 AWS Systems Manager Incident Manager 的集成,OpsCenter 在一个界面内显示来自上述服务的信息并作为 OpsItems 的上下文。之后运维人员可以通过使用 Systems Manager Automation documents(运行手册)来修复 OpsItems 中存在的问题或执行需要的操作。OpsItems 的操作权限可以通过 IAM policy 进行控制,并可通过标签进行细化的管理。

Systems Manager Automation 是 AWS Systems Manager 的一项功能,目的是简化 AWS 服务的常见部署和维护、部署等任务,可以帮助运维人员构建用于大规模部署、配置和管理 AWS 资源的自动化解决方案。Amazon 提供了预定义运行手册,运维人员可以使用这些预定义的运行手册来执行各种任务,还可以创建自定义的运行手册,从而可靠地解决常见问题、提高故障排除效率并减少重复性操作。

AWS Systems Manager OpsCenter 和 Systems Manager Automation 的工作流示意图如下:

图二 Amazon OpsCenter 工作流示意图

Systems Manager Automation 简介

本文将首先介绍 Systems Manager Automation。借助 Systems Manager Automation,企业运维人员可以通过代码的方式来自定义运行手册(也可以通过低代码可视化设计器生成代码)去管理云基础设施,如创建资源、安装补丁、自动备份等工作来提升在云上的运维工作效率。目前 Amazon 提供了 600 多份常见资源管理的预定义运行手册,运维人员可以根据需要将运行手册安排在维护时段内去执行,也可以通过 Amazon CloudWatch Events 触发(如云环境中的资源更改),或者通过 AWS 管理控制台CLI软件开发工具包直接执行。 Systems Manager Automation 可以跟踪运行手册中每个步骤的执行情况,并要求批准,并在出现错误的情况下自动停止退出。

Amazon 提供了一个丰富的运行手册库,库中包含了可应对常见操作的各类运行手册,主要覆盖了自动化类运行手册、命令行类运行手册、Policy 类运行手册、Session 类运行手册、合规一致性运行手册等五类运行手册,运维人员可以通过预制的运行手册来执行各种操作任务。 下图展示了运行手册库中的自动化运行手册、命令行类运行手册的子类别。

图三 AWS Systems Manager Automation Document 中自动化运行手册和命令行类运行手册的子类别

Systems Manager Automation 使用说明

在使用运行手册前,需要先确定您有相关权限来运行。如果 IAM 用户帐户、组或角色被分配了管理员权限,则有权访问 Systems Manager Automation。如果没有管理员权限,则管理员必须通过将 Amazon SSMFullAccess 托管策略或提供类似权限的策略分配给您的 IAM 帐户、组或角色来授予权限。Amazon SSMFullAccess 策略授予 Systems Manager 操作的权限,但某些运行手册需要对其他服务的权限。例如,AWS-ReleaseElasticIP 运行手册需要 ec2:ReleaseAddress 的 IAM 权限。查看运行手册中执行的操作,以确保 IAM 用户帐户、组或角色被分配了执行这些操作所需的权限。

在拥有权限后,进入 Systems Manager Console 界面打开 Documents(如下图),在这里可以看到 Amazon 提供的一个预定义运行手册库,里面包含多种类型的运行手册,如补丁、安全、数据备份、资源管理等,可以为各种操作任务选择所需的运行手册。这里以 AWS-StartEC2Instance 运行手册为例,介绍如何通过运行手册去启动 EC2。

  1. 找到所需的运行手册,以 AWS-StartEC2Instance 为例,点击名称,进入到运行手册的详情页面。

图四 AWS Systems Manager Automation Document 运行手册列表

  1. 在详情页会显示运行手册的相关信息,点击 “Execute automation” 执行运行手册。

图五 AWS Systems Manager Automation 运行手册详细页

  1. 在执行运行手册页面的 Input paramters 处,填写所需启动的 InstanceId 和启动 Instance 所需要的 Role。InstanceId 可以有多个,以“,” 拼接。然后点击 “Execute” 进行执行。

图六 AWS Systems Manager Automation 运行手册执行页

  1. 在执行详情页,可以看到整个任务的执行情况。大约一分钟左右,任务的状态显示为 Success,表示对应的 EC2 启动完成。

图七 AWS Systems Manager Automation 运行手册执行状态

以上就是一个简单的通过 AWS 预定义的运行手册启动 EC2 示例,目前预定义的运行手册有 600 多种,您可按需选择符合您场景的手册来执行具体的操作。当然,如果预定义运行手册没有覆盖到您所需场景,您也可以创建一个定自义的运行手册来满足您的需求。

如何创建一个自定义的运行手册

有两种方式可以创建自定义运行手册:1. 使用 JSON 或者 YAML 代码按照一定规则编写运行手册;2. 使用低代码可视化设计器生成运行手册。在介绍两种方式之前,先了解一下运行手册代码结构。以本文上述 AWS-StartEC2Instance 运行手册代码为示例,它主要包括三个部分:基础信息、参数输入、任务操作。

图八 AWS Systems Manager Automation 运行手册代码结构

  • 基础信息用于定义运行手册的描述、版本、所需角色(非必需)。
  • 参数输入用于定义运行手册需要哪些参数传入,比如输入要启动的 InstanceID、执行任务所需角色。
  • 任务操作用于定义执行哪些动作,在任务操作中可以定义多个动作,动作与动作之间可以有先后依赖关系,尤其在一些复杂的场景,多个动作操作比较常见。比如将 EC2 生成快照并备份到其它 Region,这就需要多个行为动作结合使用。目前可执行的动作可以参考:Systems Manager 自动化操作参考

使用 JSON 或者 YAML 代码编写运行手册

在 Systems Manager Console 中,您可以通过 JSON 或者 YAML 代码来创建您的自定义运行手册,如下图所示,在 Content 代码编辑框内填写所需的基础信息、参数输入、任务操作。

图九 基于 JSON 或 YAML 代码创建 AWS Systems Manager Automation 运行手册

使用低代码可视化设计器生成运行手册

如果您对 JSON 或者 YAML 不是很熟悉,也可以通过可视化设计器来生成运行手册。如下图所示,中间是图形化的手册运行逻辑表示,左侧是可选的动作,右侧是可以定义动作所需要的参数信息。借助可视化设计器,您可以很轻松地根据您的需求来设计你的运行手册。具体操作可参考:视觉对象设计体验界面概述

图十 基于可视化设计器创建 AWS Systems Manager Automation 运行手册

注:目前中国宁夏、北京 Region 暂不支持使用可视化设计器的方式来创建运行手册。

文档管理

您可以创建并保存不同版本的文档,并可以为每个文档指定默认版本。文档的默认版本可以更新到较新版本或恢复到较旧版本。当您更改文档的内容时,Systems Manager 将自动递增文档的版本。

通过对文档打标签,可以快速识别一个或多个文档。例如,您可以为特定环境、部门、用户、组或时间段的文档添加标签。此外,您还可以通过创建一个指定用户或组可访问的标签的 AWS IAM policy 来限制对文档的访问。

如何在中国区使用 Global 中的运行手册

目前,Global Region 中的预定义运行手册超过 600 多份,中国区目前有预定义运行手册 200 多份,对于缺失的手册,如果您有在中国区使用 Global 区运行手册的需求,建议通过创建自定义运行手册的方式,将 Global 中的运行手册代码复制到中国区来满足您的需求。在复制 Global 运行手册代码到中国区时,需要注意的是如果代码中包括 arn:aws: ,则需要将 arn:aws:改成 arn:aws-cn:,以避免在中国区出现报错的情况。

常用自定义运行手册

以下主要介绍两个常用运行手册作为实例,进行简单说明。下面两个文档在 Global region 和中国 region 都已发布。

1. CopyEC2Instance-ChinaRegion

在迁移或容灾的场情中,经常会碰到这样的需求,需要将一个正在运行的 EC2 复制到其它子网、VPC 或者是其它 Region 以达到迁移或者容灾的目的。但是在 AWS 中,无法直接将一个已有的 EC2 搬迁到需要的位置。常见的做法是可以为源 EC2 创建镜像(AMI),然后在目标位置通过将新 AMI 进行启动。

为了简化对已有的 EC2 进行创建镜像以及在目标位置进行启动的操作步骤,目前可以通过基于 AWS Systems Manager Automation 的自动化复制方案实现,具体操作流程如下:

  1. 打开 AWS Systems Manager Automation 运行手册。**请注意保持执行自动化与您源 EC2 在同一个 Region。
    在 Global 区域,您可以通过打开  AWSSupport-CopyEC2Instance 运行手册进行自动化配置。
    在中国区宁夏或北京区域,您可以通过打开 CopyEC2Instance-ChinaRegion 运行手册进行自动化配置。
  1. 执行自动化文件中选择简单执行
  2. 输入参数中,输入要复制的 EC2 实例的 InstanceID。如果您使用 Interactive 实例选择器,请确保从下拉列表中选择显示所有实例
  3. 提供实例复制的目标区域和/或 SubnetID
  4. 填写您的应用案例所需的任何其他可选字段,然后选择执行
  5. 要监控执行进度,请打开 Systems Manger 控制台,然后从导航窗格中选择自动化。选择正在运行的自动化,然后查看已执行的步骤。要查看自动化的输出,请展开输出
  6. 待自动化执行成功后,在目标位置检查您所需的 EC2 是否正常启动。

有关此运行手册的更多信息,请阅读 AWSSupport-CopyEC2Instance

2. SetupIPMonitoringFromVPC

迁移或容灾的场景中,需要监控新环境到一些地址的网络链接,SetupIPMonitoringFromVPC 此自动化文档在指定子网中创建 Amazon EC2 实例以监控到指定 IP 地址的网络链接(IPv4 或 IPv6)。 此自动化持续运行 ping、My Traceroute(MTR)、traceroute 和 tracetcp 测试,并将结果输出到 CloudWatch log 中,并生成仪表盘。

执行也非常简单,在 AWS Systems Manager Automation 中搜索并运行此文档,并中参数栏中输入要运行实例的子网和目标端 IP 地址就可以。

通过 OpsCenter 和 Automation 实现自动化运维

在熟悉 Automation 自动化手册后,下面介绍使用 AWS Systems Manager 自动化运行手册通过 OpsCenter 集中管理修复在 OpsItem 中发现的 AWS 服务、资源的问题。

OpsCenter 是 AWS Systems Manager 的一项功能,运营工程师和 IT 专业人员可在此处集中管理与 AWS 资源相关的运营工作项(OpsItems)。OpsItem 是指任何需要调查和修复的操作问题或中断。使用 OpsCenter,您可以查看有关每个 OpsItem 的上下文调查数据,包括相关 OpsItems 和相关资源。您也可以运行 Systems Manager 自动化运行手册,以解决 OpsItems。

每个 OpsItem 都包括解决事件所需的相关信息,如生成 OpsItem 的 AWS 资源的名称和 ID。在设置 OpsCenter 并将其与其他 AWS 服务集成时,前者可以自动创建 OpsItems。如果已与这些服务集成,OpsCenter 将显示来自 AWS Config、AWS CloudTrail 和 Amazon EventBridge 的信息,以帮助您调查 OpsItem 上下文,无需在多个控制台页面之间导航即可进行调查。

图十一 通过 OpsCenter 和 Automation 实现自动化运维的流程

在如下图中,示例图中是包含两个 OpsItems 的 OpsCenter 界面,其中包括对 RDS 备份的验证和对 EC2 instance 的 resize 操作。

图十二 OpsCenter 中 OpsItems界面

OpsItems 可以由 CloudWatch alarm 触发,示例如下图,即一个实例 CPU 利用率超过 50% 的 alarm 会触发一个,严重程度为 3-中等、性能类的 OpsItems。

图十三 CloudWatch alarm 触发 OpsItems

在 OpsCenter 可以观察到这个 CloudWatch alarm 触发的 OpsItems。

图十四 OpsCenter 中新生成的 OpsItems

之后在 OpsItems 中执行 Resize 的操作解决这个问题,并可在“Related resource details”查看对应的 CloudWatch alarm 信息。

图十五 通过 OpsItems 中的自动化手册解决对应的问题

另外,也可以在 Amazon EventBridge 中创建规则(Rules),基于 EventBridge 中的事件来触发自动化手册的执行,并设定好自动化手册执行时的参数。示例如下,详见基于事件运行自动化

图十六 通过 Amazon EventBridge 触发自动化手册的执行

总结

Amzon Systems Manager 提供云平台中统一、安全、自动化、标准化的基于事件驱动的自动化运维平台,来帮助企业运维人员缩短调查相关问题、修复问题的时间,并减少手工操作带来的错误,从而提高运维人员工作效率并提高系统整体可用性。

参考文档

  1. Use AWS Systems Manager Automation runbooks to resolve operational tasks
  2. AWS Systems Manager Automation
  3. Avoid patching failures due to low disk space with AWS Systems Manager Automation and CloudWatch alarms
  4. Automated just-in-time storage for SQL Server backup using AWS Systems Manager Automation
  5. Use AWS Systems Manager Automation to create input parameters that populate AWS resources as a dropdown list
  6. How Capgemini uses AWS Systems Manager Automation runbooks to generate reports for AWS Backup activity
  7. Build AWS Systems Manager Automation runbooks using AWS CDK

本篇作者

谷雷

亚马逊云科技资深解决方案架构师,专注于迁移上云、云上业务连续性的实现等技术方向。

谭志强

亚马逊云科技迁移解决方案架构师,主要负责企业级客户的上云或跨云迁移工作,具有十几年 IT 专业服务经验,历任程序设计师、项目经理、技术顾问、解决方案架构师。