2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

AWS Systems Manager 的新自动化功能

  • 2019-11-21
  • 本文字数:2905 字

    阅读完需:约 10 分钟

AWS Systems Manager 的新自动化功能

今天,我们宣布在 AWS Systems Manager 内推出附加自动化功能。如果您尚未使用 Systems Manager,您可以使用这项提供统一用户界面的服务,以便可以从多个 AWS 服务中查看操作数据,并在您的 AWS 资源间自动执行操作任务。


随着这个新版本的发布,这项服务变得更加强大。我们已在 AWS Systems Manager 中增加了附加功能,可使您构建、运行及与您团队或组织内的其他人共享自动化,从而使您的基础设施管理更具有可重复性、更不易出错。


在导航菜单的 AWS Systems Manager 控制台内,有一个称为自动化的项目,如果我点击该菜单项,将会看到执行自动化按钮。



当我点击此按钮时,系统会询问我想要运行哪个文档。AWS 提供文档库供选择,但今天,我希望构建自己的文件,因此,我将点击创建文档按钮。



进行此操作后,我将进入新的屏幕,从该屏幕中,我可以创建一个主要执行 Python 或 PowerShell 脚本的文档(有时候也称为自动化操作手册)。


控制台为我提供两个编辑文档的选项:一个 YAML 编辑器或提供指导性逐步用户界面且能够包含每个工作流程步骤文档的“生成器”工具。


因此,我们来了解一下如何构建和运行简单的自动化。当我使用生成器工具创建文档时,首先需要的是文档名称。



接下来,我需要提供描述。正如下文所示,我能够使用 Markdown 对描述进行格式化。描述是对您的文档作用进行说明的绝佳机会,由于大多数用户都希望与其团队中的其他人共享文档并构建文档库来解决日常问题,描述非常有价值。



另外,系统要求我提供文档的参数。这些参数可用于您将在稍后创建的所有脚本中。在示例中,我创建了三个参数:imageIdtagValueinstanceType。当我开始执行这个文档时,我将有机会提供这些参数的值,这些值将覆盖我设置的任何默认值。



当有人执行我的文档时,所执行的脚本将与 AWS 服务交互。运行文档时,大多数操作都具有用户权限,而且还具有提供代入角色的选项。然而,对于具有运行脚本操作的文档,当脚本调用任何 AWS API 时,需要该角色。


您可以在生成器工具中全局设置代入角色;然而,我希望将称为 assumeRole 的参数添加到我的文档中,这将使执行角色的任何人都能提供不同的角色。



然后,您可以通过在代入角色属性文本框中使用 {{assumeRole}} 语法将此参数与全局 assumeRole 连接(我已将我的参数命名为 assumeRole,但您可以使用您喜欢的名称,只需要确保给赋予参数的名称是您在双括号语法中输入的名称,例如 {{yourParamName}})。



当我的文档设置完成后,我需要创建文档的第一步。您的文档可以包含 1 个或多个步骤,且您可以使用分支策略创建复杂的工作流程,例如基于某个参数或失败的步骤。在本示例中,我仍然打算创建三个步骤,这些步骤将一个接一个的执行。同样,您需要为步骤提供名称和描述。此描述还可以包含标记。您需要选择一种操作类型,在此示例中,我将选择运行脚本



通过“运行脚本”操作类型,我可以在 Python 或 PowerShell 中运行脚本,无需任何基础设施来允许脚本。重要的是,要认识到此脚本将不在您的其中一个 EC2 示例中运行。脚本在托管的计算环境中运行。您可以在首选项页面上配置 Amazon CloudWatch 日志组,以将输出发送至您选择的 CloudWatch 日志组中。


在此演示中,我编写了一些 Python 来创建 EC2 实例。您将注意到,此脚本使用的是适用于 Python 的 AWS 软件开发工具包。我根据以参数形式传递到脚本中的 image_idtag_value 和操作 instance_type 创建实例。



要将参数传递至脚本中,我在其他输入部分中将 InputPayload 选为输入类型。然后,我在“输入值”文本框中使用特定的 YAML 格式将全局参数连接到我将在脚本中使用的参数。您还将发现,我使用双括号语法来引用全局参数,例如 {{imageId}}


输出部分中,我还连接了可以在后续步骤中使用的输出参数。



接下来,我将在文档中添加第二个步骤。这一次,我将轮询实例,以查看其状态是否已切换到确定。此代码令人兴奋的地方在于,从上一步传递到脚本中的 InstanceId。此示例演示了如何将执行步骤连接到一起来使用前面步骤的输出。


Python


def poll_instance(events, context):    import boto3    import time
ec2 = boto3.client('ec2')
instance_id = events['InstanceId']
print('[INFO] Waiting for instance to enter Status: Ok', instance_id)
instance_status = "null"
while True: res = ec2.describe_instance_status(InstanceIds=[instance_id])
if len(res['InstanceStatuses']) == 0: print("Instance Status Info is not available yet") time.sleep(5) continue
instance_status = res['InstanceStatuses'][0]['InstanceStatus']['Status']
print('[INFO] Polling get status of the instance', instance_status)
if instance_status == 'ok': break
time.sleep(10)
return {'Status': instance_status, 'InstanceId': instance_id}
复制代码


要将参数传递到第二个步骤中,请注意,我使用双括号语法引用前一个步骤的输出。输入值文本框中的值 {{launchEc2Instance.payload}}是步骤 launchEc2Instance 的名称,其次是输出参数 payload 的名称。



最后,我将添加最后一个步骤。该步骤将运行 PowerShell 脚本并使用适用于 PowerShell 的 AWS 工具。我添加这个步骤只是为了说明,您可以将 PowerShell 用作 Python 的替代。


您将在第一行注意到,我必须先安装 AWSPowerShell.NetCore 模块并使用 -Force 交换器才能开始与 AWS 服务进行交互。


在此步骤中,只需要从 LaunchEc2Instance 步骤中获取 InstanceId 输出,并用它返回 ECS 实例的 InstanceType



值得注意的是,我必须按照与前面相同的方式配置其他输入,从而将参数从 LaunchEc2Instance 步骤传递到此步骤中。



现在,我们的文档已创建好,可以执行文档。我将前往菜单的操作与更改部分并从此屏幕中选择自动化,然后再点击执行自动化按钮。然后,我将选择我要执行的文档。由于此文档是我创建的,我可以在由我拥有选项卡中找到此文档。



如果我点击之前创建的 LaunchInstance 文档,我将进入文档详细信息屏幕,该屏幕将显示我添加的描述。通过这份格式良好的描述,我可以为我的文档生成文档,并且还能使其他人了解它的用途。



当我点击下一步时,系统将要求我为我的文档提供任何输入参数。我将添加希望在执行此自动化时使用的 imageId 和此角色的 ARN。需要记住的是,此角色需要具有调用脚本所请求的任何服务的权限。在我的示例中,这意味着,此角色需要能够创建 EC2 实例。



当文档执行后,我将进入一个屏幕,该屏幕显示文档的步骤并为我提供每个步骤所花费时间的详细信息及每个步骤的各自成功或失败情况。我还可以深入了解每个步骤并检查日志。如您所见,我的文档的全部三个步骤均已成功完成,如果我前往 Amazon Elastic Compute Cloud (EC2) 控制台,我将拥有使用标签 LaunchedBySsmAutomation 创建的 EC2 实例。



现在,可以在 AWS Systems Manager 控制台内在所有区域使用这些新功能,因此,您可以立即开始使用它们。


快乐自动化!


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-automation-features-in-aws-systems-manager/


2019-11-21 08:00776

评论

发布
暂无评论
发现更多内容

竟然还有人说ArrayList是2倍扩容,今天带你手撕ArrayList源码

一灯架构

Java java面试 10月月更

【一Go到底】第七天---运算符

指剑

Go golang 10月月更

单模光缆与多模光缆,网络工程师必知的光缆类型

wljslmz

网络工程 10月月更 单模光纤 多模光纤 弱电

你不知道的Java工具类库,十倍提升开发效率

一灯架构

Java java面试 10月月更

推荐一款id 生成器:Hashids

xiaoxi666

在Chrome浏览器中最快速实现拾色器(颜色吸管)

茶无味的一天

前端 谷歌浏览器

【Nacos源码之配置管理 三】TaskManager 任务管理的使用

石臻臻的杂货铺

nacos 10月月更

踩上元宇宙的风口后,消费级AR眼镜真的复兴了吗?

脑极体

【一Go到底】第六天---值类型、引用类型、标识符

指剑

Go golang 10月月更

pgsql数据库自动备份

衝鋒壹号

10月月更

Android Coder带你了解反射

子不语Any

后端 java; 10月月更

Go设计模式“金旋风”——代理模式

Regan Yue

Go 设计模式 代理模式 10月月更

微信业务架构图 & 学生管理系统方案

无语

「架构实战营」

阿里P8面试官总结的《2022最新java面试题》,搞定90%以上的技术面

程序知音

Java 程序员面试 后端技术 Java面试题 Java面试八股文

【结构体内功修炼】结构体实现位段(二)

Albert Edison

C语言 结构体 10月月更 位段

学习编程既要追根溯源、又要紧跟时代步伐

玄兴梦影

c 编程 语法

与学长共话成长,领跑毕业新未来

宇宙之一粟

校招 10月月更

高效编程不一定意味着要疯狂写代码

宇宙之一粟

程序员 10月月更

【牛客刷题-算法】NC141 判断是否为回文字符串

清风莫追

数据结构 算法 刷题笔记 10月月更

2022-10-06:以下go语言代码输出什么?A:[1 2 3] [1 2 3] ;B:[1 2 3] [3 4 5]; C:[1 2 3] [3 4 5 6 7 8 9];D:[1 2 3] [3

福大大架构师每日一题

golang 福大大 选择题

【牛客刷题-算法】加精 _ 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程

清风莫追

算法 链表 算法数据结构 10月月更

【愚公系列】2022年10月 Go教学课程 020-Go容器之数组

愚公搬代码

10月月更

HashMap高阶用法,十倍提升开发效率

一灯架构

Java java面试 10月月更

【Nacos源码之配置管理 四】DumpService如何将配置文件全部Dump到磁盘中

石臻臻的杂货铺

nacos 10月月更

【牛客刷题-算法】NC151 最大公约数

清风莫追

数据结构 算法 最大公约数 10月月更

Qt|使用QuaZip压缩包中文乱码问题解决

中国好公民st

c++ qt 10月月更

爬虫练习题(二)

张立梵

Python. 10月月更 爬虫案例

传统架构面临的挑战及上云的优势

穿过生命散发芬芳

企业上云 10月月更

【C语言难点突破】指针的常见易错点

Geek_65222d

10月月更

开发者有话说|在刷怪升级的成长路上,技术人应该掌握的三个大招

迷彩

个人成长 10月月更 学会学习 学会提问 学会思考

Vue3入门指北(十)侦听器

Augus

Vue3 10月月更

AWS Systems Manager 的新自动化功能_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章