实例如何建立自己的网站

如何建立自己的网站  时间:2021-02-19  阅读:()

AmazonEC2SystemsManager用户指南AmazonEC2SystemsManager用户指南AmazonEC2SystemsManager:用户指南AmazonEC2SystemsManager用户指南TableofContents什么是AmazonEC2SystemsManager1功能1入门2访问SystemsManager2定价3相关内容3设置4先决条件5Ec2messages和未记录的API调用7配置访问权限7任务1:配置用户对SystemsManager的访问权限8任务2:为SystemsManager创建实例配置文件角色8任务3:创建使用SystemsManager角色的AmazonEC2实例9可选的访问权限配置9安装和配置SSM代理11在Windows实例上安装和配置SSM代理11在Linux实例上安装和配置SSM代理13将SSM代理日志文件发送到AmazonCloudWatchLogs24混合环境25创建IAM服务角色26创建托管实例激活27在Windows混合环境中的服务器和虚拟机上安装SSM代理28在Linux混合环境中的服务器和虚拟机上安装SSM代理28合作伙伴和产品集成31从GitHub运行脚本31从GitHub运行AnsiblePlaybooks32从GitHub运行Python脚本33从AmazonS3运行脚本35从AmazonS3运行Ruby脚本35从AmazonS3运行PowerShell脚本36SystemsManager文档39SystemsManager预定义文档39文档架构和功能40SSM文档语法41文档版本与执行45自定义文档45共享文档46创建SystemsManager文档46使用AmazonEC2控制台添加SystemsManager文档46使用WindowsPowerShell添加SystemsManager文档46使用AWSCLI添加SystemsManager文档47为文档添加标签47使用标签控制对文档的访问权限48共享SystemsManager文档49共享SystemsManager文档的共享和使用指南50如何共享SystemsManager文档51如何修改共享文档的权限52如何使用共享的SystemsManager文档53创建复合文档55创建复合文档55从远程位置运行文档56SSM文档插件参考58顶级元素58aws:applications59iiiAmazonEC2SystemsManager用户指南aws:cloudWatch60aws:configureDocker66aws:configurePackage66aws:domainJoin67aws:downloadContent68aws:psModule70aws:refreshAssociation71aws:runDockerAction71aws:runDocument73aws:runPowerShellScript74aws:runShellScript74aws:softwareInventory75aws:updateAgent76aws:updateSSMAgent77MaintenanceWindow79ControllingAccess79使用AWS控制台79使用CLI81使用ToolsforWindowsPowerShell83使用MaintenanceWindow84创建MaintenanceWindow85向MaintenanceWindow分配目标86向MaintenanceWindow分配任务86更新或删除MaintenanceWindow87MaintenanceWindow演练89创建和配置MaintenanceWindow89更新MaintenanceWindow96列出有关MaintenanceWindow的信息101自动化107设置Automation107验证您的权限是否可配置SystemsManagerAutomation108为Automation配置CloudWatchEvents112可选:将Automation配置为CloudWatchEvents目标112Automation演练113控制台演练:修补LinuxAMI113CLI演练:修补LinuxAMI115使用Automation文档118使用预定义的Automation文档118创建Automation文档123Automation示例128在无法访问的实例上运行EC2Rescue工具128使用Automation、Lambda和ParameterStore简化AMI修补135将Automation用于Jenkins139修补AMI和更新AutoScaling组141Automation操作145所有操作中的常见属性146aws:approve147aws:changeInstanceState150aws:copyImage151aws:createImage153aws:createStack154aws:createTags158aws:deleteImage159aws:deleteStack160aws:executeAutomation161aws:invokeLambdaFunction162aws:runCommand164ivAmazonEC2SystemsManager用户指南aws:runInstances166aws:sleep168Automation系统变量169术语170支持的场景173不支持的场景175排除SystemsManagerAutomation的故障178常见Automation错误179Automation执行无法启动186执行已启动,但是状态为"失败"187执行已启动,但超时188Inventory管理190开始使用Inventory190关于SystemsManagerInventory190使用自定义清单191相关AWS服务193配置清单收集193配置收集193配置清单的资源数据同步194创建清单的资源数据同步195查询清单收集196清单演练196将自定义清单元数据分配给某个实例197使用AWSCLI收集清单198使用资源数据同步聚合清单数据200补丁管理206开始使用PatchManager207使用PatchManager207步骤1:验证默认补丁基准或创建补丁基准207步骤2:将实例组织到补丁组中209步骤3:使用MaintenanceWindow计划补丁更新210PatchManager演练210使用AmazonEC2控制台的PatchManager演练211使用AWSCLI的PatchManager演练213ParameterStore229SystemsManager参数入门229关于SystemsManager参数230使用安全字符串参数231使用SystemsManager参数233将参数组织成层次结构233创建参数235标记参数240使用参数版本241设置SystemsManager参数244控制对SystemsManager参数的访问权限244为SystemsManager参数设置通知和事件247ParameterStore演练247在命令中创建和使用参数(EC2控制台)248在命令中创建和使用参数(AWSCLI)248创建安全字符串参数并将实例加入域(PowerShell)251使用层次结构管理参数252RunCommand254设置RunCommand255基于实例标签限制RunCommand访问256设置事件和通知258执行命令266从EC2控制台执行命令266vAmazonEC2SystemsManager用户指南将命令发送到队列268取消命令271演练271使用AWSCLI272使用ToolsforWindowsPowerShell274对RunCommand进行故障排除281我的实例在哪里281获取有关Windows实例的状态信息281获取有关Linux实例的状态信息282SSM代理故障排除282状态管理284状态管理器入门284关于状态管理器285示例状态管理器文档285创建关联287编辑关联(版本控制)288使用Targets参数创建关联288状态管理器演练289自动更新SSM代理289自动更新半虚拟化驱动程序290配置合规性292配置合规性入门292为配置合规性创建资源数据同步293关于配置合规性294关于补丁合规性294关于关联合规性295关于自定义合规性295修复合规性问题296配置合规性演练296Cron计划299适用于关联的Cron和Rate表达式299适用于MaintenanceWindow的Cron和Rate表达式300有关Cron和Rate表达式的一般信息301使用案例和最佳实践303文档历史记录305AWSGlossary310viAmazonEC2SystemsManager用户指南功能什么是AmazonEC2SystemsManagerAmazonEC2SystemsManager是一系列可帮助您自动执行管理任务的功能,例如收集系统清单、应用操作系统补丁、自动创建Amazon系统映像(AMI)以及大规模配置操作系统和应用程序.
SystemsManager可让您以远程方式安全地管理托管实例的配置.
托管实例是您混合环境中已经针对SystemsManager配置的任意AmazonEC2实例或本地计算机.
功能任务详细信息RunCommand(p.
254)您可以使用RunCommand以远程方式安全且大规模地管理托管实例的配置.
使用RunCommand在几十个或数百个实例的目标集中执行临时更改,例如更新应用程序或运行LinuxShell脚本和WindowsPowerShell命令.
清单(p.
190)InventoryManager可自动执行从托管实例中收集软件清单的流程.
您可以使用InventoryManager收集有关操作系统和系统的配置及应用程序部署的元数据.
状态管理(p.
284)状态管理器可自动使您的托管实例保持在一个预先设定的状态.
您可以使用状态管理器确保您的实例在启动时使用特定软件进行引导,加入某个Windows域(仅限Windows实例)或使用特定的更新版本修补软件.
自动化(p.
107)Automation可自动执行常见的维护和部署任务.
您可以使用Automation创建和更新Amazon系统映像、应用驱动程序和代理的更新,并应用操作系统补丁或应用程序更新.
1AmazonEC2SystemsManager用户指南入门任务详细信息补丁管理(p.
206)PatchManager可自动执行修补托管实例的过程.
利用此功能,您可以扫描实例中是否有缺失的补丁,然后逐个应用缺失的补丁或使用AmazonEC2实例标签将这些补丁应用于大型实例组.
PatchManager使用补丁基准,该基准包含用于在补丁发行几天内自动批准补丁的规则以及一系列已批准和已拒绝的补丁.
您可以通过安排修补作为SystemsManagerMaintenanceWindow任务运行来定期安装补丁.
MaintenanceWindow(p.
79)通过MaintenanceWindow,您可以设置托管实例的周期性计划,以便执行诸如安装补丁和更新等管理任务,而不会中断业务关键性操作.
ParameterStore(p.
229)ParameterStore提供安全的分层存储,用于配置数据管理和秘钥管理.
也可以将密码、数据库字符串和许可证代码等数据存储为参数值.
可以将值存储为纯文本或加密数据.
然后,可以使用创建参数时指定的唯一名称来引用对应值.
配置合规性(p.
292)使用配置合规性扫描托管实例队列,了解补丁合规性和配置不一致性.
您可以从多个AWS账户和区域中收集并聚合数据,然后深入了解不合规的特定资源.
默认情况下,配置合规性将显示有关PatchManager修补和状态管理器关联的合规性数据.
您也可以根据IT或业务要求自定义服务并创建自己的合规性类型.
SystemsManager文档(p.
39)SystemsManager文档定义SystemsManager对您的托管实例所执行的操作.
SystemsManager包括十多个预先配置的文档,可以通过在运行时指定参数进行使用.
文档使用JavaScriptObjectNotation(JSON),并包括您指定的步骤和参数.
步骤按先后顺序执行.
入门要开始使用SystemsManager,请验证先决条件,配置角色和权限,并在您的实例上安装SSM代理.
如果您想使用SystemsManager管理本地服务器和虚拟机,则还必须创建托管实例激活.
设置SystemsManager(p.
4)中介绍了这些任务.
访问SystemsManager您可以使用以下任意界面访问SystemsManager:AWSManagementConsole-提供您可用来访问SystemsManager的Web界面.
AWS命令行界面(AWSCLI)-提供了用于众多AWS服务(包括SystemsManager)的命令,并且在Windows、Mac和Linux上受支持.
有关更多信息,请参阅AWS命令行界面.
AWS软件开发工具包-提供了特定于语言的API,并关注许多连接详细信息,例如计算签名、处理请求重试和错误处理.
有关更多信息,请参阅AWS软件开发工具包.
2AmazonEC2SystemsManager用户指南定价查询API-提供了您使用HTTPS请求调用的低级别API操作.
使用查询API是用于访问SystemsManager的最直接的方式,但需要您的应用程序处理低级别的详细信息,例如生成哈希值以签署请求以及进行错误处理.
有关更多信息,请参阅AmazonEC2SystemsManagerAPIReference.
定价提供的SystemsManager功能和共享组件无需额外费用.
您仅需为实际使用的AmazonEC2资源付费.
相关内容以下参考文档中也介绍了SystemsManager.
AmazonEC2SystemsManagerAPIReference适用于WindowsPowerShell的SystemsManagerAWS工具参考SystemsManagerAWSCLI参考AWS软件开发工具包AmazonEC2SystemsManager限制3AmazonEC2SystemsManager用户指南设置SystemsManager本部分介绍设置SystemsManager的任务和先决条件.
使用下表帮助您快速开始.
您要使用SystemsManager做什么设置任务测试/使用1.
验证权限并创建实例配置文件角色(p.
7).
2.
根据最新AmazonLinux或WindowsAMI创建几个AmazonEC2测试实例(免费套餐).
3.
测试SystemsManager.
以下演示可帮助您快速入门.
Note其中部分演练需要额外的设置任务才能完成,如增加权限等.
RunCommand(EC2控制台):Linux或WindowsRunCommand演练(p.
271)(AWSCLI或AWSToolsforWindowsPowerShell)状态管理器演练(p.
289)ParameterStore演练(p.
247)InventoryManager演练(p.
196)Automation演练(p.
113)MaintenanceWindow演练(p.
89)PatchManager演练(p.
210)使用SystemsManager管理和配置现有的EC2实例1.
验证权限并创建实例配置文件角色(p.
7).
2.
验证您的EC2实例是否符合SystemsManager要求(p.
5).
3.
(仅限Linux)安装SSM代理(p.
7).
使用SystemsManager在混合环境中管理和配置服务器和VM1.
验证权限并创建实例配置文件角色(p.
7).
2.
验证混合环境中的服务器和VM是否符合SystemsManager要求(p.
5).
3.
执行混合环境中的托管实例的设置和激活任务.
4AmazonEC2SystemsManager用户指南先决条件SystemsManager先决条件AmazonEC2SystemsManager包括下列先决条件.
要求描述支持的操作系统(Windows)实例必须运行支持的WindowsServer版本:WindowsServer2003至WindowsServer2016,包括R2版本.
支持的操作系统(Linux)实例必须运行支持的Linux版本.
64位和32位系统AmazonLinux2014.
09、2014.
03或更高版本UbuntuServer16.
04LTS、14.
04LTS或12.
04LTSRedHatEnterpriseLinux(RHEL)6.
5CentOS6.
3或更高版本仅32位系统RaspbianJessieRaspbianStretch仅64位系统AmazonLinux2015.
09、2015.
03或更高版本RedHatEnterpriseLinux(RHEL)7.
4CentOS7.
1或更高版本SUSELinuxEnterpriseServer(SLES)12或更高版本支持的区域SystemsManager在这些区域中可用.
对于混合环境中的服务器和虚拟机,我们建议您选择与您的数据中心或计算环境最接近的区域.
访问SystemsManagerSystemsManager需要一个针对将处理命令的实例的IAM角色和一个针对执行命令的用户的独立角色.
两个角色都需要权限策略才能通过SystemsManagerAPI进行通信.
您可以选择使用SystemsManager托管策略或创建自己的角色并指定权限.
有关更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
如果您要配置本地服务器,或要使用SystemsManager配置虚拟机,那么还必须配置IAM服务角色.
有关更多信息,请参阅创建IAM服务角色(p.
26).
SSM代理(EC2Windows实例)SSM代理负责处理SystemsManager请求并按照请求中指定的方式配置您的计算机.
默认情况下,SSM代理安装在WindowsServer2016实例5AmazonEC2SystemsManager用户指南先决条件要求描述以及通过2016年11月或之后发布的WindowsServer2003-2012R2AMI创建的实例上.
2016年11月之前发布的WindowsAMI使用EC2Config服务处理请求并配置实例.
除非您出于特定原因需要使用EC2Config服务或早期版本的SSM代理来处理SystemsManager请求,否则建议您下载最新版本的SSM代理并将其安装到每个AmazonEC2实例或托管实例(混合环境中的服务器和VM).
有关更多信息,请参阅在Windows实例上安装和配置SSM代理(p.
11).
SSM代理(EC2Linux实例)SSM代理负责处理SystemsManager请求并按照请求中指定的方式配置您的计算机.
您必须下载SSM代理并安装到EC2Linux实例中.
有关更多信息,请参阅在Linux实例上安装和配置SSM代理(p.
13).
在GitHub上可以找到SSM代理的源代码,您可以调整代理以满足您的需求.
我们鼓励您针对要包含的更改提交提取请求.
但是,AmazonWebServices当前不支持运行此软件的修改后副本.
SSM代理(混合环境)混合环境中托管实例的SSM代理下载和安装过程与AmazonEC2实例的不同.
有关更多信息,请参阅在Windows混合环境中的服务器和虚拟机上安装SSM代理(p.
28).
WindowsPowerShell3.
0或更高版本SSM代理需要WindowsPowerShell3.
0或更高版本才能在Windows实例上执行特定SSM文档(例如,AWS-ApplyPatchBaseline文档).
验证您的Windows实例是否在Windows管理框架3.
0或更高版本上运行.
该框架包括PowerShell.
有关更多信息,请参阅Windows管理框架3.
0.
Internet访问验证EC2实例是否具有出站Internet访问权.
无需入站Internet访问权.
配置监控和通知(可选)您可以配置AmazonCloudWatchEvents来记录使用SystemsManager发送的命令的状态执行更改.
您还可以配置AmazonSimpleNotificationService(AmazonSNS)来发送有关特定命令状态更改的通知.
有关更多信息,请参阅设置事件和通知(p.
258).
AmazonS3存储桶(可选)您可以在AmazonSimpleStorageService(AmazonS3)存储桶中存储SystemManager输出.
AmazonEC2控制台中的输出将在2500个字符后被截断.
此外,您可能希望创建AmazonS3键前缀(子文件夹)来帮助您整理输出.
有关更多信息,请参阅创建存储桶.
有关SystemsManager限制的信息,请参阅AmazonEC2SystemsManager限制.
要增加限制,请转到AWS支持中心并提交限制增加请求表单.
6AmazonEC2SystemsManager用户指南Ec2messages和未记录的API调用Ec2messages和未记录的API调用如果您监控API调用,将看到以下API调用.
ec2messages:AcknowledgeMessageec2messages:DeleteMessageec2messages:FailMessageec2messages:GetEndpointec2messages:GetMessagesec2messages:SendReplyUpdateInstanceInformationListInstanceAssociationsDescribeInstancePropertiesDescribeDocumentParameters对ec2messages:*API的调用是对ec2messages终端节点的调用.
SystemsManager使用此终端节点从SSM代理调用云中的SystemsManager服务.
需要此终端节点发送和接收命令.
UpdateInstanceInformation:SSM代理每五分钟调用一次云中的SystemsManager服务以提供检测信号信息.
需要此调用来保持代理的检测信号,以便服务了解代理按照预期工作.

ListInstanceAssociations:代理调用此API以了解新的SystemsManager状态管理器关联是否可用.
状态管理器需要此API才能正常运行.
DescribeInstanceProperties和DescribeDocumentParameters:SystemsManager调用这些API在AmazonEC2控制台中呈现特定节点.
DescribeInstancePropertiesAPI在左侧导航中显示托管实例节点.
DescribeDocumentParametersAPI在左侧导航中显示文档节点.
配置对SystemsManager的访问权限要配置对SystemsManager的访问权限,必须执行以下操作:1.
配置用户访问权限:如果已为您的AWSIdentityandAccessManagement(IAM)用户账户、组或角色分配管理员权限,则您可以访问SystemsManager.
如果您没有管理员权限,则管理员必须如本主题中所述向您授予权限.
2.
使用实例配置文件角色配置实例访问权限:在默认情况下,实例没有访问SystemsManager的权限.
您必须按照本主题中所述,为您的实例分配IAM实例配置文件角色才能进行访问.
可以为现有实例分配角色,也可以创建一个使用该角色的新实例.
实例配置文件角色授予在实例上执行操作的SystemsManager权限,例如执行命令或运行SystemsManager功能.
Note如果在混合环境中为SystemsManager配置服务器或虚拟机(VM),还必须配置IAM服务角色.
完成本主题中的任务1之后,请参阅创建IAM服务角色(p.
26)了解如何在混合环境中为托管实例创建服务角色的信息.
内容任务1:配置用户对SystemsManager的访问权限(p.
8)任务2:为SystemsManager创建实例配置文件角色(p.
8)7AmazonEC2SystemsManager用户指南任务1:配置用户对SystemsManager的访问权限任务3:创建使用SystemsManager角色的AmazonEC2实例(p.
9)可选的访问权限配置(p.
9)任务1:配置用户对SystemsManager的访问权限如果已为您的IAM用户账户、组或角色分配管理员权限,则您可以访问SystemsManager.
您可以跳过此任务.
如果您没有管理员权限,则管理员必须将您的IAM账户用户、组或角色更新为包含AmazonSSMFullAccess策略或AmazonSSMReadOnlyAccess策略.
AmazonSSMFullAccess策略向用户授予对SystemsManagerAPI和SystemsManager(SSM)文档的访问权限.
将此策略分配给管理员和可信高级用户.
AmazonSSMReadOnlyAccess策略向用户授予对SystemsManager只读API操作(例如Get和List)的访问权限.
有关如何更改IAM用户账户、组或角色的权限的信息,请参阅更改IAM用户的权限.
任务2:为SystemsManager创建实例配置文件角色使用以下过程创建实例配置文件角色,使实例能够与SystemsManager通信.
创建角色后,您可以按照任务3中的描述将它分配给实例.
为SystemsManager托管实例创建一个角色1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中,选择Roles,然后选择CreateRole.
3.
在Selecttypeoftrustedentity页面上的AWSService下,选择EC2.
4.
在Selectyourusecase部分中,依次选择EC2RoleforSimpleSystemsManager和Next:Permissions.
5.
在Attachedpermissionspolicy页面上,确认是否已列出AmazonEC2RoleforSSM,然后选择Next:Review.
6.
在Review页面上,在Rolename框中键入名称,然后键入描述.
Note记下角色名称.
在创建希望使用SystemsManager进行管理的新实例时,将选择该角色.
7.
选择Createrole.
系统将让您返回到Roles页.
Note该过程根据现有IAM策略或托管策略创建新角色.
如果您选择根据自定义策略创建角色,必须为角色(创建角色之后)添加ssm.
amazonaws.
com作为可信实体.
在查看角色时,在TrustRelationship选项卡上添加可信实体.
例如,必须在策略中添加以下JSON数据块作为可信实体.
有关如何更新角色以包含可信实体的信息,请参阅修改角色.
{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"sts:AssumeRole"}]8AmazonEC2SystemsManager用户指南任务3:创建使用SystemsManager角色的AmazonEC2实例}任务3:创建使用SystemsManager角色的AmazonEC2实例此过程介绍如何启动AmazonEC2实例,该实例使用刚刚创建的角色.
您还可以将角色附加到现有实例.
有关更多信息,请参阅AmazonEC2用户指南中的将IAM角色附加到实例.
创建使用SystemsManager实例角色的实例1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
选择支持的区域.
3.
选择LaunchInstance并选择实例.
4.
选择实例类型,然后选择Next:ConfigureInstanceDetails.
5.
在IAMrole下拉列表中,选择您先前创建的EC2实例角色.
6.
完成向导.
如果您创建要使用SystemsManager配置的其他实例,则必须为每个实例指定实例配置文件角色.
可选的访问权限配置通过执行本部分中的任务1,您可以通过选择预先存在或托管的IAM用户策略来为用户授予访问权限.
如果需要限制用户对SystemsManager和SSM文档的访问权限,您可以如本部分所述创建您自己的限制性用户策略.
有关如何创建自定义策略的更多信息,请参阅创建新策略.
以下示例IAM策略允许用户执行以下操作.
列出SystemsManager文档和文档版本.
查看有关文档的详细信息.
使用策略中指定的文档发送命令.
文档名称由此条目确定:arn:aws-cn:ssm:us-east-1:*:document/name_of_restrictive_document发送命令到三个实例.
实例由第二个Resource部分中的以下条目确定:"arn:aws-cn:ec2:us-east-1:*:instance/i-1234567890abcdef0","arn:aws-cn:ec2:us-east-1:*:instance/i-0598c7d356eba48d7","arn:aws-cn:ec2:us-east-1:*:instance/i-345678abcdef12345",发送命令后查看有关命令的详细信息.
启动和停止Automation执行.
获取有关Automation执行的信息.
如果您要授予用户权限以使用本文档向该用户目前有权访问(取决于其AWS用户账户)的任何实例发送命令,您可以在Resource部分指定以下条目并删除其他实例条目.
"arn:aws-cn:ec2:us-east-1:*:instance/*"9AmazonEC2SystemsManager用户指南可选的访问权限配置请注意,Resource部分包含一个AmazonS3ARN条目:arn:aws-cn:s3:::bucket_name您还可为此条目设置格式,如下所示:arn:aws-cn:s3:::bucket_name/*-or-arn:aws-cn:s3:::bucket_name/key_prefix_name{"Version":"2012-10-17","Statement":[{"Action":["ssm:ListDocuments","ssm:ListDocumentsVersions","ssm:DescribeDocument","ssm:GetDocument","ssm:DescribeInstanceInformation","ssm:DescribeDocumentParameters","ssm:DescribeInstanceProperties"],"Effect":"Allow","Resource":"*"},{"Action":"ssm:SendCommand","Effect":"Allow","Resource":["arn:aws-cn:ec2:us-east-1:*:instance/i-1234567890abcdef0","arn:aws-cn:ec2:us-east-1:*:instance/i-0598c7d356eba48d7","arn:aws-cn:ec2:us-east-1:*:instance/i-345678abcdef12345","arn:aws-cn:s3:::bucket_name","arn:aws-cn:ssm:us-east-1:*:document/name_of_restrictive_document"]},{"Action":["ssm:CancelCommand","ssm:ListCommands","ssm:ListCommandInvocations"],"Effect":"Allow","Resource":"*"},{"Action":"ec2:DescribeInstanceStatus","Effect":"Allow","Resource":"*"},{"Action":"ssm:StartAutomationExecution","Effect":"Allow","Resource":["arn:aws:ssm:::automation-definition/"]},{"Action":"ssm:DescribeAutomationExecutions","Effect":"Allow",10AmazonEC2SystemsManager用户指南安装和配置SSM代理"Resource":["*"]},{"Action":["ssm:StopAutomationExecution","ssm:GetAutomationExecution"],"Effect":"Allow","Resource":["arn:aws:ssm:::automation-execution/"]}]}安装和配置SSM代理AmazonEC2SystemsManager(SSM)代理是在您的AmazonEC2实例和为SystemsManager(混合实例)配置的混合实例上运行的Amazon软件.
SSM代理在云中从SystemsManager服务处理请求并按照请求中指定的方式配置计算机.
SSM代理使用EC2消息收发服务将状态和执行信息发送回SystemsManager服务.
如果您对流量进行监控,就会发现实例会与ec2messages.
*终端节点进行通信.
有关更多信息,请参阅Ec2messages和未记录的API调用(p.
7).
默认情况下,SSM代理安装在AmazonEC2Windows实例和AmazonLinux实例上.
您必须在其他版本的Linux和混合实例上手动安装代理.
Note混合实例的SSM代理下载和安装过程与AmazonEC2实例的不同.
有关更多信息,请参阅在Windows混合环境中的服务器和虚拟机上安装SSM代理(p.
28).
使用以下过程可安装、配置或卸载SSM代理.
本部分还包括有关配置SSM代理以使用代理和将SSM代理日志移植到AmazonCloudWatchLogs的信息.
内容在Windows实例上安装和配置SSM代理(p.
11)在Linux实例上安装和配置SSM代理(p.
13)将SSM代理日志文件发送到AmazonCloudWatchLogs(p.
24)在Windows实例上安装和配置SSM代理默认情况下,SSM代理安装在WindowsServer2016实例以及通过2016年11月或之后发布的WindowsServer2003-2012R2AMI创建的实例上.
2016年11月之前发布的WindowsAMI使用EC2Config服务处理请求并配置实例.
除非您出于特定原因需要使用EC2Config服务或早期版本的SSM代理来处理SystemsManager请求,否则建议您下载最新版本的SSM代理并将其安装到每个AmazonEC2实例或为SystemsManager配置的混合实例.
要查看有关不同版本SSM代理的详细信息,请参阅发行说明.
主题在Windows实例上安装和配置SSM代理(p.
12)11AmazonEC2SystemsManager用户指南在Windows实例上安装和配置SSM代理在Windows实例上查看SSM代理日志(p.
12)配置SSM代理以使用适用于Windows实例的代理(p.
12)在Windows实例上安装和配置SSM代理如果您的实例是在2016年11月之前创建的WindowsServer2003-2012R2实例,则EC2Config在您的实例上处理SystemsManager请求.
我们建议您升级现有实例以使用最新版本的EC2Config.
通过升级,您可以同时安装SSM代理和EC2Config.
此版SSM代理与通过之前的WindowsAMI创建的实例兼容,而且借助此代理,您能够使用2016年11月之后发布的SSM功能.
在新版本可用时,您可以使用SystemsManager状态管理器在您的实例上自动更新SSM代理.
有关更多信息,请参阅演练:自动更新SSM代理(p.
289).
或者,您也可以使用以下过程手动下载并安装最新版本的SSM代理.
手动下载并安装最新版本的SSM代理1.
登录您的实例.
2.
将最新版本的SSM代理下载到您的实例.
https://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/windows_amd64/AmazonSSMAgentSetup.
exe.
使用此URL可从任意AWS区域下载SSM代理.
如果您要从特定区域下载代理,请改为使用特定于区域的URL:https://amazon-ssm-region.
s3.
amazonaws.
com/latest/windows_amd64/AmazonSSMAgentSetup.
exe3.
使用Windows服务控制面板或者通过在PowerShell中发送以下命令,来启动或重新启动SSM代理(AmazonSSMAgent.
exe):Restart-ServiceAmazonSSMAgentImportantSSM代理需要WindowsPowerShell3.
0或更高版本才能在Windows实例上执行特定SSM文档(例如,AWS-ApplyPatchBaseline文档).
验证您的Windows实例是否在Windows管理框架3.
0或更高版本上运行.
该框架包括PowerShell.
有关更多信息,请参阅Windows管理框架3.
0.
在Windows实例上查看SSM代理日志SSM代理将有关执行、计划操作、错误和运行状况的信息写入每个实例上的日志文件.
您可以通过手动连接到实例,也可以将日志自动发送到AmazonCloudWatchLogs,从而查看日志文件.
有关将日志发送到CloudWatch的更多信息,请参阅将SSM代理日志文件发送到AmazonCloudWatchLogs(p.
24).
您可以在以下位置中查看Windows实例的SSM代理日志文件.
%PROGRAMDATA%\Amazon\SSM\Logs\amazon-ssm-agent.
log%PROGRAMDATA%\Amazon\SSM\Logs\errors.
log配置SSM代理以使用适用于Windows实例的代理有关配置EC2Config以使用代理的信息,请参阅配置EC2Config服务的代理设置.
12AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理配置SSM代理以使用代理1.
使用远程桌面或WindowsPowerShell,连接到您希望配置的实例,以使用代理.
对于使用Nano安装选项(NanoServer)的WindowsServer2016实例,您必须使用PowerShell连接.
有关更多信息,请参阅连接到WindowsServer2016NanoServer实例.
2.
在PowerShell中运行以下命令块.
将hostname和port替换为有关代理的信息:$serviceKey="HKLM:\SYSTEM\CurrentControlSet\Services\AmazonSSMAgent"$keyInfo=(Get-Item-Path$serviceKey).
GetValue("Environment")$proxyVariables=@("http_proxy=hostname:port","no_proxy=169.
254.
169.
254")If($keyInfo-eq$null){New-ItemProperty-Path$serviceKey-NameEnvironment-Value$proxyVariables-PropertyTypeMultiString-Force}else{Set-ItemProperty-Path$serviceKey-NameEnvironment-Value$proxyVariables}Restart-ServiceAmazonSSMAgent重置SSM代理的代理配置1.
使用远程桌面或WindowsPowerShell,连接到您希望配置的实例.
2.
如果您使用远程桌面连接,则以管理员的身份启动PowerShell.
3.
在PowerShell中运行以下命令块:Remove-ItemProperty-PathHKLM:\SYSTEM\CurrentControlSet\Services\AmazonSSMAgent-NameEnvironmentRestart-ServiceAmazonSSMAgent在Linux实例上安装和配置SSM代理AmazonEC2SystemsManager(SSM)代理负责处理SystemsManager请求并按照请求中指定的方式配置计算机.
使用以下过程可安装、配置或卸载SSM代理.
Note在2017.
09及以后日期版本的AmazonLinuxAMI上,默认情况下会安装SSM代理.
您必须在其他版本的Linux上手动安装SSM代理,如本部分中所述.
为了实现向后兼容,本部分仍将包括有关在AmazonLinux上手动安装代理的信息.
在GitHub上可以找到SSM代理的源代码,您可以调整代理以满足您的需求.
我们鼓励您针对要包含的更改提交提取请求.
但是,AWS当前不支持运行此软件的修改后副本.
Note要查看有关不同版本SSM代理的详细信息,请参阅发行说明.
主题启动时在AmazonEC2Linux实例上安装SSM代理(p.
14)在AmazonEC2Linux实例上手动安装SSM代理(p.
16)配置SSM代理以使用代理(p.
22)查看SSM代理日志(p.
24)从Linux实例卸载SSM代理(p.
24)13AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理启动时在AmazonEC2Linux实例上安装SSM代理您可以通过使用AmazonEC2用户数据在首次启动实例时安装SSM代理.
在启动向导的ConfigureInstanceDetails页面上,展开AdvancedDetails,然后复制以下脚本之一并将其粘贴到Userdata字段.
例如:Note在RaspbianJessie设备上安装SSM代理的过程与其他Linux版本不同.
有关更多信息,请参阅Raspbian(p.
22).
使用以下脚本中的URL可从任意AWS区域下载SSM代理.
如果您要从某特定区域下载该代理,复制操作系统的URL,然后将region替换为SSM可用的区域.
例如,要从美国西部1区域下载适用于AmazonLinux、RHEL、CentOS和SLES64位的SSM代理,请使用以下URL:https://s3-us-west-1.
amazonaws.
com/amazon-ssm-us-west-1/latest/linux_amd64/amazon-ssm-agent.
rpm如果下载失败,请尝试用https://s3替换https://s3-区区.
区区.
AmazonLinux、RHEL、CentOS和SLES64位:https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/linux_amd64/amazon-ssm-agent.
rpmAmazonLinux、RHEL和CentOS32位:https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/linux_386/amazon-ssm-agent.
rpmUbuntuServer64位:https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/debian_amd64/amazon-ssm-agent.
debUbuntuServer32位:https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/debian_386/amazon-ssm-agent.
debRaspbian:https://s3-region.
amazonaws.
com/amazon-ssm-region/latest/debian_arm/amazon-ssm-agent.
debRHEL7.
x和CentOS7.
x,64位#!
/bin/bash14AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理cd/tmpsudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpmsudosystemctlstartamazon-ssm-agentRHEL7.
x和CentOS7.
x,32位#!
/bin/bashcd/tmpsudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_386/amazon-ssm-agent.
rpmsudosystemctlstartamazon-ssm-agentAmazonLinux、RHEL6.
x和CentOS6.
x,64位Note在2017.
09及以后日期版本的AmazonLinuxAMI上,默认情况下会安装SSM代理.
#!
/bin/bashcd/tmpsudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpmsudostartamazon-ssm-agentAmazonLinux、RHEL6.
x和CentOS6.
x,32位Note在2017.
09及以后日期版本的AmazonLinuxAMI上,默认情况下会安装SSM代理.
#!
/bin/bashcd/tmpsudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_386/amazon-ssm-agent.
rpmsudostartamazon-ssm-agentUbuntuServer1664位#!
/bin/bashcd/tmpwgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.
debsudodpkg-iamazon-ssm-agent.
debsudosystemctlenableamazon-ssm-agentUbuntuServer1632位#!
/bin/bashcd/tmpwgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_386/amazon-ssm-agent.
debsudodpkg-iamazon-ssm-agent.
debsudosystemctlenableamazon-ssm-agentSLES64位#!
/bin/bashcd/tmp15AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理wgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpmsudorpm--installamazon-ssm-agent.
rpmsudosystemctlstartamazon-ssm-agentUbuntuServer1464位#!
/bin/bashcd/tmpwgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.
debsudodpkg-iamazon-ssm-agent.
debsudostartamazon-ssm-agentUbuntuServer1432位#!
/bin/bashcd/tmpwgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_386/amazon-ssm-agent.
debsudodpkg-iamazon-ssm-agent.
debsudostartamazon-ssm-agent保存您的更改并完成向导.
在实例启动时,系统会将SSM代理复制到实例并启动实例.
当实例处于联机状态时,您可以使用RunCommand配置它.
有关更多信息,请参阅使用SystemsManagerRunCommand执行命令(p.
266).
Note在新版本可用时,您可以使用SystemsManager状态管理器在您的实例上自动更新SSM代理.
有关更多信息,请参阅演练:自动更新SSM代理(p.
289).
在AmazonEC2Linux实例上手动安装SSM代理使用以下脚本之一在下列Linux实例上安装SSM代理.
AmazonLinux(p.
17)Ubuntu(p.
18)RedHatEnterpriseLinux(p.
19)CentOS(p.
20)SLES(p.
21)Raspbian(p.
22)Note使用以下脚本中的URL可从任意AWS区域下载SSM代理.
如果您要从某特定区域下载该代理,复制操作系统的URL,然后将region替换为SSM可用的区域.
例如,要从美国西部1区域下载适用于AmazonLinux、RHEL、CentOS和SLES64位的SSM代理,请使用以下URL:https://s3-us-west-1.
amazonaws.
com/amazon-ssm-us-west-1/latest/linux_amd64/amazon-ssm-agent.
rpm如果下载失败,请尝试用https://s3替换https://s3-区区.
区区.
AmazonLinux、RHEL、CentOS和SLES64位:16AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/linux_amd64/amazon-ssm-agent.
rpmAmazonLinux、RHEL和CentOS32位:https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/linux_386/amazon-ssm-agent.
rpmUbuntuServer64位:https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/debian_amd64/amazon-ssm-agent.
debUbuntuServer32位:https://s3-区区.
amazonaws.
com/amazon-ssm-region/latest/debian_386/amazon-ssm-agent.
deb手动安装SSM代理后,在新版本可用时,您可以使用SystemsManager状态管理器在您的实例上自动更新SSM代理.
有关更多信息,请参阅演练:自动更新SSM代理(p.
289).
AmazonLinux连接到您的AmazonLinux实例并执行下列步骤来安装SSM代理.
使用SystemsManager对每个将执行命令的实例执行这些步骤.
Note在2017.
09及以后日期版本的AmazonLinuxAMI上,默认情况下会安装SSM代理.
在AmazonLinux上安装SSM代理1.
在实例上创建临时目录.
mkdir/tmp/ssm2.
更改为临时目录.
cd/tmp/ssm3.
使用以下命令之一下载和运行SSM安装程序.
64位sudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpm32位sudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_386/amazon-ssm-agent.
rpm4.
运行以下命令确定SSM代理是否在运行.
该命令应返回"amazon-ssm-agentisrunning".
sudostatusamazon-ssm-agent5.
如果上一个命令返回"amazon-ssm-agentisstopped",则执行以下命令.
a.
启动服务.
sudostartamazon-ssm-agent17AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理b.
检查代理的状态.
sudostatusamazon-ssm-agentUbuntu连接到您的Ubuntu实例并执行下列步骤来安装SSM代理.
使用SystemsManager对每个将执行命令的实例执行这些步骤.
在Ubuntu上安装SSM代理1.
在实例上创建临时目录.
mkdir/tmp/ssm2.
使用以下命令之一下载和运行SSM安装程序.
64位wgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.
debsudodpkg-iamazon-ssm-agent.
deb32位wgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_386/amazon-ssm-agent.
debsudodpkg-iamazon-ssm-agent.
deb3.
运行以下命令确定SSM代理是否在运行.
UbuntuServer14sudostatusamazon-ssm-agentUbuntuServer16sudosystemctlstatusamazon-ssm-agent4.
如果上一个命令返回"amazon-ssm-agentisstopped"、"inactive"或"disabled",则执行以下命令.
a.
启动服务.
UbuntuServer14sudostartamazon-ssm-agentUbuntuServer16sudosystemctlenableamazon-ssm-agentsudosystemctlstartamazon-ssm-agentb.
检查代理的状态.
18AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理UbuntuServer14sudostatusamazon-ssm-agentUbuntuServer16sudosystemctlstatusamazon-ssm-agentRedHatEnterpriseLinux连接到您的RedHatEnterpriseLinux(RHEL)实例并执行下列步骤来安装SSM代理.
使用SystemsManager对每个将执行命令的实例执行这些步骤.
在RedHatEnterpriseLinux上安装SSM代理1.
在实例上创建临时目录.
mkdir/tmp/ssm2.
使用以下命令之一下载和运行SSM安装程序.
64位sudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpm32位sudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_386/amazon-ssm-agent.
rpm3.
运行以下命令之一以确定SSM代理是否在运行.
该命令应返回"amazon-ssm-agentisrunning".
RHEL7.
xsudosystemctlstatusamazon-ssm-agentRHEL6.
xsudostatusamazon-ssm-agent4.
如果上一个命令返回"amazon-ssm-agentisstopped",则执行以下命令.
a.
启动服务.
RHEL7.
xsudosystemctlenableamazon-ssm-agentsudosystemctlstartamazon-ssm-agentRHEL6.
x19AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理sudostartamazon-ssm-agentb.
检查代理的状态.
RHEL7.
xsudosystemctlstatusamazon-ssm-agentRHEL6.
xsudostatusamazon-ssm-agentCentOS连接到您的CentOS实例并执行下列步骤来安装SSM代理.
使用SystemsManager对每个将执行命令的实例执行这些步骤.
在CentOS上安装SSM代理1.
在实例上创建临时目录.
mkdir/tmp/ssm2.
使用以下命令之一下载和运行SSM安装程序.
64位sudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpm32位sudoyuminstall-yhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_386/amazon-ssm-agent.
rpm3.
运行以下命令之一以确定SSM代理是否在运行.
该命令应返回"amazon-ssm-agentisrunning".
CentOS7.
xsudosystemctlstatusamazon-ssm-agentCentOS6.
xsudostatusamazon-ssm-agent4.
如果上一个命令返回"amazon-ssm-agentisstopped",则执行以下命令.
a.
启动服务.
CentOS7.
xsudosystemctlenableamazon-ssm-agent20AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理sudosystemctlstartamazon-ssm-agentCentOS6.
xsudostartamazon-ssm-agentb.
检查代理的状态.
CentOS7.
xsudosystemctlstatusamazon-ssm-agentCentOS6.
xsudostatusamazon-ssm-agentSLES连接到您的SLES实例并执行下列步骤来安装SSM代理.
使用SystemsManager对每个将执行命令的实例执行这些步骤.
在SLES上安装SSM代理1.
在实例上创建临时目录.
mkdir/tmp/ssm2.
更改为临时目录.
cd/tmp/ssm3.
使用以下命令下载和运行SSM安装程序.
64位wgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpmsudorpm--installamazon-ssm-agent.
rpm4.
运行以下命令确定SSM代理是否在运行.
该命令应返回"amazon-ssm-agentisrunning".
sudosystemctlstatusamazon-ssm-agent5.
如果上一个命令返回"amazon-ssm-agentisstopped",则执行以下命令.
a.
启动服务.
sudosystemctlenableamazon-ssm-agentsudosystemctlstartamazon-ssm-agentb.
检查代理的状态.
sudosystemctlstatusamazon-ssm-agent21AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理Raspbian本部分包括有关如何在RaspbianJessie和RaspbianStretch(包括RaspberryPi(32位)设备)上安装SSM代理的信息.
开始前的准备工作要将Raspbian设备设置为SystemsManager托管实例,您需要创建托管实例激活.
完成激活后,您将收到一个激活代码和ID.
此代码/ID组合具有AmazonEC2访问ID和私有密钥的功能,可提供从托管实例对SystemsManager服务的安全访问.
在安全位置存储激活代码和ID.
有关激活流程的更多信息,请参阅在混合环境中设置SystemsManager(p.
25).
连接到您的Raspbian设备并执行下列步骤来安装SSM代理.
使用SystemsManager对每个将执行命令的实例执行这些步骤.
在Raspbian设备上安装SSM代理1.
在实例上创建临时目录.
mkdir/tmp/ssm2.
使用以下命令下载和运行SSM安装程序.
sudocurlhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.
deb-o/tmp/ssm/amazon-ssm-agent.
deb3.
执行以下命令安装SSM代理.
sudodpkg-i/tmp/ssm/amazon-ssm-agent.
deb4.
执行以下命令停止SSM代理.
sudoserviceamazon-ssm-agentstop5.
执行以下命令,以使用您完成托管实例激活过程时收到的托管实例激活代码和ID注册代理.
sudoamazon-ssm-agent-register-code"code"-id"ID"-region"Region"6.
执行以下命令启动SSM代理.
sudoserviceamazon-ssm-agentstart配置SSM代理以使用代理您可以通过向SSM代理配置文件添加http_proxy和no_proxy设置,将SSM代理配置为通过HTTP代理进行通信.
本部分包含适用于upstart和systemd环境的过程.
配置SSM代理以使用代理(Upstart)1.
连接到已安装SSM代理的实例.
2.
在编辑器(如VIM)中打开amazon-ssm-agent.
conf文件.
默认情况下,此文件位于:/etc/init/amazon-ssm-agent.
conf3.
采用以下格式向此文件添加下列设置:envhttp_proxy=http://hostname:port22AmazonEC2SystemsManager用户指南在Linux实例上安装和配置SSM代理envhttps_proxy=http://hostname:portenvHTTP_PROXY=http://hostname:portenvHTTPS_PROXY=http://hostname:port4.
采用以下格式向此文件添加no_proxy设置.
您必须指定此处列出的IP地址.
它是SSM的实例元数据终端节点,如果没有此IP地址,对SSM的调用将失败:envno_proxy=169.
254.
169.
2545.
保存更改并关闭编辑器.
6.
使用以下命令停止和重新启动SSM代理:sudostopamazon-ssm-agentsudostartamazon-ssm-agent以下Upstart示例包含amazon-ssm-agent.
conf文件中的http_proxy和no_proxy设置:description"AmazonSSMAgent"author"Amazon.
com"starton(runlevel[345]andstartednetwork)stopon(runlevel[!
345]orstoppingnetwork)respawnenvhttp_proxy=http://i-1234567890abcdef0:443envno_proxy=169.
254.
169.
254chdir/usr/bin/exec.
/amazon-ssm-agent配置SSM代理以使用代理(systemd)1.
连接到已安装SSM代理的实例.
2.
在编辑器(如VIM)中打开amazon-ssm-agent.
service文件.
默认情况下,此文件位于:/etc/systemd/system/amazon-ssm-agent.
service3.
将以下设置添加到此文件:Environment="http_proxy=http://hostname:port"Environment="https_proxy=http://hostname:port"Environment="HTTP_PROXY=http://hostname:port"Environment="HTTPS_PROXYy=http://hostname:port"4.
采用以下格式向此文件添加no_proxy设置.
您必须指定此处列出的IP地址.
它是SSM的实例元数据终端节点,如果没有此IP地址,对SSM的调用将失败:Environment="no_proxy=169.
254.
169.
254"5.
保存更改并关闭编辑器.
6.
使用以下命令重新启动SSM代理:sudosystemctlstopamazon-ssm-agentsudosystemctldaemon-reload以下systemd示例包含amazon-ssm-agent.
service文件中的http_proxy和no_proxy设置:23AmazonEC2SystemsManager用户指南将SSM代理日志文件发送到AmazonCloudWatchLogsType=simpleEnvironment="HTTP_PROXY=http://i-1234567890abcdef0:443"Environment="no_proxy=169.
254.
169.
254"WorkingDirectory=/opt/amazon/ssm/ExecStart=/usr/bin/amazon-ssm-agentKillMode=processRestart=on-failureRestartSec=15min查看SSM代理日志SSM代理将有关执行、计划操作、错误和运行状况的信息写入每个实例上的日志文件.
您可以通过手动连接到实例,也可以将日志自动发送到AmazonCloudWatchLogs,从而查看日志文件.
有关将日志发送到CloudWatch的更多信息,请参阅将SSM代理日志文件发送到AmazonCloudWatchLogs(p.
24).
您可以在以下位置中查看Linux实例的SSM代理日志.
/var/log/amazon/ssm/amazon-ssm-agent.
log/var/log/amazon/ssm/errors.
log您可通过更新seelog.
xml文件来启用延长日志记录.
默认情况下,配置文件位于以下位置:/etc/amazon/ssm/seelog.
xml.
有关cihub/seelog配置的更多信息,请转到cihub/seelogWiki.
有关cihub/seelog配置的示例,请转到cihub/seelog示例.
从Linux实例卸载SSM代理使用以下命令卸载SSM代理.
AmazonLinux、RHEL或CentOSsudoyumeraseamazon-ssm-agent–yUbuntusudodpkg-ramazon-ssm-agentSLESsudorpm--eraseamazon-ssm-agent将SSM代理日志文件发送到AmazonCloudWatchLogsSSM代理将有关执行、计划操作、错误和运行状况的信息写入每个实例上的日志文件.
手动连接到实例以查看日志文件并对SSM代理的问题进行排查是耗时的工作.
您可以配置SSM代理以将日志数据发送到AmazonCloudWatchLogs.
以这种方式配置日志记录可提供以下好处:您的所有SSM代理日志文件的集中日志文件存储.
实现对文件的更快访问,以调查错误.
无限日志文件保留(可配置).
无论实例的状态如何,都可以维护和访问日志.
对其他CloudWatch功能(例如指标和警报)的访问.
24AmazonEC2SystemsManager用户指南混合环境开始前的准备工作在AmazonCloudWatchLogs中创建日志组.
有关更多信息,请参阅AmazonCloudWatchLogsUserGuide中的在CloudWatch日志中创建日志组.
配置SSM代理以将日志发送到CloudWatch1.
登录实例并找到以下文件:在Windows上:%PROGRAMFILES%\Amazon\SSM\seelog.
xml.
template在Linux上:/etc/amazon/ssm/seelog.
xml.
template2.
将文件名从seelog.
xml.
template更改为seelog.
xml.
3.
在文本编辑器中打开seelog.
xml文件并查找以下部分:4.
编辑文件,并将以下customname元素添加到结尾的标签之后,如以下示例中所示.
5.
保存您的更改.
6.
OpentheCloudWatchconsoleathttps://console.
amazonaws.
cn/cloudwatch/.
7.
选择Logs,然后选择您的日志组.
SSM代理代理日志文件数据的日志流按实例ID进行组织.
在混合环境中设置SystemsManagerAmazonEC2SystemsManager可让您在混合环境中以远程方式安全地管理本地服务器和虚拟机(VM).
为SystemsManager配置混合环境有以下优势.
创建一种一致且安全的方式,使用相同的工具或脚本从一个位置远程管理本地工作负载.

通过使用AWSIdentityandAccessManagement(IAM)集中管理可在服务器和虚拟机上执行的操作的访问控制.
集中审计,您可以查看在您服务器和虚拟机上执行的操作,因为所有这些操作记录在AWSCloudTrail中.
25AmazonEC2SystemsManager用户指南创建IAM服务角色集中监控,因为您可以配置CloudWatchEvents和AmazonSNS以发送有关服务执行成功的通知.
完成本主题中的过程为SystemsManager配置混合计算机.
Important完成后,您为SystemsManager配置的混合计算机会列在AmazonEC2控制台中,并被称为托管实例.
为SystemsManager配置的AmazonEC2实例也是托管实例.
但在AmazonEC2控制台中,您的本地实例与具有前缀"mi-"的AmazonEC2实例有别.
主题创建IAM服务角色(p.
26)创建托管实例激活(p.
27)在Windows混合环境中的服务器和虚拟机上安装SSM代理(p.
28)在Linux混合环境中的服务器和虚拟机上安装SSM代理(p.
28)创建IAM服务角色混合环境中的服务器和虚拟机需要有IAM角色才能与SystemsManagerSSM服务通信.
该角色向AssumeRole授予对SSM服务的信任.
Note您只需为每个AWS账户创建该服务角色一次.
使用AWSToolsforWindowsPowerShell创建IAM服务角色1.
使用以下信任策略创建文本文件(在此示例中,它名为SSMService-Trust.
json).
使用.
json文件扩展名保存该文件.
{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"sts:AssumeRole"}}2.
使用New-IAMRole(如下所示)创建服务角色.
此示例创建一个名为SSMServiceRole的角色.
New-IAMRole-RoleNameSSMServiceRole-AssumeRolePolicyDocument(Get-Content-rawSSMService-Trust.
json)3.
使用Register-IAMRolePolicy(如下所示)以允许SSMServiceRole创建会话令牌.
此会话令牌向托管实例授予使用SystemsManager执行命令的权限.
Register-IAMRolePolicy-RoleNameSSMServiceRole-PolicyArnarn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM使用AWSCLI创建IAM服务角色1.
使用以下信任策略创建文本文件(在此示例中,它名为SSMService-Trust.
json).
使用.
json文件扩展名保存该文件.
{26AmazonEC2SystemsManager用户指南创建托管实例激活"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"sts:AssumeRole"}}2.
使用create-role命令创建服务角色.
此示例创建一个名为SSMServiceRole的角色.
awsiamcreate-role--role-nameSSMServiceRole--assume-role-policy-documentfile://SSMService-Trust.
json3.
使用attach-role-policy(如下所示)以允许SSMServiceRole创建会话令牌.
此会话令牌向托管实例授予使用SystemsManager执行命令的权限.
awsiamattach-role-policy--role-nameSSMServiceRole--policy-arnarn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSMNote您的公司或组织中在混合计算机上使用SystemsManager的用户必须在IAM中获得授权,才能调用SSMAPI.
有关更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
创建托管实例激活要在混合环境中将服务器和虚拟机设置为托管实例,您需要创建托管实例激活.
完成激活后,您将收到一个激活代码和ID.
此代码/ID组合具有AmazonEC2访问ID和私有密钥的功能,可提供从托管实例对SystemsManager服务的安全访问.
使用控制台创建托管实例激活1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择Activations.
2.
选择CreateanActivation.
3.
填写表单,然后选择CreateActivation.
请注意,您可以指定激活的过期日期.
如果需要在过期日期后注册更多的托管实例,您必须创建新的激活.
过期日期对已注册且正在运行的实例没有任何影响.
4.
在安全位置存储托管实例激活代码和ID.
当您在混合环境中的服务器和虚拟机上安装SSM代理时指定此代码和ID.
如果您丢失了此代码和ID,则必须创建一个新激活.
使用AWSToolsforWindowsPowerShell创建托管实例激活1.
在您安装了AWSToolsforWindowsPowerShell的计算机上,在AWSToolsforWindowsPowerShell中执行以下命令.
New-SSMActivation-DefaultInstanceNamename-IamRoleIAMservicerole-RegistrationLimitnumberofmanagedinstances–Regionregion例如:New-SSMActivation-DefaultInstanceNameMyWebServers-IamRoleRunCommandServiceRole-RegistrationLimit10–Regionus-east-12.
按Enter.
如果激活成功,系统将返回一个激活代码和一个ID.
在安全位置存储激活代码和ID.
27AmazonEC2SystemsManager用户指南在Windows混合环境中的服务器和虚拟机上安装SSM代理使用AWSCLI创建托管实例激活1.
在您安装了AWSCommandLineInterface(AWSCLI)的计算机上,在CLI中执行以下命令.
awsssmcreate-activation--default-instance-namename--iam-roleIAMservicerole--registration-limitnumberofmanagedinstances--regionregion例如:awsssmcreate-activation--default-instance-nameMyWebServers--iam-roleRunCommandServiceRole--registration-limit10--regionus-east-12.
按Enter.
如果激活成功,系统将返回一个激活代码和一个ID.
在安全位置存储激活代码和ID.
在Windows混合环境中的服务器和虚拟机上安装SSM代理在开始前,请找到您在上一部分中完成托管实例激活后收到的激活码和ID.
请按照下面的流程指定激活码和ID.
Important此过程适用于本地或混合环境中的服务器和VM.
要在AmazonEC2Windows实例上下载并安装SSM代理,请参阅在Windows实例上安装和配置SSM代理(p.
11).
在混合环境中的服务器和虚拟机上安装SSM代理1.
登录混合环境中的服务器或虚拟机.
2.
打开WindowsPowerShell.
3.
将以下命令块复制并粘贴到适用于WindowsPowerShell的AWS工具.
指定您的激活代码、ID和要从中下载SSM代理的区域.
对于区区,请选择SSM可用的区域.
例如,us-west-2.
$dir=$env:TEMP+"\ssm"New-Item-ItemTypedirectory-Path$dircd$dir(New-ObjectSystem.
Net.
WebClient).
DownloadFile("https://amazon-ssm-region.
s3.
amazonaws.
com/latest/windows_amd64/AmazonSSMAgentSetup.
exe",$dir+"\AmazonSSMAgentSetup.
exe")Start-Process.
\AmazonSSMAgentSetup.
exe-ArgumentList@("/q","/log","install.
log","CODE=code","ID=id","REGION=region")-WaitGet-Content($env:ProgramData+"\Amazon\SSM\InstanceData\registration")Get-Service-Name"AmazonSSMAgent"4.
按Enter.
此命令将下载SSM代理并将它安装到服务器或虚拟机上.
此命令还将服务器或虚拟机注册到SSM服务.
服务器或虚拟机现在为托管实例.
在控制台中,这些实例在列出时带有前缀"mi-".
您可以使用List命令查看所有实例.
有关更多信息,请参阅AmazonEC2SystemsManagerAPIReference.
在Linux混合环境中的服务器和虚拟机上安装SSM代理在开始前,请找到您在完成托管实例激活后收到的激活码和ID.
请按照下面的流程指定激活码和ID.
28AmazonEC2SystemsManager用户指南在Linux混合环境中的服务器和虚拟机上安装SSM代理Important此过程适用于本地或混合环境中的服务器和VM.
要在AmazonEC2Linux实例上下载并安装SSM代理,请参阅在Linux实例上安装和配置SSM代理(p.
13).
使用以下脚本中的URL可从任意AWS区域下载SSM代理.
如果您要从某特定区域下载该代理,复制操作系统的URL,然后将region替换为SSM可用的区域.
例如,要从美国西部1区域下载适用于AmazonLinux、RHEL、CentOS和SLES64位的SSM代理,请使用以下URL:https://s3-us-west-1.
amazonaws.
com/amazon-ssm-us-west-1/latest/linux_amd64/amazon-ssm-agent.
rpm如果下载失败,请尝试用https://s3替换https://s3-区区.
区区.
AmazonLinux、RHEL、CentOS和SLES64位https://s3.
region.
amazonaws.
com/amazon-ssm-region/latest/linux_amd64/amazon-ssm-agent.
rpmAmazonLinux、RHEL和CentOS32位https://s3.
region.
amazonaws.
com/amazon-ssm-region/latest/linux_386/amazon-ssm-agent.
rpmUbuntuServer64位https://s3.
region.
amazonaws.
com/amazon-ssm-region/latest/debian_amd64/amazon-ssm-agent.
debUbuntuServer32位https://s3.
region.
amazonaws.
com/amazon-ssm-region/latest/debian_386/amazon-ssm-agent.
debRaspbianhttps://s3-region.
amazonaws.
com/amazon-ssm-region/latest/debian_arm/amazon-ssm-agent.
deb在混合环境中的服务器和虚拟机上安装SSM代理1.
登录混合环境中的服务器或虚拟机.
2.
将以下命令块之一复制并粘贴到SSH中.
指定您的激活代码、ID和要从中下载SSM代理的区域.
请注意,如果您不是根用户,则sudo不是必需的.
在AmazonLinux、RHEL6.
x和CentOS6.
x上mkdir/tmp/ssmsudocurlhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpm-o/tmp/ssm/amazon-ssm-agent.
rpmsudoyuminstall-y/tmp/ssm/amazon-ssm-agent.
rpmsudostopamazon-ssm-agentsudoamazon-ssm-agent-register-code"code"-id"id"-region"region"sudostartamazon-ssm-agent在RHEL7.
x和CentOS7.
x上mkdir/tmp/ssmsudocurlhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpm-o/tmp/ssm/amazon-ssm-agent.
rpmsudoyuminstall-y/tmp/ssm/amazon-ssm-agent.
rpmsudosystemctlstopamazon-ssm-agentsudoamazon-ssm-agent-register-code"code"-id"id"-region"region"sudosystemctlstartamazon-ssm-agent29AmazonEC2SystemsManager用户指南在Linux混合环境中的服务器和虚拟机上安装SSM代理在SLES上mkdir/tmp/ssmsudowgethttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.
rpmsudorpm--installamazon-ssm-agent.
rpmsudosystemctlstopamazon-ssm-agentsudoamazon-ssm-agent-register-code"code"-id"id"-region"region"sudosystemctlenableamazon-ssm-agentsudosystemctlstartamazon-ssm-agent在Ubuntu上mkdir/tmp/ssmsudocurlhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.
deb-o/tmp/ssm/amazon-ssm-agent.
debsudodpkg-i/tmp/ssm/amazon-ssm-agent.
debsudoserviceamazon-ssm-agentstopsudoamazon-ssm-agent-register-code"code"-id"id"-region"region"sudoserviceamazon-ssm-agentstart在Raspbian上mkdir/tmp/ssmsudocurlhttps://s3.
amazonaws.
com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.
deb-o/tmp/ssm/amazon-ssm-agent.
debsudodpkg-i/tmp/ssm/amazon-ssm-agent.
debsudoserviceamazon-ssm-agentstopsudoamazon-ssm-agent-register-code"code"-id"id"-region"region"sudoserviceamazon-ssm-agentstart3.
按Enter.
此命令将下载SSM代理并将它安装到混合环境中的服务器或虚拟机上.
此命令停止SSM代理,然后向SSM服务注册服务器或虚拟机.
服务器或虚拟机现在为托管实例.
为SystemsManager配置的AmazonEC2实例也是托管实例.
但在AmazonEC2控制台中,您的本地实例与具有前缀"mi-"的AmazonEC2实例有别.
30AmazonEC2SystemsManager用户指南从GitHub运行脚本合作伙伴和产品集成您可以将SystemsManager与GitHub和AmazonS3等合作伙伴和产品技术结合使用,从而自动完成托管实例的部署、配置和维护.
本部分介绍如何使用AWS-RunRemoteScript预定义的SSM文档下载来自GitHub和AmazonS3的脚本,包括Ansible、Python、Ruby和PowerShell脚本.
通过使用该文档,不再需要将脚本手动导入AmazonEC2,也不需要将其封装在SSM文档中.
通过将SystemsManager与GitHub和AmazonS3集成,可以促进实现基础设施即代码,由此可缩短管理实例需要的时间,同时在队列中实现标准化配置.
还可以创建自定义SSM文档,实现从远程位置即可下载并运行脚本或其他SSM文档.
有关更多信息,请参阅创建复合文档(p.
55).
内容从GitHub运行脚本(p.
31)从AmazonS3运行脚本(p.
35)从GitHub运行脚本本部分介绍如何从私有或公有GitHub存储库下载并运行脚本.
您可以运行不同类型的脚本,包括AnsiblePlaybooks、Python、Ruby和PowerShell脚本.
还可以下载包括多个脚本的目录.
在运行目录中的主脚本时,SystemsManager也会同时运行所有引用的脚本(只要引用的脚本包含在该目录中).
请注意关于从GitHub运行脚本的下列重要详细信息.
SystemsManager不检查您的脚本是否能够在实例上运行.
在下载并运行脚本之前,必须验证对应实例上是否已经安装所需软件.
您也可以创建一个复合文档,以使用RunCommand或StateManager安装软件,然后再下载并运行脚本.
您负责确保满足所有GitHub要求,包括根据需要刷新访问令牌.
另外,必须确保不超过已验证或未验证请求的数量.
有关更多信息,请参阅GitHub文档.
主题31AmazonEC2SystemsManager用户指南从GitHub运行AnsiblePlaybooks从GitHub运行AnsiblePlaybooks(p.
32)从GitHub运行Python脚本(p.
33)从GitHub运行AnsiblePlaybooks本部分包含帮助您使用EC2控制台或AWSCLI从GitHub运行AnsiblePlaybooks的过程.
开始前的准备工作如果您计划运行私有GitHub存储库中存储的脚本,必须为GitHub安全访问令牌创建SystemsManagerSecureString参数.
通过SSH手动传递令牌无法访问私有GitHub存储库中的脚本.
访问令牌必须作为SystemsManagerSecureString参数传递.
有关创建SecureString参数的更多信息,请参阅创建SystemsManager参数(p.
235).
使用EC2控制台从GitHub运行AnsiblePlaybook1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择RunCommand,然后选择Runacommand.
3.
在Document列表中,选择AWS-RunRemoteScript.
4.
在SelectTargetsby部分中,选择相应选项并选择要在其中下载和运行脚本的实例.
5.
(可选)在Executeon字段中,指定可同时运行AWS-RunRemoteScript文档的Targets的数量(例如,10).
或者指定可同时运行该文档的目标数量的百分比(例如10%).
Note如果通过选择EC2标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量.
6.
(可选)在Stopafter字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数.
例如,如果您指定3,SystemsManager将在收到第4个错误时停止发送命令.
仍在处理命令的实例也可能发送错误.
7.
在SourceType列表中,选择GitHub8.
在Source文本框中,按以下格式键入访问源所需的信息:{"owner":"owner_name","repository":"repository_name","path":"path_to_scripts_or_directory","tokenInfo":"{{ssm-secure:SecureString_parameter_name}}"}例如:{"owner":"TestUser1","repository":"GitHubPrivateTest","path":"scripts/webserver.
yml","tokenInfo":"{{ssm-secure:mySecureStringParameter}}"}9.
在CommandLine字段中,键入脚本执行的参数.
以下是示例.
ansible-playbook-i"localhost,"--check-clocalwebserver.
yml10.
在WorkingDirectory字段中,键入实例上要在其中下载和运行脚本的目录的名称.
11.
在Comments字段中,键入有关该命令的信息.
12.
在AdvancedOptions部分中,选择WritetoS3以便在AmazonS3存储桶中存储命令输出.
在文本框中键入存储桶和前缀名称.
13.
选择EnableSNSnotifications以接收有关命令执行的通知和状态.
有关为RunCommand配置SNS通知的更多信息,请参阅为RunCommand配置AmazonSNS通知(p.
262).
32AmazonEC2SystemsManager用户指南从GitHub运行Python脚本14.
选择Run.
使用AWSCLI从GitHub运行AnsiblePlaybook1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令可从GitHub下载并运行脚本.
awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"instance-IDs"--parameters'{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\",\"repository\":\"repository_name\",\"path\":\"path_to_file_or_directory\",\"tokenInfo\":\"{{ssm-secure:name_of_your_SecureString_parameter}commandLine":["commands_to_run"]}'以下是示例.
awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"i-1234abcd"--parameters'{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\",\"repository\":\"GitHubPrivateTest\",\"path\":\"scripts/webserver.
yml\",\"tokenInfo\":\"{{ssm-secure:mySecureStringParameter}commandLine":["ansible-playbook-i"localhost,"--check-clocalwebserver.
yml"]}'从GitHub运行Python脚本本部分包含帮助您使用EC2控制台或AWSCLI从GitHub运行Python脚本的过程.
开始前的准备工作如果您计划运行私有GitHub存储库中存储的脚本,必须为GitHub安全访问令牌创建SystemsManagerSecureString参数.
通过SSH手动传递令牌无法访问私有GitHub存储库中的脚本.
访问令牌必须作为SystemsManagerSecureString参数传递.
有关创建SecureString参数的更多信息,请参阅创建SystemsManager参数(p.
235).
使用EC2控制台从GitHub运行Python脚本1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择RunCommand,然后选择Runacommand.
3.
在Document列表中,选择AWS-RunRemoteScript.
4.
在SelectTargetsby部分中,选择相应选项并选择要在其中下载和运行脚本的实例.
5.
(可选)在Executeon字段中,指定可同时运行AWS-RunRemoteScript文档的Targets的数量(例如,10).
或者指定可同时运行该文档的目标数量的百分比(例如10%).
33AmazonEC2SystemsManager用户指南从GitHub运行Python脚本Note如果通过选择EC2标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量.
6.
(可选)在Stopafter字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数.
例如,如果您指定3,SystemsManager将在收到第4个错误时停止发送命令.
仍在处理命令的实例也可能发送错误.
7.
在SourceType列表中,选择GitHub8.
在Source文本框中,按以下格式键入访问源所需的信息:{"owner":"owner_name","repository":"repository_name","path":"path_to_scripts_or_directory","tokenInfo":"{{ssm-secure:SecureString_parameter_name}}"}例如:{"owner":"TestUser1","repository":"GitHubPrivateTest","path":"scripts/python/complex-script","tokenInfo":"{{ssm-secure:mySecureStringParameter}}"}此示例下载名为complex-script的脚本目录.
9.
在CommandLine字段中,键入脚本执行的参数.
以下是示例.
mainFile.
pyargument-1argument-2该示例运行mainFile.
py,后者之后会运行complex-script目录中的其他脚本.
10.
在WorkingDirectory字段中,键入实例上要在其中下载和运行脚本的目录的名称.
11.
在Comments字段中,键入有关该命令的信息.
12.
在AdvancedOptions部分中,选择WritetoS3以便在AmazonS3存储桶中存储命令输出.
在文本框中键入存储桶和前缀名称.
13.
选择EnableSNSnotifications以接收有关命令执行的通知和状态.
有关为RunCommand配置SNS通知的更多信息,请参阅为RunCommand配置AmazonSNS通知(p.
262).
14.
选择Run.
使用AWSCLI从GitHub运行Python脚本1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令可从GitHub下载并运行脚本.
awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"instance-IDs"--parameters'{"sourceType":["GitHub"],"sourceInfo":34AmazonEC2SystemsManager用户指南从AmazonS3运行脚本["{\"owner\":\"owner_name\",\"repository\":\"repository_name\",\"path\":\"path_to_script_or_directory"}"],"commandLine":["commands_to_run"]}'以下是示例.
awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"i-abcd1234"--parameters'{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\",\"repository\":\"GitHubTestPublic\",\"path\":\"scripts/python/complex-script\"}"],"commandLine":["mainFile.
pyargument-1argument-2"]}'此示例下载名为complex-script的脚本目录.
commandLine条目运行mainFile.
py,它之后会运行complex-script目录中的其他脚本.
从AmazonS3运行脚本本部分介绍如何从AmazonS3下载并运行脚本.
您可以运行不同类型的脚本,包括AnsiblePlaybooks、Python、Ruby和PowerShell.
还可以下载包括多个脚本的目录.
在运行目录中的主脚本时,SystemsManager也会同时运行所有引用的脚本(只要引用的脚本包含在该目录中).
请注意关于从AmazonS3运行脚本的下列重要详细信息.
SystemsManager不检查您的脚本是否能够在实例上运行.
在下载并运行脚本之前,必须验证对应实例上是否已经安装所需软件.
您也可以创建一个复合文档,以使用RunCommand或StateManager安装软件,然后再下载并运行脚本.
验证您的AWSIdentityandAccessManagement(IAM)用户账户、角色或组是否有权读取S3存储桶.
主题从AmazonS3运行Ruby脚本(p.
35)从AmazonS3运行PowerShell脚本(p.
36)从AmazonS3运行Ruby脚本本部分包含帮助您使用EC2控制台或AWSCLI从AmazonS3运行Ruby脚本的过程.
使用EC2控制台从AmazonS3运行Ruby脚本1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择RunCommand,然后选择Runacommand.
3.
在Document列表中,选择AWS-RunRemoteScript.
4.
在SelectTargetsby部分中,选择相应选项并选择要在其中下载和运行脚本的实例.
5.
(可选)在Executeon字段中,指定可同时运行AWS-RunRemoteScript文档的Targets的数量(例如,10).
或者指定可同时运行该文档的目标数量的百分比(例如10%).
Note如果通过选择EC2标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量.
6.
(可选)在Stopafter字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数.
例如,如果您指定3,SystemsManager将在收到第4个错误时停止发送命令.
仍在处理命令的实例也可能发送错误.
35AmazonEC2SystemsManager用户指南从AmazonS3运行PowerShell脚本7.
在SourceType列表中,选择S38.
在Source文本框中,按以下格式键入访问源所需的信息:{"path":"https://s3.
amazonaws.
com/path_to_script"}例如:{"path":"https://s3.
amazonaws.
com/rubytest/scripts/ruby/helloWorld.
rb"}9.
在CommandLine字段中,键入脚本执行的参数.
以下是示例.
helloWorld.
rbargument-1argument-210.
在WorkingDirectory字段中,键入实例上要在其中下载和运行脚本的目录的名称.
11.
在Comments字段中,键入有关该命令的信息.
12.
在AdvancedOptions部分中,选择WritetoS3以便在AmazonS3存储桶中存储命令输出.
在文本框中键入存储桶和前缀名称.
13.
选择EnableSNSnotifications以接收有关命令执行的通知和状态.
有关为RunCommand配置SNS通知的更多信息,请参阅为RunCommand配置AmazonSNS通知(p.
262).
14.
选择Run.
使用AWSCLI从S3运行Ruby脚本1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令可从AmazonS3下载并运行脚本.
awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"instance-IDs"--parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.
amazonaws.
com/path_to_script\"}"],"commandLine":["script_name_and_arguments"]}'以下是示例.
awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"i-abcd1234"--parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.
amazonaws.
com/RubyTest/scripts/ruby/helloWorld.
rb\"}"],"commandLine":["helloWorld.
rbargument-1argument-2"]}'从AmazonS3运行PowerShell脚本本部分包含帮助您使用EC2控制台或AWSCLI从AmazonS3运行PowerShell脚本的过程.
36AmazonEC2SystemsManager用户指南从AmazonS3运行PowerShell脚本从AmazonS3运行PowerShell脚本1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择RunCommand,然后选择Runacommand.
3.
在Document列表中,选择AWS-RunRemoteScript.
4.
在SelectTargetsby部分中,选择相应选项并选择要在其中下载和运行脚本的实例.
5.
(可选)在Executeon字段中,指定可同时运行AWS-RunRemoteScript文档的Targets的数量(例如,10).
或者指定可同时运行该文档的目标数量的百分比(例如10%).
Note如果通过选择EC2标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量.
6.
(可选)在Stopafter字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数.
例如,如果您指定3,SystemsManager将在收到第4个错误时停止发送命令.
仍在处理命令的实例也可能发送错误.
7.
在SourceType列表中,选择S38.
在Source文本框中,按以下格式键入访问源所需的信息:{"path":"https://s3.
amazonaws.
com/path_to_script"}例如:{"path":"https://s3.
amazonaws.
com/PowerShellTest/powershell/helloPowershell.
ps1"}9.
在CommandLine字段中,键入脚本执行的参数.
以下是示例.
helloPowershell.
ps1argument-1argument-210.
在WorkingDirectory字段中,键入实例上要在其中下载和运行脚本的目录的名称.
11.
在Comments字段中,键入有关该命令的信息.
12.
在AdvancedOptions部分中,选择WritetoS3以便在AmazonS3存储桶中存储命令输出.
在文本框中键入存储桶和前缀名称.
13.
选择EnableSNSnotifications以接收有关命令执行的通知和状态.
有关为RunCommand配置SNS通知的更多信息,请参阅为RunCommand配置AmazonSNS通知(p.
262).
14.
选择Run.
使用AWSCLI从S3运行PowerShell脚本1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令可从AmazonS3下载并运行脚本.
37AmazonEC2SystemsManager用户指南从AmazonS3运行PowerShell脚本awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"instance-IDs"--parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.
amazonaws.
com/path_to_script\"}"],"commandLine":["script_name_and_arguments"]}'以下是示例.
awsssmsend-command--document-name"AWS-RunRemoteScript"--instance-ids"i-1234abcd"--parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.
amazonaws.
com/TestPowershell/powershell/helloPowershell.
ps1\"}"],"commandLine":["helloPowershell.
ps1argument-1argument-2"]}'38AmazonEC2SystemsManager用户指南SystemsManager预定义文档SystemsManager文档AmazonEC2SystemsManager文档定义SystemsManager对您的托管实例执行的操作.
SystemsManager包括十多个预先配置的文档,可以通过在运行时指定参数进行使用.
文档使用JavaScriptObjectNotation(JSON),并包括您指定的步骤和参数.
下表介绍了不同类型的SSM文档.
类型一起使用详细信息命令文档RunCommand(p.
254)状态管理器(p.
284)RunCommand使用命令文档执行命令.
状态管理器使用命令文档应用策略.
在实例生命周期内的任何时刻,这些操作都可在一个或多个目标上运行,策略文档状态管理器(p.
284)策略文档对您的目标执行策略.
如果删除策略文档,将不再执行该策略(例如,收集清单).
自动化文档自动化(p.
107)在执行常规维护和部署任务时–如创建或更新Amazon系统映像(AMI)–使用自动化文档.
有关SSM文档限制的信息,请参阅AmazonEC2SystemsManager限制.
SystemsManager预定义文档为了帮助您快速入门,SystemsManager提供了预定义文档.
可在AmazonEC2控制台中查看这些文档.
在EC2控制台中,展开SystemsManagerSharedResources,然后选择Documents.
您在选择某个文档后,可以通过下方窗格中的选项卡查看所选文档的相关信息,如下图所示.

39AmazonEC2SystemsManager用户指南文档架构和功能您还可以使用AWSCLI和ToolsforWindowsPowerShell命令查看一组文档,并获得这些文档的描述.
AWSCLIawsssmlist-documentsawsssmdescribe-document--name"document_name"ToolsforWindowsPowerShellGet-SSMDocumentListGet-SSMDocumentDescription-Name"document_name"文档架构和功能SystemsManager文档当前使用以下架构版本.
Command型文档可以使用1.
2、2.
0和2.
2版架构.
如果您目前使用1.
2版架构文档,我们建议您创建使用2.
2版架构的文档.
Policy型文档必须使用2.
0版或更高版本的架构.
Automation型文档必须使用0.
3版架构.
通过为Command和Policy文档使用最新架构版本,您可以利用以下功能.
2.
2版架构文档功能功能详细信息编辑文档文档现在可以更新.
如果版本为1.
2,对文档的任何更新都需要另存为其他名称.
自动版本控制对文档的任何更新都会创建一个新版本.
这不是架构版本,而是文档版本.
默认版本如果您拥有某个文档的多个版本,可以指定哪个版本是默认文档.
40AmazonEC2SystemsManager用户指南SSM文档语法功能详细信息顺序文档中的插件或步骤按指定的顺序执行.
跨平台支持跨平台支持可让您为同一个SSM文档中的不同插件指定不同操作系统.
跨平台支持在某个步骤中使用precondition参数.
Note您必须将实例上的SSM代理更新至最新版本才能使用新的SystemsManager功能和SSM文档功能.
有关更多信息,请参阅从EC2控制台执行命令(p.
266)中标题为示例:更新SSM代理的部分.
下表列出了主要架构版本之间的区别.
版本1.
2版本2.
0详细信息runtimeConfigmainSteps在2.
0版或更高版本中,mainSteps部分替换了runtimeConfig部分.
mainSteps部分启用了SystemsManager,以便依顺序执行步骤.
属性inputs在2.
0版或更高版本中,inputs部分替换了properties部分.
inputs部分接受步骤参数.
命令runCommand在2.
0版或更高版本中,inputs部分接收runCommand参数,而不是commands参数.
idaction在2.
0版或更高版本中,Action替换了ID.
这只是更改了名称.
不适用name在2.
0版或更高版本中,name是用户定义的任意步骤名称.
SSM文档语法文档语法由用于创建文档的架构版本定义.
我们建议您使用2.
2版或更高版本的架构.
使用此架构版本的文档包含以下顶级元素.
有关可在这些元素中指定的属性的信息,请参阅顶级元素(p.
58).
schemaVersion:要使用的架构版本.
Description:您提供的描述文档目的的信息.
Parameters:文档接受的参数.
对于您经常引用的参数,我们建议您在SystemsManagerParameterStore中存储这些参数,然后进行引用.
您可以在文档的这一部分引用String和StringListSystemsManager参数.
您不能在文档的这一部分引用SecureStringSystemsManager参数.
有关更多信息,请参阅SystemsManagerParameterStore(p.
229).
mainSteps:可以包含多个步骤(插件)的对象.
步骤包括一个或多个操作、可选前提条件、各操作的唯一名称以及这些操作的inputs(参数).
有关支持的插件和插件属性的列表,请参阅SSM文档插件参考(p.
58).
41AmazonEC2SystemsManager用户指南SSM文档语法Important操作的名称不能包含空格.
如果名称包含空格,您将收到InvalidDocumentContent错误.
使用前提条件参数在2.
2版或更高版本架构中,您可以使用precondition参数为每个插件指定目标操作系统.
precondition参数支持platformType和值Windows或Linux.
对于使用2.
2版或更高版本架构的文档,如果未指定precondition,每个插件将被执行或跳过,具体取决于插件与操作系统的兼容性.
对于使用2.
0版或更低版本架构的文档,不兼容的插件将会引发错误.
例如,在2.
2版架构文档中,如果未指定precondition,将会列出aws:runShellScript插件,该步骤在Linux实例上执行,但系统会在Windows实例上跳过该步骤,因为aws:runShellScript与Windows实例不兼容.
但是,对于2.
0版架构文档,如果您指定aws:runShellScript插件,然后在Windows实例上运行文档,执行将会失败.
2.
0版或更高版本架构的语法以下示例显示2.
0版或更高版本架构文档的顶级元素.
{"schemaVersion":"2.
0","description":"Adescriptionofthedocument.
","parameters":{"parameter1":{"oneormoreparameterproperties"},"parameter2":{"oneormoreparameterproperties"},"parameter3":{"oneormoreparameterproperties"}},"mainSteps":[{"action":"plugin1","name":"Anameforthisaction.
","inputs":{"name":"{{input1}}","name":"{{input2}}","name":"{{input3}}",}}]}2.
2版架构示例2.
2版架构提供跨平台支持.
这意味着在一个SSM文档内,您可以为不同的插件指定不同的操作系统.
跨平台支持在某个步骤中使用precondition参数,如下例所示.
{"schemaVersion":"2.
2","description":"cross-platformsample","mainSteps":[{"action":"aws:runPowerShellScript","name":"PatchWindows",42AmazonEC2SystemsManager用户指南SSM文档语法"precondition":{"StringEquals":["platformType","Windows"]},"inputs":{"runCommand":["cmds"]}},{"action":"aws:runShellScript","name":"PatchLinux","precondition":{"StringEquals":["platformType","Linux"]},"inputs":{"runCommand":["cmds"]}}]}2.
0版架构示例以下示例显示AWS-ConfigureAWSPackage文档.
mainSteps部分在action步骤中包括aws:configurePackage插件.
{"schemaVersion":"2.
0","description":"InstalloruninstallthelatestversionorspecifiedversionofanAWSpackage.
","parameters":{"action":{"description":"(Required)Specifywhetherornottoinstalloruninstallthepackage.
","type":"String","allowedValues":["Install","Uninstall"]},"name":{"description":"(Required)Thepackagetoinstall/uninstall.
","type":"String","allowedValues":["AWSPVDriver"]},"version":{"description":"(Optional)Aspecificversionofthepackagetoinstalloruninstall.
Ifinstalling,thesysteminstallsthelatestpublishedversion,bydefault.
Ifuninstalling,thesystemuninstallsthecurrentlyinstalledversion,bydefault.
Ifnoinstalledversionisfound,thelatestpublishedversionisdownloaded,andtheuninstallactionisrun.
","type":"String","default":"","allowedPattern"d+d+d+)$|^$)"}43AmazonEC2SystemsManager用户指南SSM文档语法},"mainSteps":[{"action":"aws:configurePackage","name":"configurePackage","inputs":{"name":"{{name}}","action":"{{action}}","version":"{{version}}"}}]}1.
2版架构的语法以下示例显示1.
2版架构文档的顶级元素.
{"schemaVersion":"1.
2","description":"AdescriptionoftheSystemsManagerdocument.
","parameters":{"parameter1":{"oneormoreparameterproperties"},"parameter2":{"oneormoreparameterproperties"},"parameter3":{"oneormoreparameterproperties"}},"runtimeConfig":{"plugin1":{"properties":[{"oneormorepluginproperties"}]}}}Noteaws:applications、aws:psModule、aws:runShellScript和aws:runPowerShellScript插件允许您指定属性阵列.
1.
2版架构示例以下示例显示AWS-RunShellScriptSystemsManager文档.
runtimeConfig部分包含aws:runShellScript插件.
{"schemaVersion":"1.
2","description":"Runashellscriptorspecifythecommandstorun.
","parameters":{"commands":{"type":"StringList","description":"(Required)Specifyashellscriptoracommandtorun.
","minItems":1,"displayType":"textarea"},"workingDirectory":{"type":"String",44AmazonEC2SystemsManager用户指南文档版本与执行"default":"","description":"(Optional)Thepathtotheworkingdirectoryonyourinstance.
","maxChars":4096},"executionTimeout":{"type":"String","default":"3600","description":"(Optional)Thetimeinsecondsforacommandtocompletebeforeitisconsideredtohavefailed.
Defaultis3600(1hour).
Maximumis28800(8hours).
","allowedPattern":"([1-9][0-9]{0,3})|(1[0-9]{1,4})|(2[0-7][0-9]{1,3})|(28[0-7][0-9]{1,2})|(28800)"}},"runtimeConfig":{"aws:runShellScript":{"properties":[{"id":"0.
aws:runShellScript","runCommand":"{{commands}}","workingDirectory":"{{workingDirectory}}","timeoutSeconds":"{{executionTimeout}}"}]}}}文档版本与执行您可以创建并保存不同版本的文档.
您可以为每个文档指定默认版本.
文档的默认版本可以更新到较新版本或恢复到较旧版本.
如果您更改状态管理器文档的默认版本,则下次SystemsManager将关联应用到实例时,使用该文档的所有关联都将开始使用新的默认版本.
当您更改文档的JSON内容时,SystemsManager将自动递增文档的版本.
您可以检索并查看之前的版本.
状态管理器文档可以与实例或标记的实例组关联.
另请注意有关文档的以下详细信息.
通过创建使用不同的文档的不同关联,您可以将多个文档分配给一个目标.

如果您将多个文档关联到一个目标,则可以使用AWSCLI、AWSToolsforWindowsPowerShell或SSM开发工具包来查看将在所有关联文档上执行的插件的综合列表.
文档中的步骤按先后顺序执行.
只要有权限,您就可以将共享文档用于状态管理器,但是您无法将共享文档与实例关联.
如果您想要使用或分享与一个或多个目标相关联的文档,则您必须先创建文档副本,然后才能使用或分享.

如果您创建的文档含有互相冲突的插件(例如加入域的插件和从域中删除的插件),则最终状态取决于最后执行的插件.
StateManager不会验证文档中的命令或插件的逻辑顺序或合理性.
处理文档时,系统首先应用实例关联,然后应用标记实例组关联.
如果实例处于多个标记实例组中,则对应标记实例组的文档不会以任何特定顺序执行.
如果实例通过其实例ID直接对应多个文档,那么也不存在特定的执行顺序.
自定义文档如果您要通过文档自定义步骤和操作,可以自行创建文档.
当您首次使用某一文档对实例执行操作时,系统会将此文档存储在您的AWS账户中.
有关如何创建SystemsManager文档的更多信息,请参阅创建SystemsManager文档(p.
46).
45AmazonEC2SystemsManager用户指南共享文档共享文档您可以将文档公开,或者与特定AWS账户共享.
有关更多信息,请参阅共享SystemsManager文档(p.
49).
创建SystemsManager文档如果SystemsManager公有文档限制了您希望对托管实例执行的操作,您可以自行创建文档.
创建新文档时,我们建议使用架构版本2.
2或更高版本.
开始前的准备工作在创建SSM文档之前,我们建议您阅读有关SSM文档可用的其他架构、功能和语法的信息.
有关更多信息,请参阅SystemsManager文档(p.
39).
在创建文档时,您在JSON中指定文档内容.
开始使用JSON最便捷的方式是从SystemsManager公有文档中复制现有的示例.
复制SystemsManager文档1.
在AmazonEC2控制台中,展开SystemsManagerSharedResources,然后选择Documents.
2.
选择一个文档.
3.
在下方窗格中,选择Content选项卡.
4.
将JSON复制到文本编辑器中,并指定自定义文档的详细信息.
5.
以.
json文件扩展名保存此文档.
在编写完文档内容后,您可以使用以下任一过程将文档添加到SystemsManager.
Note如果您编写的是Policy型文档,在将其添加到系统后,必须将该文档与您的托管实例相关联.
有关更多信息,请参阅创建关联(p.
287).
使用AmazonEC2控制台添加SystemsManager文档1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择Documents.
3.
选择CreateDocument.
4.
为文档键入一个描述性名称.
5.
在DocumentType列表中,选择您要创建的文档类型.
6.
删除Content字段中的方括号,然后将您之前创建的文档粘贴到这里.
7.
选择CreateDocument保存文档.
使用WindowsPowerShell添加SystemsManager文档1.
如前所述,复制并自定义现有文档.
2.
使用AWSToolsforWindowsPowerShell添加文档.
$json=Get-ContentC:\yourfile|Out-String46AmazonEC2SystemsManager用户指南使用AWSCLI添加SystemsManager文档New-SSMDocument-DocumentTypeCommand-Namedocumentname-Content$json使用AWSCLI添加SystemsManager文档1.
如前所述,复制并自定义现有文档.
2.
使用AWSCLI添加文档.
awsssmcreate-document--contentfile://pathtoyourfile\yourfile--name"documentname"--document-type"Command"Windows示例awsssmcreate-document--contentfile://c:\temp\PowershellScript.
json--name"PowerShellScript"--document-type"Command"Linux示例awsssmcreate-document--contentfile:///home/ec2-user/RunShellScript.
json--name"RunShellScript"--document-type"Command"为SystemsManager文档添加标签您可以使用AddTagsToResourceAPI、AWSCLI或AWSToolsforWindows向SystemsManager资源(包括文档、托管实例、MaintenanceWindow、ParameterStore参数和补丁基准)添加标签.
当您具有相同类型的许多资源时,添加标签会很有用—您可以根据分配给资源的标签快速识别特定资源.
每个标签都包含您定义的一个键和一个可选值.
例如,您可以为特定环境、部门、用户、组或时间段的文档添加标签.
在为文档添加标签后,您可以通过创建一个指定用户可访问的标签的IAM策略来限制对该文档的访问权限.
有关使用标签限制对文档的访问权限的更多信息,请参阅使用标签控制对文档的访问权限(p.
48).
使用AWSCLI为文档添加标签1.
在终端(Linux,OSX,orUnix)或命令提示符(Windows)中,运行list-documents命令列出可添加标签的文档.
awsssmlist-documents记下您要添加标签的文档的名称.
2.
运行以下命令为文档添加标签.
awsssmadd-tags-to-resource--resource-type"Document"--resource-id"document-name"--tags"Key=key,Value=value"document-name-您要添加标签的SystemsManager文档的名称.
key是您提供的自定义密钥的名称.
例如,region或quarter.
value是您要为该密钥提供的值的自定义内容.
例如,west或Q318.
如果成功,则命令没有输出.
47AmazonEC2SystemsManager用户指南使用标签控制对文档的访问权限3.
执行以下命令验证文档标签.
awsssmlist-tags-for-resource--resource-type"Document"--resource-id"document-name"使用AWSToolsforWindows为文档添加标签1.
打开AWSToolsforWindowsPowerShell并运行以下命令以列出您可添加标签的文档:Get-SSMDocumentList2.
一次运行一条以下命令来为文档添加标签:$tag1=New-ObjectAmazon.
SimpleSystemsManagement.
Model.
Tag$tag1.
Key="key"$tag1.
Value="value"Add-SSMResourceTag-ResourceType"Document"-ResourceId"document-name"-Tag$tag1document-name-您要添加标签的SystemsManager文档的名称.
key是您提供的自定义密钥的名称.
例如,region或quarter.
value是您要为该密钥提供的值的自定义内容.
例如,west或Q318.
如果成功,则命令没有输出.
3.
运行以下命令验证文档标签:Get-SSMResourceTag-ResourceType"Document"-ResourceId"document-name"使用标签控制对文档的访问权限在为文档添加标签后,您可以通过创建一个指定用户可访问的标签的IAM策略来限制对该文档的访问权限.
当用户尝试使用文档时,系统会检查IAM策略和为该文档指定的标签.
如果用户对分配给该文档的标签没有访问权限,用户会收到访问被拒绝错误.
使用以下过程创建一个IAM策略来通过使用标签限制对文档的访问权限.
开始前的准备工作创建文档并添加标签.
有关更多信息,请参阅为SystemsManager文档添加标签(p.
47).
使用标签限制用户对文档的访问权限1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中选择Policies,然后选择Createpolicy.
3.
在CreateYourOwnPolicy部分,选择Select.
4.
在PolicyName字段中,指定一个将它标识为目标文档的用户策略的名称.
5.
输入描述.
6.
在PolicyDocument字段中,复制并粘贴以下示例策略.
将tag_key和tag_value替换为您的标签的键值对.
{"Version":"2012-10-17","Statement":[48AmazonEC2SystemsManager用户指南共享SystemsManager文档{"Effect":"Allow","Action":["ssm:GetDocument"],"Resource":"*","Condition":{"StringLike":{"ssm:resourceTag/tag_key":["tag_value"]}}}]}您可以使用以下Condition格式在策略中指定多个键.
指定多个键会为这些键创建AND关系.
"Condition":{"StringLike":{"ssm:resourceTag/tag_key1":["tag_value1"],"ssm:resourceTag/tag_key2":["tag_value2"]}}您可以使用以下Condition格式在策略中指定多个值.
ForAnyValue为这些值建立OR关系.
还可以指定ForAllValues来建立AND关系.
"Condition":{"ForAnyValue:StringLike":{"ssm:resourceTag/tag_key1":["tag_value1","tag_value2"]}}7.
选择CreatePolicy.
8.
将策略分配给IAM用户或组.
有关更多信息,请参阅更改IAM用户的权限和将策略附加到IAM组.
将策略附加到IAM用户或组账户之后,如果用户尝试使用某个文档,并且用户的策略不允许用户访问该文档的标签(调用GetDocumentAPI),系统将会返回错误.
错误类似于以下内容:"User:user_nameisnotauthorizedtoperform:ssm:GetDocumentonresource:document-namewiththefollowingcommand.
"当文档具有多个标签时,如果用户无权访问这些标签中的任何一个,则用户仍会收到访问被拒绝错误.

共享SystemsManager文档您可以私下或公开共享SystemsManager文档.
要私下共享文档,请修改文档权限并允许特定个人根据其AmazonWebServices(AWS)ID访问文档.
要公开共享SystemsManager文档,请修改文档权限并指定All.
49AmazonEC2SystemsManager用户指南共享SystemsManager文档的共享和使用指南Warning请仅使用从可信来源获取的共享SystemsManager文档.
使用任何共享文档时,请务必在使用前仔细查看文件内容,了解它会如何更改您的实例配置.
有关共享文档最佳实践的更多信息,请参阅共享SystemsManager文档的共享和使用指南(p.
50).
限制在开始使用SystemsManager文档时,请注意下列限制.
仅所有者可共享文档.
您必须先停止共享文档,然后才能删除它.
有关更多信息,请参阅如何修改共享文档的权限(p.
52).
您最多可与1000个AWS账户共享一个文档.
要增加此限制,请转到AWS支持中心并提交限制增加请求表单.
您可公开共享最多5个SystemsManager文档.
要增加此限制,请转到AWS支持中心并提交限制增加请求表单.
有关SystemsManager限制的更多信息,请参阅AmazonEC2SystemsManager限制.
内容共享SystemsManager文档的共享和使用指南(p.
50)如何共享SystemsManager文档(p.
51)如何修改共享文档的权限(p.
52)如何使用共享的SystemsManager文档(p.
53)共享SystemsManager文档的共享和使用指南在共享或使用共享文档之前,请阅读以下指南.
删除敏感信息请仔细审查您的SystemsManager文档并删除任何敏感信息.
例如,请确保文档不包含您的AWS凭证.
如果您与特定个人共享文档,这些用户可查看文档中的信息.
如果您公开共享文档,则任何人都可查看文档中的信息.
使用IAM用户信任策略限制RunCommand操作为将有权访问文档的用户创建限制性AWSIdentityandAccessManagement(IAM)用户策略.
此IAM策略确定用户可在AmazonEC2控制台中查看的SystemsManager文档;或通过使用AWSCLI或适用于WindowsPowerShell的AWS工具调用ListDocuments查看的这些文档.
该策略还限制用户可使用SystemsManager文档执行的操作.
您可创建限制性策略,以便用户只能使用特定文档.
有关更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
在使用共享文档之前审查其内容审查与您共享的每个文档(特别是公开文档)的内容,以了解将在您的实例上执行的命令.
一个文档在运行后可能会有意或无意具有负面影响.
如果文档引用外部网络,请在使用文档前审查外部源.

使用文档哈希发送命令在共享文档时,系统将创建Sha-256哈希并将其分配给文档.
系统还将保存文档内容的快照.
使用共享文档发送命令时,您可在命令中指定哈希以确保下列条件为true:您正在从正确的SystemsManager文档执行命令在与您共享之后文档内容未更改.
50AmazonEC2SystemsManager用户指南如何共享SystemsManager文档如果哈希与指定文档不匹配,或者共享文档的内容已更改,则命令将返回InvalidDocument异常.
请注意:哈希无法验证来自外部位置的文档内容.
如何共享SystemsManager文档您可使用AmazonEC2控制台共享SystemsManager文档;或通过使用AWSCLI、适用于WindowsPowerShell的AWS工具或AWSSDK,以编程方式调用ModifyDocumentPermissionAPI操作来共享该文档.
在共享文档之前,获取要与之共享文档的人的AWS账户ID.
您将在共享文档时指定这些账户ID.
使用AmazonEC2控制台共享文档1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择Documents.
3.
在文档列表中,选择要共享的文档.
选择Permissions选项卡并确保您是文档所有者.
只有文档所有者才可共享文档.
4.
选择Edit.
5.
要公开共享命令,请选择Public,然后选择Save.
要私下共享命令,请选择Private,输入AWS账户ID,选择AddPermission,然后选择Save.
使用AWSCLI共享文档以下步骤需要您为您的CLI会话指定区域.
RunCommand目前在以下SystemsManager区域中可用.
1.
在本地计算机上打开AWSCLI并执行以下命令来指定凭证.
awsconfigAWSAccessKeyID:[yourkey]AWSSecretAccessKey:[yourkey]Defaultregionname:[us-east-1]Defaultoutputformat[None]:2.
使用以下命令列出可供您使用的所有SystemsManager文档.
此列表包括您已创建的文档和与您共享的文档.
awsssmlist-documents--document-filter-listkey=Owner,value=all3.
使用以下命令获取特定文档.
awsssmget-document--namedocumentname4.
使用以下命令获取文档的描述.
awsssmdescribe-document--namedocumentname5.
使用以下命令查看文档的权限.
awsssmdescribe-document-permission--namedocumentname--permission-typeShare6.
使用以下命令修改文档的权限并共享文档.
您必须是文档的所有者才能编辑权限.
此命令与特定个体基于其AWS账户ID私下共享文档.
awsssmmodify-document-permission--namedocumentname--permission-typeShare--account-ids-to-addAWSaccountID51AmazonEC2SystemsManager用户指南如何修改共享文档的权限使用以下命令公开共享文档.
awsssmmodify-document-permission--namedocumentname--permission-typeShare--account-ids-to-add'all'使用适用于WindowsPowerShell的AWS工具共享文档以下步骤需要您为您的PowerShell会话指定区域.
RunCommand目前在以下SystemsManager区域中可用.
1.
在您的本地计算机上打开适用于WindowsPowerShell的AWS工具并执行以下命令来指定凭证.
Set-AWSCredentials–AccessKeyyourkey–SecretKeyyourkey2.
使用以下命令为PowerShell会话设置区域.
此示例使用us-west-2区域.
Set-DefaultAWSRegion-Regionus-west-23.
使用以下命令列出可供您使用的所有SystemsManager文档.
此列表包括您已创建的文档和与您共享的文档.
Get-SSMDocumentList-DocumentFilterList(@{"key"="Owner";"value"="All"})4.
使用以下命令获取特定文档.
Get-SSMDocument–Namedocumentname5.
使用以下命令获取文档的描述.
Get-SSMDocumentDescription–Namedocumentname6.
使用以下命令查看文档的权限.
Get-SSMDocumentPermission–Namedocumentname-PermissionTypeShare7.
使用以下命令修改文档的权限并共享文档.
您必须是文档的所有者才能编辑权限.
此命令与特定个体基于其AWS账户ID私下共享文档.
Edit-SSMDocumentPermission–Namedocumentname-PermissionTypeShare-AccountIdsToAddAWSaccountID使用以下命令公开共享文档.
Edit-SSMDocumentPermission-Namedocumentname-AccountIdsToAdd('all')-PermissionTypeShare如何修改共享文档的权限如果您共享一条命令,则在您删除对SystemsManager文档的访问权限或删除SystemsManager文档之前,用户可查看和使用该命令.
但是,只要文档已共享,您就无法删除它.
您必须先停止共享,然后再删除它.
52AmazonEC2SystemsManager用户指南如何使用共享的SystemsManager文档使用AmazonEC2控制台停止共享文档1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择Documents.
3.
在文档列表中,选择要停止共享的文档.
选择Permissions选项卡并确保您是文档所有者.
只有文档所有者才可停止共享文档.
4.
选择Edit.
5.
删除不应再具有此命令的访问权限的AWS账户ID,然后选择Save.
使用AWSCLI停止共享文档在本地计算机上打开AWSCLI,然后执行以下命令停止共享命令.
awsssmmodify-document-permission--namedocumentname--permission-typeShare--account-ids-to-remove'AWSaccountID'使用适用于WindowsPowerShell的AWS工具停止共享文档在您的本地计算机上打开适用于WindowsPowerShell的AWS工具并执行以下命令停止共享命令.
Edit-SSMDocumentPermission-Namedocumentname–AccountIdsToRemoveAWSaccountID-PermissionTypeShare如何使用共享的SystemsManager文档共享SystemsManager文档时,系统将生成一个Amazon资源名称(ARN)并将其分配给命令.
如果您从AmazonEC2控制台选择并执行共享文档,则不会看到此ARN.
但如果您要从命令行应用程序执行共享SystemsManager文档,则必须指定完整的ARN.
当您执行列出文档的命令时,将为您显示SystemsManager文档的完整ARN.
Note您无需为AWS公有文档(以AWS-*开头的文档)或您拥有的命令指定ARN.
本部分中包含的示例说明如何通过AWSCLI和适用于WindowsPowerShell的AWS工具查看和执行共享SystemsManager文档.
通过AWSCLI使用共享SystemsManager文档列出所有公有SystemsManager文档awsssmlist-documents--document-filter-listkey=Owner,value=Public列出已与您共享的私有SystemsManager文档awsssmlist-documents--document-filter-listkey=Owner,value=Private列出可供您使用的所有SystemsManager文档awsssmlist-documents--document-filter-listkey=Owner,value=All53AmazonEC2SystemsManager用户指南如何使用共享的SystemsManager文档使用完整ARN通过共享SystemsManager文档执行命令awsssmsend-command--document-nameFullARN/name例如:awsssmsend-command--document-namearn:aws-cn:ssm:us-east-1:12345678912:document/highAvailabilityServerSetup--instance-idsi-12121212通过适用于WindowsPowerShell的AWS工具使用共享SystemsManager文档列出所有公有SystemsManager文档Get-SSMDocumentList-DocumentFilterList@(New-ObjectAmazon.
SimpleSystemsManagement.
Model.
DocumentFilter("Owner","Public"))列出已与您共享的私有SystemsManager文档Get-SSMDocumentList-DocumentFilterList@(New-ObjectAmazon.
SimpleSystemsManagement.
Model.
DocumentFilter("Owner","Private"))获取有关已与您共享的SystemsManager文档的信息Get-SSMDocument–NameFullARN/name例如:Get-SSMDocument–Namearn:aws-cn:ssm:us-east-1:12345678912:document/highAvailabilityServerSetup获取已与您共享的SystemsManager文档的描述Get-SSMDocumentDescription–NameFullARN/name例如:Get-SSMDocumentDescription–Namearn:aws-cn:ssm:us-east-1:12345678912:document/highAvailabilityServerSetup使用完整ARN通过共享SystemsManager文档执行命令Send-SSMCommand–DocumentNameFullARN/name–InstanceIdIDs例如:Send-SSMCommand–DocumentNamearn:aws-cn:ssm:us-east-1:555450671542:document/highAvailabilityServerSetup–InstanceId@{"i-273d4e9e"}54AmazonEC2SystemsManager用户指南创建复合文档创建复合文档复合SSM文档是自定义文档,可通过运行一个或多个次要SSM文档执行一系列操作.
复合文档允许您为诸如引导软件或加入域的实例等常见任务创建一组标准的SSM文档,从而提升了基础设施即代码.
您随后可以跨AWS账户共享这些文档,从而减少SSM文档的维护工作并确保文档一致性.
例如,您可以创建执行以下操作的复合文档:1.
将SSM代理更新到最新版本.
2.
安装已列入白名单的所有补丁.
3.
安装防病毒软件.
4.
从GitHub下载脚本并运行这些脚本.
在本例中,您的自定义SSM文档包含执行下面这些操作的以下插件:1.
可运行AWS-UpdateSSMAgent文档的aws:runDocument插件,这会将SSM代理更新到最新版本.
2.
可运行AWS-ApplyPatchBaseline文档的aws:runDocument插件,这会安装已列入白名单的所有补丁.
3.
可运行AWS-InstallApplication文档的aws:runDocument插件,这会安装防病毒软件.
4.
可从GitHub下载脚本并运行这些脚本的aws:downloadContent插件.
复合和次要文档可存储在SystemsManager、GitHub(公有和私有存储库)或AmazonS3中.
复合文档必须采用JSON格式创建,但次要文件可采用JSON或YAML格式创建.
Note复合文档只能运行三个文档的最大文档深度.
这意味着复合文档可以调用子文档;该子文档可调用最后一个文档.
创建复合文档要创建复合文档,请在自定义SSM文档中添加aws:runDocument(p.
73)插件并指定必需的输入.
下面是可执行以下操作的复合文档示例:1.
运行aws:downloadContent(p.
68)插件可从公有存储库将SSM文档下载到名为bootstrap的本地目录.
SSM文档称为StateManagerBootstrap.
yml(YAML文档).
2.
运行aws:runDocument插件可运行StateManagerBootstrap.
yml文档.
未指定任何参数.
3.
运行aws:runDocument插件可运行AWS-ConfigureDocker预定义的SSM文档.
指定的参数会在实例上安装Docker.
{"schemaVersion":"2.
2","description":"MycompositedocumentforbootstrappingsoftwareandinstallingDocker.
","parameters":{},"mainSteps":[{"action":"aws:downloadContent","name":"downloadContent","inputs":{"sourceType":"GitHub","sourceInfo":"{\"owner\":\"TestUser1\",\"repository\":\"TestPublic\",\"path\":\"documents/bootstrap/StateManagerBootstrap.
yml\"}","destinationPath":"bootstrap"55AmazonEC2SystemsManager用户指南从远程位置运行文档}},{"action":"aws:runDocument","name":"runDocument","inputs":{"documentType":"LocalPath","documentPath":"bootstrap","documentParameters":"{}"}},{"action":"aws:runDocument","name":"configureDocker","inputs":{"documentType":"SSMDocument","documentPath":"AWS-ConfigureDocker","documentParameters":"{\"action\":\"Install\"}"}}]}有关创建SSM文档的更多信息,请参阅创建SystemsManager文档(p.
46).
有关可添加到自定义SSM文档的插件的更多信息,请参阅SSM文档插件参考(p.
58).
如果只想从远程位置运行文档(无需创建复合文档),请参阅从远程位置运行文档(p.
56).
从远程位置运行文档您可以使用AWS-RunDocument预定义的SSM文档从远程位置运行SSM文档.
此文档目前支持以下远程位置:GitHub存储库(公有和私有)AmazonS3保存在SystemsManager中的文档AWS-RunDocument文档允许您运行YAML和JSONSSM文档.
此文档是目前可用于运行YAMLSSM文档的唯一方式.
以下过程介绍如何使用AmazonEC2控制台和AWSCLI运行远程SSM文档.
这些过程演示了如何使用RunCommand运行远程文档,但您也可以使用StateManager或Automation运行远程文档.
开始前的准备工作必须先完成以下任务才能运行远程文档.
创建SSM文档并在远程位置保存该文档.
有关更多信息,请参阅创建SystemsManager文档(p.
46).
如果您打算运行存储在私有GitHub存储库中的远程文档,则必须为GitHub安全访问令牌创建SystemsManagerSecureString参数.
通过SSH手动传递令牌无法访问私有GitHub存储库中的远程文档.
访问令牌必须作为SystemsManagerSecureString参数传递.
有关创建SecureString参数的更多信息,请参阅创建SystemsManager参数(p.
235).
使用EC2控制台运行远程文档1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
56AmazonEC2SystemsManager用户指南从远程位置运行文档2.
在导航窗格中,选择RunCommand,然后选择Runacommand.
3.
在Document列表中,选择AWS-RunDocument.
4.
在SelectTargetsby部分中,选择相应选项并选择要在其中运行文档的实例.
5.
(可选)在Executeon字段中,指定可同时运行该文档的Targets的数量(例如10).
或者指定可同时运行该文档的目标数量的百分比(例如10%).
Note如果通过选择EC2标签选择了目标,但不确定有多少个实例使用所选标签,则可以通过指定百分比限制可运行此文档的实例数量.
6.
(可选)在Stopafter字段中,指定系统在停止向其他实例发送命令之前允许的最大错误数.
例如,如果您指定3,SystemsManager将在收到第4个错误时停止发送命令.
仍在处理命令的实例也可能发送错误.
7.
在SourceType列表中,选择一个选项.
如果选择GitHub,则采用以下格式指定Source信息:{"owner":"owner_name","repository":"repository_name","path":"path_to_document","tokenInfo":"{{ssm-secure:SecureString_parameter_name}}"}例如:{"owner":"TestUser1","repository":"SSMTestDocsRepo","path":"SSMDocs/mySSMdoc.
yml","tokenInfo":"{{ssm-secure:myAccessTokenParam}}"}如果选择S3,则采用以下格式指定Source信息:{"path":"URL_to_document_in_S3"}例如:{"path":"https://s3.
amazonaws.
com/aws-executecommand-test/scripts/ruby/mySSMdoc.
json"}如果选择SSMDocument,则采用以下格式指定Source信息:{"name":"document_name"}例如:{"name":"mySSMdoc"}8.
在Documentparameters字段中,键入远程SSM文档的参数.
例如,如果运行AWS-RunPowerShell文档,则可指定:{"commands":["date","echo\"HelloWorld\""]}如果运行AWS-ConfigureAWSPack文档,则可指定:{"action":"Install","name":"AWSPVDriver"}9.
在Comments字段中,键入有关该命令的信息.
57AmazonEC2SystemsManager用户指南SSM文档插件参考10.
在AdvancedOptions部分中,选择WritetoS3以便在AmazonS3存储桶中存储命令输出.
在文本框中键入存储桶和前缀名称.
11.
选择EnableSNSnotifications以接收有关命令执行的通知和状态.
有关为RunCommand配置SNS通知的更多信息,请参阅为RunCommand配置AmazonSNS通知(p.
262).
12.
选择Run.
SSM文档插件参考SystemsManager通过读取SystemsManager文档的内容确定在托管实例上执行的操作.
每个文档都包含代码执行部分.
根据文档的架构版本,此代码执行部分可能包含一个或多个插件或步骤.
为了便于理解本帮助主题,我们将这些插件和步骤都称为插件.
本部分包含有关每个SystemsManager插件的信息.
有关文档的更多信息,包括创建文档以及不同架构版本之间区别的信息,请参阅SystemsManager文档(p.
39).
Note此处介绍的部分插件仅在Windows实例或Linux实例上运行.
应注意每个插件的平台依赖性.
内容顶级元素(p.
58)aws:applications(p.
59)aws:cloudWatch(p.
60)aws:configureDocker(p.
66)aws:configurePackage(p.
66)aws:domainJoin(p.
67)aws:downloadContent(p.
68)aws:psModule(p.
70)aws:refreshAssociation(p.
71)aws:runDockerAction(p.
71)aws:runDocument(p.
73)aws:runPowerShellScript(p.
74)aws:runShellScript(p.
74)aws:softwareInventory(p.
75)aws:updateAgent(p.
76)aws:updateSSMAgent(p.
77)顶级元素顶级元素通常用于所有SystemsManager文档.
顶级元素提供SystemsManager文档的结构.
属性schemaVersion架构的版本.
类型:版本必需:是58AmazonEC2SystemsManager用户指南aws:applicationsdescription关于配置的描述.
类型:字符串必需:否parametersparameters是一个结构,其中包含处理文档时要执行的一个或多个参数.
您可在运行时指定文档中的参数或者使用SystemsManagerParameterStore指定参数.
有关更多信息,请参阅SystemsManagerParameterStore(p.
229).
类型:结构parameters结构接受以下字段和值:type:(必需)允许的值包括:String、StringList、Boolean、Integer、MapList和StringMapdescription:(可选)关于参数的描述.
default:(可选)参数的默认值或对ParameterStore中参数的引用.
allowedValues:(可选)参数的允许值.
allowedPattern:(可选)参数必须匹配的正则表达式.
displayType:(可选)用于在AWS控制台中显示textfield或textarea.
textfield是单行文本框.
textarea是多行文本区域.
minItems:(可选)允许的最小项目数.
maxItems:(可选)允许的最大项目数.
minChars:(可选)允许的最小参数字符数.
maxChars:(可选)允许的最大参数字符数.
runtimeConfig(仅限1.
2版架构)由一个或多个SystemsManager插件应用的实例的配置.
不保证插件按顺序运行.
类型:Dictionary必需:否mainSteps(仅限0.
3、2.
0和2.
2版架构)由一个或多个SystemsManager插件应用的实例的配置.
插件按照步骤内的操作进行组织.
步骤按文档中列出的先后顺序执行.
类型:Dictionary必需:否aws:applications在EC2实例上安装、修复或卸载应用程序.
此插件仅在MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"runtimeConfig":{"aws:applications":{"properties":[{59AmazonEC2SystemsManager用户指南aws:cloudWatch"id":"0.
aws:applications","action":"{{action}}","parameters":"{{parameters}}","source":"{{source}}","sourceHash":"{{sourceHash}}"}]}属性action要执行的操作.
类型:Enum有效值:Install|Repair|Uninstall必需:是参数安装程序的参数.
类型:字符串必需:否source应用程序的.
msi文件的URL.
类型:字符串必需:是sourceHash.
msi文件的SHA256哈希值.
类型:字符串必需:否aws:cloudWatch将数据从Windows服务器导出到AmazonCloudWatch或AmazonCloudWatchLogs并使用AmazonCloudWatch指标进行监控.
此插件仅在MicrosoftWindows操作系统中运行.
有关配置CloudWatch与AmazonEC2的集成的更多信息,请参阅向AmazonCloudWatch发送日志、事件和性能计数器.
有关文档的更多信息,请参阅SystemsManager文档(p.
39).
您可以导出并监控以下数据类型:ApplicationEventLog将应用程序事件日志数据发送到CloudWatchLogs.
CustomLogs将任何基于文本的日志文件发送到CloudWatch日志.
CloudWatch插件会为日志文件创建指纹.
系统随后将数据偏移与每个指纹进行关联.
该插件会在出现更改时上传文件,记录偏移,然后将该偏移与指60AmazonEC2SystemsManager用户指南aws:cloudWatch纹关联.
此方法用于避免出现这种情况:用户启用插件后,将服务与包含大量文件的目录关联,然后系统会上传所有文件.
Warning请注意,如果应用程序在轮询期间截断或尝试清除日志,为LogDirectoryPath指定的任何日志都可能丢失条目.
例如,如果您要限制日志文件大小,请在达到此限制时创建新的日志文件,然后继续将数据写入新文件.
ETW将Windows事件跟踪(ETW)数据发送到CloudWatchLogs.
不支持MicrosoftWindowsServer2003.
IIS将IIS日志数据发送到CloudWatchLogs.
PerformanceCounter将Windows性能计数器发送到CloudWatch.
您可以选择不同类别作为指标上传到CloudWatch.
对于要上传的每个性能计数器,创建具有唯一ID的PerformanceCounter部分(例如"PerformanceCounter2"、"PerformanceCounter3"等),然后配置其属性.
Note如果SSM代理或CloudWatch插件已停止,则性能计数器数据不再记录到CloudWatch中,此行为不同于自定义日志或Windows事件日志.
自定义日志和Windows事件日志会保留性能计数器数据,并在SSM代理或CloudWatch插件可用时将其上传到CloudWatch.
SecurityEventLog将安全事件日志数据发送到CloudWatchLogs.
SystemEventLog将系统事件日志数据发送到CloudWatchLogs.
可为数据定义以下目标:CloudWatch发送性能计数器指标数据时所在的目标.
可添加具有唯一ID的其他部分(例如,"CloudWatch2"和"CloudWatch3"等),并为每个新ID指定一个不同的区域以将相同数据发送到不同位置.
CloudWatchLogs发送日志数据时所在的目标.
可添加具有唯一ID的其他部分(例如,"CloudWatchLogs2"和"CloudWatchLogs3"等),并为每个新ID指定一个不同的区域以将相同数据发送到不同位置.
语法"runtimeConfig":{"aws:cloudWatch":{"settings":{"startType":"{{status}}"},"properties":"{{properties}}"}}61AmazonEC2SystemsManager用户指南aws:cloudWatch设置和属性AccessKey您的访问密钥ID.
如果未使用IAM角色启动实例,则必须指定此属性.
此属性不能与SSM一起使用.
类型:字符串必需:否CategoryName性能监视器提供的性能计数器类别.
类型:字符串必需:是CounterName性能监视器提供的性能计数器名称.
类型:字符串必需:是CultureName记录该时间戳的区域位置.
如果CultureName为空,则它默认为您Windows实例当前所使用的相同区域位置.
类型:字符串有效值:有关支持的值的列表,请参阅Microsoft网站上的国家语言支持(NLS).
请注意,不支持div、div-MV、hu和hu-HU值.
必需:否DimensionNameAmazonCloudWatch指标的维度.
如果您要指定DimensionName,则必须指定DimensionValue.
这些参数在列出指标时提供另一个视图.
您还可以对多个指标使用同一个维度,以便可以查看属于特定维度的所有指标.
类型:字符串必需:否DimensionValueAmazonCloudWatch指标的维度值.
类型:字符串必需:否编码要使用的文件编码(例如UTF-8).
使用编码名称,而不是显示名称.
类型:字符串有效值:有关支持的值的列表,请参阅MSDN库中的Encoding类主题.
必需:是62AmazonEC2SystemsManager用户指南aws:cloudWatch筛选日志名称的前缀.
将此参数留空以监控所有文件.
类型:字符串有效值:有关支持的值的列表,请参阅MSDN库中的FileSystemWatcherFilter属性主题.
必需:否Flows要上传的每个数据类型以及数据的目标(CloudWatch或CloudWatchLogs).
例如,要将在"Id":"PerformanceCounter"下定义的性能计数器发送到在"Id":"CloudWatch"下定义的CloudWatch目标,请输入"PerformanceCounter,CloudWatch".
同样,要将自定义日志、ETW日志和系统日志发送到在"Id":"ETW"下定义的CloudWatchLogs目标,请输入"(ETW),CloudWatchLogs".
此外,还可以将相同性能计数器或日志文件发送到多个目标.
例如,要将应用程序日志发送到在"Id":"CloudWatchLogs"和"Id":"CloudWatchLogs2"下定义的两个不同目标,请输入"ApplicationEventLog,(CloudWatchLogs,CloudWatchLogs2)".
类型:字符串有效值(源):ApplicationEventLog|CustomLogs|ETW|PerformanceCounter|SystemEventLog|SecurityEventLog有效值(目标):CloudWatch|CloudWatchLogs|CloudWatchn|CloudWatchLogsn必需:是FullName组件的完整名称.
类型:字符串必需:是Id标识数据源或目标.
此标识符在配置文件中必须是唯一的.
类型:字符串必需:是InstanceName性能计数器实例的名称.
请勿使用星号(*)标识所有实例,因为每个性能计数器组件仅支持一个指标.
不过可以使用_Total.
类型:字符串必需:是级别发送到AmazonCloudWatch的消息的类型.
类型:字符串有效值:1–仅上传错误消息.
2–仅上传警告消息.
4–仅上传信息消息.
63AmazonEC2SystemsManager用户指南aws:cloudWatch请注意,您可以将这些值加在一起以包含多种类型的消息.
例如,3表示将包含错误消息(1)和警告消息(2).
值7表示将包含错误消息(1)、警告消息(2)和信息消息(4).
必需:是Note应将Windows安全日志的级别设置为7.
LineCount标识日志文件的标头中的行数.
例如,IIS日志文件拥有几乎相同的标头.
您可以输入3,系统会读取日志文件标头的前三行以进行识别.
在IIS日志文件中,第三行是日期和时间戳,各日志文件的日期和时间戳互不相同.
类型:整数必需:否LogDirectoryPath对于CustomLogs,这是日志在AmazonEC2实例上的存储路径.
对于IIS日志,这是为单个站点存储IIS日志的文件夹(例如C:\\inetpub\\logs\\LogFiles\\W3SVCn).
对于IIS日志,仅支持W3C日志格式.
不支持IIS、NCSA和自定义格式.
类型:字符串必需:是LogGroup日志组的名称.
此名称会显示在CloudWatch控制台的LogGroups屏幕上.
类型:字符串必需:是LogName日志文件的名称.
1.
要查找日志的名称,请在事件查看器的导航窗格中,单击ApplicationsandServicesLogs(应用程序和服务日志).
2.
在日志列表中,右键单击要上传的日志(例如"Microsoft>Windows>备份>可操作"),然后单击创建自定义视图.
3.
在CreateCustomView(创建自定义视图)对话框中,单击XML选项卡.
LogName位于标签中(例如Microsoft-Windows-Backup).
将此文本复制到LogName参数.
类型:字符串有效值:Application|Security|System|Microsoft-Windows-WinINet/Analytic必需:是LogStream目标日志流.
如果使用默认值{instance_id},则将该实例的实例ID用作日志流名称.
类型:字符串有效值:{instance_id}|{hostname}|{ip_address}如果输入不存在的日志流名称,则CloudWatchLogs会自动创建该名称.
您可以使用文字字符串或预定义的变量({instance_id}、{hostname}、{ip_address}),或所有这三个变量的组合来定义日志流名称.

64AmazonEC2SystemsManager用户指南aws:cloudWatch此参数中指定的日志流名称会显示在CloudWatch控制台中的LogGroups>Streamsfor屏幕上.
必需:是MetricName您希望性能数据在其下显示的CloudWatch指标.
类型:字符串必需:是NameSpace您希望将写入性能计数器数据的指标命名空间.
类型:字符串必需:是PollInterval必须在多少秒之后才能上传新性能计数器和日志数据.
类型:整数有效值:将其设置为5秒或5秒以上.
建议设置为十五秒(00:00:15).
必需:是区域要发送日志数据的区域.
虽然可以将性能计数器发送到与日志数据发送目标不同的区域,但是我们建议您将此参数设置为运行实例的区域.
类型:字符串有效值:us-east-1|us-west-2|eu-west-1|eu-central-1|ap-southeast-1|ap-southeast-2|ap-northeast-1必需:是SecretKey您的秘密访问密钥.
如果未使用IAM角色启动实例,则必须指定此属性.
类型:字符串必需:否startType在实例上启用或禁用CloudWatch.
类型:字符串有效值:Enabled|Disabled必需:是TimestampFormat要使用的时间戳格式.
有关支持的值的列表,请参阅MSDN库中的自定义日期和时间格式字符串.
类型:字符串65AmazonEC2SystemsManager用户指南aws:configureDocker必需:是TimeZoneKind在日志时间戳中不包含时区信息时提供时区信息.
如果此参数留空且时间戳不包括时区信息,则CloudWatchLogs默认为本地时区.
如果时间戳已包含时区信息,则忽略此参数.
类型:字符串有效值:Local|UTC必需:否单位适当的指标计量单位.
类型:字符串有效值:秒|微秒|毫秒|字节|千字节|兆字节|千兆字节|太兆字节|位|千位|兆位|千兆位|太兆位|百分比|计数|字节/秒|千字节/秒|兆字节/秒|千兆字节/秒|太兆字节/秒|位/秒|千位/秒|兆位/秒|千兆位/秒|太兆位/秒|计数/秒|无必需:是aws:configureDocker(2.
0版或更高版本架构)将实例配置为使用容器和Docker.
此插件仅在MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"mainSteps":[{"action":"aws:configureDocker","name":"ConfigureDocker","inputs":{"action":"{{action}}"}}]输入action要执行的操作类型.
类型:Enum有效值:Install|Uninstall必需:是aws:configurePackage(2.
0版或更高版本架构)安装或卸载AWS程序包.
此插件仅在Linux和MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
66AmazonEC2SystemsManager用户指南aws:domainJoin语法"mainSteps":[{"action":"aws:configurePackage","name":"configurePackage","inputs":{"name":"{{name}}","action":"{{action}}","version":"{{version}}"}}]输入name要安装或卸载的AWS程序包的名称.
类型:字符串必需:是action安装或卸载程序包.
类型:Enum有效值:Install|Uninstall必需:是version要卸载或安装的特定版本的程序包.
如果要安装,系统默认安装最新发布的版本.
如果要卸载,系统默认卸载当前安装的版本.
如果没有找到已安装的版本,则会下载最新发布的版本,然后运行卸载操作.

类型:字符串必需:否aws:domainJoin将AmazonEC2实例加入域.
此插件仅在MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"runtimeConfig":{"aws:domainJoin":{"properties":{"directoryId":"{{directoryId}}","directoryName":"{{directoryName}}","directoryOU":"{{directoryOU}}","dnsIpAddresses":"{{dnsIpAddresses}}"}}67AmazonEC2SystemsManager用户指南aws:downloadContent属性directoryId目录的ID.
类型:字符串必需:是示例:"directoryId":"d-1234567890"directoryName域的名称.
类型:字符串必需:是示例:"directoryName":"example.
com"directoryOU组织部门(OU).
类型:字符串必需:否示例:"directoryOU":"OU=test,DC=example,DC=com"dnsIpAddressesDNS服务器的IP地址.
类型:数组必需:否示例:"dnsIpAddresses":["198.
51.
100.
1","198.
51.
100.
2"]示例有关示例,请参阅AmazonEC2UserGuideforWindowsInstances中的将Windows实例加入AWSDirectoryService域.
aws:downloadContent(2.
0版或更高版本架构)从远程位置下载SSM文档和脚本.
此插件在Linux和Windows操作系统中受支持.
语法"mainSteps":[{"action":"aws:downloadContent","name":"downloadContent","inputs":{"sourceType":"{{sourceType}}",68AmazonEC2SystemsManager用户指南aws:downloadContent"sourceInfo":"{{sourceInfo}}","destinationPath":"{{destinationPath}}"}}输入sourceType下载源.
SystemsManager目前支持通过以下类型的源下载脚本和SSM文档:GitHub、S3和SSMDocument.
类型:字符串必需:是sourceInfo从所需源检索内容所需的信息.
类型:StringMap必需:是如果sourceType为GitHub,指定以下内容:owner:存储库所有者.
repository:存储库的名称.
path:您要下载的文件或目录所在的路径.
getOptions:从不同的分支或不同提交检索内容的附加选项.
此参数采用以下格式:branch:branch_name默认为master.
commitID:commitID默认为head.
tokenInfo:存储访问令牌信息的SystemsManager参数(SecureString参数).
Examplesyntax:{"owner":"TestUser","repository":"GitHubTest","path":"scripts/python/test-script","getOptions":"branch:master","tokenInfo":"{{ssm-secure:secure-string-token}}"}如果sourceType为S3,指定以下内容:path:要从AmazonS3下载的文件或目录的URL.
Examplesyntax:{"path":"https://s3.
amazonaws.
com/aws-executecommand-test/powershell/helloPowershell.
ps1"}如果sourceType为SSMDocument,指定以下内容之一:name:采用以下格式的文档的名称和版本:name:version.
版本为可选项.
69AmazonEC2SystemsManager用户指南aws:psModuleExamplesyntax:{"name":"Example-RunPowerShellScript:3"}name:采用以下格式的文档的ARN:arn:aws:ssm:region:instance_id:document/document_name{"name":"arn:aws:ssm:us-east-1:i-1234567890:document/MySharedDoc"}aws:psModule在EC2实例上安装PowerShell模块.
此插件仅在MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"runtimeConfig":{"aws:psModule":{"properties":[{"id":"0.
aws:psModule","runCommand":"{{commands}}","source":"{{source}}","sourceHash":"{{sourceHash}}","workingDirectory":"{{workingDirectory}}","timeoutSeconds":"{{executionTimeout}}"}]属性runCommand安装模块之后运行的PowerShell命令.
类型:字符串或数组必需:否source访问实例上应用程序.
zip文件的URL或本地路径.
类型:字符串必需:否sourceHash.
zip文件的SHA256哈希值.
类型:字符串必需:否70AmazonEC2SystemsManager用户指南aws:refreshAssociationtimeoutSeconds在被视为已失败前命令将运行的时间(以秒为单位).
类型:字符串必需:否workingDirectory实例上工作目录的路径.
类型:字符串必需:否aws:refreshAssociation(2.
0版或更高版本架构)按需刷新(强制应用)关联.
此操作将根据与目标绑定的所选关联或所有关联的定义更改系统状态.
此插件仅在Linux和MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"action":"aws:refreshAssociation","name":"refreshAssociation","inputs":{"associationIds":"{{associationIds}}"}输入associationIds关联ID的列表.
如果为空,则应用与指定目标绑定的所有关联.
类型:StringList必需:否aws:runDockerAction(2.
0版或更高版本架构)在容器中运行Docker操作.
此插件仅在Linux和MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"mainSteps":[{"action":"aws:runDockerAction","name":"RunDockerAction","inputs":{"action":"{{action}}","container":"{{container}}","image":"{{image}}","memory":"{{memory}}",71AmazonEC2SystemsManager用户指南aws:runDockerAction"cpuShares":"{{cpuShares}}","volume":"{{volume}}","cmd":"{{cmd}}","env":"{{env}}","user":"{{user}}","publish":"{{publish}}"}输入action要执行的操作类型.
类型:字符串必需:是containerDocker容器ID.
类型:字符串必需:否imageDocker映像名称.
类型:字符串必需:否cmd容器命令.
类型:字符串必需:否memory容器内存限制.
类型:字符串必需:否cpuShares容器CPU份额(相对权重).
类型:字符串必需:否volume容器卷挂载.
类型:StringList必需:否72AmazonEC2SystemsManager用户指南aws:runDocumentenv容器的环境变量.
类型:字符串必需:否user容器的用户名.
类型:字符串必需:否publish容器已发布端口.
类型:字符串必需:否aws:runDocument(2.
0版或更高版本架构)执行存储在SystemsManager或本地共享存储中的SSM文档.
您可以将此插件与aws:downloadContent(p.
68)插件配合使用,以将远程位置的SSM文档下载到本地共享存储,然后运行该文档.
此插件在Linux和Windows操作系统中受支持.
语法"mainSteps":[{"action":"aws:runDocument","name":"runDocument","inputs":{"documentType":"{{documentType}}","documentPath":"{{documentPath}}","documentParameters":"{{documentParameters}}"}}输入documentType要运行的文档类型.
您可以运行本地文档(LocalPath)或存储在SystemsManager(SSMDocument)中的文档.
类型:字符串必需:是documentPath文档的路径.
如果documentType是LocalPath,则指定本地共享存储上文档的路径.
如果documentType是SSMDocument,则指定文档的名称.
类型:字符串73AmazonEC2SystemsManager用户指南aws:runPowerShellScript必需:否documentParameters文档的参数.
类型:StringMap必需:否aws:runPowerShellScript运行PowerShell脚本或者指定要运行的脚本的路径.
此插件仅在MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"runtimeConfig":{"aws:runPowerShellScript":{"properties":[{"id":"0.
aws:runPowerShellScript","runCommand":"{{commands}}","workingDirectory":"{{workingDirectory}}","timeoutSeconds":"{{executionTimeout}}"}]属性runCommand指定要运行的命令或实例上现有脚本的路径.
类型:字符串或数组必需:是timeoutSeconds在被视为已失败前命令将运行的时间(以秒为单位).
类型:字符串必需:否workingDirectory实例上工作目录的路径.
类型:字符串必需:否aws:runShellScript运行Linuxshell脚本或者指定要运行的脚本的路径.
此插件仅在Linux操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
74AmazonEC2SystemsManager用户指南aws:softwareInventory语法"runtimeConfig":{"aws:runShellScript":{"properties":[{"id":"0.
aws:runShellScript","runCommand":"{{commands}}","workingDirectory":"{{workingDirectory}}","timeoutSeconds":"{{executionTimeout}}"}]}属性runCommand指定要运行的命令或实例上现有脚本的路径.
类型:字符串或数组必需:是timeoutSeconds在被视为已失败前命令将运行的时间(以秒为单位).
类型:字符串必需:否workingDirectory实例上工作目录的路径.
类型:字符串必需:否aws:softwareInventory(2.
0版或更高版本架构)从实例中收集应用程序库存、AWS组件、网络配置、Windows更新和自定义库存.
此插件仅在Linux和MicrosoftWindows操作系统中运行.
有关更多信息,请参阅SystemsManager文档(p.
39).
语法"mainSteps":[{"action":"aws:softwareInventory","name":"collectSoftwareInventoryItems","inputs":{"applications":"{{applications}}","awsComponents":"{{awsComponents}}","networkConfig":"{{networkConfig}}","windowsUpdates":"{{windowsUpdates}}","customInventory":"{{customInventory}}"75AmazonEC2SystemsManager用户指南aws:updateAgent}}输入applications收集已安装的应用程序的数据.
类型:字符串必需:否awsComponents收集诸如amazon-ssm-agent之类的AWS组件的数据.
类型:字符串必需:否networkConfig收集网络配置的数据.
类型:字符串必需:否windowsUpdates收集所有Windows更新的数据.
类型:字符串必需:否customInventory收集自定义库存的数据.
类型:字符串必需:否aws:updateAgent将EC2Config服务更新到最新版本或指定较旧版本.
此插件仅在MicrosoftWindows操作系统中运行.
有关EC2Config服务的更多信息,请参阅使用EC2Config服务配置Windows实例.
有关文档的更多信息,请参阅SystemsManager文档(p.
39).
语法"runtimeConfig":{"aws:updateAgent":{"properties":{"agentName":"Ec2Config","source":"https://s3.
Region.
amazonaws.
com/aws-ssm-Region/manifest.
json","allowDowngrade":"{{allowDowngrade}}","targetVersion":"{{version}}"76AmazonEC2SystemsManager用户指南aws:updateSSMAgent}}}属性agentNameEC2Config.
这是运行EC2Config服务的代理的名称.
类型:字符串必需:是allowDowngrade允许将EC2Config服务降级为早期版本.
如果设置为False,则只能将该服务升级为更新的版本(默认).
如果设置为True,则指定早期版本.
类型:布尔值必需:否sourceSystemsManager复制要安装的EC2Config版本的位置.
您无法更改此位置.
类型:字符串必需:是targetVersion要安装的特定版本的EC2Config服务.
如果未指定,服务将更新到最新版本.
类型:字符串必需:否aws:updateSSMAgent将SSM代理更新到最新版本或指定较旧版本.
此插件仅在Linux和Windows操作系统中运行.
有关更多信息,请参阅安装和配置SSM代理(p.
11).
有关文档的更多信息,请参阅SystemsManager文档(p.
39).
语法"runtimeConfig":{"aws:updateSsmAgent":{"properties":[{"agentName":"amazon-ssm-agent","source":"https://s3.
Region.
amazonaws.
com/aws-ssm-Region/manifest.
json","allowDowngrade":"{{allowDowngrade}}","targetVersion":"{{version}}"}]}}77AmazonEC2SystemsManager用户指南aws:updateSSMAgent属性agentNameamazon-ssm-agent.
这是在实例上处理请求并执行命令的SystemsManager代理的名称.
类型:字符串必需:是allowDowngrade允许将SSM代理降级为早期版本.
如果设置为False,则只能将该代理升级为更新的版本(默认).
如果设置为True,则指定早期版本.
类型:布尔值必需:否sourceSystemsManager复制要安装的SSM代理版本的位置.
您无法更改此位置.
类型:字符串必需:是targetVersion要安装的特定版本的SSM代理.
如果未指定,代理将更新到最新版本.
类型:字符串必需:否78AmazonEC2SystemsManager用户指南ControllingAccessSystemsManagerMaintenanceWindow借助SystemsManagerMaintenanceWindow,您可以制定计划,规定何时对实例执行具有潜在破坏性的操作,例如修补操作系统(OS)、更新驱动程序或安装软件.
每一个MaintenanceWindow都有一个计划、一段持续时间、一组注册目标和一组注册任务.
利用MaintenanceWindow,您可以执行类似于下面的任务:使用SystemsManagerRunCommand任务来安装应用程序、更新补丁、安装或更新SSM代理或者执行PowerShell命令和LinuxShell脚本.
使用SystemsManagerAutomation来构建Amazon系统映像(AMI)、引导软件和配置实例.
执行触发其他操作(例如扫描您的实例是否有补丁更新)的AWSLambda函数.
运行AWSStepFunction状态机以执行从ElasticLoadBalancing环境中删除实例、修补实例,然后将实例添加回ElasticLoadBalancing环境等任务.
内容控制对MaintenanceWindow的访问权限(p.
79)使用MaintenanceWindow(p.
84)SystemsManagerMaintenanceWindow演练(p.
89)控制对MaintenanceWindow的访问权限使用以下方法之一,通过配置安全角色和权限来控制对MaintenanceWindow的访问.
主题使用AWS控制台控制对MaintenanceWindow的访问(p.
79)使用AWSCLI控制对MaintenanceWindow的访问(p.
81)使用ToolsforWindowsPowerShell控制对MaintenanceWindow的访问(p.
83)使用AWS控制台控制对MaintenanceWindow的访问以下过程介绍如何使用AmazonEC2控制台来创建MaintenanceWindow所需的角色和权限.
79AmazonEC2SystemsManager用户指南使用AWS控制台为SystemsManager创建IAM角色使用以下过程创建角色,以便SystemsManager可以在MaintenanceWindow中代表您执行任务.
为MaintenanceWindow创建IAM角色1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中选择Roles,然后选择CreateNewRole.
3.
在步骤1:选择角色类型中,选择AmazonEC2.
系统会跳过Step2:EstablishTrust,因为这是一个托管策略.
4.
在Step3:AttachPolicy中,请选择AmazonSSMMaintenanceWindowRole,然后选择NextStep.
5.
在Step4:Setrolenameandreview中,输入用于将此角色标识为MaintenanceWindow角色的名称.
6.
选择CreateRole.
系统将让您返回到Roles页.
7.
找到刚刚创建的角色,然后双击它.
8.
选择TrustRelationships选项卡,然后选择EditTrustRelationship.
9.
删除当前策略,然后将下面的策略复制并粘贴到PolicyDocument字段中:{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"Service":["ec2.
amazonaws.
com","ssm.
amazonaws.
com"]},"Action":"sts:AssumeRole"}]}10.
选择UpdateTrustPolicy.
11.
复制或记下该角色名称和RoleARN.
当您创建MaintenanceWindow时,将要指定此信息.
将IAMPassRole策略分配给IAM用户账户在向MaintenanceWindow注册任务时,需要指定在上一步中创建的角色.
这是代表您运行任务时服务要代入的角色.
要注册任务,您必须将IAMPassRole策略分配给IAM用户账户.
以下过程中的策略提供了向MaintenanceWindow注册任务所需的最低权限.
将IAMPassRole策略分配给IAM用户账户1.
在IAM控制台导航窗格中,选择Users,然后选择您要更新的用户账户.
2.
在策略列表中,验证是否已列出AmazonSSMFullAccess策略或是否存在可向IAM用户授予调用SystemsManagerAPI的权限的类似策略.
3.
选择添加内联策略.
4.
在SetPermissions页面上,选择PolicyGenerator,然后选择Select.
5.
验证Effect是否已设置为Allow.
6.
从AWSServices中选择AWSIdentityandAccessManagement.
7.
从操作中,选择PassRole.
80AmazonEC2SystemsManager用户指南使用CLI8.
在Amazon资源名称(ARN)字段中,粘贴您在之前步骤中所创建的角色ARN.
9.
选择AddStatement,然后选择NextStep.
10.
在ReviewPolicy页面上,选择ApplyPolicy.
使用AWSCLI控制对MaintenanceWindow的访问通过以下过程使用AWSCLI创建MaintenanceWindow的IAM角色.
为MaintenanceWindow创建IAM角色1.
将以下信任策略复制并粘贴到文本文件中.
使用以下名称和文件扩展名保存文件:mw-role-trust-policy.
json.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["ssm.
amazonaws.
com","ec2.
amazonaws.
com"]},"Action":"sts:AssumeRole"}]}2.
打开AWSCLI并执行以下命令以创建名为mw-task-role的MaintenanceWindow角色.
此命令将上一步中创建的策略分配给该角色.
awsiamcreate-role--role-namemw-task-role--assume-role-policy-documentfile://mw-role-trust-policy.
json系统将返回类似于以下内容的信息.
{"Role":{"AssumeRolePolicyDocument":{"Version":"2012-10-17","Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":["ssm.
amazonaws.
com","ec2.
amazonaws.
com"]}}]},"RoleId":"AROAIIZKPBKS2LEXAMPLE","CreateDate":"2017-04-04T03:40:17.
373Z","RoleName":"mw-task-role","Path":"/","Arn":"arn:aws:iam::123456789012:role/mw-task-role"81AmazonEC2SystemsManager用户指南使用CLI}}Note记录RoleName和Arn.
在您创建MaintenanceWindow时,将指定这些内容.
3.
执行以下命令,将AmazonSSMMaintenanceWindowRole管理的策略附加到在步骤2中创建的角色.
awsiamattach-role-policy--role-namemw-task-role--policy-arnarn:aws:iam::aws:policy/service-role/AmazonSSMMaintenanceWindowRole使用AWSCLI将IAMPassRole策略分配给IAM用户账户在向MaintenanceWindow注册任务时,需要指定在上一步中创建的角色.
这是代表您运行任务时服务要代入的角色.
要注册任务,您必须将IAMPassRole策略分配给IAM用户账户.
以下过程中的策略提供了向MaintenanceWindow注册任务所需的最低权限.
将IAMPassRole策略分配给IAM用户账户1.
将以下IAM策略复制并粘贴到文本编辑器中,并使用.
json文件扩展名保存文件.
{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1491345526000","Effect":"Allow","Action":["iam:GetRole","iam:PassRole","ssm:RegisterTaskWithMaintenanceWindow"],"Resource":["*"]}]}2.
打开AWSCLI.
3.
执行下面的命令.
对于user-name,指定将向MaintenanceWindow分配任务的IAM用户.
对于policy-document,指定您在步骤1中保存的文件的路径.
awsiamput-user-policy--user-namenameofuser--policy-nameanameforthepolicy--policy-documentpathtodocument,forexample:file://C:\Temp\passrole.
jsonNote如果您计划使用AmazonEC2控制台注册MaintenanceWindow的任务,则还必须将AmazonSSMReadOnlyAccess策略分配给您的用户账户.
执行以下命令将此策略分配给您的账户.
awsiamattach-user-policy--policy-arnarn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess--user-nameIAMaccountname4.
执行以下命令验证策略是否已分配给该用户.
82AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShellawsiamlist-user-policies--user-namenameofuser使用ToolsforWindowsPowerShell控制对MaintenanceWindow的访问通过以下过程使用ToolsforWindowsPowerShell创建MaintenanceWindow的IAM角色.
为MaintenanceWindow创建IAM角色1.
将以下信任策略复制并粘贴到文本文件中.
使用以下名称和文件扩展名保存文件:mw-role-trust-policy.
json.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["ssm.
amazonaws.
com","ec2.
amazonaws.
com"]},"Action":"sts:AssumeRole"}]}2.
打开ToolsforWindowsPowerShell并执行以下命令以创建名为mw-task-role的角色.
该角色使用前一步中创建的策略.
New-IAMRole-RoleName"mw-task-role"-AssumeRolePolicyDocument(Get-Content-raw.
\mw-role-trust-policy.
json)系统将返回类似于以下内容的信息.
Arn:arn:aws:iam::123456789012:role/mw-task-roleAssumeRolePolicyDocument:ExampleDoc12345678CreateDate:4/4/201711:24:43Path:/RoleId:AROAIIZKPBKS2LEXAMPLERoleName:mw-task-role3.
执行以下命令将AmazonSSMMaintenanceWindowRole管理的策略附加到上一步中创建的角色.
Register-IAMRolePolicy-RoleNamemw-task-role-PolicyArnarn:aws:iam::aws:policy/service-role/AmazonSSMMaintenanceWindowRole83AmazonEC2SystemsManager用户指南使用MaintenanceWindow使用ToolsforWindowsPowerShell将IAMPassRole策略分配给IAM用户账户在向MaintenanceWindow注册任务时,需要指定在上一步中创建的角色.
这是代表您运行任务时服务要代入的角色.
要注册任务,您必须将IAMPassRole策略分配给IAM用户账户.
以下过程中的策略提供了向MaintenanceWindow注册任务所需的最低权限.
将IAMPassRole策略分配给IAM用户账户1.
将以下IAM策略复制并粘贴到文本编辑器中,并使用.
json文件扩展名保存文件.
{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1491345526000","Effect":"Allow","Action":["iam:GetRole","iam:PassRole","ssm:RegisterTaskWithMaintenanceWindow"],"Resource":["*"]}]}2.
打开ToolsforWindowsPowerShell.
3.
执行下面的命令.
对于user-name,指定将向MaintenanceWindow分配任务的IAM用户.
对于policy-document,指定您在步骤1中保存的文件的路径.
Write-IAMUserPolicy-UserNamenameofIAMuser-PolicyDocument(Get-Content-rawpathtodocument,forexample:C:\temp\passrole-policy.
json)-PolicyNameanameforthepolicyNote如果您计划使用AmazonEC2控制台注册MaintenanceWindow的任务,则还必须将AmazonSSMReadOnlyAccess策略分配给您的用户账户.
执行以下命令将此策略分配给您的账户.
Register-IAMUserPolicy-UserNameIAMaccountname-PolicyArnarn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess4.
执行以下命令验证策略是否已分配给该用户.
Get-IAMUserPolicies-UserNamenameofuser使用MaintenanceWindow本部分介绍如何创建、配置以及更新或删除MaintenanceWindow.
本部分还介绍如何针对MaintenanceWindow的目标和任务执行这些相同的任务.
84AmazonEC2SystemsManager用户指南创建MaintenanceWindowImportant我们建议您一开始在测试环境中创建和配置MaintenanceWindow.
开始前的准备工作在创建MaintenanceWindow之前,您必须配置对MaintenanceWindow的访问权限.
有关更多信息,请参阅控制对MaintenanceWindow的访问权限(p.
79).
主题创建MaintenanceWindow(p.
85)向MaintenanceWindow分配目标(p.
86)向MaintenanceWindow分配任务(p.
86)更新或删除MaintenanceWindow(p.
87)创建MaintenanceWindow要创建MaintenanceWindow,您必须完成以下任务:创建时段,并定义其计划和持续时间.
为时段分配目标.
分配要在时段内执行的任务.
当您完成这些任务之后,MaintenanceWindow将按照您定义的计划运行,并对您指定的目标执行任务.
每完成一项任务,SystemsManager都会记录执行详情.
Note您可以对目标执行以下类型的任务:通过使用SystemsManagerRunCommand的命令使用SystemsManagerAutomation执行自动化工作流程使用AWSLambda执行函数使用AWSStepFunctions执行状态机Lambda函数和StepFunctions当前在AmazonEC2控制台中不受支持.
要注册这些类型的任务,则必须使用AWSCLI.
有关如何使用AWSCLI创建、配置和更新MaintenanceWindow的示例,请参阅SystemsManagerMaintenanceWindow演练(p.
89).
创建MaintenanceWindow1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择MaintenanceWindows.
2.
选择CreateaMaintenanceWindow.
3.
在Name字段中,键入描述性名称,以帮助您将此MaintenanceWindow标识为测试MaintenanceWindow.
4.
在Description字段中输入描述.
5.
如果要允许MaintenanceWindow任务在托管实例上执行,那么即使没有将这些实例注册为目标,也应选择Allowunregisteredtargets.
如果选择了此选项,您在将任务注册到MaintenanceWindow时就可以选择已注销实例(按实例ID).
85AmazonEC2SystemsManager用户指南向MaintenanceWindow分配目标如果未选择此选项,您在将任务注册到MaintenanceWindow时就必须选择之前注册的目标.
6.
使用其中一个计划选项为MaintenanceWindow指定计划.
7.
在Duration字段中,键入MaintenanceWindow应该运行的小时数.
8.
在Stopinitiatingtasks字段中,键入系统应该在MaintenanceWindow结束前几小时停止计划要运行的新任务.
9.
选择Createmaintenancewindow.
系统将让您返回到MaintenanceWindow页面.
您刚创建的MaintenanceWindow的状态是Enabled.
向MaintenanceWindow分配目标创建MaintenanceWindow后,分配将要运行任务的目标.
向MaintenanceWindow分配目标1.
在MaintenanceWindow列表中,选择您刚创建的MaintenanceWindow.
2.
选择Actions,然后选择Registertargets.
3.
在TargetName字段中,键入目标的名称.
4.
在Description字段中,键入描述.
5.
在所有者信息字段中,指定您的名字或工作别名.
在此MaintenanceWindow中,对这些目标运行任务时引发的任何CloudWatchEvents中都包含所有者信息.
6.
在Selecttargetsby部分中,选择SpecifyingTags以使用您之前分配给实例的AmazonEC2标签将实例设为目标.
选择ManuallySelectingInstances以根据各个实例的实例ID选择这些实例.
Note如果您没有看到想设为目标的实例,请验证是否为SystemsManager配置了这些实例.
有关更多信息,请参阅设置SystemsManager(p.
4).
7.
选择注册目标.
如果您想将更多目标分配到此时段,请选择Targets选项卡,然后选择Registernewtargets.
利用此选项,您可以选择不同的目标设定方式.
例如,如果您之前按实例ID将实例设为目标,则可以注册新目标并通过指定AmazonEC2标签将实例设为目标.
向MaintenanceWindow分配任务分配目标后,你需分配在时段中执行的任务.
向MaintenanceWindow分配任务1.
在MaintenanceWindow列表中,选择您刚创建的MaintenanceWindow.
2.
选择Actions,然后选择Registerruncommandtask以使用SSM文档对目标执行您选择的命令,或选择Registerautomationtask以使用SSMAutomation文档对目标执行您选择的自动化工作流程.
有关如何使用AWSCLI创建Lambda和StepFunctions任务的示例,请参阅SystemsManagerMaintenanceWindow演练(p.
89).
3.
在TaskName字段中,键入任务名称.
4.
在Description字段中,键入描述.
5.
从Document列表中,选择定义要运行的任务的SSMCommand或Automation文档.
6.
在DocumentVersion列表(针对Automation任务)中,选择要使用的文档版本.
86AmazonEC2SystemsManager用户指南更新或删除MaintenanceWindow7.
在任务优先级字段中,为此任务指定优先级.
1表示最高优先级.
MaintenanceWindow中的任务按优先级顺序计划,具有相同优先级的任务则并行计划.
8.
在Targetby部分中,选择Selectingregisteredtargetgroups或Selectingunregisteredtargets,然后选择目标.
9.
在Parameters部分中,为文档指定参数.
对于Automation文档,系统将自动填充某些值.
您可以保留或更换这些值.
在Role字段中,指定MaintenanceWindowARN.
有关创建MaintenanceWindowARN的更多信息,请参阅控制对MaintenanceWindow的访问权限(p.
79).
借助Executeon字段,您可以指定多个目标,以便多个MaintenanceWindow任务可以在其中并发运行,也可以指定占目标总数的百分比.
当您使用标签将大量实例作为目标时,才需要使用此字段.

Stopafter字段可让您指定系统停止向新实例发送任务之前所允许的错误数.
10.
完成向导.
更新或删除MaintenanceWindow您可以更新或删除MaintenanceWindow,也可以更新或删除MaintenanceWindow的目标或任务.
如果要编辑MaintenanceWindow的详细信息,您可以更改计划、目标和任务.
您还可以指定时段、目标和任务的名称和描述,从而可以更好地理解它们的用途和更轻松地管理您的时段队列.

本部分介绍如何使用AmazonEC2控制台来更新或删除MaintenanceWindow、目标和任务.
有关如何使用AWSCLI执行此操作的示例,请参阅更新MaintenanceWindow(p.
96).
更新或删除MaintenanceWindow使用以下过程可更新或删除MaintenanceWindow.
如果您选择更新某个MaintenanceWindow,则可以更新名称、描述、计划以及该时段是否应允许已注销目标.
更新或删除MaintenanceWindow1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择MaintenanceWindows.
2.
选择要更新或删除的MaintenanceWindow.
3.
选择Actions,然后选择DeleteMaintenanceWindow或Editmaintenancewindow.
如果您选择删除MaintenanceWindow,系统将提示您确认操作.
如果您选择编辑MaintenanceWindow,则会显示Editmaintenancewindow页面.
4.
更改所需的值和选项,然后选择Editmaintenancewindow.
系统将让您返回到MaintenanceWindow页面.
更新或删除MaintenanceWindow的目标您可以更新或删除MaintenanceWindow的目标.
如果您选择更新MaintenanceWindow目标,则可以指定新的目标名称、描述和所有者.
您也可以选择不同的目标.
更新或删除MaintenanceWindow的目标1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择MaintenanceWindows.
2.
选择要更新的MaintenanceWindow.
3.
选择Targets选项卡.
87AmazonEC2SystemsManager用户指南更新或删除MaintenanceWindow4.
如果要删除目标,请选择Edit旁边的小X.
如果您希望系统在删除某个目标之前检查该目标是否被任何任务引用,请在Deregistertarget窗口中,将SafelyDeregisterTarget选项保持选中状态.
如果该目标被某个任务引用,系统将返回错误,但不会删除该目标.
如果您也希望系统即使在目标被某个任务引用的情况下仍然将其删除,请清除SafelyDeregisterTarget选项.
如果要编辑目标,请选择Edit.
5.
更改所需的值和选项,然后选择EditTarget.
系统将让您返回到MaintenanceWindow页面.
更新或删除MaintenanceWindow的任务您可以更新或删除MaintenanceWindow的任务.
如果您选择更新,则可以指定新的任务名称、描述和所有者.
对于RunCommand和Automation任务,可以为任务选择另一个SSM文档.
但是,您无法编辑任务以更改其类型.
例如,如果您创建了一个Automation任务,则无法编辑该任务并将其更改为RunCommand任务.
更新或删除MaintenanceWindow的任务1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择MaintenanceWindows.
2.
选择要更新的MaintenanceWindow.
3.
选择Tasks选项卡.
4.
如果要删除任务,请选择Edit旁边的小X.
如果要编辑任务,请选择Edit.
88AmazonEC2SystemsManager用户指南MaintenanceWindow演练5.
更改所需的值和选项,然后选择EditTask.
系统将让您返回到MaintenanceWindow页面.
SystemsManagerMaintenanceWindow演练使用以下演练,借助AWSCLI来创建、配置和更新MaintenanceWindow.
在尝试这些演练之前,必须先配置MaintenanceWindow角色和权限.
有关更多信息,请参阅控制对MaintenanceWindow的访问权限(p.
79).
主题创建和配置MaintenanceWindow(p.
89)更新MaintenanceWindow(p.
96)列出有关MaintenanceWindow的信息(p.
101)创建和配置MaintenanceWindow以下演练介绍如何使用AWSCLI来创建和配置MaintenanceWindow、目标和任务.
使用AWSCLI创建和配置MaintenanceWindow1.
将AWSCLI下载到本地计算机上.
2.
打开AWSCLI,然后执行以下命令,以创建从每个星期二下午4点开始运行4个小时、停止1小时且允许无关联目标的MaintenanceWindow.
有关创建schedule参数的cron表达式的更多信息,请参阅使用SystemsManager的Cron和Rate表达式(p.
299).
awsssmcreate-maintenance-window--name"My-First-Maintenance-Window"--schedule"cron(016*TUE*)"--duration4--cutoff1--allow-unassociated-targets系统将返回类似于以下内容的信息.
{"WindowId":"mw-ab12cd34ef56gh78"}3.
执行以下命令,列出您的AWS账户中所有的MaintenanceWindow.
awsssmdescribe-maintenance-windows系统将返回类似于以下内容的信息.
{"WindowIdentities":[{"Duration":4,"Cutoff":1,"WindowId":"mw-ab12cd34ef56gh78","Enabled":true,"Name":"My-First-Maintenance-Window"}]}4.
执行以下命令,将实例注册为此MaintenanceWindow的目标.
系统将返回MaintenanceWindow目标ID.
在后面的步骤中,您将使用此ID为此MaintenanceWindow注册任务.
89AmazonEC2SystemsManager用户指南创建和配置MaintenanceWindowawsssmregister-target-with-maintenance-window--window-id"mw-ab12cd34ef56gh78"--target"Key=InstanceIds,Values=ID"--owner-information"Singleinstance"--resource-type"INSTANCE"系统将返回类似于以下内容的信息.
{"WindowTargetId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"}您可以使用以下命令注册多个实例.
awsssmregister-target-with-maintenance-window--window-id"mw-ab12cd34ef56gh78"--targets"Key=InstanceIds,Values=ID1,ID2"--owner-information"Twoinstancesinalist"--resource-type"INSTANCE"您还可以使用EC2标签注册实例.
awsssmregister-target-with-maintenance-window--window-id"mw-ab12cd34ef56gh78"--targets"Key=tag:Environment,Values=Prod""Key=Role,Values=Web"--owner-information"ProductionWebServers"--resource-type"INSTANCE"5.
使用以下命令,显示MaintenanceWindow的目标.
awsssmdescribe-maintenance-window-targets--window-id"mw-ab12cd34ef56gh78"系统将返回类似于以下内容的信息.
{"Targets":[{"ResourceType":"INSTANCE","OwnerInformation":"Singleinstance","WindowId":"mw-ab12cd34ef56gh78","Targets":[{"Values":["i-11aa22bb33cc44dd5"],"Key":"InstanceIds"}],"WindowTargetId":"a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4"},{"ResourceType":"INSTANCE","OwnerInformation":"Twoinstancesinalist","WindowId":"mw-ab12cd34ef56gh78","Targets":[{"Values":["i-1a2b3c4d5e6f7g8h9","i-aa11bb22cc33dd44e"],"Key":"InstanceIds"}],"WindowTargetId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"90AmazonEC2SystemsManager用户指南创建和配置MaintenanceWindow},{"ResourceType":"INSTANCE","OwnerInformation":"ProductionWebServers","WindowId":"mw-ab12cd34ef56gh78","Targets":[{"Values":["Prod"],"Key":"tag:Environment"},{"Values":["Web"],"Key":"tag:Role"}],"WindowTargetId":"1111aaa-2222-3333-4444-1111aaa"}]}6.
执行以下命令,为MaintenanceWindow注册任务.
第一个示例中的任务使用SystemsManagerRunCommand借助AWS-RunShellScript文档执行df命令.
您也可以指定使用SystemsManagerAutomation、AWSLambda和AWSStepFunctions的任务,如其他示例所示.
注册任务时,可以指定以下参数:targets:指定Key=WindowTargetIds,Values=IDs以指定已注册到MaintenanceWindow的目标,或指定Key=InstanceIds,Values=IDs以将不确定是否已注册到MaintenanceWindow的各个实例设为目标.
task-arn:任务在执行期间使用的资源.
对于RUN_COMMAND和AUTOMATION任务类型,TaskArn是SSM文档名称或ARN.
对于LAMBDA任务,TaskArn是函数名称或ARN.
对于STEP_FUNCTION任务,TaskArn是状态机ARN.
window-id:目标MaintenanceWindow的ID.
task-type:任务的类型.
类型可以是以下项之一:RUN_COMMAND、AUTOMATION、LAMBDA或STEP_FUNCTION.
task-invocation-parameters:必需和可选参数.
下一个列表中介绍了一些常见task-invocation-parameters参数.
max-concurrency:(可选)允许同时执行命令的最大实例数.
您可以指定一个数字或一个百分比(如10或10%).
max-errors:(可选)允许的不会导致命令失败的最大错误数.
当命令失败的次数超出MaxErrors值一次,系统就会停止向其他目标发送命令.
您可以指定一个数字或一个百分比(如10或10%).
priority:MaintenanceWindow中的任务的优先级.
数字越小,优先级越高(例如,1表示最高优先级).
MaintenanceWindow中的任务按优先级顺序计划.
具有相同优先级的任务则并行计划.
适用于task-invocation-parameters的常见参数以下列表介绍了使用task-invocation-parameters时可以指定的一些常见参数.
您可使用{{PARAMETER_NAME}}语法指定这些参数,如本部分中的示例所示.
TARGET_ID:目标的ID.
如果目标类型为INSTANCE(目前唯一支持的类型),则目标ID为实例ID.
TARGET_TYPE:目标的类型.
目前仅支持INSTANCE.
WINDOW_ID:目标MaintenanceWindow的ID.
WINDOW_TASK_ID:正在执行的时段任务的ID.
91AmazonEC2SystemsManager用户指南创建和配置MaintenanceWindowWINDOW_TARGET_ID:包含目标的时段目标的ID(目标ID).
LOGGING_S3_BUCKET_NAME:AmazonS3存储桶名称(如果是使用logging-info参数配置的).
LOGGING_S3_KEY_PREFIX:AmazonS3密钥前缀(如果是使用logging-info参数配置的).
LOGGING_S3_REGION:AmazonS3区域(如果是使用logging-info参数配置的).
WINDOW_EXECUTION_ID:当前时段执行的ID.
TASK_EXECUTION_ID:当前任务执行的ID.
INVOCATION_ID:当前调用的ID.
awsssmregister-task-with-maintenance-window--window-idmw-ab12cd34ef56gh78--task-arn"AWS-RunShellScript"--targets"Key=InstanceIds,Values=InstanceID"--service-role-arn"arn:aws:iam::1122334455:role/MW-Role"--task-type"RUN_COMMAND"--task-invocation-parameters"{\"commands\":{\"Values\":[\"df\max-concurrency1--max-errors1--priority10系统将返回类似于以下内容的信息.
{"WindowTaskId":"44444444-5555-6666-7777-88888888"}您还可以使用MaintenanceWindow目标ID注册任务.
MaintenanceWindow目标ID通过之前的命令返回.
awsssmregister-task-with-maintenance-window--targets"Key=WindowTargetIds,Values=WindowTargetID"--task-arn"AWS-RunShellScript"--service-role-arn"arn:aws:iam::1122334455:role/MW-Role"--window-id"mw-ab12cd34ef56gh78"--task-type"RUN_COMMAND"--task-invocation-parameters"{\"commands\":{\"Values\":[\"df\max-concurrency1--max-errors1--priority10系统将返回类似于以下内容的信息.
{"WindowTaskId":"44444444-5555-6666-7777-88888888"}以下是包含其他任务类型的其他示例.
ImportantMaintenanceWindow的IAM策略要求您使用SSM作为Lambda函数(或别名)名称和StepFunctions状态机名称的前缀,如下面的前两个示例所示.
在继续注册这些类型的任务之前,必须在AWSLambda和AWSStepFunctions中将它们的名称更新为包含SSM.
Lambdaawsssmregister-task-with-maintenance-window--window-idmw-0290d787d641f11f3--targetsKey=WindowTargetIds,Values=31547414-69c3-49f8-95b8-ed2dcf045faa--task-arnarn:aws:lambda:us-east-1:711106535523:function:SSMTestFunction--service-role-arnarn:aws:iam::711106535523:role/MaintenanceWindows--task-typeLAMBDA--task-invocation-parameters"{\"Lambda\":{\"PayloadtargetId\TARGET_ID}targetType\\\":\\\"{{TARGET_TYPEQualifier\":\"\$LATEST\",\"ClientContext\":\"ew0KICAiY3VzdG9tIjogew0KICAgICJjbGllbnQiOiAiQVdTQ0xJIg0KICB9DQp9\"}}"--priority0--max-concurrency10--max-errors5--nameName--descriptionDescriptio92AmazonEC2SystemsManager用户指南创建和配置MaintenanceWindowStepFunctionsawsssmregister-task-with-maintenance-window--window-idmw-0290d787d641f11f3--targetsKey=WindowTargetIds,Values=31547414-69c3-49f8-95b8-ed2dcf045faa--task-arnarn:aws:states:us-east-1:711106535523:stateMachine:SSMTestStateMachine--service-role-arnarn:aws:iam::711106535523:role/MaintenanceWindows--task-typeSTEP_FUNCTIONS--task-invocation-parameters"{\"StepFunctions\":{\"Input\instanceId\\\":\\\"{{TARGET_ID}priority0--max-concurrency10--max-errors5--nameName--descriptionDescription自动化awsssmregister-task-with-maintenance-window--window-idmw-0290d787d641f11f3--targetsKey=WindowTargetIds,Values=31547414-69c3-49f8-95b8-ed2dcf045faa--task-arnAutomationDocumentName--service-role-arnarn:aws:iam::711106535523:role/MaintenanceWindows--task-typeAUTOMATION--task-invocation-parameters"Automation={DocumentVersion=5,Parameters={instanceId='{{TARGET_ID}priority0--max-concurrency10--max-errors5--nameName--descriptionDescriptionRunCommandawsssmregister-task-with-maintenance-window--window-idmw-0290d787d641f11f3--targetsKey=WindowTargetIds,Values=31547414-69c3-49f8-95b8-ed2dcf045faa--task-arnAWS-RunPowerShellScript--service-role-arnarn:aws:iam::711106535523:role/MaintenanceWindows--task-typeRUN_COMMAND--task-invocation-parameters"RunCommand={Comment=SomeComment,DocumentHashType=Sha256,DocumentHash=b9d0966408047ebcafee82de4d42west-2:711106535523:RunCommandTopic,NotificationEvents=[Success,Failed],NotificationType=InvocationRunCommand,TimeoutSeconds=30,Parameters={commands=ipconfig}}"--priority0--max-concurrency10--max-errors5--nameName--descriptionDescription7.
执行以下命令,列出MaintenanceWindow已注册的所有任务.
awsssmdescribe-maintenance-window-tasks--window-id"mw-ab12cd34ef56gh78"系统将返回类似于以下内容的信息.
{"Tasks":[{"ServiceRoleArn":"arn:aws:iam::11111111:role/MW-Role","MaxErrors":"1","TaskArn":"AWS-RunPowerShellScript","MaxConcurrency":"1","WindowTaskId":"3333-3333-3333-333333","TaskParameters":{"commands":{"Values":["driverquery.
exe"]}},"Priority":3,"Type":"RUN_COMMAND","Targets":[{"Values":["i-1a2b3c4d5e6f7g8h9"],"Key":"InstanceIds"93AmazonEC2SystemsManager用户指南创建和配置MaintenanceWindow}]},{"ServiceRoleArn":"arn:aws:iam::2222222222:role/MW-Role","MaxErrors":"1","TaskArn":"AWS-RunPowerShellScript","MaxConcurrency":"1","WindowTaskId":"44444-44-44-444444","TaskParameters":{"commands":{"Values":["ipconfig.
exe"]}},"Priority":1,"Type":"RUN_COMMAND","Targets":[{"Values":["555555-55555-555-5555555"],"Key":"WindowTargetIds"}]}]}8.
执行以下命令,查看特定MaintenanceWindow的任务执行列表.
awsssmdescribe-maintenance-window-executions--window-id"mw-ab12cd34ef56gh78"系统将返回类似于以下内容的信息.
{"WindowExecutions":[{"Status":"SUCCESS","WindowExecutionId":"1111-1111-1111-11111","StartTime":1478230495.
469},{"Status":"SUCCESS","WindowExecutionId":"2222-2-2-22222222-22","StartTime":1478231395.
677},#.
.
.
omittinganumberofentriesintheinterestofspace.
.
.
{"Status":"SUCCESS","WindowExecutionId":"33333-333-333-3333333","StartTime":1478272795.
021},{"Status":"SUCCESS","WindowExecutionId":"4444-44-44-44444444","StartTime":1478273694.
932}],"NextToken":111111.
.
.
"}9.
执行以下命令,获取有关MaintenanceWindow任务执行的信息.
94AmazonEC2SystemsManager用户指南创建和配置MaintenanceWindowawsssmget-maintenance-window-execution--window-execution-id"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"系统将返回类似于以下内容的信息.
{"Status":"SUCCESS","TaskIds":["333-33-3333-333333"],"StartTime":1478230495.
472,"EndTime":1478230516.
505,"WindowExecutionId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"}10.
执行以下命令,列出MaintenanceWindow执行过程中执行的任务列表.
awsssmdescribe-maintenance-window-execution-tasks--window-execution-id"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"系统将返回类似于以下内容的信息.
{"WindowExecutionTaskIdentities":[{"Status":"SUCCESS","EndTime":1478230516.
425,"StartTime":1478230495.
782,"TaskId":"33333-333-333-3333333"}]}11.
执行以下命令,获取有关任务执行的详情.
awsssmget-maintenance-window-execution-task--window-execution-id"555555-555-55-555555"--task-id"4444-4444-4444-444444"系统将返回类似于以下内容的信息.
{"Status":"SUCCESS","MaxErrors":"1","TaskArn":"AWS-RunPowerShellScript","MaxConcurrency":"1","ServiceRole":"arn:aws:iam::333333333:role/MW-Role","WindowExecutionId":"555555-555-55-555555","Priority":0,"StartTime":1478230495.
782,"EndTime":1478230516.
425,"Type":"RUN_COMMAND","TaskParameters":[],"TaskExecutionId":"4444-4444-4444-444444"}12.
执行以下命令,获取执行某个任务时执行的具体任务调用.
95AmazonEC2SystemsManager用户指南更新MaintenanceWindowawsssmdescribe-maintenance-window-execution-task-invocations--window-execution-id"555555-555-55-555555"--task-id"4444-4444-4444-444444"系统将返回类似于以下内容的信息.
{"WindowExecutionTaskInvocationIdentities":[{"Status":"SUCCESS","Parameters":"{\"documentName\":\"AWS-RunPowerShellScript\",\"instanceIdsi-1a2b3c4d5e6f7g8h9\",\"i-0a00def7faa94f1dcparameterscommandsipconfig.
exemaxConcurrency\":\"1\",\"maxErrors\":\"1\"}","ExecutionId":"555555-555-55-555555","InvocationId":"3333-33333-3333-33333","StartTime":1478230495.
842,"EndTime":1478230516.
291}]}13.
如果需要,请执行以下命令以删除您创建的MaintenanceWindow.
awsssmdelete-maintenance-window--window-id"mw-1a2b3c4d5e6f7g8h9"系统将返回类似于以下内容的信息:{"WindowId":"mw-1a2b3c4d5e6f7g8h9"}更新MaintenanceWindow本部分介绍如何使用AWSCLI更新MaintenanceWindow.
本部分还包含有关更新不同的任务类型(包括SystemsManagerRunCommand、SystemsManagerAutomation、AWSLambda和AWSStepFunctions任务)的信息.
有关更新MaintenanceWindow的更多信息,请参阅更新或删除MaintenanceWindow(p.
87).
本部分中的示例使用以下SystemsManager操作来更新MaintenanceWindow.
UpdateMaintenanceWindowUpdateMaintenanceWindowTargetUpdateMaintenanceWindowTaskDeregisterTargetFromMaintenanceWindow更新MaintenanceWindow1.
执行以下命令可将目标更新为包括名称和描述.
awsssmupdate-maintenance-window-target--window-id"mw-12345678910"--window-target-id"a1b2c3d4-e5f6-g7h8i9"--name"NewTargetName"--description"NewTargetNamedescription"系统将返回类似于以下内容的信息.
96AmazonEC2SystemsManager用户指南更新MaintenanceWindow{"WindowId":"mw-12345678910","WindowTargetId":"a1b2c3d4-e5f6-g7h8i9","Targets":[{"Key":"InstanceIds","Values":["i-aabbccddeeff"]}],"Name":"NewTargetName","Description":"NewTargetNamedescription"}2.
执行以下命令可使用replace选项来删除描述字段和添加更多目标.
描述字段被删除,因为更新未包含该字段(一个null值).
awsssmupdate-maintenance-window-target--window-id"mw-12345678910"--window-target-id"a1b2c3d4-e5f6-g7h8i9"--targets"Key=InstanceIds,Values=i-aabbccddeeff,i-223344556677"--name"NewTargetName"--replace系统将返回类似于以下内容的信息.
{"WindowId":"mw-12345678910","WindowTargetId":"a1b2c3d4-e5f6-g7h8i9","Targets":[{"Key":"InstanceIds","Values":["i-aabbccddeeff","i-223344556677"]}],"Name":"NewTargetName"}3.
执行以下命令可更新RunCommand任务.
awsssmupdate-maintenance-window-task--window-id"mw-12345678910"--window-task-id"1111-2222-3333-4444-5555"--targets"Key=WindowTargetIds,Values=a1b2c3d4-e5f6-g7h8i9c"--task-arn"AWS-RunPowerShellScript"--service-role-arn"arn:aws:iam::abcdefghijk:role/MaintenanceWindowsRole"--task-invocation-parameters"RunCommand={Comment=A_Comment,Parameters={commands=ipconfig}}"--priority1--max-concurrency10--max-errors4--name"RC_Name"--description"RC_Namedescriptionextra"系统将返回类似于以下内容的信息.
{"WindowId":"mw-12345678916","WindowTaskId":"aaa-bbb-ccc-ddd","Targets":[{"Key":"WindowTargetIds","Values":["a1b2c3d4-e5f6-g7h8i9c"]97AmazonEC2SystemsManager用户指南更新MaintenanceWindow}],"TaskArn":"AWS-RunPowerShellScript","ServiceRoleArn":"arn:aws:iam::abcdefghijk:role/MaintenanceWindowsRole","TaskParameters":{},"TaskInvocationParameters":{"RunCommand":{"Comment":"SomeComment","Parameters":{"commands":["ipconfig-tail"]}}},"Priority":1,"MaxConcurrency":"10","MaxErrors":"4","Name":"RC_Name","Description":"RC_Namedescriptionextra"}4.
执行以下命令可向Lambda任务添加名称和描述.
awsssmupdate-maintenance-window-task--window-id"mw-1234567891"--window-task-id"1a2b3c4d-5e6f-7g8h90"--targets"Key=WindowTargetIds,Values=a1b2c3d4-e5f6-g7h8i9c,4444-555555-66666-7777"--task-arn"arn:aws:lambda:us-east-1:1313131313:function:SSMTestLambda"--service-role-arn"arn:aws:iam::abcdefghijk:role/MaintenanceWindowsRole"--task-invocation-parameters"{\"Lambda\":{\"Payload\targetId\TARGET_ID}targetType\\TARGET_TYPEpriority0--max-concurrency10--max-errors5--name"TestLambda_Name"--description"TestLambda_Namedescription"系统将返回类似于以下内容的信息.
{"WindowId":"mw-1234567891","WindowTaskId":"1a2b3c4d-5e6f-7g8h90","Targets":[{"Key":"WindowTargetIds","Values":["a1b2c3d4-e5f6-g7h8i9c","4444-555555-66666-7777d"]}],"TaskArn":"arn:aws:lambda:us-east-1:1313131313:function:SSMTestLambda","ServiceRoleArn":"arn:aws:iam::abcdefghijk:role/MaintenanceWindowsRole","TaskParameters":{},"TaskInvocationParameters":{"Lambda":{"Payload":"e30="}},"Priority":0,"MaxConcurrency":"10","MaxErrors":"5","Name":"TestLambda_Name","Description":"TestLambda_Namedescription"}5.
执行以下命令可更新AWSStepFunctions任务以更新task-invocation-parameters.
98AmazonEC2SystemsManager用户指南更新MaintenanceWindowawsssmupdate-maintenance-window-task--window-id"mw-1234567891"--window-task-id"1a2b3c4d-5e6f-7g8h9i"--targets"Key=WindowTargetIds,Values=a1b2c3d4-e5f6-g7h8i9c"--task-arn"arn:aws:states:us-east-1:4242424242:execution:SSMStepFunctionTest"--service-role-arn"arn:aws:iam::abcdefghijk:role/MaintenanceWindowsRole"--task-invocation-parameters"{\"StepFunctions\":{\"Input\instanceId\\\":\\\"{{TARGET_IDpriority0--max-concurrency10--max-errors5--name"TestStepFunction_Task"--description"TestStepFunction_Taskdescription"系统将返回类似于以下内容的信息.
{"WindowId":"mw-1234567891","WindowTaskId":"1a2b3c4d-5e6f-7g8h9i","Targets":[{"Key":"WindowTargetIds","Values":["a1b2c3d4-e5f6-g7h8i9c"]}],"TaskArn":"arn:aws:states:us-east-1:4242424242:execution:SSMStepFunctionTest","ServiceRoleArn":"arn:aws:iam::abcdefghijk:role/MaintenanceWindowsRole","TaskParameters":{},"TaskInvocationParameters":{"StepFunctions":{"Input":"{\"instanceId\":\"{{TARGET_ID}}\"}"}},"Priority":0,"MaxConcurrency":"10","MaxErrors":"5","Name":"TestStepFunction_Task","Description":"TestStepFunction_Taskdescription"}6.
执行以下命令可从MaintenanceWindow中注销目标.
本示例使用safe参数确定目标是否被任何任务引用,从而确定注销是否安全.
awsssmderegister-target-from-maintenance-window--window-id"mw-1234567891b"--window-target-id"aaaa-bbbb-cccc-dddd"--safe系统将返回类似于以下内容的信息.
Anerroroccurred(TargetInUseException)whencallingtheDeregisterTargetFromMaintenanceWindowoperation:ThisTargetcannotbederegisteredbecauseitisstillreferencedinTask:a11b22c33d44e55f667.
执行以下命令可从MaintenanceWindow中注销目标,即使该目标已被某个任务引用.
您可以使用no-safe参数强制执行注销操作.
awsssmderegister-target-from-maintenance-window--window-id"mw-1234567891b"--window-target-id"aaaa-bbbb-cccc-dddd"--no-safe系统将返回类似于以下内容的信息.
{"WindowId":"mw-1234567891b","WindowTargetId":"aaaa-bbbb-cccc-ddd"99AmazonEC2SystemsManager用户指南更新MaintenanceWindow}8.
执行以下命令可更新RunCommand任务.
本示例使用名为UpdateLevel的SystemsManagerParameterStore参数,其格式如下:'{{ssm:UpdateLevel}}'awsssmupdate-maintenance-window-task--window-id"mw-1234567891b"--window-task-id"777-8888-9999-0000"--targets"Key=InstanceIds,Values=i-yyyyzzzzxxx111222"--task-invocation-parameters"RunCommand={Comment=SomeComments,Parameters={UpdateLevel='{{ssm:UpdateLevel}}'}}"系统将返回类似于以下内容的信息.
{"WindowId":"mw-1234567891b","WindowTaskId":"777-8888-9999-0000","Targets":[{"Key":"InstanceIds","Values":["i-yyyyzzzzxxx1112223"]}],"TaskArn":"AWS-InstallMissingWindowsUpdates","ServiceRoleArn":"arn:aws:iam::abcdefghijk:role/MaintenanceWindows","TaskParameters":{},"TaskInvocationParameters":{"RunCommand":{"Comment":"SomeComments","Parameters":{"UpdateLevel":["{{ssm:UpdateLevel}}"]}}},"Priority":0,"MaxConcurrency":"10","MaxErrors":"5","Name":"TracyMWTest_RunCommand2","Description":"Test_RunCommandandParameterStoredescription"}9.
执行以下命令可更新Automation任务以便为task-invocation-parameters参数指定WINDOW_ID和WINDOW_TASK_ID参数.
awsssmupdate-maintenance-window-task--window-id"mw-1234567891b"--window-task-id"777-8888-9999-000"--targets"Key=WindowTargetIds,Values=999-aaa-888-bbb-777--task-arn"AutoTestDoc"--service-role-arnarn:aws:iam::801422537783:role/MaintenanceWindowsRoleTesting--task-invocation-parameters"Automation={Parameters={instanceId='{{TARGET_ID}}',initiator='{{WINDOW_ID}}.
Task-{{WINDOW_TASK_ID}priority0--max-concurrency10--max-errors5系统将返回类似于以下内容的信息.
{"WindowId":"mw-0a097ccb2abd5775b","WindowTaskId":"777-8888-9999-0000","Targets":[{"Key":"WindowTargetIds",100AmazonEC2SystemsManager用户指南列出有关MaintenanceWindow的信息"Values":["999-aaa-888-bbb-777"]}],"TaskArn":"AutoTestDoc","ServiceRoleArn":"arn:aws:iam::abcdefghijk:role/MaintenanceWindows","TaskParameters":{},"TaskInvocationParameters":{"Automation":{"Parameters":{"multi":["{{WINDOW_TASK_ID}}"],"single":["{{WINDOW_ID}}"]}}},"Priority":0,"MaxConcurrency":"10","MaxErrors":"5","Name":"TestAutomation_Task","Description":"TestAutomation_Taskdescription"}列出有关MaintenanceWindow的信息本部分包含的命令可帮助您更新MaintenanceWindow、任务、执行和调用或获取相关信息.
列出您的AWS账户中所有的MaintenanceWindow按如下所示执行命令.
awsssmdescribe-maintenance-windows系统将返回类似于以下内容的信息.
{"WindowIdentities":[{"Duration":2,"Cutoff":0,"WindowId":"mw-ab12cd34ef56gh78","Enabled":true,"Name":"IAD-Every-15-Minutes"},{"Duration":4,"Cutoff":1,"WindowId":"mw-1a2b3c4d5e6f7g8h9","Enabled":true,"Name":"My-First-Maintenance-Window"},{"Duration":8,"Cutoff":2,"WindowId":"mw-123abc456def789","Enabled":false,"Name":"Every-Day"101AmazonEC2SystemsManager用户指南列出有关MaintenanceWindow的信息}]}列出所有已启用的MaintenanceWindow按如下所示执行命令.
awsssmdescribe-maintenance-windows--filters"Key=Enabled,Values=true"系统将返回类似于以下内容的信息.
{"WindowIdentities":[{"Duration":2,"Cutoff":0,"WindowId":"mw-ab12cd34ef56gh78","Enabled":true,"Name":"IAD-Every-15-Minutes"},{"Duration":4,"Cutoff":1,"WindowId":"mw-1a2b3c4d5e6f7g8h9","Enabled":true,"Name":"My-First-Maintenance-Window"}]}列出所有已禁用的MaintenanceWindow按如下所示执行命令.
awsssmdescribe-maintenance-windows--filters"Key=Enabled,Values=false"系统将返回类似于以下内容的信息.
{"WindowIdentities":[{"Duration":8,"Cutoff":2,"WindowId":"mw-1a2b3c4d5e6f7g8h9","Enabled":false,"Name":"Every-Day"}]}按名称筛选在本示例中,命令将返回所有名称以"My"开头的MaintenanceWindow.
awsssmdescribe-maintenance-windows--filters"Key=Name,Values=My"系统将返回类似于以下内容的信息.
102AmazonEC2SystemsManager用户指南列出有关MaintenanceWindow的信息{"WindowIdentities":[{"Duration":4,"Cutoff":1,"WindowId":"mw-1a2b3c4d5e6f7g8h9","Enabled":true,"Name":"My-First-Maintenance-Window"}]}显示匹配特定所有者信息值的MaintenanceWindow的目标按如下所示执行命令.
awsssmdescribe-maintenance-window-targets--window-id"mw-ab12cd34ef56gh78"--filters"Key=OwnerInformation,Values=Singleinstance"系统将返回类似于以下内容的信息.
{"Targets":[{"TargetType":"INSTANCE","TagFilters":[],"TargetIds":["i-1a2b3c4d5e6f7g8h9"],"WindowTargetId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2","OwnerInformation":"Singleinstance"}]}显示将调用AWS-RunPowerShellScriptRunCommand的所有已注册任务按如下所示执行命令.
awsssmdescribe-maintenance-window-tasks--window-id"mw-ab12cd34ef56gh78"--filters"Key=TaskArn,Values=AWS-RunPowerShellScript"系统将返回类似于以下内容的信息.
{"Tasks":[{"ServiceRoleArn":"arn:aws:iam::444444444444:role/MW-Role","MaxErrors":"1","TaskArn":"AWS-RunPowerShellScript","MaxConcurrency":"1","WindowTaskId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6c","TaskParameters":{"commands":{"Values":["driverquery.
exe"]}103AmazonEC2SystemsManager用户指南列出有关MaintenanceWindow的信息},"Priority":3,"Type":"RUN_COMMAND","Targets":[{"TaskTargetId":"i-1a2b3c4d5e6f7g8h9","TaskTargetType":"INSTANCE"}]},{"ServiceRoleArn":"arn:aws:iam::333333333333:role/MW-Role","MaxErrors":"1","TaskArn":"AWS-RunPowerShellScript","MaxConcurrency":"1","WindowTaskId":"33333-33333-333-33333","TaskParameters":{"commands":{"Values":["ipconfig.
exe"]}},"Priority":1,"Type":"RUN_COMMAND","Targets":[{"TaskTargetId":"44444-444-4444-444444","TaskTargetType":"WINDOW_TARGET"}]}]}显示优先级为3的所有已注册任务按如下所示执行命令.
awsssmdescribe-maintenance-window-tasks--window-id"mw-ab12cd34ef56gh78"--filters"Key=Priority,Values=3"系统将返回类似于以下内容的信息.
{"Tasks":[{"ServiceRoleArn":"arn:aws:iam::222222222:role/MW-Role","MaxErrors":"1","TaskArn":"AWS-RunPowerShellScript","MaxConcurrency":"1","WindowTaskId":"333333-333-33333-33333","TaskParameters":{"commands":{"Values":["driverquery.
exe"]}},"Priority":3,"Type":"RUN_COMMAND","Targets":[{104AmazonEC2SystemsManager用户指南列出有关MaintenanceWindow的信息"TaskTargetId":"i-1a2b3c4d5e6f7g8h9","TaskTargetType":"INSTANCE"}]}]}显示优先级为1且使用RunCommand的所有已注册任务按如下所示执行命令.
awsssmdescribe-maintenance-window-tasks--window-id"mw-ab12cd34ef56gh78"--filters"Key=Priority,Values=1""Key=TaskType,Values=RUN_COMMAND"系统将返回类似于以下内容的信息.
{"Tasks":[{"ServiceRoleArn":"arn:aws:iam::333333333:role/MW-Role","MaxErrors":"1","TaskArn":"AWS-RunPowerShellScript","MaxConcurrency":"1","WindowTaskId":"66666-555-66-555-6666","TaskParameters":{"commands":{"Values":["ipconfig.
exe"]}},"Priority":1,"Type":"RUN_COMMAND","Targets":[{"TaskTargetId":"777-77-777-7777777","TaskTargetType":"WINDOW_TARGET"}]}]}列出在某个日期之前执行的所有任务按如下所示执行命令.
awsssmdescribe-maintenance-window-executions--window-id"mw-ab12cd34ef56gh78"--filters"Key=ExecutedBefore,Values=2016-11-04T05:00:00Z"系统将返回类似于以下内容的信息.
{"WindowExecutions":[{"Status":"SUCCESS","EndTime":1478229594.
666,"WindowExecutionId":"","StartTime":1478229594.
666},105AmazonEC2SystemsManager用户指南列出有关MaintenanceWindow的信息{"Status":"SUCCESS","WindowExecutionId":"06dc5f8a-9ef0-4ae9-a466-ada2d4ce2d22","StartTime":1478230495.
469},{"Status":"SUCCESS","WindowExecutionId":"57ad6419-023e-44b0-a831-6687334390b2","StartTime":1478231395.
677},{"Status":"SUCCESS","WindowExecutionId":"ed1372b7-866b-4d64-bc2a-bbfd5195f4ae","StartTime":1478232295.
529},{"Status":"SUCCESS","WindowExecutionId":"154eb2fa-6390-4cb7-8c9e-55686b88c7b3","StartTime":1478233195.
687},{"Status":"SUCCESS","WindowExecutionId":"1c4de752-eff6-4778-b477-1681c6c03cf1","StartTime":1478234095.
553},{"Status":"SUCCESS","WindowExecutionId":"56062f75-e4d8-483f-b5c2-906d613409a4","StartTime":1478234995.
12}]}列出在某个日期之后执行的所有任务按如下所示执行命令.
awsssmdescribe-maintenance-window-executions--window-id"mw-ab12cd34ef56gh78"--filters"Key=ExecutedAfter,Values=2016-11-04T17:00:00Z"系统将返回类似于以下内容的信息.
{"WindowExecutions":[{"Status":"SUCCESS","WindowExecutionId":"33333-4444-444-5555555","StartTime":1478279095.
042},{"Status":"SUCCESS","WindowExecutionId":"55555-6666-6666-777777","StartTime":1478279994.
958},{"Status":"SUCCESS","WindowExecutionId":"8888-888-888-888888","StartTime":1478280895.
149}]}106AmazonEC2SystemsManager用户指南设置AutomationSystemsManagerAutomationAmazonEC2SystemsManagerAutomation是一项AWS托管的服务,能够简化常见实例和系统的维护及部署任务.
例如,您可在变更管理过程中使用Automation,通过最新应用程序生成保持您的AmazonMachineImage(AMI)为最新状态.
或者,假设您要在夜间创建数据库备份并将其上传到AmazonS3中.
使用Automation,您可以避免部署脚本以及直接对实例计划逻辑.
您可以改为通过SystemsManagerRunCommand以及由Automation服务编排的AWSLambda步骤运行维护活动.
使用Automation可以执行以下操作.
在您的AmazonMachineImage(AMI)中,通过可由您审核的简化且可重复的过程,预先安装和配置应用程序及代理.
构建工作流以配置和管理实例及AWS资源.
创建您的自定义工作流,或者使用由AWS维护的预定义工作流.
使用AmazonCloudWatchEvents接收有关Automation任务和工作流的通知使用EC2控制台监控Automation进度和执行详细信息.
内容设置Automation(p.
107)SystemsManagerAutomation演练(p.
113)使用Automation文档(p.
118)SystemsManagerAutomation示例(p.
128)SystemsManagerAutomation操作(p.
145)Automation系统变量(p.
169)排除SystemsManagerAutomation的故障(p.
178)设置Automation要设置Automation,必须:1.
验证权限:您还必须验证是否已向您的IAM用户账户、组或角色分配AmazonSSMAutomationRole托管策略,或提供具有类似权限的策略.
2.
验证实例权限:验证是否已使用AWSIdentityandAccessManagement(IAM)实例配置文件角色配置实例.
实例配置文件角色为Automation提供在您实例上执行操作的权限,例如执行命令或启动和停止服107AmazonEC2SystemsManager用户指南验证您的权限是否可配置SystemsManagerAutomation务.
有关如何为SystemsManager配置实例配置文件角色的信息,请参阅配置对SystemsManager的访问权限(p.
7).
或者,还可以为Automation配置AmazonCloudWatchEvents,并配置Automation工作流程作为CloudWatch事件的目标.
主题验证您的权限是否可配置SystemsManagerAutomation(p.
108)可选:为SystemsManagerAutomation配置CloudWatchEvents(p.
112)可选:将Automation配置为CloudWatchEvents目标(p.
112)验证您的权限是否可配置SystemsManagerAutomationAutomation之前需要您指定服务角色(或代入角色),以便服务有权代表您执行操作.
Automation不再需要此角色,因为服务现在通过使用已调用执行的用户的上下文来操作.
不过,以下情况仍需要您为Automation指定服务角色:当您想限制用户对资源的权限,但希望用户执行需要更高权限的Automation工作流程时.
在此方案中,您可以创建具有更高权限的服务角色并允许用户执行此工作流程.
运行时长预计将超过12小时的操作需要一个服务角色.
方法1:使用AWSCloudFormation为Automation配置角色Automation需要IAM实例配置文件角色和服务角色.
实例配置文件角色为Automation提供在您实例上执行操作的权限,例如执行命令或启动和停止服务.
服务角色(也称为代入角色)为Automation提供权限,用于代入您的IAM角色和代表您执行操作.
例如,服务角色允许Automation在Automation文档中执行aws:createImage操作时创建新的AmazonMachineImage(AMI).
您可以从AWSCloudFormation模板为SystemsManagerAutomation创建IAM实例配置文件角色和服务角色,如此部分中所述.
在您创建实例配置文件角色之后,必须将其分配到计划使用Automation配置的实例.
有关如何将角色分配到现有实例的信息,请参阅AmazonEC2用户指南中的将IAM角色连接到实例.
有关如何在创建新实例时分配角色的信息,请参阅任务3:创建使用SystemsManager角色的AmazonEC2实例(p.
9).
Note您还可以在Automation文档中使用这些角色及其Amazon资源名称(ARN),例如AWS-UpdateLinuxAmi文档.
在Automation文档中使用这些角色或其ARN,可以让Automation在您的托管实例上执行操作、启动新实例以及代表您执行操作.
要查看示例,请参阅AutomationCLI演练:修补LinuxAMI(p.
115).
使用AWSCloudFormation创建实例配置文件角色和服务角色使用AWSCloudFormation,通过以下过程为SystemsManagerAutomation创建所需的IAM角色.
创建所需的IAM角色1.
选择LaunchStack按钮.
该按钮会打开AWSCloudFormation控制台并用SystemsManagerAutomation模板的URL填充SpecifyanAmazonS3templateURL字段.
Note选择View以查看模板.
108AmazonEC2SystemsManager用户指南验证您的权限是否可配置SystemsManagerAutomation查看启动查看2.
选择Next.
3.
在SpecifyDetails页面上的StackName字段中,选择保留默认值或指定您自己的值.
选择Next.
4.
在Options页面上,您无需进行任何选择.
选择Next.
5.
在Review页面上,向下滚动并选择IacknowledgethatAWSCloudFormationmightcreateIAMresources选项.
6.
选择Create.
大约三分钟左右,AWSCloudFormation会显示CREATE_IN_PROGRESS状态.
创建堆栈并且您的角色准备好使用之后,状态会变为CREATE_COMPLETE.
复制Automation的角色信息使用以下过程从AWSCloudFormation控制台复制实例配置文件角色和Automation服务角色.
当您运行Automation文档时,必须指定这些角色.
Note如果您运行AWS-UpdateLinuxAmi或AWS-UpdateWindowsAmi文档,则无需使用此过程来复制角色信息.
这些文档已将必需角色指定为默认值.
这些文档中指定的角色使用IAM托管策略.
复制角色名称1.
OpentheAWSCloudFormationconsoleathttps://console.
amazonaws.
cn/cloudformation.
2.
选中您在上一个过程中创建的Automation堆栈旁的复选框.
3.
选择Resources选项卡.
4.
Resources表在LogicalID列中包括三个项:AutomationServiceRole、ManagedInstanceProfile和ManagedInstanceRole.
5.
复制ManagedInstanceProfile的PhysicalID.
物理ID类似于Automation-ManagedInstanceProfile-1a2b3c4.
这是您的实例配置文件角色的名称.
6.
在文本文件中粘贴实例配置文件角色以供以后使用.
7.
为AutomationServiceRole选择PhysicalID链接.
IAM控制台将打开并显示Automation服务角色的摘要.
8.
复制RoleARN旁边的Amazon资源名称(ARN).
ARN类似于:arn:aws:iam::12345678:role/Automation-AutomationServiceRole-1A2B3C4D5E9.
将ARN粘贴到文本文件供以后使用.
您已完成了为Automation配置所需的角色.
现在,您可在Automation文档中使用实例配置文件角色和Automation服务角色ARN.
有关更多信息,请参阅Automation控制台演练:修补LinuxAMI(p.
113)和AutomationCLI演练:修补LinuxAMI(p.
115).
方法2:使用IAM为Automation配置角色Automation需要IAM实例配置文件角色和服务角色.
实例配置文件角色为Automation提供在您实例上执行操作的权限,例如执行命令或启动和停止服务.
服务角色(也称为代入角色)为Automation提供权限,用于代入您的IAM角色和代表您执行操作.
例如,服务角色允许Automation在Automation文档中执行aws:createImage操作时创建新的AmazonMachineImage(AMI).
您可以使用IAM控制台为SystemsManagerAutomation创建IAM实例配置文件角色和服务角色,如此部分中所述.
109AmazonEC2SystemsManager用户指南验证您的权限是否可配置SystemsManagerAutomationNote您还可以在Automation文档中使用这些角色及其Amazon资源名称(ARN),例如AWS-UpdateLinuxAmi文档.
在Automation文档中使用这些角色或其ARN,可以让Automation在您的托管实例上执行操作、启动新实例以及代表您执行操作.
要查看示例,请参阅AutomationCLI演练:修补LinuxAMI(p.
115).
任务任务1:为Automation创建IAM角色(p.
110)任务2:为Automation添加信任关系(p.
110)任务3:将iam:PassRole策略附加到您的Automation角色(p.
111)任务4:配置用户对Automation的访问权限(p.
111)任务1:为Automation创建IAM角色SystemsManagerAutomation需要拥有权限才可代表您执行您为该服务指定的操作.
它通过代入您的IAM角色来获取这些权限.
通过执行以下步骤,您可以:创建角色,使Automation可以在处理自动化文档时代表您执行任务.
在Automation角色和SystemsManager之间建立信任关系为角色分配权限,以便您在自动化文档中引用IAM角色.
创建IAM角色并允许Automation代入该角色1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中选择Roles,然后选择CreateNewRole.
3.
在步骤1:选择角色类型中,选择AmazonEC2.
系统会跳过Step2:EstablishTrust,因为这是一个托管策略.
4.
在Step3:AttachPolicy中,选择AmazonSSMAutomationRole托管策略.
它们可提供相同的访问权限.
5.
在Step4:Setrolenameandreview中,输入一个名称,该名称将此角色标识为Automation角色.
记下RoleName和RoleARN.
在后面的步骤中,当您将iam:PassRole策略附加到您的IAM账户时,将指定该角色ARN.
您还需要在Automationjson文档中指定角色名称和ARN.
6.
选择CreateRole.
系统将让您返回到Roles页.
NoteAmazonSSMAutomationRole策略会将Automation角色权限分配给您账户内AWSLambda函数的子集.
这些函数以"Automation"开头.
如果您计划通过Lambda函数使用Automation,则LambdaARN必须使用以下格式:"arn:aws:lambda:*:*:function:Automation*"如果现有Lambda函数的ARN未使用此格式,您还必须为Automation角色附加额外的Lambda策略,例如AWSLambdaRole策略.
其他策略或角色必须提供对AWS账户内Lambda函数更宽泛的访问权限.
任务2:为Automation添加信任关系使用以下过程配置信任Automation的角色策略.
110AmazonEC2SystemsManager用户指南验证您的权限是否可配置SystemsManagerAutomation为Automation添加信任关系1.
在IAM控制台中,找到刚刚创建的角色,然后双击它.
2.
选择TrustRelationships选项卡,然后选择EditTrustRelationship.
3.
从现有策略中删除"ec2.
amazonaws.
com"(如果列出),然后添加"Service":"ssm.
amazonaws.
com",如下例所示:{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"sts:AssumeRole"}]}4.
选择UpdateTrustPolicy.
5.
复制或记下RoleARN.
您将需要在自动化文档中指定该ARN.
任务3:将iam:PassRole策略附加到您的Automation角色使用以下过程将iam:PassRole策略附加到您的Automation角色.
这使Automation服务能够传递您之前在执行期间创建的角色.
将iam:PassRole策略附加到您的Automation角色1.
在IAM控制台中,复制在任务1和3中创建的角色的ARN.
2.
找到您在任务3中创建的Automation角色并双击它.
3.
选择Permissions选项卡.
4.
在内联策略部分,选择创建用户策略.
如果您没有看到该按钮,请选择内联策略旁边的向下箭头,然后选择单击此处.
5.
在SetPermissions页面上,选择PolicyGenerator,然后选择Select.
6.
验证Effect是否已设置为Allow.
7.
从AWSServices中选择AWSIdentityandAccessManagement.
8.
从操作中,选择PassRole.
9.
在AmazonResourceName(ARN)字段中,粘贴您在任务1中创建的Automation角色ARN.
10.
选择AddStatement.
11.
从AWSServices中选择AWSIdentityandAccessManagement.
12.
从操作中,选择PassRole.
13.
在AmazonResourceName(ARN)字段中,粘贴您在任务3中创建的Automation角色ARN.
14.
选择AddStatement,然后选择NextStep.
15.
在ReviewPolicy页面上,选择ApplyPolicy.
任务4:配置用户对Automation的访问权限使用以下过程配置用户账户,以使用Automation.
您选择的用户账户会拥有配置并执行Automation的权限.
如果您需要创建新的用户账户,请参阅IAMUserGuide中的在您的AWS账户中创建IAM用户.
111AmazonEC2SystemsManager用户指南为Automation配置CloudWatchEvents使用以下过程将您通过任务5创建的iam:PassRole策略添加到用户账户.
使得用户账户能够将角色提交到Automation.
在此过程中,您还将配置账户,使用AmazonSSMFullAccesspolicy实现与SystemsManagerAPI的通信.
将iam:PassRole策略附加到用户账户1.
在IAM导航窗格中,选择Users,然后双击您要配置的用户账户.
2.
在ManagedPolicies部分,验证是否已列出AmazonSSMFullAccess策略,或者是否存在可向账户授予对SSMAPI的权限的类似策略.
3.
在内联策略部分,选择创建用户策略.
如果您没有看到该按钮,请选择内联策略旁边的向下箭头,然后选择单击此处.
4.
在SetPermissions页面上,选择PolicyGenerator,然后选择Select.
5.
验证Effect是否已设置为Allow.
6.
从AWSServices中选择AWSIdentityandAccessManagement.
7.
从操作中,选择PassRole.
8.
在AmazonResourceName(ARN)字段中,粘贴您在任务3中为Automation角色创建的ARN.
9.
选择AddStatement,然后选择NextStep.
10.
在ReviewPolicy页面上,选择ApplyPolicy.
您可以使用更严格的IAM用户策略进一步委派对Automation的访问权限.
有关更多信息,请参阅可选的访问权限配置(p.
9).
可选:为SystemsManagerAutomation配置CloudWatchEvents您可以配置AmazonCloudWatchEvents来向您通知SystemsManagerAutomation事件.
例如,您可以配置CloudWatchEvents在Automation步骤成功或失败时发送通知.
您还可以配置CloudWatchEvents在Automation工作流成功或失败时发送通知.
使用以下过程配置CloudWatchEvents发送有关Automation事件的通知.
为Automation配置CloudWatchEvents1.
SignintotheAWSManagementConsoleandopentheCloudWatchconsoleathttps://console.
amazonaws.
cn/cloudwatch/.
2.
在左侧导航窗格中选择Events,然后选择Createrule.
3.
在EventSource下,验证已选中EventPattern.
4.
在ServiceName字段中,选择EC2SimpleSystemsManager(SSM)5.
在EventType字段中,选择Automation.
6.
选择您要接收通知的详细类型和状态,然后选择Addtargets.
7.
在Selecttargettype列表中,选择目标类型.
有关不同目标类型的信息,请参阅对应的AWS帮助文档.
8.
选择Configuredetails.
9.
指定规则详细信息,然后选择Createrule.
下次运行Automation时,CloudWatchEvents会将事件详细信息发送到您指定的目标.
可选:将Automation配置为CloudWatchEvents目标您可通过指定Automation文档作为AmazonCloudWatch事件的目标来启动Automation工作流程.
您可以按计划或者在特定AWS系统事件发生时启动工作流程.
例如,假设您创建一个名为BootStrapInstances的112AmazonEC2SystemsManager用户指南Automation演练Automation文档,该文档在实例启动时在实例上安装软件.
要指定BootStrapInstances文档(和对应的工作流程)作为CloudWatch事件目标,请先创建新的CloudWatchEvents规则.
(以下是示例规则:Servicename:EC2,EventType:EC2实例状态更改通知,Specificstate(s):正在运行,Anyinstance.
)然后,您可使用以下过程指定BootStrapInstances文档作为事件目标.
当新实例启动时,系统将运行工作流程并安装软件.
有关创建Automation文档的信息,请参阅使用Automation文档(p.
118).
使用以下过程配置Automation工作流程作为CloudWatch事件目标.
配置Automation作为CloudWatch事件目标1.
SignintotheAWSManagementConsoleandopentheCloudWatchconsoleathttps://console.
amazonaws.
cn/cloudwatch/.
2.
在左侧导航窗格中,选择Events,然后选择Createrule.
3.
选择EventPattern或Schedule.
利用EventPattern,您可以构建将为AWSServices中的特定操作生成事件的规则.
利用Schedule,您可以构建将根据您指定的计划使用cron格式生成事件的规则.
4.
选择要创建的规则的其余选项,然后选择Addtarget.
5.
在Selecttargettype列表中,选择SSMAutomation.
6.
在Document列表中,选择在调用目标时要运行的SSM文档.
7.
展开Configuredocumentversion,然后选择一个版本.
$DEFAULT已显式设置为SystemsManager中的默认文档.
您可以选择特定版本,也可以使用最新版本.
8.
展开Configureautomationparameter(s),保留默认参数值(如果可用)或输入您自己的值.
Note所需参数的参数名旁有一个星号(*).
要创建目标,您必须为每个所需的参数指定一个值.
如果没有指定,系统将创建规则,但不执行规则.
9.
在权限部分中,选择一个选项.
CloudWatch使用此角色启动Automation工作流程.
10.
选择Configuredetails并完成向导.
SystemsManagerAutomation演练以下演练可帮助您使用预定义的Automation文档开始使用SystemsManagerAutomation.
您必须先配置Automation角色和权限,然后才能开始使用.
有关更多信息,请参阅设置Automation(p.
107).
有关创建自定义Automation文档的信息,请参阅创建Automation文档(p.
123).
Warning如果您从正在运行的实例创建AMI,则存在风险,实例的凭证、敏感数据或其他机密信息可能会记录到新映像中.
创建AMI时请务必小心.
演练Automation控制台演练:修补LinuxAMI(p.
113)AutomationCLI演练:修补LinuxAMI(p.
115)Automation控制台演练:修补LinuxAMI本SystemsManagerAutomation演练将介绍如何使用AmazonEC2控制台和SystemsManagerAWS-UpdateLinuxAmi文档自动修补LinuxAMI.
您可以使用此演练更新以下任一Linux版本:Ubuntu、CentOS、RHEL或AmazonLinuxAMI.
AWS-UpdateLinuxAmi文档也能自动安装其他具体站点相关的程序包和配置.
113AmazonEC2SystemsManager用户指南控制台演练:修补LinuxAMI演练显示如何在运行时为AWS-UpdateLinuxAmi文档指定参数.
如果您希望向自动化添加步骤或指定默认值,您可以使用AWS-UpdateLinuxAmi文档作为模板.
有关使用SystemsManager文档的更多信息,请参阅SystemsManager文档(p.
39).
有关您可以添加到文档的操作的信息,请参阅SystemsManagerAutomation操作(p.
145).
在运行AWS-UpdateLinuxAmi文档时,Automation会执行以下任务.
1.
从LinuxAMI启动临时AmazonEC2的实例.
使用安装SSM代理的用户数据脚本配置实例.
SSM代理执行从SystemsManagerRunCommand远程发送的脚本.
2.
通过执行以下操作更新实例:a.
在实例上调用用户提供的更新前脚本.
b.
更新实例上的AWS工具(如果有).
c.
使用本地程序包管理器,更新实例上的分配程序包.
d.
在实例上调用用户提供的更新后脚本.
3.
停止临时实例.
4.
从已停止的实例创建新AMI.
5.
终止实例.
在Automation成功完成这一流程后,即可在AMI页面上的AmazonEC2控制台中使用新AMI.
Important如果使用Automation从一个实例创建AMI,请注意,实例上的证书、密码、数据或者其他保密信息都会记录在新映像中.
在从实例创建AMI时,请务必小心.
在您开始使用Automation时,请注意以下限制.
Automation不执行资源清除.
在示例工作流中,当您的工作流步骤达到最终的实例终止步骤之前停止时,您可能需要手动停止实例或者禁用Automation工作流运行期间启动的服务.
如果您将用户数据用于Automation,则用户数据必须为base-64编码.
Automation保留执行记录30天.
SystemsManager和Automation具有以下服务限制.
开始前的准备工作创建AWSIdentityandAccessManagement(IAM)实例配置文件角色和Automation服务角色(或代入角色).
有关这些角色以及如何从AWSCloudFormation模板快速创建角色的更多信息,请参阅方法1:使用AWSCloudFormation为Automation配置角色(p.
108).
我们建议您在开始前同时收集以下消息.
要更新的AMI的源ID.
(可选)在更新前应用要运行的脚本的URL.
(可选)在更新后应用要运行的脚本的URL.
(可选)要更新的特定程序包的名称.
默认情况下,Automation会更新所有程序包.
(可选)要从更新中排除的特定程序件包名称.
Note默认情况下,当Automation运行AWS-UpdateLinuxAmi文档时,系统会在默认VPC(172.
30.
0.
0/16)中创建一个临时实例.
如果您删除了默认VPC,会收到以下错误:114AmazonEC2SystemsManager用户指南CLI演练:修补LinuxAMIVPCnotdefined400要解决此问题,您必须复制AWS-UpdateLinuxAmi文档并指定子网ID.
有关更多信息,请参阅VPCnotdefined400(p.
179).
使用Automation创建经过修补的AMI1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerServices,然后选择Automation.
2.
选择Runautomation.
3.
在Documentname列表中,选择AWS-UpdateLinuxAmi.
4.
在Version列表中,选择1.
5.
在Inputparameters部分,输入在准备工作部分收集的信息.
6.
选择Runautomation.
系统随即会显示自动化执行ID.
选择OK.
7.
在执行列表中,选择您刚才运行的执行,然后选择步骤选项卡.
该选项卡将显示工作流操作的状态.
更新过程可能需要30分钟或者更久.
在工作流完成后,请从更新后的AMI启动测试实例以验证更改.
Note如果工作流有任何步骤失败,则AutomationExecutions页面上会列出有关失败的信息.
工作流设计为在成功完成所有任务后终止临时实例.
如果步骤失败,系统可能不会终止实例.
因此,如果某个步骤失败,请手动终止临时实例.
AutomationCLI演练:修补LinuxAMI本SystemsManagerAutomation演练将介绍如何使用AWSCLI和SystemsManagerAWS-UpdateLinuxAmi文档自动修补LinuxAMI.
您可以使用此演练更新以下任一Linux版本:Ubuntu、CentOS、RHEL或AmazonLinuxAMI.
AWS-UpdateLinuxAmi文档也能自动安装其他具体站点相关的程序包和配置.
在运行AWS-UpdateLinuxAmi文档时,Automation会执行以下任务.
1.
从LinuxAMI启动临时AmazonEC2的实例.
使用安装SSM代理的用户数据脚本配置实例.
SSM代理执行从SystemsManagerRunCommand远程发送的脚本.
2.
通过执行以下操作更新实例:a.
在实例上调用用户提供的更新前脚本.
b.
更新实例上的AWS工具(如果有).
c.
使用本地程序包管理器,更新实例上的分配程序包.
d.
在实例上调用用户提供的更新后脚本.
3.
停止临时实例.
4.
从已停止的实例创建新AMI.
5.
终止实例.
在Automation成功完成这一流程后,即可在AMI页面上的AmazonEC2控制台中使用新AMI.
Important如果使用Automation从一个实例创建AMI,请注意,实例上的证书、密码、数据或者其他保密信息都会记录在新映像中.
在从实例创建AMI时,请务必小心.
在您开始使用Automation时,请注意以下限制.
115AmazonEC2SystemsManager用户指南CLI演练:修补LinuxAMIAutomation不执行资源清除.
在示例工作流中,当您的工作流步骤达到最终的实例终止步骤之前停止时,您可能需要手动停止实例或者禁用Automation工作流运行期间启动的服务.
如果您将用户数据用于Automation,则用户数据必须为base-64编码.
Automation保留执行记录30天.
SystemsManager和Automation具有以下服务限制.
开始前的准备工作创建AWSIdentityandAccessManagement(IAM)实例配置文件角色和Automation服务角色(或代入角色).
有关这些角色以及如何从AWSCloudFormation模板快速创建角色的更多信息,请参阅方法1:使用AWSCloudFormation为Automation配置角色(p.
108).
我们建议您同时收集AMI的源ID以进行更新.
Note默认情况下,当Automation运行AWS-UpdateLinuxAmi文档时,系统会在默认VPC(172.
30.
0.
0/16)中创建一个临时实例.
如果您删除了默认VPC,会收到以下错误:VPCnotdefined400要解决此问题,您必须复制AWS-UpdateLinuxAmi文档并指定子网ID.
有关更多信息,请参阅VPCnotdefined400(p.
179).
使用Automation创建经过修补的AMI1.
将AWSCLI下载到本地计算机上.
2.
执行以下命令以运行AWS-UpdateLinuxAmi文档和Automation工作流.
在参数部分,请指定您的Automation角色、AMI源ID和AmazonEC2实例配置文件角色.
awsssmstart-automation-execution\--document-name"AWS-UpdateLinuxAmi"\--parameters\SourceAmiId=ami-e6d5d2f1该命令将会返回执行ID.
请将该ID复制到剪贴板.
您将使用该ID查看工作流的状态.
{"AutomationExecutionId":"ID"}3.
要使用CLI查看工作流的执行情况,请执行以下命令:awsssmdescribe-automation-executions4.
要查看有关执行进程的详细信息,请执行以下命令.
awsssmget-automation-execution--automation-execution-idID更新过程可能需要30分钟或者更久.
Note您也可以在AmazonEC2控制台中监控工作流的状态.
在执行列表中,选择您刚才运行的执行,然后选择步骤选项卡.
该选项卡将显示工作流操作的状态.
在工作流完成后,请从更新后的AMI启动测试实例以验证更改.
116AmazonEC2SystemsManager用户指南CLI演练:修补LinuxAMINote如果工作流有任何步骤失败,则AutomationExecutions页面上会列出有关失败的信息.
工作流设计为在成功完成所有任务后终止临时实例.
如果步骤失败,系统可能不会终止实例.
因此,如果某个步骤失败,请手动终止临时实例.
其他AutomationCLI示例您可使用以下任务管理Automation执行的其他方面.
停止执行执行以下命令可停止工作流.
该命令不会终止相关实例.
awsssmstop-automation-execution--automation-execution-idID创建Automation文档的版本您无法更改现有自动化文档,但可以使用以下命令创建一个新版本:awsssmupdate-document--name"patchWindowsAmi"--contentfile:///Users/test-user/Documents/patchWindowsAmi.
json--document-version"\$LATEST"执行以下命令可查看关于现有文档版本的详细信息:awsssmlist-document-versions--name"patchWindowsAmi"此命令会返回如下信息:{"DocumentVersions":[{"IsDefaultVersion":false,"Name":"patchWindowsAmi","DocumentVersion":"2","CreatedDate":1475799950.
484},{"IsDefaultVersion":false,"Name":"patchWindowsAmi","DocumentVersion":"1","CreatedDate":1475799931.
064}]}执行以下命令可更新执行的默认版本.
只有在您明确地将默认执行版本设置为新版本时,该版本才会出现变化.
创建新的文档版本不会更改默认版本.
awsssmupdate-document-default-version--namepatchWindowsAmi--document-version2删除文档执行以下命令可删除自动化文档:awsssmdelete-document--namepatchWindowsAMI117AmazonEC2SystemsManager用户指南使用Automation文档使用Automation文档AmazonEC2SystemsManagerAutomation文档定义了SystemsManager在您的托管实例和AWS资源上执行的操作.
文档使用JavaScriptObjectNotation(JSON),并包括您指定的步骤和参数.
步骤按先后顺序执行.
Automation文档是类型为Automation的SystemsManager文档,与Command和Policy文档相对.
Automation文档当前支持0.
3版架构.
Command和Policy文档使用1.
2或2.
0版架构.
内容使用预定义的Automation文档(p.
118)创建Automation文档(p.
123)使用预定义的Automation文档为了帮助您快速入门,SystemsManager提供以下预定义Automation文档.
这些文档由AmazonWebServices维护.
使用AWS-UpdateLinuxAmi自定义和更新LinuxAMI(p.
118)使用AWS-UpdateWindowsAmi自定义和更新WindowsAMI(p.
120)使用AWS-UpdateLinuxAmi自定义和更新LinuxAMI使用AWS-UpdateLinuxAmi文档可以自动完成映像维护任务,而无需使用JavaScript对象表示法(JSON)编写工作流.
您可以使用AWS-UpdateLinuxAmi文档执行以下类型的任务.
在AmazonLinux、RedHat、Ubuntu或CentOSAmazonMachineImage(AMI)上升级所有分发程序包和Amazon软件.
这是默认文档行为.
在现有映像上安装SSM代理以启用SystemsManager功能,例如使用RunCommand的远程命令执行,或者使用Inventory的软件清单收集.
安装其他软件包.
您可在AmazonEC2控制台中查看此文档的JSON.
展开SystemsManagerSharedResources,然后选择Documents.
选择AWS-UpdateLinuxAmi文档旁的选项,然后使用下方窗格中的选项卡查看JSON以及其他有关文档的其他信息,如以下图像中所示.
开始前的准备工作118AmazonEC2SystemsManager用户指南使用预定义的Automation文档在您开始使用Automation文档之前,请先为Automation配置角色和CloudWatchEvents(后者可选).
有关更多信息,请参阅设置Automation(p.
107).
AWS-UpdateLinuxAmi文档接受以下输入参数.
参数类型描述SourceAmiId字符串(必需)源AMIID.
InstanceIamRole字符串(可选)您在设置Automation(p.
107)中创建的AWSIdentityandAccessManagement(IAM)实例配置文件角色的名称.
实例配置文件角色为Automation提供在您实例上执行操作的权限,例如执行命令或启动和停止服务.
Automation文档仅使用实例配置文件角色的名称.
如果您指定Amazon资源名称(ARN),则Automation执行失败.
AutomationAssumeRole字符串(可选)您在设置Automation(p.
107)中创建的IAM服务角色的名称.
服务角色(也称为代入角色)为Automation提供权限,用于代入您的IAM角色和代表您执行操作.
例如,在Automation文档中执行aws:createImage操作时,服务角色允许Automation创建新的AMI.
对于此参数,必须指定完整的ARN.
TargetAmiName字符串(可选)新AMI在创建之后的名称.
默认名称是系统生成的字符串,其中包括源AMIID以及创建时间和日期.
InstanceType字符串(可选)启动作为工作区主机的实例的类型.
实例类型因区域而异.
默认类型为t2.
micro.
PreUpdateScript字符串(可选)在应用更新前要运行的脚本的URL.
默认值(\"none\")不运行脚本.
PostUpdateScript字符串(可选)在应用程序包更新后要运行的脚本的URL.
默认值(\"none\")不运行脚本.
IncludePackages字符串(可选)仅更新这些指定的程序包.
默认值(\"all\")将应用所有可用的更新.
ExcludePackages字符串(可选)在所有情况下从更新中排除的程序包的名称.
默认值(\"none\")不排除任何程序包.
119AmazonEC2SystemsManager用户指南使用预定义的Automation文档Automation步骤默认情况下AWS-UpdateLinuxAmi文档包括以下Automation步骤.
步骤1:launchInstance(aws:runInstances操作)此步骤使用AmazonEC2用户数据和IAM实例配置文件角色启动实例.
用户数据根据操作系统安装相应的SSM代理.
安装SSM代理后,您可以利用SystemsManager功能,例如RunCommand、StateManager和Inventory.
步骤2:updateOSSoftware(aws:runCommand操作)此步骤在已启动实例上执行以下命令:从AmazonS3下载更新脚本.
执行可选的更新前脚本.
更新分发程序包和Amazon软件.
执行可选的更新后脚本.
执行日志存储在/tmp文件夹中,供用户以后查看.
如果您希望升级特定程序包集,则可以使用IncludePackages参数提供列表.
在提供时,系统仅尝试更新这些程序包及其依赖项.
不执行任何其他更新.
默认情况下,如果未指定包含程序包,则程序将更新所有可用程序包.
如果要在升级中排除特定程序包集,则可以向ExcludePackages参数提供列表.
如果提供,这些程序包保持其当前版本,与任何其他指定的选项无关.
默认情况下,在未指定任何排除程序包时,将不排除程序包.
步骤3:stopInstance(aws:changeInstanceState操作)此步骤停止已更新实例.
步骤4:createImage(aws:createImage操作)此步骤创建一个新AMI,带有可将其链接到源ID和创建时间的描述性名称.
例如:"EC2Automation在{{global:DATE_TIME}}从{{SourceAmiId}}生成了AMI",其中DATE_TIME和SourceID表示Automation变量.
步骤5:terminateInstance(aws:changeInstanceState操作)此步骤通过终止正在运行的实例来清除执行过程.
输出执行过程返回新的AMIID作为输出.
您可以使用AWS-UpdateLinuxAmi文档作为模板来创建您自己的文档,如接下来的部分中所述.
有关Automation文档中支持的操作(步骤)的信息,请参阅SystemsManagerAutomation操作(p.
145).
有关如何使用Automation文档的信息,请参阅SystemsManagerAutomation演练(p.
113).
使用AWS-UpdateWindowsAmi自定义和更新WindowsAMI使用AWS-UpdateWindowsAmi文档可以在AmazonWindowsAMI上自动完成映像维护任务,而无需使用JavaScript对象表示法(JSON)编写工作流.
本文档在WindowsServer2008R2或更高版本中受支持.
您可以使用AWS-UpdateWindowsAmi文档执行以下类型的任务.
安装所有Windows更新并升级Amazon软件(默认行为).
安装特定Windows更新并升级Amazon软件.
使用您的脚本自定义AMI.
开始前的准备工作120AmazonEC2SystemsManager用户指南使用预定义的Automation文档在您开始使用Automation文档之前,请先为Automation配置角色和CloudWatchEvents(后者可选).
有关更多信息,请参阅设置Automation(p.
107).
NoteSSM代理的更新通常会在不同时间向不同区域推广.
当您自定义或更新AMI时,请仅使用为您工作所在的区域发布的源AMI.
这将确保您使用该区域发布的最新SSM代理并避免兼容性问题.
AWS-UpdateWindowsAmi文档接受以下输入参数.
参数类型描述SourceAmiId字符串(必需)源AMIID.
InstanceIamRole字符串(可选)您在设置Automation(p.
107)中创建的AWSIdentityandAccessManagement(IAM)实例配置文件角色的名称.
实例配置文件角色为Automation提供在您实例上执行操作的权限,例如执行命令或启动和停止服务.
Automation文档仅使用实例配置文件角色的名称.
如果您指定Amazon资源名称(ARN),则Automation执行失败.
AutomationAssumeRole字符串(可选)您在设置Automation(p.
107)中创建的IAM服务角色的名称.
服务角色(也称为代入角色)为Automation提供权限,用于代入您的IAM角色和代表您执行操作.
例如,在Automation文档中执行aws:createImage操作时,服务角色允许Automation创建新的AMI.
对于此参数,必须指定完整的ARN.
TargetAmiName字符串(可选)新AMI在创建之后的名称.
默认名称是系统生成的字符串,其中包括源AMIID以及创建时间和日期.
InstanceType字符串(可选)启动作为工作区主机的实例的类型.
实例类型因区域而异.
默认类型为t2.
medium.
PreUpdateScript字符串(可选)要在更新AMI之前运行的脚本.
在Automation文档中或在运行时输入一个脚本作为参数.
PostUpdateScript字符串(可选)要在更新AMI之后运行的脚本.
在Automation文档中或在运行时输入一个脚本作为参数.
IncludeKbs字符串(可选)指定一个或多个要包括的Microsoft知识库(KB)文章ID.
可以使用逗号分隔值安装多个121AmazonEC2SystemsManager用户指南使用预定义的Automation文档参数类型描述ID.
有效格式:KB9876543或9876543.
ExcludeKbs字符串(可选)指定一个或多个要排除的Microsoft知识库(KB)文章ID.
可以使用逗号分隔值排除多个ID.
有效格式:KB9876543或9876543.
类别字符串(可选)指定一个或多个更新类别.
可以使用逗号分隔值筛选类别.
选项:关键更新、安全更新、定义更新、UpdateRollup、ServicePack、工具、更新或驱动程序.
有效格式包括单个条目,例如:关键更新.
或者,可以指定逗号分隔列表:关键更新,安全更新,定义更新.
SeverityLevels字符串(可选)指定一个或多个与更新关联的MSRC严重性级别.
可以使用逗号分隔值筛选严重性级别.
选项:关键、重要、低、中或未指定.
有效格式包括单个条目,例如:关键.
或者,可以指定逗号分隔列表:关键,重要,低.
Automation步骤默认情况下AWS-UpdateWindowsAmi文档包括以下Automation步骤.
步骤1:launchInstance(aws:runInstances操作)此步骤以从指定的SourceAmiID启动一个具有IAM实例配置文件角色的实例.
步骤2:runPreUpdateScript(aws:runCommand操作)此步骤可让您以字符串形式指定一个在安装更新前执行的脚本.
步骤3:updateEC2Config(aws:runCommand操作)此步骤使用AWS-InstallPowerShellModule公有文档下载AWS公有PowerShell模块.
SystemsManager使用SHA-256哈希验证模块的完整性.
然后SystemsManager检查操作系统以确定是要更新EC2Config还是EC2Launch.
EC2Config通过WindowsServer2012R2在WindowsServer2008R2上运行.
EC2Launch在WindowsServer2016上运行.
步骤4:updateSSMAgent(aws:runCommand操作)此步骤使用AWS-UpdateSSMAgent公有文档更新SSM代理.
步骤5:updateAWSPVDriver(aws:runCommand操作)此步骤使用AWS-ConfigureAWSPackage公有文档更新AWSPV驱动程序.
步骤6:installWindowsUpdates(aws:runCommand操作)此步骤使用AWS-InstallWindowsUpdates公有文档安装Windows更新.
默认情况下,SystemsManager搜索并安装任何缺失的更新.
可以通过指定下列参数之一更改默认行为:IncludeKbs、ExcludeKbs、Categories或SeverityLevels.
122AmazonEC2SystemsManager用户指南创建Automation文档步骤7:runPostUpdateScript(aws:runCommand操作)此步骤可让您以字符串形式指定一个在安装更新后执行的脚本.
步骤8:runSysprepGeneralize(aws:runCommand操作)此步骤使用AWS-InstallPowerShellModule公有文档下载AWS公有PowerShell模块.
SystemsManager使用SHA-256哈希验证模块的完整性.
然后SystemsManager使用AWS支持的方法针对EC2Launch(WindowsServer2016)或EC2Config(WindowsServer2008R2到2012R2)执行sysprep.
步骤9:stopInstance(aws:changeInstanceState操作)此步骤停止已更新实例.
步骤10:createImage(aws:createImage操作)此步骤创建一个新AMI,带有可将其链接到源ID和创建时间的描述性名称.
例如:"EC2Automation在{{global:DATE_TIME}}从{{SourceAmiId}}生成了AMI",其中DATE_TIME和SourceID表示Automation变量.
步骤11:TerminateInstance(aws:changeInstanceState操作)此步骤通过终止正在运行的实例来清除执行过程.
输出此部分可让您将各个步骤的输出或任何参数的值指定为Automation输出.
默认情况下,输出是由执行创建的已更新WindowsAMI的ID.
您可以使用AWS-UpdateWindowsAmi文档作为模板来创建您自己的文档,如接下来的部分中所述.
有关Automation文档中支持的操作(步骤)的信息,请参阅SystemsManagerAutomation操作(p.
145).
有关如何使用Automation文档的信息,请参阅SystemsManagerAutomation演练(p.
113).
创建Automation文档本演练将介绍如何创建和执行自定义Automation文档.
在您运行Automation后,系统会执行以下任务.
从指定的AMI启动Windows实例.
使用RunCommand执行将Windows更新应用于实例的命令.
停止实例.
创建新的WindowsAMI.
为WindowsAMI添加标签.
终止原始实例.
Automation示例文档Automation执行以JSON格式写入的SystemsManager自动化文档.
自动化文档包括在工作流执行期间要执行的操作.
有关SystemsManager文档的更多信息,请参阅SystemsManager文档(p.
39).
有关您可以添加到文档的操作的信息,请参阅SystemsManagerAutomation操作(p.
145).
Note默认情况下,当Automation运行AWS-UpdateWindowsAmi文档并创建一个临时实例时,系统会使用默认VPC(172.
30.
0.
0/16).
如果您删除了默认VPC,会收到以下错误:VPCnotdefined400要解决此问题,您必须复制AWS-UpdateWindowsAmi文档并指定子网ID.
有关更多信息,请参阅VPCnotdefined400(p.
179).
123AmazonEC2SystemsManager用户指南创建Automation文档使用Automation创建经过修补的AMI1.
收集以下信息.
您将在此过程的稍后部分指定此信息.
要更新的AMI的源ID.
创建AWSIdentityandAccessManagement(IAM)实例配置文件角色和Automation服务角色(或代入角色).
有关这些角色以及如何从AWSCloudFormation模板快速创建角色的更多信息,请参阅方法1:使用AWSCloudFormation为Automation配置角色(p.
108).
请确保复制实例配置文件角色的名称和Automation服务角色的Amazon资源名称(ARN),如复制Automation的角色信息(p.
109)中所述.
2.
将以下示例文档复制到一个文本编辑器(如Notepad)中.
将assumeRole的值和IamInstanceProfileName的值分别更改为您之前为Automation创建IAM角色时所创建的角色ARN和角色名称.
将该文档以patchWindowsAmi.
json格式保存在本地硬盘上.
{"description":"SystemsManagerAutomationDemo-PatchandCreateaNewAMI","schemaVersion":"0.
3","assumeRole":"theroleARNyoucreated","parameters":{"sourceAMIid":{"type":"String","description":"AMItopatch"},"targetAMIname":{"type":"String","description":"NameofnewAMI","default":"patchedAMI-{{global:DATE_TIME}}"}},"mainSteps":[{"name":"startInstances","action":"aws:runInstances","timeoutSeconds":1200,"maxAttempts":1,"onFailure":"Abort","inputs":{"ImageId":"{{sourceAMIid}}","InstanceType":"m3.
large","MinInstanceCount":1,"MaxInstanceCount":1,"IamInstanceProfileName":"thenameoftheIAMroleyoucreated"}},{"name":"installMissingWindowsUpdates","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS-InstallMissingWindowsUpdates","InstanceIds":["{{startInstances.
InstanceIds}}"],"Parameters":{"UpdateLevel":"Important"}}},{"name":"stopInstance","action":"aws:changeInstanceState","maxAttempts":1,124AmazonEC2SystemsManager用户指南创建Automation文档"onFailure":"Continue","inputs":{"InstanceIds":["{{startInstances.
InstanceIds}}"],"DesiredState":"stopped"}},{"name":"createImage","action":"aws:createImage","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceId":"{{startInstances.
InstanceIds}}","ImageName":"{{targetAMIname}}","NoReboot":true,"ImageDescription":"AMIcreatedbyEC2Automation"}},{"name":"createTags","action":"aws:createTags","maxAttempts":1,"onFailure":"Continue","inputs":{"ResourceType":"EC2","ResourceIds":["{{createImage.
ImageId}}"],"Tags":[{"Key":"GeneratedByAutomation","Value":"{{automation:EXECUTION_ID}}"},{"Key":"FromSourceAMI","Value":"{{sourceAMIid}}"}]}},{"name":"terminateInstance","action":"aws:changeInstanceState","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceIds":["{{startInstances.
InstanceIds}}"],"DesiredState":"terminated"}}],"outputs":["createImage.
ImageId"]}3.
将AWSCLI下载到本地计算机上.
4.
编辑以下命令,并指定patchWindowsAmi.
json文件在本地计算机上的路径.
执行该命令,以创建必需的Automation文档.
125AmazonEC2SystemsManager用户指南创建Automation文档Note对于name参数,您不能使用AWS作为文档前缀.
如果您指定AWS-区区或AWS区区,则将收到错误.
awsssmcreate-document--name"patchWindowsAmi"--contentfile:///Users/test-user/Documents/patchWindowsAmi.
json--document-typeAutomation系统将返回有关命令进程的信息.
{"DocumentDescription":{"Status":"Creating","Hash":"bce98f80b89668b092cd094d2f2895f57e40942bcc1598d85338dc9516b0b7f1","Name":"test","Parameters":[{"Type":"String","Name":"sourceAMIid","Description":"AMItopatch"},{"DefaultValue":"patchedAMI-{{global:DATE_TIME}}","Type":"String","Name":"targetAMIname","Description":"NameofnewAMI"}],"DocumentType":"Automation","PlatformTypes":["Windows","Linux"],"DocumentVersion":"1","HashType":"Sha256","CreatedDate":1488303738.
572,"Owner":"12345678901","SchemaVersion":"0.
3","DefaultVersion":"1","LatestVersion":"1","Description":"SystemsManagerAutomationDemo-PatchandCreateaNewAMI"}}5.
执行以下命令以查看您可以访问的文件列表.
awsssmlist-documents--document-filter-listkey=Owner,value=Self系统将返回类似于以下内容的信息:{"DocumentIdentifiers":[{"Name":"patchWindowsAmi","PlatformTypes":[],"DocumentVersion":"5","DocumentType":"Automation","Owner":"12345678901","SchemaVersion":"0.
3"126AmazonEC2SystemsManager用户指南创建Automation文档}]}6.
执行以下命令以查看有关patchWindowsAmi文档的详细信息.
awsssmdescribe-document--namepatchWindowsAmi系统将返回类似于以下内容的信息:{"Document":{"Status":"Active","Hash":"99d5b2e33571a6bb52c629283bca0a164026cd201876adf0a76de16766fb98ac","Name":"patchWindowsAmi","Parameters":[{"DefaultValue":"ami-3f0c4628","Type":"String","Name":"sourceAMIid","Description":"AMItopatch"},{"DefaultValue":"patchedAMI-{{global:DATE_TIME}}","Type":"String","Name":"targetAMIname","Description":"NameofnewAMI"}],"DocumentType":"Automation","PlatformTypes":[],"DocumentVersion":"5","HashType":"Sha256","CreatedDate":1478904417.
477,"Owner":"12345678901","SchemaVersion":"0.
3","DefaultVersion":"5","LatestVersion":"5","Description":"AutomationDemo-PatchandCreateaNewAMI"}}7.
执行以下命令以运行patchWindowsAmi文档和Automation工作流.
该命令采用两个输入参数:要修补的AMI的ID和新AMI的名称.
以下示例命令使用的是最新的EC2AMI,以最大限度减少需应用的补丁数量.
如果您多次运行此命令,则必须为targetAMIname指定唯一的值.
AMI名称必须是独一无二的.
awsssmstart-automation-execution--document-name="patchWindowsAmi"--parameterssourceAMIid="ami-bd3ba0aa"该命令将会返回执行ID.
请将该ID复制到剪贴板.
您将使用该ID查看工作流的状态.
{"AutomationExecutionId":"ID"}127AmazonEC2SystemsManager用户指南Automation示例您可以在EC2控制台中监控工作流的状态.
请检查控制台以确认是否正在启动新实例.
实例启动完成后,您可以确认已执行RunCommand操作.
RunCommand执行完成之后,您应该会在AMI映像列表中看到新的AMI.
8.
要使用CLI查看工作流的执行情况,请执行以下命令:awsssmdescribe-automation-executions9.
要查看有关执行进程的详细信息,请执行以下命令.
awsssmget-automation-execution--automation-execution-idIDNote根据应用的补丁数量,在该示例工作流中执行的Windows修补过程可能需要30分钟或更长时间才能完成.
有关如何使用Automation的更多示例,包括在您刚完成的演练中构建的示例,请参阅SystemsManagerAutomation示例(p.
128).
SystemsManagerAutomation示例以下示例演示如何使用SystemsManagerAutomation来简化常见的示例和系统维护任务.
请注意,其中一些示例在如何更新WindowsAMI示例的基础之上扩展,该示例在创建Automation文档(p.
123)中介绍.
示例在无法访问的实例上运行EC2Rescue工具(p.
128)使用Automation、Lambda和ParameterStore简化AMI修补(p.
135)将Automation用于Jenkins(p.
139)修补AMI和更新AutoScaling组(p.
141)在无法访问的实例上运行EC2Rescue工具EC2Rescue可以帮助您诊断并解决有关AmazonEC2WindowsServer实例的问题.
您可以手动运行该工具(如将EC2Rescue用于WindowsServer中所述),您也可以使用SystemsManagerAutomation和AWSSupport-ExecuteEC2Rescue文档自动运行该工具.
AWSSupport-ExecuteEC2Rescue文档旨在执行SystemsManager操作、AWSCloudFormation操作和Lambda函数的组合,从而将使用EC2Rescue通常所需的步骤自动化.
NoteAWSSupport-ExecuteEC2Rescue文档目前不受Linux实例支持.
如果您对某个Linux实例执行自动化,自动化将会失败,但不会对您的实例进行更改.
您可以通过AWSSupport-ExecuteEC2Rescue使用自动化,对以下问题进行故障排除和潜在修复:错误配置的网络适配器(例如,不正确的静态IP、DHCP禁用和DHCP客户端禁用)远程桌面协议(RDP)服务问题(例如,禁用服务或使用非默认配置来配置服务时)Windows防火墙问题(例如,防火墙阻止RDP流量)128AmazonEC2SystemsManager用户指南在无法访问的实例上运行EC2Rescue工具如何使用使用自动化和AWSSupport-ExecuteEC2Rescue文档对实例进行故障排除的工作原理如下:您为无法访问的实例指定ID并执行自动化工作流程.
系统创建一个临时VPC,然后执行一系列Lambda函数以配置该VPC.
系统在与您的原始实例相同的可用区内为您的临时VPC标识一个子网.
系统启动一个临时的启用了SSM的WindowsServer帮助程序实例.
系统停止您的原始实例并创建备份.
然后,它将原始根卷挂载到帮助程序实例.

系统使用RunCommand在帮助程序实例上运行EC2Rescue.
EC2Rescue识别并尝试修复有关已挂载的原始根卷的问题.
完成后,EC2Rescue重新将根卷挂载回原始实例.
系统重启您的原始实例,并终止临时实例.
系统也将终止临时VPC和在自动化开始时创建的Lambda函数.
开始前的准备工作执行以下自动化之前,请执行以下操作:复制无法访问的实例的实例ID.
您将在过程中指定此ID.
验证您的AWS账户是否至少有一个可用VPC.
默认情况下,一个区域中可以创建5个VPC.
如果您已在该区域中创建5个VPC,则自动化将会失败,但不会对您的实例进行更改.
有关更多信息,请参阅VPC和子网.
向AWSSupport-EC2Rescue授予在您的实例上执行操作的权限在自动化执行期间,EC2Rescue需要权限才能在您的实例上执行一系列操作.
这些操作调用AWSLambda、IAM和AmazonEC2服务,安全地尝试修复您的实例的问题.
如果您在AWS账户和/或VPC中具有管理员级权限,您可能能够在不按照本部分中所述配置权限的情况下执行自动化.
如果您没有管理员级权限,则您或管理员必须使用以下选项之一配置权限.
使用IAM策略授予权限(p.
129)使用AWSCloudFormation模板授予权限(p.
131)使用IAM策略授予权限您可以将以下IAM策略作为内链策略附加到您的IAM用户账户、组或角色;也可以创建一个新的IAM托管策略,并将其附加到您的用户账户、组或角色.
有关将内联策略添加到用户账户、组或角色的更多信息,请参阅使用内联策略.
有关创建新的托管策略的更多信息,请参阅使用托管策略.

Note如果您创建新的IAM托管策略,则还必须将AmazonEC2RoleforSSM托管策略附加到该策略,以便您的实例与SystemsManagerAPI通信.
适用于AWSSupport-EC2Rescue的IAM策略{"Version":"2012-10-17","Statement":[{"Action":["lambda:InvokeFunction",129AmazonEC2SystemsManager用户指南在无法访问的实例上运行EC2Rescue工具"lambda:DeleteFunction","lambda:GetFunction"],"Resource":"arn:aws:lambda:*:An-AWS-Account-ID:function:AWSSupport-EC2Rescue-*","Effect":"Allow"},{"Action":["s3:GetObject","s3:GetObjectVersion"],"Resource":["arn:aws:s3:::awssupport-ssm.
*/*.
template","arn:aws:s3:::awssupport-ssm.
*/*.
zip"],"Effect":"Allow"},{"Action":["iam:CreateRole","iam:CreateInstanceProfile","iam:GetRole","iam:GetInstanceProfile","iam:PutRolePolicy","iam:DetachRolePolicy","iam:AttachRolePolicy","iam:PassRole","iam:AddRoleToInstanceProfile","iam:RemoveRoleFromInstanceProfile","iam:DeleteRole","iam:DeleteRolePolicy","iam:DeleteInstanceProfile"],"Resource":["arn:aws:iam::An-AWS-Account-ID:role/AWSSupport-EC2Rescue-*","arn:aws:iam::An-AWS-Account-ID:instance-profile/AWSSupport-EC2Rescue-*"],"Effect":"Allow"},{"Action":["lambda:CreateFunction","ec2:CreateVpc","ec2:ModifyVpcAttribute","ec2:DeleteVpc","ec2:CreateInternetGateway","ec2:AttachInternetGateway","ec2:DetachInternetGateway","ec2:DeleteInternetGateway","ec2:CreateSubnet","ec2:DeleteSubnet","ec2:CreateRoute","ec2:DeleteRoute","ec2:CreateRouteTable","ec2:AssociateRouteTable","ec2:DisassociateRouteTable","ec2:DeleteRouteTable","ec2:CreateVpcEndpoint","ec2:DeleteVpcEndpoints","ec2:ModifyVpcEndpoint","ec2:Describe*"],"Resource":"*","Effect":"Allow"}]130AmazonEC2SystemsManager用户指南在无法访问的实例上运行EC2Rescue工具}使用AWSCloudFormation模板授予权限AWSCloudFormation使用预配置模板自动化创建IAM角色和策略的过程.
使用AWSCloudFormation,通过以下过程为EC2RescueAutomation创建所需的IAM角色和策略.
为EC2Rescue创建所需的IAM角色和策略1.
选择LaunchStack按钮.
该按钮会打开AWSCloudFormation控制台并用EC2Rescue模板的URL填充SpecifyanAmazonS3templateURL字段.
Note选择View以查看模板.
查看启动查看2.
选择Next.
3.
在SpecifyDetails页面上的StackName字段中,选择保留默认值或指定您自己的值.
选择Next.
4.
在Options页面上,您无需进行任何选择.
选择Next.
5.
在Review页面上,向下滚动并选择IacknowledgethatAWSCloudFormationmightcreateIAMresources选项.
6.
选择Create.
大约三分钟左右,AWSCloudFormation会显示CREATE_IN_PROGRESS状态.
创建堆栈后,状态将变为CREATE_COMPLETE.
7.
在堆栈列表中,选择您刚刚创建的堆栈旁边的选项,然后选择Outputs选项卡.
8.
复制Value.
这是AssumeRole的ARN.
在执行自动化时,您将指定此ARN.
执行自动化以下过程介绍如何使用AmazonEC2控制台执行AWSSupport-ExecuteEC2Rescue文档.
Important以下自动化执行将停止无法访问的实例.
停止实例可能导致挂载的实例存储卷(如果存在)上的数据丢失.
如果未关联弹性IP,停止实例也可能导致公有IP更改.
执行AWSSupport-ExecuteEC2Rescue自动化1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerServices,然后选择Automation.
2.
选择RunAutomation.
3.
在Documentname部分中,选择列表中的OwnedbyMeorAmazon.
4.
在文档列表中,选择AWSSupport-ExecuteEC2Rescue.
文档所有者是Amazon.
5.
在Inputparameters部分中,为UnreachableInstanceId参数指定一个实例ID.
如果您使用本主题前面介绍的CloudFormation过程为此自动化创建角色,则指定您从CloudFormation控制台复制到AssumeRole参数中的AssumeRoleARN.
6.
选择RunAutomation.
7.
要监控执行过程,请选择正在运行的自动化,然后选择Steps选项卡.
完成执行后,选择Descriptions选项卡,然后选择Viewoutput以查看结果.
要查看单个步骤的输出,请选择Steps选项卡,然后选择步骤旁的ViewOutputs.
131AmazonEC2SystemsManager用户指南在无法访问的实例上运行EC2Rescue工具其他技术详细信息本部分包括有关执行AWSSupport-ExecuteEC2Rescue文档时执行的步骤的其他技术详细信息.
本部分还包括有关执行期间创建的资源的信息.
如果自动化执行失败,此信息可以帮助您找到问题的来源.

Automation步骤AWSSupport-ExecuteEC2Rescue文档的默认版本包括以下自动化步骤.
步骤1:stageEC2RescueAutomation(aws:createStackaction):自动化使用AWSCloudFormation堆栈创建完成自动化执行中的剩余步骤所需的EC2RescueVPC、AWSLambda函数和IAM角色.
完成执行后,堆栈将被删除.
在堆栈存在时,AWSSupport-ExecuteEC2Rescue的其他执行将无法创建堆栈,因为它已存在.
这是预期行为.
如果您怀疑创建堆栈有问题,请查看CloudFormation控制台以获取更多详细信息.
SignintotheAWSManagementConsoleandopentheAWSCloudFormationconsoleathttps://console.
amazonaws.
cn/cloudformation.
步骤2:updateEC2RescueAutomation(aws:invokeFunctionaction):Lambda函数将检查更新后的EC2Rescue模板,并更新堆栈(如有必要).
步骤3:describeUnreachableInstance(aws:invokeFunctionaction):Lambda函数将验证您提供的实例ID是否映射到支持的操作系统(OS).
目前,您只能在Windows上运行AWSSupport-ExecuteEC2Rescue.
步骤4:getLatestImage(aws:invokeFunctionaction):Lambda函数将在无法访问的实例所在的区域中确定最新WindowsServerAMI.
步骤5:getEC2RescueSubnet(aws:invokeFunctionaction):Lambda函数将确定无法访问的实例的可用区(AZ).
该函数还将从EC2RescueVPC中找到相应的EC2Rescue子网.
步骤6:launchEC2RescueInstance(aws:runInstancesaction):利用之前的步骤中收集的信息,自动化将启动承载EC2Rescue的实例并对无法访问的实例执行恢复任务.
步骤7:stopUnreachableInstance(aws:changeInstanceStateaction):自动化将在准备备份和恢复时停止无法访问的实例.
Important执行将停止无法访问的实例.
停止实例可能导致挂载的实例存储卷(如果存在)上的数据丢失.
如果未关联弹性IP,停止实例也可能导致公有IP更改.
步骤8:createBackup(aws:createImageaction):自动化将创建无法访问的实例的AMI.
尚未执行恢复操作.
Note配置此步骤以快速返回TimedOut并继续下一步,以便自动化可以在创建AMI时继续.
步骤9:tagEC2RescueResources(aws:createTagsaction):自动化会将以下标签分配到EC2Rescue实例和之前创建的备份AMI.
键值名称AWSSupport-EC2Rescue:{{UnreachableInstanceId}}AWSSupport-EC2Rescue-AutomationExecution{{automation:EXECUTION_ID}}步骤10:detachUnreachableInstanceRootVolume(aws:invokeFunctionaction):自动化会将根卷从无法访问的实例中分离.
步骤11:attachUnreachableInstanceRootVolumeToEC2RescueInstance(aws:invokeFunctionaction):自动化会将根卷作为辅助卷(xvdf)挂载到EC2Rescue实例.
132AmazonEC2SystemsManager用户指南在无法访问的实例上运行EC2Rescue工具步骤12:runEC2Rescue(aws:runCommandaction):自动化将调用AWSSupport-RunEC2RescueForWindowsTool文档以诊断并解决有关EC2Rescue实例的xvdf卷的常见问题.
步骤13:terminateEC2RescueInstance(aws:changeInstanceStateaction):自动化将终止EC2Rescue实例.
步骤14:attachFixedRootVolumeToUnreachableInstance(aws:invokeFunctionaction):自动化会将该卷作为根卷(/dev/sda1)重新挂载到原始EC2实例.
步骤15:startUnreachableInstance(aws:changeInstanceStateaction):自动化将在恢复任务完成后重新启动原始实例.
步骤16:unstageEC2RescueAutomation(aws:deleteStackaction):自动化将删除步骤1中创建的堆栈.
输出执行完成后,自动化将返回以下输出.
输出名称描述createBackup.
ImageId备份AMI的ID.
describeUnreachableInstance.
PayloadEC2实例ID检查的结果.
runEC2Rescue.
OutputEC2Rescue报告.
updateEC2RescueAutomation.
Payload自动自行更新检查的结果.
AWSSupport-ExecuteEC2Rescue创建的资源AWSSupport-ExecuteEC2Rescue运行时将在您的账户中创建以下资源.
创建的所有资源均使用以AWSSupport-EC2Rescue开头的名称标记(例如,AWSSupport-EC2Rescue-VPC).
除了备份AMI,所有其他资源均将在执行完成后被删除.
步骤名称已创建的资源自动删除stageEC2RescueAutomationCloudFormation堆栈:AWSSupportEC2RescueIAM角色:AWSSupport-EC2Rescue-EC2RescueUpdatesLookup-region、AWSSupport-EC2Rescue-SubnetLookup-region、AWSSupport-EC2Rescue-AmiLookup-region、AWSSupport-EC2Rescue-DescribeInstance-region、AWSSupport-EC2Rescue-EBSHelper-region、AWSSupport-EC2Rescue-EC2Role-region是133AmazonEC2SystemsManager用户指南在无法访问的实例上运行EC2Rescue工具步骤名称已创建的资源自动删除Lambda函数:AWSSupport-EC2Rescue-EC2RescueUpdatesLookup、AWSSupport-EC2Rescue-SubnetLookup、AWSSupport-EC2Rescue-AmiLookup、AWSSupport-EC2Rescue-DescribeInstance、AWSSupport-EC2Rescue-EBSHelperIAM实例配置文件:AWSSupport-EC2Rescue-InstanceProfile-regionVPC、子网、路由表和Internet网关:AWSSupport-EC2Rescue-VPC、AWSSupport-EC2Rescue-Subnet、AWSSupport-EC2Rescue-RT、AWSSupport-EC2Rescue-IGWupdateEC2RescueAutomationCloudFormation更改集:AWSSupport-EC2Rescue-automation_execution_id是describeUnreachableInstance––getLatestImage––getEC2RescueSubnet––launchEC2RescueInstanceEC2实例:EC2Rescue:instance-id是stopUnreachableInstance––createBackupEC2AMI:AWSSupport-EC2Rescue-Backup_instance-id_creation-date-and-time否-您必须手动删除此备份实例.
如果不这样做,可能会产生EC2费用.
tagEC2RescueResources––detachUnreachableInstanceRootVolume––attachUnreachableInstanceRootVolumeToEC2RescueInstance––runEC2Rescue––terminateEC2RescueInstance––attachEC2RescuedRootVolumeToUnreachableInstance––startUnreachableInstance––unstageEC2RescueAutomation––134AmazonEC2SystemsManager用户指南使用Automation、Lambda和ParameterStore简化AMI修补有关如何通过RunCommand使用AWSSupport-ExecuteEC2Rescue文档的信息,请参阅通过SystemsManagerRunCommand将EC2Rescue用于WindowsServer.
使用Automation、Lambda和ParameterStore简化AMI修补以下示例在如何更新WindowsAMI基础之上扩展,这些内容在创建Automation文档(p.
123)中介绍.
此示例使用组织维护和定期修补自己专有AMI的模型,而非构建自AmazonEC2AMI.
以下过程演示如何自动应用操作系统(OS)补丁到已视为最新的WindowsAMI或最新AMI.
在示例中,参数SourceAmiId的默认值由名为latestAmi的SystemsManagerParameterStore参数定义.
latestAmi的值由AWSLambda函数在Automation工作流结束时更新.
由于此Automation过程,修补AMI所需的时间和工作量都尽可能减少,因为修补操作始终都应用到最新的AMI.
开始前的准备工作配置Automation角色以及(可选)为Automation配置CloudWatchEvents.
有关更多信息,请参阅设置Automation(p.
107).
内容任务1:在SystemsManagerParameterStore中创建参数(p.
135)任务2:为AWSLambda创建IAM角色(p.
135)步骤3:创建AWSLambda函数(p.
136)任务4:创建Automation文档并修补AMI(p.
137)任务1:在SystemsManagerParameterStore中创建参数使用以下过程在SystemsManagerParameterStore中创建参数.
通过ParameterStore,您可以跨SystemsManager功能(包括RunCommand、状态管理器和Automation)引用参数(称为"SystemsManager参数").
使用ParameterStore创建参数1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择ParameterStore.
2.
选择创建参数.
3.
对于Name,请键入latestAmi.
4.
在Description字段中,键入确定此参数用途的说明.
5.
对于类型,选择字符串.
6.
在Value字段中,输入WindowsAMIID.
例如:ami-188d6e0e.
7.
选择CreateParameter,然后选择OK.
任务2:为AWSLambda创建IAM角色使用以下过程为AWSLambda创建IAM服务角色.
此角色包括AWSLambdaExecute和AmazonSSMFullAccess托管策略.
这些策略授予Lambda权限,以便使用Lambda函数和SystemsManager来更新latestAmi参数的值.
为Lambda创建IAM服务角色1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中选择Roles,然后选择CreateNewRole.
135AmazonEC2SystemsManager用户指南使用Automation、Lambda和ParameterStore简化AMI修补3.
对于Rolename,键入可帮助您识别此角色用途的角色名称,例如,lambda-ssm-role.
角色名称在您的AWS账户内必须是唯一的.
键入名称后,选择页面底部的NextStep.
Note由于多个实体可能引用该角色,因此创建角色后无法更改角色的名称.
4.
在SelectRoleType页面中,选择AWSServiceRoles部分,然后选择AWSLambda.
5.
在AttachPolicy页面中,选择AWSLambdaExecute和AmazonSSMFullAccess,然后选择NextStep.
6.
选择CreateRole.
步骤3:创建AWSLambda函数使用以下过程创建Lambda函数,该函数会自动更新latestAmi参数的值.
创建Lambda函数1.
SignintotheAWSManagementConsoleandopentheAWSLambdaconsoleathttps://console.
amazonaws.
cn/lambda/.
2.
选择CreateaLambdafunction.
3.
在Selectblueprint页面上,选择BlankFunction.
4.
在Configuretriggers页面上,选择Next.
5.
在Configurefunction页面的Name字段中键入Automation-UpdateSsmParam,如果需要还可键入说明.
6.
在Runtime列表中,选择Python2.
7.
7.
在Lambdafunctioncode部分中,删除字段中预填充的代码,然后粘贴以下代码示例.
from__future__importprint_functionimportjsonimportboto3print('Loadingfunction')#UpdatesanSSMparameter#ExpectsparameterName,parameterValuedeflambda_handler(event,context):print("Receivedevent:"+json.
dumps(event,indent=2))#getSSMclientclient=boto3.
client('ssm')#confirmparameterexistsbeforeupdatingitresponse=client.
describe_parameters(Filters=[{'Key':'Name','Values':[event['parameterName']]},])ifnotresponse['Parameters']:print('Nosuchparameter')return'SSMparameternotfound.
'#ifparameterhasaDescritionfield,updateitPLUStheValue136AmazonEC2SystemsManager用户指南使用Automation、Lambda和ParameterStore简化AMI修补if'Description'inresponse['Parameters'][0]:description=response['Parameters'][0]['Description']response=client.
put_parameter(Name=event['parameterName'],Value=event['parameterValue'],Description=description,Type='String',Overwrite=True)#otherwisejustupdateValueelse:response=client.
put_parameter(Name=event['parameterName'],Value=event['parameterValue'],Type='String',Overwrite=True)reponseString='Updatedparameter%swithvalue%s.
'%(event['parameterName'],event['parameterValue'])returnreponseString8.
在Lambdafunctionhandlerandrole部分的Role列表中,选择您在任务2中为Lambda创建的服务角色.
9.
选择Next,然后选择Createfunction.
10.
要测试Lambda函数,请从Actions菜单选择ConfigureTestEvent.
11.
使用以下JSON替换现有文本.
{"parameterName":"latestAmi","parameterValue":"yourAMIID"}12.
选择Saveandtest.
输出应说明已成功更新参数并包括有关更新的详细信息.
例如,"已使用值ami-123456更新参数latestAmi".
任务4:创建Automation文档并修补AMI使用以下过程创建并运行Automation文档,该文档修补您为latestAmi参数指定的AMI.
在Automation工作流完成后,使用新修补的AMI的ID更新latestAmi的值.
接下来的执行过程会使用以前执行创建的AMI.
1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择Documents.
3.
选择CreateDocument.
4.
在Name字段中,键入UpdateMyLatestWindowsAmi.
5.
在DocumentType列表中,选择Automation.
6.
删除Content字段中的方括号,然后将以下JSON实例文档粘贴到此处.
Note您必须使用在设置Automation(p.
107)时创建的服务角色ARN和实例配置文件角色,来更改此示例中assumeRole和IamInstanceProfileName的值.
{"description":"SystemsManagerAutomationDemo–PatchAMIandUpdateSSMParam",137AmazonEC2SystemsManager用户指南使用Automation、Lambda和ParameterStore简化AMI修补"schemaVersion":"0.
3","assumeRole":"theroleARNyoucreated","parameters":{"sourceAMIid":{"type":"String","description":"AMItopatch","default":"{{ssm:latestAmi}}"},"targetAMIname":{"type":"String","description":"NameofnewAMI","default":"patchedAMI-{{global:DATE_TIME}}"}},"mainSteps":[{"name":"startInstances","action":"aws:runInstances","timeoutSeconds":1200,"maxAttempts":1,"onFailure":"Abort","inputs":{"ImageId":"{{sourceAMIid}}","InstanceType":"m3.
large","MinInstanceCount":1,"MaxInstanceCount":1,"IamInstanceProfileName":"thenameoftheIAMroleyoucreated"}},{"name":"installMissingWindowsUpdates","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS-InstallMissingWindowsUpdates","InstanceIds":["{{startInstances.
InstanceIds}}"],"Parameters":{"UpdateLevel":"Important"}}},{"name":"stopInstance","action":"aws:changeInstanceState","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceIds":["{{startInstances.
InstanceIds}}"],"DesiredState":"stopped"}},{"name":"createImage","action":"aws:createImage","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceId":"{{startInstances.
InstanceIds}}","ImageName":"{{targetAMIname}}","NoReboot":true,"ImageDescription":"AMIcreatedbyEC2Automation"138AmazonEC2SystemsManager用户指南将Automation用于Jenkins}},{"name":"terminateInstance","action":"aws:changeInstanceState","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceIds":["{{startInstances.
InstanceIds}}"],"DesiredState":"terminated"}},{"name":"updateSsmParam","action":"aws:invokeLambdaFunction","timeoutSeconds":1200,"maxAttempts":1,"onFailure":"Abort","inputs":{"FunctionName":"Automation-UpdateSsmParam","Payload":"{\"parameterName\":\"latestAmi\",\"parameterValue\":\"{{createImage.
ImageId}}\"}"}}],"outputs":["createImage.
ImageId"]}7.
选择CreateDocument保存文档.
8.
在导航窗格中展开SystemsManagerServices,选择Automations,然后选择Runautomation.
9.
在Documentname列表中,选择UpdateMyLatestWindowsAmi.
10.
在Version列表中,选择1,然后选择Runautomation.
11.
执行完成后,在AmazonEC2控制台中选择ParameterStore,并确认latestAmi的新值与Automation工作流返回的值匹配.
您还可以验证新AMIID与EC2控制台的AMI部分中的Automation输出匹配.
将Automation用于Jenkins如果您的组织在CI/CD管道中使用Jenkins软件,则您可以添加Automation作为构建后步骤,用于将应用程序发行版预安装到AmazonMachineImage(AMI)中.
您还可以使用Jenkins计划功能来调用Automation并创建自己的操作系统(OS)修补计划.
以下示例显示如何从运行在本地或AmazonEC2上的Jenkins服务器调用Automation.
对于身份验证,Jenkins服务器使用AWS凭证,该凭证基于您在示例中创建的AWSIdentityandAccessManagement(IAM)用户.
如果您的Jenkins服务器运行在AmazonEC2中,则还可以使用IAM实例配置文件角色对其进行身份验证.
Note配置您的实例时,请确保遵循Jenkins安全最佳实践.
开始前的准备工作在您配置Automation用于Jenkins之前,请完成以下任务.
完成使用Automation、Lambda和ParameterStore简化AMI修补(p.
135)示例.
以下示例使用在该示例中创建的UpdateMyLatestWindowsAmiAutomation文档.
139AmazonEC2SystemsManager用户指南将Automation用于Jenkins为Automation配置IAM角色.
SystemsManager需要实例配置文件角色和服务角色ARN来处理Automation工作流.
有关更多信息,请参阅设置Automation(p.
107).
在您为Automation配置IAM角色之后,使用以下过程为Jenkins服务器创建IAM用户账户.
在执行期间,Automation工作流使用IAM用户账户的访问密钥和私有密钥对Jenkins服务器进行身份验证.
为Jenkins服务器创建用户账户1.
从IAM控制台上的Users页面中,选择AddUser.
2.
在Setuserdetails部分中指定用户名(例如,Jenkins).
3.
在SelectAWSaccesstype部分中,选择ProgrammaticAccess.
4.
选择下一步:权限.
5.
在Setpermissionsfor部分,选择Attachexistingpoliciesdirectly.
6.
在"Filter"字段中,键入AmazonSSMFullAccess.
7.
选中该策略旁边的复选框,然后选择Next:Review.
8.
验证详细信息,然后选择Create.
9.
将访问密钥和私有密钥复制到文本文件.
您可以在接下来的过程中指定这些凭证.

使用以下过程在Jenkins服务器上配置AWSCLI.
为Automation配置Jenkins服务器1.
如果尚未安装,请下载AWSCLI到您的Jenkins服务器.
有关更多信息,请参阅安装AWSCommandLineInterface.
2.
在Jenkins服务器的终端窗口中,执行以下命令以配置AWSCLI.
sudo–sujenkinsawsconfigure3.
出现提示时,输入您在IAM中创建Jenkins用户时收到的AWS访问密钥和私有密钥.
指定默认区域.
有关配置AWSCLI的更多信息,请参阅配置AWSCommandLineInterface.
使用以下过程配置您的Jenkins项目来调用Automation.
配置Jenkins服务器以调用Automation1.
在Web浏览器中打开Jenkins控制台.
2.
选择要配置用于Automation的项目,然后选择Configure.
3.
在Build选项卡上,选择AddBuildStep.
4.
选择Executeshell或ExecuteWindowsbatchcommand(具体取决于您的操作系统).
5.
在Command框中,执行AWSCLI命令,如下所示:aws--regiontheregionofyoursourceAMIssmstart-automation-execution--document-nameyourdocumentname--parametersparametersforthedocument以下示例命令使用UpdateMyLatestWindowsAmi文档以及在使用Automation、Lambda和ParameterStore简化AMI修补(p.
135)中创建的SystemsManager参数latestAmi:aws--regionus-east-1ssmstart-automation-execution\--document-nameUpdateMyLatestWindowsAmi\--parameters\140AmazonEC2SystemsManager用户指南修补AMI和更新AutoScaling组"sourceAMIid='{{ssm:latestAmi}}'"在Jenkins中,命令类似于以下屏幕截图中的示例.
6.
在Jenkins项目中,选择BuildNow.
Jenkins会返回与以下示例类似的输出.
修补AMI和更新AutoScaling组以下示例建立在使用Automation、Lambda和ParameterStore简化AMI修补(p.
135)示例的基础上,并增加了使用新修补的AMI来更新AutoScaling组的步骤.
此过程确保新映像自动可供使用AutoScaling组的不同计算环境使用.
此示例中Automation工作流的最后一步使用AWSLambda函数复制现有启动配置并将AMIID设置为新修补的AMI.
然后,使用新启动配置更新AutoScaling组.
在此类型的AutoScaling方案中,用户可以终止AutoScaling组中的现有实例以强制启动使用新映像的实例.
或者,用户可以等待以允许缩减或扩展事件正常启动较新的实例.
开始前的准备工作在开始本示例之前,请完成以下任务.
完成使用Automation、Lambda和ParameterStore简化AMI修补(p.
135)示例.
以下示例使用在该示例中创建的UpdateMyLatestWindowsAmiAutomation文档.
为Automation配置IAM角色.
SystemsManager需要实例配置文件角色和服务角色ARN来处理Automation工作流.
有关更多信息,请参阅设置Automation(p.
107).
任务1:为AWSLambda创建IAM角色使用以下过程为AWSLambda创建IAM服务角色.
此角色包括AWSLambdaExecute和AutoScalingFullAccess托管策略.
这些策略授予Lambda权限,以便使用Lambda函数通过最新修补的AMI创建新AutoScaling组.
141AmazonEC2SystemsManager用户指南修补AMI和更新AutoScaling组为Lambda创建IAM服务角色1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中选择Roles,然后选择CreateNewRole.
3.
对于Rolename,键入可帮助您识别此角色用途的角色名称,例如,lambda-ssm-role.
角色名称在您的AWS账户内必须是唯一的.
键入名称后,选择页面底部的NextStep.
Note由于多个实体可能引用该角色,因此创建角色后无法更改角色的名称.
4.
在SelectRoleType页面中,选择AWSServiceRoles部分,然后选择AWSLambda.
5.
在AttachPolicy页面中,选择AWSLambdaExecute和AutoScalingFullAccess,然后选择NextStep.
6.
选择CreateRole.
步骤2:创建AWSLambda函数使用以下过程创建新Lambda函数,该函数字段使用最新修补的AMI创建新AutoScaling组.
创建Lambda函数1.
SignintotheAWSManagementConsoleandopentheAWSLambdaconsoleathttps://console.
amazonaws.
cn/lambda/.
2.
选择CreateaLambdafunction.
3.
在Selectblueprint页面上,选择BlankFunction.
4.
在Configuretriggers页面上,选择Next.
5.
在Configurefunction页面的Name字段中,键入Automation-UpdateAsg,如果需要还可键入说明.
6.
在Runtime列表中,选择Python2.
7.
7.
在Lambdafunctioncode部分中,删除字段中预填充的代码,然后粘贴以下代码示例.
from__future__importprint_functionimportjsonimportdatetimeimporttimeimportboto3print('Loadingfunction')deflambda_handler(event,context):print("Receivedevent:"+json.
dumps(event,indent=2))#getautoscalingclientclient=boto3.
client('autoscaling')#getobjectfortheASGwe'regoingtoupdate,filterbynameoftargetASGresponse=client.
describe_auto_scaling_groups(AutoScalingGroupNames=[event['targetASG']])ifnotresponse['AutoScalingGroups']:return'NosuchASG'#getnameofInstanceIDincurrentASGthatwe'llusetomodelnewLaunchConfigurationaftersourceInstanceId=response.
get('AutoScalingGroups')[0]['Instances'][0]['InstanceId']142AmazonEC2SystemsManager用户指南修补AMI和更新AutoScaling组#createLCusinginstancefromtargetASGasatemplate,onlydiffisthenameofthenewLCandnewAMItimeStamp=time.
time()timeStampString=datetime.
datetime.
fromtimestamp(timeStamp).
strftime('%Y-%m-%d%H-%M-%S')newLaunchConfigName='LC'+event['newAmiID'timeStampStringclient.
create_launch_configuration(InstanceId=sourceInstanceId,LaunchConfigurationName=newLaunchConfigName,ImageId=event['newAmiID'])#updateASGtousenewLCresponse=client.
update_auto_scaling_group(AutoScalingGroupName=event['targetASG'],LaunchConfigurationName=newLaunchConfigName)return'UpdatedASG`%s`withnewlaunchconfiguration`%s`whichincludesAMI`%s`.
'%(event['targetASG'],newLaunchConfigName,event['newAmiID'])8.
在Lambdafunctionhandlerandrole部分的Role列表中,选择您在任务1中为Lambda创建的服务角色.
9.
选择Next,然后选择Createfunction.
10.
要测试Lambda函数,请从Actions菜单选择ConfigureTestEvent.
11.
使用以下JSON替换现有文本,并输入AMIID和AutoScaling组.
{"newAmiID":"validAMIID","targetASG":"nameofyourAutoScalinggroup"}12.
选择Saveandtest.
输出表明,已使用新的启动配置成功更新AutoScaling组.
任务3:创建一个Automation文档,修补AMI,并更新AutoScaling组使用以下过程创建并运行Automation文档,该文档修补您为latestAmi参数指定的AMI.
然后,Automation工作流更新AutoScaling组以使用最新的修补后的AMI.
1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择Documents.
3.
选择CreateDocument.
4.
在Name字段中,键入PatchAmiandUpdateAsg.
5.
在DocumentType列表中,选择Automation.
6.
删除Content字段中的方括号,然后将以下JSON实例文档粘贴到此处.
Note您必须使用在设置Automation(p.
107)时创建的服务角色ARN和实例配置文件角色,来更改此示例中assumeRole和IamInstanceProfileName的值.
{"description":"SystemsManagerAutomationDemo-PatchAMIandUpdateASG","schemaVersion":"0.
3","assumeRole":"theserviceroleARNyoucreated","parameters":{"sourceAMIid":{143AmazonEC2SystemsManager用户指南修补AMI和更新AutoScaling组"type":"String","description":"AMItopatch"},"targetAMIname":{"type":"String","description":"NameofnewAMI","default":"patchedAMI-{{global:DATE_TIME}}"},"targetASG":{"type":"String","description":"AutosalinggrouptoUpdate"}},"mainSteps":[{"name":"startInstances","action":"aws:runInstances","timeoutSeconds":1200,"maxAttempts":1,"onFailure":"Abort","inputs":{"ImageId":"{{sourceAMIid}}","InstanceType":"m3.
large","MinInstanceCount":1,"MaxInstanceCount":1,"IamInstanceProfileName":"thenameoftheinstanceIAMroleyoucreated"}},{"name":"installMissingWindowsUpdates","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS-InstallMissingWindowsUpdates","InstanceIds":["{{startInstances.
InstanceIds}}"],"Parameters":{"UpdateLevel":"Important"}}},{"name":"stopInstance","action":"aws:changeInstanceState","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceIds":["{{startInstances.
InstanceIds}}"],"DesiredState":"stopped"}},{"name":"createImage","action":"aws:createImage","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceId":"{{startInstances.
InstanceIds}}","ImageName":"{{targetAMIname}}","NoReboot":true,"ImageDescription":"AMIcreatedbyEC2Automation"}144AmazonEC2SystemsManager用户指南Automation操作},{"name":"terminateInstance","action":"aws:changeInstanceState","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceIds":["{{startInstances.
InstanceIds}}"],"DesiredState":"terminated"}},{"name":"updateASG","action":"aws:invokeLambdaFunction","timeoutSeconds":1200,"maxAttempts":1,"onFailure":"Abort","inputs":{"FunctionName":"Automation-UpdateAsg","Payload":"{\"targetASG\":\"{{targetASG}}\",\"newAmiID\":\"{{createImage.
ImageId}}\"}"}}],"outputs":["createImage.
ImageId"]}7.
选择CreateDocument保存文档.
8.
在导航窗格中展开SystemsManagerServices,选择Automations,然后选择Runautomation.
9.
在Documentname列表中,选择PatchAmiandUpdateAsg.
10.
在Version列表中,选择1,然后选择Runautomation.
11.
为sourceAMIid指定WindowsAMIID,为targetASG指定您的AutoScaling组名.
12.
选择Runautomation.
13.
执行完成后,在AmazonEC2控制台中,选择AutoScaling,然后选择LaunchConfigurations.
验证您看到了新的启动配置,并且使用了新AMIID.
14.
选择AutoScaling,然后选择AutoScalingGroups.
验证AutoScaling组使用了新的启动配置.
15.
终止AutoScaling组中的一个或多个实例.
使用新AMIID替换将要启动的实例.
Note您可以通过编辑Lambda函数正常终止实例,从而进一步自动完成新AMI的部署.
您还可以调用自己的Lambda函数并利用AWSCloudFormation的功能来更新AutoScaling组.
有关更多信息,请参阅UpdatePolicyAttribute.
SystemsManagerAutomation操作SystemsManagerAutomation会执行Automation文档中定义的步骤.
每步都与特定操作相关.
此操作确定本步的输入、行为和输出.
步骤定义在Automation文档的mainSteps部分.
Automation支持以下操作:aws:approve:临时暂停Automation执行,直至指定委托人批准或拒绝操作.
在达到所需批准数后,Automation执行将恢复.
145AmazonEC2SystemsManager用户指南所有操作中的常见属性aws:changeInstanceState:更改实例的状态.
aws:copyImage:将AMI从任何区域复制到当前区域中.
此操作还可以对新的AMI进行加密.
aws:createImage:根据正在运行的实例创建AMI.
aws:createStack:从模板创建新AWSCloudFormation堆栈.
aws:createTags:为AmazonEC2实例或SystemsManager管理的实例创建新标签.
aws:deleteImage:删除AMI.
aws:deleteStack:删除AWSCloudFormation堆栈.
aws:executeAutomation:通过调用辅助自动化文件执行辅助自动化工作流程.
aws:invokeLambdaFunction:使您能够在自动化工作流中运行外部工作线程函数.

aws:runCommand:执行远程命令.
aws:runInstances:启动一个或多个实例.
aws:sleep:将Automation执行时间延迟指定的时间.
您无需指定操作或步骤的输出.
由与本步关联的操作预先确定输出.
当您在Automation文档中指定步骤输入时,可以引用前面某步中的一个或多个输出.
例如,您可以使aws:runInstances的输出可用于后续的aws:runCommand操作.
还可以在Automation文档的Output部分引用前面步骤中的输出.
所有操作中的常见属性以下属性是所有操作的常见属性:"mainSteps":[{"name":"name","action":"action","maxAttempts":value,"timeoutSeconds":value,"onFailure":"Abort","inputs":{.
.
.
}},{"name":"name","action":"action","maxAttempts":value,"timeoutSeconds":value,"onFailure":"Abort","inputs":{.
.
.
}}]name在文档的所有步骤名称中必须唯一的标识符.
类型:字符串必需:是action步骤要执行的操作的名称.
146AmazonEC2SystemsManager用户指南aws:approve类型:字符串必需:是maxAttempts在发生故障的情况下应重试步骤的次数.
如果值大于1,则直到所有重试尝试失败后,才会将此步骤视为失败.
默认值是1.
类型:整数必需:否timeoutSeconds步骤的执行超时值.
如果超时并且maxAttempts的值大于1,则本步未考虑超时,直至已尝试所有重试.
此字段没有默认值.
类型:整数必需:否onFailure指示工作流是否应在发生失败时继续.
默认为在发生失败时中止.
类型:字符串有效值:Abort|Continue必需:否inputs特定于操作的属性.
类型:映射必需:是aws:approve临时暂停Automation执行,直至指定委托人批准或拒绝操作.
在达到所需批准数后,Automation执行将恢复.
您可在Automation文档的mainSteps部分中的任何位置插入批准步骤.
在以下示例中,aws:approve操作临时暂停Automation工作流程,直至一个审批者接受或拒绝工作流程.
批准后,此文档将执行简单的PowerShell命令.
{"description":"RunInstancesDemo1","schemaVersion":"0.
3","assumeRole":"{{assumeRole}}","parameters":{"assumeRole":{"type":"String"},"message":{"type":"String"}},147AmazonEC2SystemsManager用户指南aws:approve"mainSteps":[{"name":"approve","action":"aws:approve","timeoutSeconds":1000,"onFailure":"Abort","inputs":{"NotificationArn":"arn:aws:sns:us-east-1:12345678901:AutomationApproval","Message":"{{message}}","MinRequiredApprovals":1,"Approvers":["arn:aws:iam::12345678901:user/AWS-User-1"]}},{"name":"run","action":"aws:runCommand","inputs":{"InstanceIds":["i-1a2b3c4d5e6f7g"],"DocumentName":"AWS-RunPowerShellScript","Parameters":{"commands":["date"]}}}]}您可以在AmazonEC2控制台中批准或拒绝等待批准的自动化.
批准或拒绝等待的自动化1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerServices,然后选择Automation.
2.
选择状态为Waiting的自动化,选择Actions,然后选择Approve/Denythisrequest.
3.
在Approve/Denythisrequest页面中查看自动化的详细信息.
148AmazonEC2SystemsManager用户指南aws:approve4.
选择Approve或Reject,键入可选命令,然后选择Submit.
输入{"NotificationArn":"arn:aws:sns:us-west-1:12345678901:Automation-ApprovalRequest","Message":"PleaseapprovethisstepoftheAutomation.
","MinRequiredApprovals":3,"Approvers":["IamUser1","IamUser2","arn:aws:iam::12345678901:user/IamUser3","arn:aws:iam::12345678901:role/IamRole"]}NotificationArnAutomation批准的AmazonSNS主题的ARN.
当您在Automation文档中指定aws:approve步骤时,Automation将向此主题发送消息,以让委托人知道必须批准或拒绝Automation步骤.
AmazonSNS主题的标题必须使用前缀"Automation".
类型:字符串必需:否Message发送批准请求时要包含在SNS主题中的信息.
最大消息长度为4096个字符.
类型:字符串149AmazonEC2SystemsManager用户指南aws:changeInstanceState必需:否MinRequiredApprovals恢复Automation执行所需的批准的最大数.
如果您未指定值,系统将默认为1.
此参数的值必须为正数.
此参数的值不能超过Approvers参数定义的审批者数.
类型:整数必需:否Approvers能够批准或拒绝操作的经AWS身份验证的委托人的列表.
最大审批者数为10.
您可使用以下任意格式指定委托人:AWSIdentityandAccessManagement(IAM)用户名IAM用户ARNIAM角色ARNIAM代入角色用户ARN类型:StringList必需:是输出ApprovalStatus步骤的批准状态.
状态可以为下列状态之一:已批准、已拒绝或正在等待.
"正在等待"意味着Automation正在等待来自审批者的输入.
类型:字符串ApproverDecisions包括每位审批者的批准决定的JSON映射.
类型:MapListaws:changeInstanceState更改或断言实例的状态.
此操作可在断言模式下使用(不要执行API来更改状态,而应验证实例是否处于预期状态.
)要使用断言模式,请将CheckStateOnly参数设置为true.
当在Windows上运行Sysprep命令时,此模式很有用.
该命令是一种可在后台长时间运行的异步命令.
您可以确保在创建AMI之前停止实例.
输入{"name":"stopMyInstance","action":"aws:changeInstanceState","maxAttempts":3,"timeoutSeconds":3600,"onFailure":"Abort","inputs":{"InstanceIds":["i-1234567890abcdef0"],"CheckStateOnly":true,"DesiredState":"stopped"}150AmazonEC2SystemsManager用户指南aws:copyImage}InstanceIds实例的ID.
类型:字符串必需:是CheckStateOnly如果为false,请将实例状态设置为预期状态.
如果为true,请使用轮询断言预期状态.
类型:布尔值必需:否DesiredState预期状态.
类型:字符串有效值:running|stopped|terminated必需:是Force如果设置此项,则强制停止实例.
则该实例没有机会来刷新文件系统缓存或文件系统元数据.
如果您使用此选项,则必须执行文件系统检查和修复流程.
我们不建议将该选项用于Windows实例.
类型:布尔值必需:否AdditionalInfo预留.
类型:字符串必需:否输出无aws:copyImage将AMI从任何区域复制到当前区域中.
此操作还可以对新的AMI进行加密.
输入此操作支持大多数CopyImage参数.
有关更多信息,请参阅CopyImage.
以下示例在首尔地区创建AMI的副本(SourceImageID:ami-0fe10819.
SourceRegion:ap-northeast-2).
新的AMI将复制到您启动Automation操作的区域.
将对复制的AMI进行加密,因为可选Encrypted标记将设置为true.
{"name":"createEncryptedCopy",151AmazonEC2SystemsManager用户指南aws:copyImage"action":"aws:copyImage","maxAttempts":3,"onFailure":"Abort","inputs":{"SourceImageId":"ami-0fe10819","SourceRegion":"ap-northeast-2","ImageName":"EncryptedCopyofLAMPbaseAMIinap-northeast-2","Encrypted":true}}SourceRegion源AMI当前所在的区域.
类型:字符串必需:是SourceImageId要从源区域复制的AMIID.
类型:字符串必需:是ImageName新映像的名称.
类型:字符串必需:是ImageDescription目标映像的描述.
类型:字符串必需:否加密对目标AMI进行加密.
类型:布尔值必需:否KmsKeyId在复制操作期间对映像快照进行加密时要使用的AWSKeyManagementServiceCMK的完整Amazon资源名称(ARN).
有关更多信息,请参阅CopyImage.
类型:字符串必需:否ClientToken您为确保请求幂等性而提供的唯一、区分大小写的标识符.
有关更多信息,请参阅CopyImage.
类型:字符串必需:否152AmazonEC2SystemsManager用户指南aws:createImage输出ImageId已复制映像的ID.
ImageState已复制映像的状态.
有效值:available|pending|failedaws:createImage从已停止的实例创建新AMI.
Important该操作不会隐式停止实例.
您必须使用aws:changeInstanceState操作来停止实例.
如果针对正在运行的实例使用此操作,则生成的AMI可能存在缺陷.
输入此操作支持大多数CreateImage参数.
有关更多信息,请参阅CreateImage.
{"name":"createMyImage","action":"aws:createImage","maxAttempts":3,"onFailure":"Abort","inputs":{"InstanceId":"i-1234567890abcdef0","ImageName":"AMICreatedon{{global:DATE_TIME}}","NoReboot":true,"ImageDescription":"MynewlycreatedAMI"}}实例ID实例的ID.
类型:字符串必需:是ImageName映像的名称.
类型:字符串必需:是ImageDescription映像的描述.
类型:字符串必需:否NoReboot一种布尔文本.
153AmazonEC2SystemsManager用户指南aws:createStack类型:布尔值必需:否BlockDeviceMappings适用于实例的块储存设备.
类型:映射必需:否输出ImageId新建映像的ID.
ImageState作为字符串文本值提供的执行脚本.
如果输入文本值,则必须为Base64编码.
必需:否aws:createStack从模板创建新AWSCloudFormation堆栈.
输入{"name":"makeStack","action":"aws:createStack","maxAttempts":1,"onFailure":"Abort","inputs":{"Capabilities":["CAPABILITY_IAM"],"StackName":"myStack","TemplateURL":"http://s3.
amazonaws.
com/mybucket/myStackTemplate","TimeoutInMinutes":5}}功能必须在AWSCloudFormation可以创建某些堆栈之前指定的值列表.
一些堆栈模板中包含的资源会影响您的AWS账户中的权限.
例如,创新新AWSIdentityandAccessManagement(IAM)用户会影响您账户中的权限.
对于这些堆栈,您必须通过指定此参数来明确确认它们的功能.

有效值仅为CAPABILITY_IAM和CAPABILITY_NAMED_IAM.
以下资源要求您指定此参数.
AWS::IAM::AccessKeyAWS::IAM::GroupAWS::IAM::InstanceProfileAWS::IAM::PolicyAWS::IAM::RoleAWS::IAM::UserAWS::IAM::UserToGroupAddition154AmazonEC2SystemsManager用户指南aws:createStack如果您的堆栈模板包含这些资源,我们建议您查看与之关联的所有权限并在必要时编辑其权限.

如果包含IAM资源,您可以指定任意一个功能.
如果包含具有自定义名称的IAM资源,则必须指定CAPABILITY_NAMED_IAM.
如果您不指定此参数,则此操作会返回InsufficientCapabilities错误.
有关更多信息,请参阅确认AWSCloudFormation模板中的IAM资源.
类型:字符串的数组有效值:CAPABILITY_IAM|CAPABILITY_NAMED_IAM必需:否DisableRollback如果堆栈创建失败,请设置为true以禁用堆栈回滚.
Conditional:您可以指定DisableRollback参数或OnFailure参数,但不能同时指定.
默认值:false类型:布尔值必需:否NotificationARNs用于发布堆栈相关事件的AmazonSNS主题ARN.
您可以使用AmazonSNS控制台https://console.
amazonaws.
cn/sns/v2/home找到SNS主题ARN.
类型:字符串的数组数组成员:最多5项.
必需:否OnFailure如果堆栈创建失败,确定要执行的操作.
您必须指定DO_NOTHING、ROLLBACK或DELETE.
Conditional:您可以指定OnFailure参数或DisableRollback参数,但不能同时指定.
默认值:ROLLBACK类型:字符串有效值:DO_NOTHING|ROLLBACK|DELETE必需:否参数指定堆栈输入参数的Parameter结构列表.
有关更多信息,请参阅参数数据类型.
类型:参数对象数组必需:否ResourceTypes您有权用于此创建堆栈操作的模板资源类型.
例如,AWS::EC2::Instance、AWS::EC2::*或Custom::MyCustomInstance.
使用以下语法描述模板资源类型.
对于所有AWS资源:AWS::*155AmazonEC2SystemsManager用户指南aws:createStack对于所有自定义资源:Custom::*对于指定自定义资源:Custom::logical_ID对于特定AWS服务中的所有资源:AWS::service_name::*对于指定AWS资源:AWS::service_name::resource_logical_ID如果资源类型列表不包括您创建的资源,那么堆栈创建将会失败.
默认情况下,AWSCloudFormation对所有资源类型授予权限.
IAM将此参数用于IAM策略中AWSCloudFormation特定的条件密钥.
有关更多信息,请参阅使用AWSIdentityandAccessManagement控制访问权限.
类型:字符串的数组长度约束:最小长度为1.
长度上限为256.
必需:否RoleARNAWSCloudFormation创建堆栈所代入的IAM角色的Amazon资源名称(ARN).
AWSCloudFormation使用该角色的凭证以您的名义进行调用.
AWSCloudFormation针对堆栈的所有未来操作始终使用此角色.
只要用户有权对堆栈进行操作,AWSCloudFormation会使用此角色,即使用户无权传递它.
确保该角色授予最少的权限.
如果您不指定值,则AWSCloudFormation会使用之前与堆栈关联的角色.
如果角色不可用,则AWSCloudFormation会使用您的用户凭证生成的一个临时会话.
类型:字符串长度约束:最小长度为20.
长度上限为2048.
必需:否StackName与堆栈关联的名称.
名称在您创建堆栈的区域中必须是唯一的.
Note堆栈名称只能包含字母数字字符(区分大小写)和连字符.
该名称必须以字母字符开头,且不得超过128个字符.
类型:字符串必需:是StackPolicyBody包含堆栈策略正文的结构.
有关更多信息,请参阅防止更新堆栈资源.
Conditional:您可以指定StackPolicyBody参数或StackPolicyURL参数,但不能同时指定.
类型:字符串长度约束:最小长度为1.
长度上限为16384.
156AmazonEC2SystemsManager用户指南aws:createStack必需:否StackPolicyURL包含堆栈策略的文件的位置.
URL指向的策略必须位于与堆栈处于同一区域的AmazonS3存储桶中.
堆栈策略允许的最大文件大小为16KB.
Conditional:您可以指定StackPolicyBody参数或StackPolicyURL参数,但不能同时指定.
类型:字符串长度约束:最小长度为1.
长度上限为1350.
必需:否Tags与此堆栈关联的键值对.
AWSCloudFormation还可以将这些标签传播到堆栈中创建的资源.
您可以指定最多10个标签.
类型:标签对象数组必需:否TemplateBody包含最小长度为1字节、最大长度为51200字节的模板正文的结构.
有关更多信息,请参阅模板剖析.
Conditional:您可以指定TemplateBody参数或TemplateURL参数,但不能同时指定.
类型:字符串长度约束:最小长度为1.
必需:否TemplateURL包含模板正文的文件的位置.
URL必须指向一个位于AmazonS3存储桶中的模板.
模板允许的最大大小为460800字节.
有关更多信息,请参阅模板剖析.
Conditional:您可以指定TemplateBody参数或TemplateURL参数,但不能同时指定.
类型:字符串长度约束:最小长度为1.
长度上限为1024.
必需:否TimeoutInMinutes堆栈状态变为CREATE_FAILED前允许经过的时间.
如果未设置DisableRollback或将其设置为false,堆栈将被回滚.
类型:整数有效范围:最小值为1.
必需:否输出堆栈ID堆栈的唯一标识符.
157AmazonEC2SystemsManager用户指南aws:createTags类型:字符串StackStatus堆栈的当前状态.
类型:字符串有效值:CREATE_IN_PROGRESS|CREATE_FAILED|CREATE_COMPLETE|ROLLBACK_IN_PROGRESS|ROLLBACK_FAILED|ROLLBACK_COMPLETE|DELETE_IN_PROGRESS|DELETE_FAILED|DELETE_COMPLETE|UPDATE_IN_PROGRESS|UPDATE_COMPLETE_CLEANUP_IN_PROGRESS|UPDATE_COMPLETE|UPDATE_ROLLBACK_IN_PROGRESS|UPDATE_ROLLBACK_FAILED|UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS|UPDATE_ROLLBACK_COMPLETE|REVIEW_IN_PROGRESS必需:是StackStatusReason与堆栈状态相关联的成功或失败消息.
类型:字符串必需:否有关更多信息,请参阅CreateStack.
安全考虑因素您必须将以下策略分配给IAMAutomation代入角色,才可以使用aws:createStack操作.
有关代入角色的更多信息,请参阅任务1:为Automation创建IAM角色(p.
110).
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["sqs:*","cloudformation:CreateStack","cloudformation:DescribeStacks"],"Resource":"*"}]}aws:createTags为AmazonEC2实例或SystemsManager托管实例创建新标签.
输入此操作支持大多数EC2CreateTags和SSMAddTagsToResource参数.
有关更多信息,请参阅CreateTags和AddTagsToResource.
以下示例说明如何为AMI和实例添加标签以作为特定部门的生产资源.
{158AmazonEC2SystemsManager用户指南aws:deleteImage"name":"createTags","action":"aws:createTags","maxAttempts":3,"onFailure":"Abort","inputs":{"ResourceType":"EC2","ResourceIds":["ami-9a3768fa","i-02951acd5111a8169"],"Tags":[{"Key":"production","Value":""},{"Key":"department","Value":"devops"}]}}ResourceIds要为其添加标签的资源的ID.
如果资源类型不是"EC2",则此字段只能包含单个项目.
类型:字符串列表必需:是Tags要与资源关联的标签.
类型:映射列表必需:是ResourceType要为其添加标签的资源的类型.
如果未提供,则使用默认值"EC2".
类型:字符串必需:否有效值:EC2|ManagedInstance|MaintenanceWindow|Parameter输出无aws:deleteImage删除指定映像和所有的相关快照.
输入此操作仅支持一个参数.
有关更多信息,请参阅DeregisterImage和DeleteSnapshot的相关文档.
{159AmazonEC2SystemsManager用户指南aws:deleteStack"name":"deleteMyImage","action":"aws:deleteImage","maxAttempts":3,"timeoutSeconds":180,"onFailure":"Abort","inputs":{"ImageId":"ami-12345678"}}ImageId要删除的映像的ID.
类型:字符串必需:是输出无aws:deleteStack删除AWSCloudFormation堆栈.
输入{"name":"deleteStack","action":"aws:deleteStack","maxAttempts":1,"onFailure":"Abort","inputs":{"StackName":"{{stackName}}"}}ClientRequestToken此DeleteStack请求的唯一标识符.
如果您计划重试请求以便AWSCloudFormation知道您未在尝试删除同名堆栈,请指定此令牌.
您可以重试DeleteStack请求以验证AWSCloudFormation是否收到了它们.
类型:字符串长度约束:最小长度为1.
长度上限为128.
模式:[a-zA-Z][-a-zA-Z0-9]*必需:否RetainResources.
member.
N此输入仅适用于处于DELETE_FAILED状态的堆栈.
您想要保留的资源的逻辑资源ID的列表.
在删除时,AWSCloudFormation删除堆栈,但不删除保留资源.
如果无法删除某个资源(例如非空AmazonS3存储桶),但需要删除堆栈,则保留资源会很有用.
类型:字符串的数组160AmazonEC2SystemsManager用户指南aws:executeAutomation必需:否RoleARNAWSCloudFormation创建堆栈所代入的IAM角色的Amazon资源名称(ARN).
AWSCloudFormation使用该角色的凭证以您的名义进行调用.
AWSCloudFormation针对堆栈的所有未来操作始终使用此角色.
只要用户有权对堆栈进行操作,AWSCloudFormation会使用此角色,即使用户无权传递它.
确保该角色授予最少的权限.
如果您不指定值,则AWSCloudFormation会使用之前与堆栈关联的角色.
如果角色不可用,则AWSCloudFormation会使用您的用户凭证生成的一个临时会话.
类型:字符串长度约束:最小长度为20.
长度上限为2048.
必需:否StackName与堆栈关联的名称或唯一堆栈ID.
类型:字符串必需:是安全考虑因素您必须将以下策略分配给IAMAutomation代入角色,才可以使用aws:deleteStack操作.
有关代入角色的更多信息,请参阅任务1:为Automation创建IAM角色(p.
110).
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["sqs:*","cloudformation:DeleteStack","cloudformation:DescribeStacks"],"Resource":"*"}]}aws:executeAutomation通过调用辅助自动化文件执行辅助自动化工作流程.
借助此操作,您可以为最常见的工作流程创建自动化文档,并在自动化执行期间引用这些文档.
因为无需跨类似文档复制步骤,此操作可以简化您的自动化文档.

辅助自动化将在启动初始自动化的用户环境中运行.
这意味着辅助自动化将使用与启动初次自动化的用户相同的IAM角色和用户账户.
Important如果您在使用代入角色(使用iam:passRole策略的角色)的辅助自动化中指定参数,则启动主要自动化的用户或角色必须具有在辅助自动化中传递指定的代入角色的权限.
有关为自动化设置代入角色的更多信息,请参阅方法2:使用IAM为Automation配置角色(p.
109).
输入161AmazonEC2SystemsManager用户指南aws:invokeLambdaFunction{"name":"Secondary_Automation_Workflow","action":"aws:executeAutomation","maxAttempts":3,"timeoutSeconds":3600,"onFailure":"Abort","inputs":{"DocumentName":"secondaryWorkflow","RuntimeParameters":{"instanceIds":["i-1234567890abcdef0"]}}}DocumentName要在步骤中执行的辅助自动化文档的名称.
该文档必须属于与主要自动化文档相同的AWS账户.
类型:字符串必需:是DocumentVersion要在步骤中执行的辅助自动化文档的版本.
如果未指定,自动化将运行默认文档版本.

类型:字符串必需:是RuntimeParameters辅助文档执行所需的参数.
映射使用以下格式:{"parameter1":["value1"],"parameter2":["value2"]}类型:映射必需:否输出输出辅助执行生成的输出.
您可以使用以下格式引用输出:Secondary_Automation_Step_Name.
Output类型:StringListExecutionId辅助执行的执行ID.
类型:字符串Status辅助执行的状态.
类型:字符串aws:invokeLambdaFunction调用指定的Lambda函数.
162AmazonEC2SystemsManager用户指南aws:invokeLambdaFunction输入此操作支持Lambda服务的大多数调用参数.
有关更多信息,请参阅调用.
{"name":"invokeMyLambdaFunction","action":"aws:invokeLambdaFunction","maxAttempts":3,"timeoutSeconds":120,"onFailure":"Abort","inputs":{"FunctionName":"MyLambdaFunction"}}FunctionNameLambda函数的名称.
此函数必须存在.
类型:字符串必需:是限定词函数版本或别名.
类型:字符串必需:否InvocationType调用类型.
默认为RequestResponse.
类型:字符串有效值:Event|RequestResponse|DryRun必需:否LogType如果Tail,调用类型必须为RequestResponse.
AWSLambda返回Lambda函数生成的采用base64编码的最后4KB日志数据.
类型:字符串有效值:None|Tail必需:否ClientContext特定于客户端的信息.
必需:否Payload您的Lambda函数的JSON输入.
必需:否163AmazonEC2SystemsManager用户指南aws:runCommand输出StatusCode函数执行状态代码.
FunctionError指示执行Lambda函数时是否出现错误.
如果出现错误,则此字段将显示Handled或Unhandled.
Handled错误由函数报告.
Unhandled错误由AWSLambda检测和报告.
LogResultLambda函数调用的base64编码日志.
只有在调用类型为RequestResponse并且请求了日志时,才存在日志.
PayloadLambda函数返回的对象的JSON表示形式.
只有在调用类型为RequestResponse时才存在有效负载.
aws:runCommand运行指定的命令.
NoteAutomation仅支持一个RunCommand操作的输出.
一个文档可以包括多个RunCommand操作和插件,但一次仅支持对一个操作和插件输出.
输入此操作支持大多数sendcommand参数.
有关更多信息,请参阅SendCommand.
{"name":"installPowerShellModule","action":"aws:runCommand","inputs":{"DocumentName":"AWS-InstallPowerShellModule","InstanceIds":["i-1234567890abcdef0"],"Parameters":{"source":"https://my-s3-url.
com/MyModule.
zip","sourceHash":"ASDFWER12321WRW"}}}DocumentNameRunCommand文档的名称.
类型:字符串必需:是InstanceIds实例的ID.
类型:字符串必需:是164AmazonEC2SystemsManager用户指南aws:runCommand参数文档中指定的必需参数和可选参数.
类型:映射必需:否评论有关此命令的用户定义的信息.
类型:字符串必需:否DocumentHash文档的哈希.
类型:字符串必需:否DocumentHashType哈希的类型.
类型:字符串有效值:Sha256|Sha1必需:否NotificationConfig用于发送通知的配置.
必需:否OutputS3BucketName命令执行响应的S3存储桶的名称.
类型:字符串必需:否OutputS3KeyPrefix前缀.
类型:字符串必需:否ServiceRoleArnIAM角色的ARN.
类型:字符串必需:否TimeoutSecondsrun-command超时值(以秒为单位).
类型:整数165AmazonEC2SystemsManager用户指南aws:runInstances必需:否aws:runInstances启动新实例.
输入此操作支持大多数API参数.
有关更多信息,请参阅RunInstancesAPI文档.
{"name":"launchInstance","action":"aws:runInstances","maxAttempts":3,"timeoutSeconds":1200,"onFailure":"Abort","inputs":{"ImageId":"ami-12345678","InstanceType":"t2.
micro","MinInstanceCount":1,"MaxInstanceCount":1,"IamInstanceProfileName":"myRunCmdRole"}}ImageIdAmazon系统映像(AMI)的ID.
必需:是InstanceType实例的类型.
必需:否MinInstanceCount要启动的实例的最小数量.
必需:否MaxInstanceCount要启动的实例的最大数量.
必需:否AdditionalInfo预留.
必需:否BlockDeviceMappings适用于实例的块储存设备.
必需:否ClientToken用于确保请求的幂等性的标识符.
166AmazonEC2SystemsManager用户指南aws:runInstances必需:否DisableApiTermination启用或禁用实例API终止必需:否EbsOptimized启用或禁用EBS优化.
必需:否IamInstanceProfileArn实例的IAM实例配置文件的ARN.
必需:否IamInstanceProfileName实例的IAM实例配置文件的名称.
必需:否InstanceInitiatedShutdownBehavior指示此实例是否在系统关闭时停止或终止.
必需:否KernelId内核的ID.
必需:否KeyName密钥对的名称.
必需:否监控启动或禁用详细监控.
必需:否NetworkInterfaces网络接口.
必需:否Placement实例的置放.
必需:否PrivateIpAddress主要IPv4地址.
必需:否RamdiskIdRAM磁盘的ID.
167AmazonEC2SystemsManager用户指南aws:sleep必需:否SecurityGroupIds实例的安全组的ID.
必需:否SecurityGroups实例的安全组的名称.
必需:否SubnetId子网ID.
必需:否UserData作为字符串文本值提供的执行脚本.
如果输入文本值,则必须为Base64编码.
必需:否输出InstanceIds实例的ID.
aws:sleep将Automation执行时间延迟指定的时间.
此操作使用国际标准化组织(ISO)8601日期和时间格式.
有关此日期和时间格式的更多信息,请参阅ISO8601.
输入可将执行时间延迟指定的时间.
{"name":"sleep","action":"aws:sleep","inputs":{"Duration":"PT10M"}}还可以将执行时间延迟到指定日期和时间.
如果指定日期和时间已过,操作将立即执行.

{"name":"sleep","action":"aws:sleep","inputs":{"Timestamp":"2020-01-01T01:00:00Z"}}NoteAutomation当前支持的最大延迟为604800秒(7天).
168AmazonEC2SystemsManager用户指南Automation系统变量DurationISO8601持续时间.
您不能指定负数持续时间.
类型:字符串必需:否时间戳ISO8601时间戳.
如果您没有为此参数指定值,那么必须为Duration参数指定一个值.
类型:字符串必需:否输出无Automation系统变量SystemsManagerAutomation文档使用以下变量.
有关如何使用这些变量的示例,请查看AWS-UpdateWindowsAmi文档的JSON源.
查看AWS-UpdateWindowsAmi文档的JSON源.
1.
在AmazonEC2控制台中,展开SystemsManagerSharedResources,然后选择Documents.
2.
选择AWS-UpdateWindowsAmi.
3.
在下方窗格中,选择Content选项卡.
系统变量Automation文档目前支持以下系统变量.
变量详细信息global:ACCOUNT_ID在其中执行自动化的AWSIdentityandAccessManagement(IAM)用户或角色的AWS账户ID.
global:DATE格式为yyyy-MM-dd的日期(执行时间).
global:DATE_TIME格式为yyyy-MM-dd_HH.
mm.
ss的日期和时间(执行时间).
global:REGION在其中执行文档的区域.
例如,us-east-1.
Automation变量Automation文档目前支持以下自动化变量.
变量详细信息automation:EXECUTION_ID分配给当前自动化执行的唯一标识符.
例如,1a2b3c-1a2b3c-1a2b3c-1a2b3c1a2b3c1a2b3c.

169AmazonEC2SystemsManager用户指南术语术语以下术语描述了如何解析变量和参数.
术语定义示例常量ARN没有变量的有效ARNarn:aws:iam::123456789012:role/roleName文档参数在Automation文档的文档级别定义的参数(例如,instanceId).
可在替换基本字符串时使用该参数.
系统会在启动执行时间提供该参数的值.
{"description":"CreateImageDemo","version":"0.
3","assumeRole":"Your_Automation_Assume_Role_ARN","parameters":{"instanceId":{"type":"STRING","description":"Instancetocreateimagefrom"}}系统变量在评估文档的任何部分时,被替换到文档中的常规变量.
"activities":[{"id":"copyImage","activityType":"AWS-CopyImage","maxAttempts":1,"onFailure":"Continue","inputs":{"ImageName":"{{imageName}}","SourceImageId":"{{sourceImageId}}","SourceRegion":"{{sourceRegion}}","Encrypted":true,"ImageDescription":"TestCopyImageDescriptioncreatedon{{global:DATE}}"}}]Automation变量在评估文档的任何部分时,被替换到文档中且与自动化执行相关的变量.
{"name":"runFixedCmds","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS-RunPowerShellScript","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],170AmazonEC2SystemsManager用户指南术语术语定义示例"Parameters":{"commands":["dir","date","echo{Hello{{ssm:administratorName}}}",""{{outputFormat}}"-f"left","right","{{global:DATE}}","{{auto]}}}171AmazonEC2SystemsManager用户指南术语术语定义示例SSM参数参数服务中定义的变量.
该参数未被声明为文档参数.
它可能需要相应访问权限.
{"description":"RunCommandDemo","schemaVersion":"0.
3","assumeRole":"arn:aws:iam::123456789012:role/roleName","parameters":{"commands":{"type":"STRING_LIST","description":"listofcommandstoexecuteaspartoffirststep"},"instanceIds":{"type":"STRING_LIST","description":"listofinstancestoexecutecommandson"}},"mainSteps":[{"name":"runFixedCmds","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS-RunPowerShellScript","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"Parameters":{"commands":["dir","date","echo{Hello{{ssm:administratorName}}}",""{{outputFormat}}"-f"left","right","{{global:DATE}}","{{auto]}}}172AmazonEC2SystemsManager用户指南支持的场景支持的场景场景注释示例创建时的常量ARNassumeRole将执行授权检查,以确定是否允许调用用户传递给定的代入角色.
{"description":"TestallAutomationresolvableparameters","schemaVersion":"0.
3","assumeRole":"arn:aws:iam::123456789012:role/roleName","parameters":{.
.
.
创建时为assumeRole提供的文档参数必须在文档的参数列表中定义.
{"description":"TestallAutomationresolvableparameters","schemaVersion":"0.
3","assumeRole":"{{dynamicARN}}","parameters":{.
.
.
启动时为文档参数提供的值.
客户提供要用于参数的值.
需在文档的参数列表中定义在启动时提供的所有执行输入.
.
.
.
"parameters":{"amiId":{"type":"STRING","default":"ami-7f2e6015","description":"listofcommandstoexecuteaspartoffirststep"},.
.
.
启动Automation执行的输入包括:{"amiId":["ami-12345678"]}在步骤定义中引用的SSM参数客户账户中存在的变量,且文档的assumeRole有权访问该变量.
创建时会执行检查,以确认assumeRole是否拥有访问权限.
无需在文档的参数列表中设置SSM参数.
.
.
.
"mainSteps":[{"name":"RunSomeCommands","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS:RunPowerShell","InstanceIds":[{{LaunchInstance.
InstanceIds}}],"Parameters":{"commands":[173AmazonEC2SystemsManager用户指南支持的场景场景注释示例"echo{Hello{{ssm:administratorName}}}"]}}},.
.
.
在步骤定义中引用的系统变量执行时被替换到文档中的系统变量.
注入到文档中的值与替换发生的时间相关.
举例来说,由于在执行步骤之间需要花费一定时间,因此在步骤1中注入的时间变量的值将与在步骤3中注入的值不同.
无需在文档的参数列表中设置系统变量.
.
.
.
"mainSteps":[{"name":"RunSomeCommands","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS:RunPowerShell","InstanceIds":[{{LaunchInstance.
InstanceIds}}],"Parameters":{"commands":["echo{Thetimeisnow{{global:TIME}}}"]}}},.
.
.
在步骤定义中引用的Automation变量.
无需在文档的参数列表中设置Automation变量.
唯一的受支持Automation变量是automation:EXECUTION_ID.
.
.
.
"mainSteps":[{"name":"invokeLambdaFunction","action":"aws:invokeLambdaFunction","maxAttempts":1,"onFailure":"Continue","inputs":{"FunctionName":"Hello-World-LambdaFunction","Payload":"{"executionId":"{{automation:EXECUTION_ID}}"}"}}.
.
.
174AmazonEC2SystemsManager用户指南不支持的场景场景注释示例在下一步的定义中参考上一步的输出.
这是一个参数重定向.
可使用语法{{stepName.
OutputName}}引用上一步的输出.
客户不能将该语法用于文档参数.
系统会在执行引用步骤时解决该问题.
文档参数中未列出该参数.
.
.
.
"mainSteps":[{"name":"LaunchInstance","action":"aws:runInstances","maxAttempts":1,"onFailure":"Continue","inputs":{"ImageId":"{{amiId}}","MinInstanceCount":1,"MaxInstanceCount":2}},{"name":"changeState","action":"aws:changeInstanceState","maxAttempts":1,"onFailure":"Continue","inputs":{"InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"DesiredState":"terminated"}}.
.
.
不支持的场景场景评论示例创建时为assumeRole提供的SSM参数不支持.
.
.
.
{"description":"TestallAutomationresolvableparameters","schemaVersion":"0.
3","assumeRole":"{{ssm:administratorRoleARN}}","parameters":{.
.
.
启动时为文档参数提供的SSM参数用户在启动时提供了输入参数,而该参数是一个SSM参数.
.
.
"parameters":{175AmazonEC2SystemsManager用户指南不支持的场景场景评论示例"amiId":{"type":"STRING","default":"ami-7f2e6015","description":"listofcommandstoexecuteaspartoffirststep"},.
.
.
Usersuppliesinput:{"amiId":"{{ssm:goldenAMIId}}"}变量步骤定义文档中步骤的定义由变量构建而成.
.
.
.
"mainSteps":[{"name":"LaunchInstance","action":"aws:runInstances","{{attemptModel}}":1,"onFailure":"Continue","inputs":{"ImageId":"ami-12345678","MinInstanceCount":1,"MaxInstanceCount":2}.
.
.
Usersuppliesinput:{"attemptModel":"minAttempts"}176AmazonEC2SystemsManager用户指南不支持的场景场景评论示例交叉引用文档参数用户在启动时提供了输入参数,而该参数引用了文档中的另一参数.
.
.
.
"parameters":{"amiId":{"type":"STRING","default":"ami-7f2e6015","description":"listofcommandstoexecuteaspartoffirststep"},"otherAmiId":{"type":"STRING","description":"TheotheramiIdtotryifthisonefails".
"default":"{{amiId}}"},.
.
.
177AmazonEC2SystemsManager用户指南排除SystemsManagerAutomation的故障场景评论示例多层扩展文档定义了评估变量名称的变量.
它位于变量分隔符(即{{}})内,并扩展为变量/参数的值.
.
.
.
"parameters":{"param1":{"type":"STRING","default":"param2","description":"Theparametertoreference"},"param2":{"type":"STRING","default":"echo{Helloworld}","description":"Whattoexecute"}},"mainSteps":[{"name":"runFixedCmds","action":"aws:runCommand","maxAttempts":1,"onFailure":"Continue","inputs":{"DocumentName":"AWS-RunPowerShellScript","InstanceIds":""{{LaunchInstance.
InstanceIds}},"Parameters":{"commands":["{{{{param1}}}}"]}.
.
.
Note:ThecustomerintentionherewouldbetoexecutearunCommandof"echo{Helloworld}"排除SystemsManagerAutomation的故障利用以下信息帮助您排除Automation服务中的问题.
本主题介绍了依据Automation错误消息解决问题的特定任务.
主题常见Automation错误(p.
179)Automation执行无法启动(p.
186)执行已启动,但是状态为"失败"(p.
187)执行已启动,但超时(p.
188)178AmazonEC2SystemsManager用户指南常见Automation错误常见Automation错误此部分提供有关常见Automation错误的信息.
VPCnotdefined400默认情况下,当Automation运行AWS-UpdateLinuxAmi文档或AWS-UpdateWindowsAmi文档时,系统会在默认VPC(172.
30.
0.
0/16)中创建一个临时实例.
如果您删除了默认VPC,会收到以下错误:VPCnotdefined400要解决此问题,您必须创建一个新的包含子网ID的Automation文档.
复制下面的包含子网ID参数的示例文档,并创建一个新文档.
有关创建文档的信息,请参阅创建Automation文档(p.
123).
AWS-UpdateLinuxAmi{"schemaVersion":"0.
3","description":"UpdatesAMIwithLinuxdistributionpackagesandAmazonsoftware.
Fordetails,seehttps://docs.
aws.
amazon.
com/AWSEC2/latest/UserGuide/sysman-ami-walkthrough.
html","assumeRole":"{{AutomationAssumeRole}}","parameters":{"SourceAmiId":{"type":"String","description":"(Required)ThesourceAmazonMachineImageID.
"},"InstanceIamRole":{"type":"String","description":"(Required)ThenameoftherolethatenablesSystemsManager(SSM)tomanagetheinstance.
","default":"ManagedInstanceProfile"},"AutomationAssumeRole":{"type":"String","description":"(Required)TheARNoftherolethatallowsAutomationtoperformtheactionsonyourbehalf.
","default":"arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole"},"SubnetId":{"type":"String","description":"(Required)Thesubnetthatthecreatedinstancewillbeplacedinto.
"},"TargetAmiName":{"type":"String","description":"(Optional)ThenameofthenewAMIthatwillbecreated.
Defaultisasystem-generatedstringincludingthesourceAMIid,andthecreationtimeanddate.
","default":"UpdateLinuxAmi_from_{{SourceAmiId}}_on_{{global:DATE_TIME}}"},"InstanceType":{"type":"String","description":"(Optional)Typeofinstancetolaunchastheworkspacehost.
Instancetypesvarybyregion.
Defaultist2.
micro.
","default":"t2.
micro"},"PreUpdateScript":{"type":"String","description":"(Optional)URLofascripttorunbeforeupdatesareapplied.
Default(\"none\")istonotrunascript.
","default":"none"},"PostUpdateScript":{179AmazonEC2SystemsManager用户指南常见Automation错误"type":"String","description":"(Optional)URLofascripttorunafterpackageupdatesareapplied.
Default(\"none\")istonotrunascript.
","default":"none"},"IncludePackages":{"type":"String","description":"(Optional)Onlyupdatethesenamedpackages.
Bydefault(\"all\"),allavailableupdatesareapplied.
","default":"all"},"ExcludePackages":{"type":"String","description":"(Optional)Namesofpackagestoholdbackfromupdates,underallconditions.
Bydefault(\"none\"),nopackageisexcluded.
","default":"none"}},"mainSteps":[{"name":"launchInstance","action":"aws:runInstances","maxAttempts":3,"timeoutSeconds":1200,"onFailure":"Abort","inputs":{"ImageId":"{{SourceAmiId}}","InstanceType":"{{InstanceType}}","SubnetId":"{{SubnetId}}","UserData":"IyEvYmluL2Jhc2gNCg0KZnVuY3Rpb24gZ2V0X2NvbnRlbnRzKCkgew0KICAgIGlmIFsgLXggIiQod2hpY2ggY3VybC+ICIkU0NSSVBUX05BTUUiDQogIEZJTEVfU0laRT0kKGR1IC1rIC90bXAvJFNDUklQVF9OQU1FIHwgY3V0IC1mMSkNCiAgZWNobyBBV1"MinInstanceCount":1,"MaxInstanceCount":1,"IamInstanceProfileName":"{{InstanceIamRole}}"}},{"name":"updateOSSoftware","action":"aws:runCommand","maxAttempts":3,"timeoutSeconds":3600,"onFailure":"Abort","inputs":{"DocumentName":"AWS-RunShellScript","InstanceIds":["{{launchInstance.
InstanceIds}}"],"Parameters":{"commands":["set-e","[-x\"$(whichwget)get_contents='wget$1-O-'","[-x\"$(whichcurl)get_contents='curl-s-f$1'","eval$get_contentshttps://aws-ssm-downloads-{{global:REGION}}.
s3.
amazonaws.
com/scripts/aws-update-linux-instance>/tmp/aws-update-linux-instance","chmod+x/tmp/aws-update-linux-instance","/tmp/aws-update-linux-instance--pre-update-script'{{PreUpdateScript}}'--post-update-script'{{PostUpdateScript}}'--include-packages'{{IncludePackages}}'--exclude-packages'{{ExcludePackages}}'2>&1|tee/tmp/aws-update-linux-instance.
log"]}}},{"name":"stopInstance",180AmazonEC2SystemsManager用户指南常见Automation错误"action":"aws:changeInstanceState","maxAttempts":3,"timeoutSeconds":1200,"onFailure":"Abort","inputs":{"InstanceIds":["{{launchInstance.
InstanceIds}}"],"DesiredState":"stopped"}},{"name":"createImage","action":"aws:createImage","maxAttempts":3,"onFailure":"Abort","inputs":{"InstanceId":"{{launchInstance.
InstanceIds}}","ImageName":"{{TargetAmiName}}","NoReboot":true,"ImageDescription":"AMIGeneratedbyEC2Automationon{{global:DATE_TIME}}from{{SourceAmiId}}"}},{"name":"terminateInstance","action":"aws:changeInstanceState","maxAttempts":3,"onFailure":"Continue","inputs":{"InstanceIds":["{{launchInstance.
InstanceIds}}"],"DesiredState":"terminated"}}],"outputs":["createImage.
ImageId"]}AWS-UpdateWindowsAmi{"schemaVersion":"0.
3","description":"UpdatesaMicrosoftWindowsAMI.
BydefaultitwillinstallallWindowsupdates,Amazonsoftware,andAmazondrivers.
ItwillthensysprepandcreateanewAMI.
SupportsWindowsServer2008R2andgreater.
","assumeRole":"{{AutomationAssumeRole}}","parameters":{"SourceAmiId":{"type":"String","description":"(Required)ThesourceAmazonMachineImageID.
"},"IamInstanceProfileName":{"type":"String","description":"(Required)ThenameoftherolethatenablesSystemsManagertomanagetheinstance.
","default":"ManagedInstanceProfile"},"AutomationAssumeRole":{"type":"String","description":"(Required)TheARNoftherolethatallowsAutomationtoperformtheactionsonyourbehalf.
",181AmazonEC2SystemsManager用户指南常见Automation错误"default":"arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole"},"SubnetId":{"type":"String","description":"(Required)Thesubnetthatthecreatedinstancewillbeplacedinto.
"},"TargetAmiName":{"type":"String","description":"(Optional)ThenameofthenewAMIthatwillbecreated.
Defaultisasystem-generatedstringincludingthesourceAMIid,andthecreationtimeanddate.
","default":"UpdateWindowsAmi_from_{{SourceAmiId}}_on_{{global:DATE_TIME}}"},"InstanceType":{"type":"String","description":"(Optional)Typeofinstancetolaunchastheworkspacehost.
Instancetypesvarybyregion.
Defaultist2.
medium.
","default":"t2.
medium"},"IncludeKbs":{"type":"String","description":"(Optional)SpecifyoneormoreMicrosoftKnowledgeBase(KB)articleIDstoinclude.
YoucaninstallmultipleIDsusingcomma-separatedvalues.
Whenspecified,thecategoriesandsecuritylevelvaluesareignored.
Validformats:KB9876543or9876543.
","default":""},"ExcludeKbs":{"type":"String","description":"(Optional)SpecifyoneormoreMicrosoftKnowledgeBase(KB)articleIDstoexclude.
YoucanexcludemultipleIDsusingcomma-separatedvalues.
Whenspecified,alltheseKBsareexcludedfrominstallprocess.
Validformats:KB9876543or9876543.
","default":""},"Categories":{"type":"String","description":"(Optional)Specifyoneormoreupdatecategories.
Youcanfiltercategoriesusingcomma-separatedvalues.
Bydefaultpatchesforallcategoriesareselected.
Ifvaluesupplied,theupdatelistisfilteredbythosevalues.
Options:CriticalUpdate,SecurityUpdate,DefinitionUpdate,UpdateRollup,ServicePack,Tool,UpdateorDriver.
Validformatsincludeasingleentry,forexample:CriticalUpdate.
Or,youcanspecifyacommaseparatedlist:CriticalUpdate,SecurityUpdate,DefinitionUpdate.
NOTE:Therecannotbeanyspacesaroundthecommas.
","default":""},"SeverityLevels":{"type":"String","description":"(Optional)SpecifyoneormoreMSRCseveritylevelsassociatedwithanupdate.
Youcanfilterseveritylevelsusingcomma-separatedvalues.
Bydefaultpatchesforallsecuritylevelsareselected.
Ifvaluesupplied,theupdatelistisfilteredbythosevalues.
Options:Critical,Important,Low,ModerateorUnspecified.
Validformatsincludeasingleentry,forexample:Critical.
Or,youcanspecifyacommaseparatedlist:Critical,Important,Low.
","default":""},"PreUpdateScript":{"type":"String","description":"(Optional)Ascriptprovidedasastring.
ItwillexecutepriortoinstallingOSupdates.
","default":""},"PostUpdateScript":{"type":"String","description":"(Optional)Ascriptprovidedasastring.
ItwillexecuteafterinstallingOSupdates.
",182AmazonEC2SystemsManager用户指南常见Automation错误"default":""}},"mainSteps":[{"name":"LaunchInstance","action":"aws:runInstances","timeoutSeconds":1800,"maxAttempts":3,"onFailure":"Abort","inputs":{"ImageId":"{{SourceAmiId}}","InstanceType":"{{InstanceType}}","SubnetId":"{{SubnetId}}","MinInstanceCount":1,"MaxInstanceCount":1,"IamInstanceProfileName":"{{IamInstanceProfileName}}"}},{"name":"RunPreUpdateScript","action":"aws:runCommand","maxAttempts":3,"onFailure":"Abort","timeoutSeconds":1800,"inputs":{"DocumentName":"AWS-RunPowerShellScript","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"Parameters":{"commands":"{{PreUpdateScript}}"}}},{"name":"UpdateSSMAgent","action":"aws:runCommand","maxAttempts":3,"onFailure":"Abort","timeoutSeconds":600,"inputs":{"DocumentName":"AWS-UpdateSSMAgent","InstanceIds":["{{LaunchInstance.
InstanceIds}}"]}},{"name":"UpdateEC2Config","action":"aws:runCommand","maxAttempts":3,"onFailure":"Abort","timeoutSeconds":7200,"inputs":{"DocumentName":"AWS-InstallPowerShellModule","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"Parameters":{"executionTimeout":"7200","source":"https://aws-ssm-downloads-{{global:REGION}}.
s3.
amazonaws.
com/PSModules/AWSUpdateWindowsInstance/Latest/AWSUpdateWindowsInstance.
zip","sourceHash":"14CAD416F4A054894EBD2091EA4B99E542368BE5895BDD466B567C1ABA87C87C","commands":[183AmazonEC2SystemsManager用户指南常见Automation错误"Set-ExecutionPolicy-ExecutionPolicyUnrestricted-Force","Import-ModuleAWSUpdateWindowsInstance","if([Environment]::OSVersion.
Version.
Major-ge10){","Install-AwsUwiEC2Launch-Id{{automation:EXECUTION_ID}}","}else{","Install-AwsUwiEC2Config-Id{{automation:EXECUTION_ID}}","}"]}}},{"name":"UpdateAWSPVDriver","action":"aws:runCommand","maxAttempts":3,"onFailure":"Abort","timeoutSeconds":600,"inputs":{"DocumentName":"AWS-ConfigureAWSPackage","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"Parameters":{"name":"AWSPVDriver","action":"Install"}}},{"name":"InstallWindowsUpdates","action":"aws:runCommand","maxAttempts":3,"onFailure":"Abort","timeoutSeconds":14400,"inputs":{"DocumentName":"AWS-InstallWindowsUpdates","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"Parameters":{"Action":"Install","IncludeKbs":"{{IncludeKbs}}","ExcludeKbs":"{{ExcludeKbs}}","Categories":"{{Categories}}","SeverityLevels":"{{SeverityLevels}}"}}},{"name":"RunPostUpdateScript","action":"aws:runCommand","maxAttempts":3,"onFailure":"Abort","timeoutSeconds":1800,"inputs":{"DocumentName":"AWS-RunPowerShellScript","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"Parameters":{"commands":"{{PostUpdateScript}}"}}},{"name":"RunSysprepGeneralize",184AmazonEC2SystemsManager用户指南常见Automation错误"action":"aws:runCommand","maxAttempts":3,"onFailure":"Abort","timeoutSeconds":7200,"inputs":{"DocumentName":"AWS-InstallPowerShellModule","InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"Parameters":{"executionTimeout":"7200","source":"https://aws-ssm-downloads-{{global:REGION}}.
s3.
amazonaws.
com/PSModules/AWSUpdateWindowsInstance/Latest/AWSUpdateWindowsInstance.
zip","sourceHash":"14CAD416F4A054894EBD2091EA4B99E542368BE5895BDD466B567C1ABA87C87C","commands":["Set-ExecutionPolicy-ExecutionPolicyUnrestricted-Force","Import-ModuleAWSUpdateWindowsInstance","Start-AwsUwiSysprep-Id{{automation:EXECUTION_ID}}"]}}},{"name":"StopInstance","action":"aws:changeInstanceState","maxAttempts":3,"timeoutSeconds":7200,"onFailure":"Abort","inputs":{"InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"CheckStateOnly":false,"DesiredState":"stopped"}},{"name":"CreateImage","action":"aws:createImage","maxAttempts":3,"onFailure":"Abort","inputs":{"InstanceId":"{{LaunchInstance.
InstanceIds}}","ImageName":"{{TargetAmiName}}","NoReboot":true,"ImageDescription":"TestCreateImageDescription"}},{"name":"CreateTags","action":"aws:createTags","maxAttempts":3,"onFailure":"Abort","inputs":{"ResourceType":"EC2","ResourceIds":["{{CreateImage.
ImageId}}"],"Tags":[{"Key":"Original_AMI_ID","Value":"Createdfrom{{SourceAmiId}}"}]}185AmazonEC2SystemsManager用户指南Automation执行无法启动},{"name":"TerminateInstance","action":"aws:changeInstanceState","maxAttempts":3,"onFailure":"Abort","inputs":{"InstanceIds":["{{LaunchInstance.
InstanceIds}}"],"DesiredState":"terminated"}}],"outputs":["CreateImage.
ImageId"]}Automation执行无法启动如果您没有为Automation正确配置IAM用户、角色和策略,Automation执行可能因拒绝访问错误或代入角色无效错误而失败.
拒绝访问以下示例描述了Automation执行因拒绝访问错误无法启动的情况.
对SystemsManagerAPI的访问被拒绝错误消息:User:userarnisnotauthorizedtoperform:ssm:StartAutomationExecutiononresource:documentarn(Service:AWSSimpleSystemsManagement;StatusCode:400;ErrorCode:AccessDeniedException;RequestID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)可能的原因1:尝试启动Automation执行的IAM用户没有调用StartAutomationExecutionAPI的权限.
要解决此问题,请将所需的IAM策略附加到用于启动执行的用户账户.
有关更多信息,请参阅任务4:配置用户对Automation的访问权限(p.
111).
可能的原因2:尝试启动Automation执行的IAM用户具有调用StartAutomationExecutionAPI的权限,但是无权使用指定Automation文档来调用该API.
要解决此问题,请将所需的IAM策略附加到用于启动执行的用户账户.
有关更多信息,请参阅任务4:配置用户对Automation的访问权限(p.
111).
由于不具备PassRole权限访问被拒错误消息:User:userarnisnotauthorizedtoperform:iam:PassRoleonresource:automationassumerolearn(Service:AWSSimpleSystemsManagement;StatusCode:400;ErrorCode:AccessDeniedException;RequestID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)尝试启动Automation执行的IAM用户不具有代入角色所需的PassRole权限.
要解决此问题,请将iam:PassRole策略附加到尝试启动Automation执行的IAM用户的角色.
有关更多信息,请参阅任务3:将iam:PassRole策略附加到您的Automation角色(p.
111).
代入角色无效执行Automation时,要么在文档中提供代入角色,要么将代入角色作为文档的一个参数值传递.
如果未指定或未正确配置代入角色,可出现不同类型的错误.
186AmazonEC2SystemsManager用户指南执行已启动,但是状态为"失败"代入角色格式错误错误消息:TheformatofthesuppliedassumeroleARNisinvalid.
代入角色格式不正确.
要解决该问题,请验证Automation文档中是否指定了有效的代入角色,或者在执行Automation时指定为运行时参数.
无法代入代入角色错误消息:Thedefinedassumeroleisunabletobeassumed.
(Service:AWSSimpleSystemsManagement;StatusCode:400;ErrorCode:InvalidAutomationExecutionParametersException;RequestID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)可能的原因1:代入角色不存在.
要解决该问题,请创建角色.
有关更多信息,请参阅thesectioncalled"设置Automation"(p.
107).
创建此角色的特定详细信息在以下主题中介绍任务1:为Automation创建IAM角色(p.
110).
可能的原因2:代入角色没有与SystemsManager服务的信任关系.
要解决该问题,请创建信任关系.
有关更多信息,请参阅任务2:为Automation添加信任关系(p.
110).
执行已启动,但是状态为"失败"特定操作失败Automation文档包含步骤,并且步骤按顺序执行.
每个步骤调用一项或多项AWS服务API.
API可确定本步的输入、行为和输出.
在多个位置错误可能导致步骤失败.
失败消息指示出现错误的时间和位置.

要查看EC2控制台中的失败消息,请选择失败步骤的ViewOutputs链接.
要查看CLI中的失败消息,请调用get-automation-execution并查找失败的StepExecution中的FailureMessage属性.
在以下示例中,与aws:runInstance操作相关联的步骤失败.
每个示例探讨了不同类型的错误.
缺少映像错误消息:AutomationStepExecutionfailswhenitislaunchingtheinstance(s).
GetExceptionfromRunInstancesAPIofec2Service.
ExceptionMessagefromRunInstancesAPI:[Theimageid'[amiid]'doesnotexist(Service:AmazonEC2;StatusCode:400;ErrorCode:InvalidAMIID.
NotFound;RequestID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)].
PleaserefertoAutomationServiceTroubleshootingGuideformorediagnosisdetails.
aws:runInstances操作收到的ImageId输入不存在.
要解决该问题,请用正确的AMIID更新automation文档或参数值.
代入角色策略没有足够的权限错误消息:AutomationStepExecutionfailswhenitislaunchingtheinstance(s).
GetExceptionfromRunInstancesAPIofec2Service.
ExceptionMessagefromRunInstancesAPI:[Youarenotauthorizedtoperformthisoperation.
Encodedauthorizationfailuremessage:xxxxxxx(Service:AmazonEC2;StatusCode:403;ErrorCode:UnauthorizedOperation;RequestID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)].
PleaserefertoAutomationServiceTroubleshootingGuideformorediagnosisdetails.
代入角色的权限不足,无法在AmazonEC2实例上调用RunInstancesAPI.
要解决此问题,请将IAM策略附加到有权调用RunInstancesAPI的代入角色.
有关更多信息,请参见方法2:使用IAM为Automation配置角色(p.
109).
意外状态187AmazonEC2SystemsManager用户指南执行已启动,但超时错误消息:Stepfailswhenitisverifyinglaunchedinstance(s)arereadytobeused.
Instancei-xxxxxxxxxenteredunexpectedstate:shutting-down.
PleaserefertoAutomationServiceTroubleshootingGuideformorediagnosisdetails.
可能的原因1:实例或AmazonEC2服务有问题.
要解决此问题,请登录到实例或查阅实例系统日志以了解实例启动关闭的原因.
可能的原因2:为aws:runInstances操作指定的用户数据脚本有问题或语法错误.
验证用户数据脚本的语法.
另外,请验证用户数据脚本是否未关闭实例,或者调用了关闭该实例的其他脚本.

操作特定失败参考如果步骤失败,失败消息可能指示失败时正在调用哪个服务.
下表列出每个操作调用的服务.
该表还提供指向有关每个服务的信息的链接.
Action此操作调用的AWS服务有关此服务的信息内容故障排除aws:runInstancesAmazonEC2AmazonEC2用户指南EC2实例故障排除aws:changeInstanceStateAmazonEC2AmazonEC2用户指南EC2实例故障排除aws:runCommandSystemsManagerSystemsManagerRunCommand对RunCommand进行故障排除aws:createImageAmazonEC2AmazonMachineImagesaws:createStackAWSCloudFormationAWSCloudFormationUserGuideAWSCloudFormation疑难解答aws:deleteStackAWSCloudFormationAWSCloudFormationUserGuideAWSCloudFormation疑难解答aws:deleteImageAmazonEC2AmazonMachineImagesaws:copyImageAmazonEC2AmazonMachineImagesaws:createTagAmazonEC2,SystemsManagerEC2资源和标签aws:invokeLambdaFunctionAWSLambdaAWSLambdaDeveloperGuideLambda故障排除Automation服务内部错误错误消息:InternalServerError.
PleaserefertoAutomationServiceTroubleshootingGuideformorediagnosisdetails.
Automation服务中的一个问题导致指定Automation文档无法正确执行.
要解决此问题,请联系AWSSupport.
请提供执行ID和客户ID(如果有).
执行已启动,但超时错误消息:Steptimedoutwhilestepisverifyinglaunchedinstance(s)arereadytobeused.
PleaserefertoAutomationServiceTroubleshootingGuideformorediagnosisdetails.
188AmazonEC2SystemsManager用户指南执行已启动,但超时aws:runInstances操作中的步骤超时.
如果执行本步操作所花的时间超出此步中为timeoutSeconds指定的值,就会发生这种情况.
要解决该问题,请为timeoutSeconds指定较长的值.
如果不能解决问题,请调查步骤执行时间超出预期的原因.
189AmazonEC2SystemsManager用户指南开始使用InventorySystemsManagerInventory管理您可以使用SystemsManagerInventory在混合环境中从AmazonEC2实例和本地服务器或虚拟机(VM)中收集操作系统(OS)、应用程序和实例元数据.
您可以查询元数据以快速了解哪些实例运行的是软件策略需要的软件和配置,以及哪些实例需要更新.
内容开始使用Inventory(p.
190)关于SystemsManagerInventory(p.
190)配置清单收集(p.
193)配置清单的资源数据同步(p.
194)查询清单收集(p.
196)SystemsManagerInventoryManager演练(p.
196)开始使用Inventory要开始使用Inventory,请完成以下任务.
任务了解更多信息验证SystemsManager先决条件.
SystemsManager先决条件(p.
5)通过创建SystemsManager状态管理器关联来配置Inventory.
配置清单收集(p.
193)(AmazonEC2控制台)使用AWSCLI收集清单(p.
198)关于SystemsManagerInventory当您配置SystemsManagerInventory时,您可以指定要收集的元数据类型、应从中收集元数据的实例以及元数据收集的计划.
这些配置将与您的AWS账户一起作为状态管理器关联内容保存.
NoteInventory仅收集元数据.
它不收集任何个人数据或专有数据.
190AmazonEC2SystemsManager用户指南使用自定义清单下表介绍了您要配置的Inventory收集的不同方面.
配置详细信息收集的信息类型您将指定Inventory从托管实例中收集的元数据类型.
您可以配置清单以收集以下类型的元数据:实例详细信息:系统名称、操作系统名称、操作系统版本、最后一次启动、DNS、域、工作组和操作系统架构等.
网络配置详细:IP地址、MAC地址、DNS、网关和子网掩码.
应用程序详细信息:应用程序名称、发布者和版本.
AWS组件详细信息:EC2驱动程序、代理和版本.
WindowsServer更新记录.
自定义清单的详细信息.
自定义清单在下文详细介绍.
从中收集信息的实例您可以逐个选择实例或使用AmazonEC2标签将实例组设为目标.
何时收集信息您可以指定几分钟、几小时、几天和几周的收集间隔.
最短收集间隔为30分钟.
根据所收集的数据量,系统可能需要几分钟将数据报告到您指定的输出中.
收集信息后,元数据会通过安全HTTPS通道发送到一个只能从您的AWS账户访问的纯文本AWS存储.
您可以在指定的AmazonS3存储桶中查看数据,或在托管实例的清单选项卡上的AmazonEC2控制台上中查看数据.
Inventory选项卡带有若干预定义的筛选器,可以帮助您查询数据.
要开始在托管实例上收集清单,请参阅配置清单收集(p.
193)和使用AWSCLI收集清单(p.
198).
使用自定义清单您可以通过创建自定义清单将所需的任何元数据分配给您的实例.
例如,假如您负责管理数据中心多个机架中的大量服务器,而且这些服务器已配置为SystemsManager托管实例.
目前,您在电子表格中存储服务器机架位置的相关信息.
借助自定义清单,您可以指定每个实例的机架位置作为实例上的元数据.
当您使用SystemsManager收集清单时,该元数据与其他清单元数据一起收集.
随后您可以使用资源数据同步将所有清单元数据传输到中央AmazonS3存储桶并查询数据.
要将自定义清单分配给实例,可以使用SystemsManagerPutInventoryAPI操作,如将自定义清单元数据分配给某个实例(p.
197)中所述.
或者,您可以创建自定义清单JSON文件并将其上传到实例.
本部分描述了如何创建JSON文件.
{"SchemaVersion":"1.
0","TypeName":"Custom:RackInformation","Content":{"Location":"US-EAST-01.
DC.
RACK1","InstalledTime":"2016-01-01T01:01:01Z","vendor":"DELL","Zone":"BJS12","TimeZone":"UTC-8"}191AmazonEC2SystemsManager用户指南使用自定义清单}如下例所示,您在文件中还可以指定多个项目.
{"SchemaVersion":"1.
0","TypeName":"Custom:PuppetModuleInfo","Content":[{"Name":"puppetlabs/aws","Version":"1.
0"},{"Name":"puppetlabs/dsc","Version":"2.
0"}]}自定义清单的JSON架构需要SchemaVersion、TypeName和Content部分,但您可以定义这些部分的信息.
{"SchemaVersion":"user_defined","TypeName":"Custom:user_defined","Content":{"user_defined_attribute1":"user_defined_value1","user_defined_attribute2":"user_defined_value2","user_defined_attribute3":"user_defined_value3","user_defined_attribute4":"user_defined_value4"}}TypeName最长为100个字符.
此外,TypeName部分必须以Custom开头.
例如,Custom:PuppetModuleInfo.
Custom和您指定的区区必须以一个大写字母开头.
以下示例可能会引起异常:"CUSTOM:RackInformation"、"custom:rackinformation".
Content部分包括属性和区区.
这些项目不区分大小写.
但是,如果您定义了属性(例如"Vendor":"DELL"),在自定义清单文件中必须一致地引用此属性.
如果您在一个文件中指定"Vendor":"DELL"(vendor使用大写字母"V"),在另一个文件中指定"vendor":"DELL"(vendor使用小写字母"v"),系统会返回错误.
Note您必须使用.
json扩展名保存文件.
创建文件之后,您必须在实例上保存文件.
下表说明了自定义清单JSON文件必须存储在实例中的哪个位置:操作系统路径Windows%SystemDrive%\ProgramData\Amazon\SSM\InstanceData\\inventory\customLinux/var/lib/amazon/ssm//inventory/custom有关如何使用自定义清单的示例,请参阅使用EC2SystemsManager自定义清单类型获取队列的磁盘利用率.
192AmazonEC2SystemsManager用户指南相关AWS服务相关AWS服务SystemsManagerInventory可以提供您当前清单的快照,以便帮助您管理软件策略并改善整个队列的安全状况.
您可以使用以下AWS服务来扩展清单管理和迁移功能.
AWSConfig可以提供清单的更改历史记录,并支持创建规则,用于在配置项更改时生成通知.
有关更多信息,请参阅AWSConfigDeveloperGuide中的记录AmazonEC2托管实例清单.
AWSApplicationDiscoveryService旨在从您的本地VM中收集有关操作系统类型、应用程序清单、流程、连接和服务器性能指标的清单,以便支持成功迁移到AWS.
有关更多信息,请参阅ApplicationDiscoveryServiceUserGuide.
配置清单收集本部分介绍了如何使用AmazonEC2控制台在一个或多个托管实例上配置清单收集.
本部分还介绍如何使用SystemsManager资源数据同步在单个AmazonS3存储桶中聚合多个AWS账户和区域的清单数据.
有关如何使用AWSCLI来配置清单收集的示例,请参阅SystemsManagerInventoryManager演练(p.
196).
开始前的准备工作配置清单收集前,请完成以下任务.
验证您的实例是否满足SystemsManager先决条件.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
(可选)创建用于收集自定义清单的JSON文件.
有关更多信息,请参阅使用自定义清单(p.
191).
配置收集请按照以下流程通过AmazonEC2控制台来配置对托管实例的清单收集.
Note当您配置清单收集时,您将从创建SystemsManagerStateManager关联开始.
SystemsManager会在关联运行时收集清单数据.
如果您不先创建关联,并试图使用RunCommand等调用aws:softwareInventory插件,则系统会返回以下错误:Theaws:softwareInventoryplugincanonlybeinvokedviassm-associate.
还要注意,一个实例一次只能配置一个Inventory关联.
如果您为实例配置了两个或更多关联,则关联不会运行,而且系统不会收集清单数据.
配置清单收集1.
打开AmazonEC2控制台,在导航窗格中展开SystemsManagerSharedResources,然后选择ManagedInstances.
2.
选择设置清单.
3.
如果您想使用EC2标签配置多个实例的清单,请在目标部分,选择SpecifyaTag.
如果您想单独选择要配置清单的实例,请选择ManuallySelectInstances.
Note如果使用标签,则将来使用相同标签创建的所有实例也将报告清单.
4.
在计划部分,选择您希望系统从实例中收集清单元数据的频率.
5.
在Parameters部分,使用列表启用或禁用不同类型的清单收集.
6.
如果您想在AmazonS3存储桶中存储关联执行状态,请在Advanced部分选择WritetoS3.
193AmazonEC2SystemsManager用户指南配置清单的资源数据同步7.
选择设置清单,然后选择确定.
8.
在托管实例页面中,选择您刚刚配置清单的实例,然后选择描述选择卡.
创建关联前,AssociationStatus显示为Pending.
如果状态显示Failed,请验证您的实例上是否安装了最新版本的SSM代理.
9.
在收集时间段过后,请选择一个托管实例,然后选择Inventory选项卡.
10.
使用清单类型列表筛选不同类型的清单数据.
在配置清单收集后,我们建议您配置SystemsManager资源数据同步.
资源数据同步将所有清单数据集中在目标AmazonS3存储桶中,当收集新的清单数据时,将会自动更新中央存储.
所有清单数据存储在目标AmazonS3存储桶中后,您可以使用AmazonAthena和AmazonQuickSight等服务查询和分析聚合数据.
有关更多信息,请参阅配置清单的资源数据同步(p.
194).
配置清单的资源数据同步您可以使用SystemsManager资源数据同步将从所有托管实例收集的清单数据存储到单个AmazonS3存储桶.
收集新的清单数据后,资源数据同步自动更新集中式数据.
所有清单数据存储在目标AmazonS3存储桶中后,您可以使用AmazonAthena和AmazonQuickSight等服务查询和分析聚合数据.
例如,假设您将清单配置为收集关于操作系统(OS)和150个托管实例机群上运行的应用程序的数据.
其中部分实例位于混合数据中心,而其他实例在多个AWS区域中的AmazonEC2中运行.
如果您未配置清单的资源数据同步,则您需要手动收集已收集的每个实例的清单数据,或者必须创建脚本来收集这些信息.
然后您需要将数据传输到应用程序中,以便运行查询和分析数据.
使用资源数据同步,您可以通过一次性操作同步所有托管实例中的所有清单数据.
在创建同步时,可以指定多个AWS账户和AWS区域的托管实例.
在成功创建同步后,SystemsManager创建所有清单数据的基准,并将其保存在目标AmazonS3存储桶中.
当收集新的清单数据时,SystemsManager自动更新AmazonS3存储桶中的数据.
然后您可以快速有效地将数据传输到AmazonAthena和AmazonQuickSight.
图1显示了资源数据同步如何将AmazonEC2和混合环境中的托管实例的清单数据聚合到目标AmazonS3存储桶.
该图还显示了资源数据同步如何处理多个AWS账户和AWS区域.
图1:对多个AWS账户和AWS区域进行资源数据同步194AmazonEC2SystemsManager用户指南创建清单的资源数据同步如果删除托管实例,资源数据同步会保留删除的实例的清单文件.
但是,对于正在运行的实例,当新文件创建并写入到AmazonS3存储桶中时,资源数据同步自动覆盖旧清单文件.
如果要随着时间推移跟踪清单变化,您可以使用AWSConfig服务跟踪MangagedInstanceInventory资源类型.
有关更多信息,请参见AWSConfig入门.
相关内容资源数据同步使用下列API操作:CreateResourceDataSync、ListResourceDataSync和DeleteResourceDataSync.
AmazonQuickSight是一项业务分析服务,可轻松构建可视化内容,以便您分析数据并从数据中获得见解.
单击一次即可从QuickSight连接到Athena.
您不需要提供终端节点或用户名和密码.
您可以选择Athena作为您的数据源,选择要分析的数据库和表,然后开始在QuickSight中实现数据可视化.
有关更多信息,请参阅AmazonQuickSightUserGuide.
AmazonAthena是一种交互式查询服务,可使用此服务通过标准SQL查询在AmazonS3中轻松分析数据.
Athena无需运行AmazonEC2实例,因此无需管理基础设施.
您只需为您运行的查询付费.
有关更多信息,请参阅AmazonAthenaUserGuide.
创建清单的资源数据同步通过使用AmazonEC2控制台,使用以下程序创建清单的资源数据同步.
Note您可以使用AWSKeyManagementService(AWSKeyManagementService)加密SystemsManager发送到集中的AmazonS3存储桶的数据.
目前,您只能使用AWSCLI配置加密.
有关如何使用AWSCLI创建加密同步和如何处理AmazonAthena和AmazonQuickSight中的集中式数据的示例,请参阅使用资源数据同步聚合清单数据(p.
200).
创建清单的资源数据同步1.
OpentheAmazonS3consoleathttps://console.
amazonaws.
cn/s3/.
2.
创建用来存储聚合清单数据的存储桶.
有关更多信息,请参阅AmazonSimpleStorageServiceGettingStartedGuide中的创建存储桶.
请记下存储桶名称和创建此存储桶的AWS区域.
3.
选择Permissions选项卡,然后选择BucketPolicy.
4.
将下面的存储桶策略复制并粘贴到策略编辑器中.
使用您创建的AmazonS3存储桶的名称和有效的AWS账户ID替换Bucket-Name和Account-ID.
或者,使用AmazonS3前缀(子目录)的名称替换Bucket-Prefix.
如果您未创建前缀,则从该策略的ARN中删除Bucket-Prefix/.
{"Version":"2012-10-17","Statement":[{"Sid":"SSMBucketPermissionsCheck","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"s3:GetBucketAcl","Resource":"arn:aws:s3:::Bucket-Name"},{"Sid":"SSMBucketDelivery","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"s3:PutObject",195AmazonEC2SystemsManager用户指南查询清单收集"Resource":["arn:aws:s3:::Bucket-Name/Bucket-Prefix/*/accountid=Account-ID/*"],"Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}}}]}5.
打开AmazonEC2控制台,在导航窗格中展开SystemsManagerSharedResources,然后选择ManagedInstances.
6.
选择ResourceDataSyncs,然后选择CreateaResourceDataSync.
7.
在SyncName字段中,键入同步配置的名称.
8.
在BucketName字段中,键入您在此程序开始时创建的AmazonS3存储桶的名称.
9.
(可选)在BucketPrefix字段中,键入AmazonS3存储桶前缀(子目录)的名称.
10.
在BucketRegion字段中,如果您创建的AmazonS3存储桶位于当前AWS区域,则选择Thisregion.
如果存储桶位于不同的AWS区域,则选择Anotherregion,然后键入该区域的名称.
Note如果同步和目标AmazonS3存储桶位于不同区域,您可能需要支付数据传输价格.
有关更多信息,请参阅AmazonS3定价.
11.
选择Create.
查询清单收集在收集清单数据后,您可以使用清单选项卡上的筛选功能来筛选出或筛选掉您想要的实例.

筛选托管实例的元数据1.
打开AmazonEC2控制台,在导航窗格中展开SystemsManagerSharedResources,然后选择ManagedInstances.
2.
选择清单选项卡.
3.
在清单类型列表中,选择要筛选的属性.
例如:AWS:Application.
4.
选择清单类型列表下的筛选栏以查看要筛选的属性列表.
5.
从列表中选择一个分隔符.
例如,选择begins-with.
6.
键入一个值.
例如,键入"ssm",然后从筛选栏左侧选择搜索图标.
系统会返回所有相关的托管实例.

Note您可以组合多个筛选条件来细化搜索.
SystemsManagerInventoryManager演练使用以下演练管理清单数据.
我们建议您首先在测试环境中使用托管实例执行这些演练.

内容将自定义清单元数据分配给某个实例(p.
197)196AmazonEC2SystemsManager用户指南将自定义清单元数据分配给某个实例使用AWSCLI收集清单(p.
198)使用资源数据同步聚合清单数据(p.
200)将自定义清单元数据分配给某个实例以下步骤为您演示了使用PutInventoryAPI操作将自定义清单元数据分配给托管实例的过程.
此示例将机架位置信息分配给某个实例.
有关自定义清单的更多信息,请参阅使用自定义清单(p.
191).
将自定义清单元数据分配给某个实例1.
在您的本地计算机上,下载最新版本的AWSCLI.
2.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER3.
执行以下命令,以便将机架位置信息分配给某个实例.
awsssmput-inventory--instance-id"ID"--items'[{"CaptureTime":"2016-08-22T10:01:01Z","TypeName":"Custom:RackInfo","Content":[{"RackLocation":"BayB/RowC/RackD/ShelfE"}],"SchemaVersion":"1.
0"}]'4.
执行以下命令以便查看该实例的自定义清单条目.
awsssmlist-inventory-entries--instance-idID--type-name"Custom:RackInfo"系统会使用类似以下形式的信息进行响应.
{"InstanceId":"ID","TypeName":"Custom:RackInfo","Entries":[{"RackLocation":"BayB/RowC/RackD/ShelfE"}],"SchemaVersion":"1.
0","CaptureTime":"2016-08-22T10:01:01Z"}5.
执行以下命令以便查看自定义元数据.
awsssmget-inventory系统会使用类似以下形式的信息进行响应.
{"Entities":[{197AmazonEC2SystemsManager用户指南使用AWSCLI收集清单"Data":{"AWS:InstanceInformation":{"Content":[{"ComputerName":"WIN-9JHCEPEGORG.
WORKGROUP","InstanceId":"ID","ResourceType":"EC2Instance","AgentVersion":"3.
19.
1153","PlatformVersion":"6.
3.
9600","PlatformName":"WindowsServer2012R2Standard","PlatformType":"Windows"}],"TypeName":"AWS:InstanceInformation","SchemaVersion":"1.
0"}},"Id":"ID"}]}使用AWSCLI收集清单以下步骤为您演示了使用Inventory从AmazonEC2实例中收集元数据的过程.
当您配置清单收集时,您首先创建SystemsManager状态管理器关联.
SystemsManager会在关联运行时收集清单数据.
如果您不先创建关联,并试图使用RunCommand等调用aws:softwareInventory插件,则系统会返回以下错误:Theaws:softwareInventoryplugincanonlybeinvokedviassm-associate.
Note一个实例一次只能配置一个清单关联.
如果您为实例配置了两个或更多清单关联,则关联不会运行,而且系统不会收集清单数据.
从实例收集清单1.
在您的本地计算机上,下载最新版本的AWSCLI.
2.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER3.
执行以下命令,创建一个在实例上运行Inventory的状态管理器关联.
此命令将服务配置为每六小时运行一次,并收集实例上的网络配置、Windows更新和应用程序元数据.
awsssmcreate-association--name"AWS-GatherSoftwareInventory"--targets"Key=instanceids,Values=aninstanceID"--schedule-expression"cron(00/30*1/1output-location"{\"S3Location\":{\"OutputS3Region\":\"us-east-1\",\"OutputS3BucketName\":\"Testbucket\",\"OutputS3KeyPrefix\":\"Test\parameters"networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"198AmazonEC2SystemsManager用户指南使用AWSCLI收集清单系统会使用类似以下形式的信息进行响应.
{"AssociationDescription":{"ScheduleExpression":"cron(00/30*1/1**)","OutputLocation":{"S3Location":{"OutputS3KeyPrefix":"Test","OutputS3BucketName":"Testbucket","OutputS3Region":"us-east-1"}},"Name":"Thenameyouspecified","Parameters":{"applications":["Enabled"],"networkConfig":["Enabled"],"windowsUpdates":["Enabled"]},"Overview":{"Status":"Pending","DetailedStatus":"Creating"},"AssociationId":"1a2b3c4d5e6f7g-1a2b3c-1a2b3c-1a2b3c-1a2b3c4d5e6f7g","DocumentVersion":"$DEFAULT","LastUpdateAssociationDate":1480544990.
06,"Date":1480544990.
06,"Targets":[{"Values":["i-1a2b3c4d5e6f7g"],"Key":"InstanceIds"}]}}您可以使用Targets参数来确定带有EC2标签的大型目标实例组.
awsssmcreate-association--name"AWS-GatherSoftwareInventory"--targets"Key=tag:Environment,Values=Production"--schedule-expression"cron(00/30*1/1output-location"{\"S3Location\":{\"OutputS3Region\":\"us-east-1\",\"OutputS3BucketName\":\"Testbucket\",\"OutputS3KeyPrefix\":\"Test\parameters"networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"4.
执行以下命令查看关联状态.
awsssmdescribe-instance-associations-status--instance-idaninstanceID系统会使用类似以下形式的信息进行响应.
{"InstanceAssociationStatusInfos":[{"Status":"Pending",199AmazonEC2SystemsManager用户指南使用资源数据同步聚合清单数据"DetailedStatus":"Associated","Name":"reInvent2016PolicyDocumentTest","InstanceId":"i-1a2b3c4d5e6f7g","AssociationId":"1a2b3c4d5e6f7g-1a2b3c-1a2b3c-1a2b3c-1a2b3c4d5e6f7g","DocumentVersion":"1"}]}使用资源数据同步聚合清单数据以下演练介绍如何使用AWSCLI创建资源数据同步配置.
资源数据同步自动将所有托管实例的清单数据传输到中央AmazonS3存储桶.
当发现新的清单数据时,同步自动更新中央AmazonS3存储桶中的数据.
此演练还介绍如何使用AmazonAthena和AmazonQuickSight查询和分析聚合数据.
有关使用AmazonEC2控制台创建资源数据同步的信息,请参阅配置清单的资源数据同步(p.
194).
Note本演练包括有关如何使用AWSKeyManagementService(AWSKMS)加密同步的信息.
清单不收集任何用户特定、专有或敏感数据,因此加密是可选的.
有关AWSKMS的更多信息,请参阅AWSKeyManagementServiceDeveloperGuide.
开始前的准备工作在开始本演练之前,您必须从您的托管实例收集清单元数据.
对于本演练中的AmazonAthena和AmazonQuickSight,建议您收集应用程序元数据.
有关如何收集清单数据的更多信息,请参阅使用AWSCLI收集清单(p.
198).
(可选)如果要使用AWSKMS加密同步,则必须创建包括以下策略的新密钥,或更新现有密钥并向其添加此策略.
{"Version":"2012-10-17","Id":"ssm-access-policy","Statement":[{"Sid":"ssm-access-policy-statement","Action":["kms:GenerateDataKey"],"Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Resource":"arn:aws:kms:region:AWS-account-ID:key/KMS-key-id"}]}创建清单的资源数据同步1.
OpentheAmazonS3consoleathttps://console.
amazonaws.
cn/s3/.
2.
创建用来存储聚合清单数据的存储桶.
有关更多信息,请参阅AmazonSimpleStorageServiceGettingStartedGuide中的创建存储桶.
请记下存储桶名称和创建此存储桶的AWS区域.
3.
创建存储桶后,选择Permissions选项卡,然后选择BucketPolicy.
4.
将下面的存储桶策略复制并粘贴到策略编辑器中.
使用您创建的AmazonS3存储桶的名称和有效的AWS账户ID替换Bucket-Name和Account-ID.
或者,使用AmazonS3前缀(子目录)的名称替换Bucket-Prefix.
如果您未创建前缀,则从该策略的ARN中删除Bucket-Prefix/.
200AmazonEC2SystemsManager用户指南使用资源数据同步聚合清单数据{"Version":"2012-10-17","Statement":[{"Sid":"SSMBucketPermissionsCheck","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"s3:GetBucketAcl","Resource":"arn:aws:s3:::Bucket-Name"},{"Sid":"SSMBucketDelivery","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"s3:PutObject","Resource":["arn:aws:s3:::Bucket-Name/Bucket-Prefix/*/accountid=Account-ID/*"],"Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}}}]}5.
(可选)如果要加密同步,则必须将以下策略添加到存储桶.
重复上一步骤以向存储桶添加以下策略.

{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"s3:PutObject","Resource":"arn:aws:s3:::bucket-name/prefix/*","Condition":{"StringEquals":{"s3:x-amz-server-side-encryption":"aws:kms","s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:AWS-account-ID:key/KMS-key-ID"}}}]}6.
在您的本地计算机上,下载最新版本的AWSCLI.
7.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
201AmazonEC2SystemsManager用户指南使用资源数据同步聚合清单数据AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER8.
(可选)如果要加密同步,请执行以下命令以验证存储桶策略是否强制执行KMS密钥要求.
awss3cp.
/Afileinthebuckets3://bucket-name/prefix/--sseaws:kms--sse-kms-key-id"arn:aws:kms:region:AWS-account-ID:key/KMS-key-id"--regionregion9.
执行以下命令,以使用您在此程序开始时创建的AmazonS3存储桶创建资源数据同步配置.
此命令从您当前已登录的AWS区域创建同步.
Note如果同步和目标AmazonS3存储桶位于不同区域,您可能需要支付数据传输价格.
有关更多信息,请参阅AmazonS3定价.
awsssmcreate-resource-data-sync--sync-nameaname--s3-destination"BucketName=thenameoftheS3bucket,Prefix=thenameoftheprefix,ifspecified,SyncFormat=JsonSerDe,Region=theregionwheretheS3bucketwascreated"您可以使用region参数指定创建同步配置的位置.
在下例中,来自us-west-1区域的清单数据将同步到us-west-2区域中的AmazonS3存储桶.
awsssmcreate-resource-data-sync--sync-nameInventoryDataWest--s3-destination"BucketName=InventoryData,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2"--regionus-west-1(可选)如果要使用AWSKMS加密同步,请执行以下命令创建同步.
如果您加密同步,则AWSKMS密钥和AmazonS3存储桶必须位于相同区域.
awsssmcreate-resource-data-sync--sync-namesync-name--s3-destination"BucketName=bucket-name,Prefix=prefix,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:AWS-account-ID:key/KMS-key-id,Region=bucket-region"--regionregion10.
执行以下命令查看同步配置的状态.
awsssmlist-resource-data-sync如果您在其他区域中创建了同步配置,则必须指定region参数,如下例所示.
awsssmlist-resource-data-sync--regionus-west-111.
在成功创建同步配置后,浏览AmazonS3中的目标存储桶.
清单数据应在几分钟内显示.
在AmazonAthena中处理数据以下部分介绍如何在AmazonAthena中查看和查询数据.
在AmazonAthena中查看和查询数据1.
在AmazonAthena控制台中,将以下语句复制并粘贴到查询编辑器中,然后选择RunQuery.
202AmazonEC2SystemsManager用户指南使用资源数据同步聚合清单数据CREATEDATABASEssminventory系统将创建一个名为ssminventory的数据库.
2.
将以下语句复制并粘贴到查询编辑器中,然后选择RunQuery.
使用AmazonS3目标的名称和前缀替换Bucket-Name和Bucket-Prefix.
CREATEEXTERNALTABLEIFNOTEXISTSssminventory.
AWS_Application(`ResourceId`string,`Name`string,`ApplicationType`string,`Publisher`string,`Version`string,`InstalledTime`string,`Architecture`string,`URL`string)PARTITIONEDBY(AccountIdstring,Regionstring,ResourceTypestring)ROWFORMATSERDE'org.
openx.
data.
jsonserde.
JsonSerDe'WITHSERDEPROPERTIES('serialization.
format'='1')LOCATION's3://Bucket-Name/Bucket-Prefix/AWS:Application/'系统将使用应用程序清单类型的分区信息创建一个表.
3.
将以下语句复制并粘贴到查询编辑器中,然后选择RunQuery.
MSCKREPAIRTABLEssminventory.
AWS_Application系统将对表进行分区.
Note如果您从其他AWS区域或账户创建资源数据同步,则必须再次运行该命令,以更新分区.
您可能还需要更新您的AmazonS3存储桶策略.
4.
要预览数据,请选择AWS_Application表旁边的视图图标.
5.
将以下语句复制并粘贴到查询编辑器中,然后选择RunQuery.
SELECTa.
name,a.
version,count(a.
version)frequencyfromaws_applicationawherea.
name='aws-cfn-bootstrap'groupbya.
name,a.
versionorderbyfrequencydesc此查询返回不同版本的aws-cfn-bootstrap的计数,这是AmazonEC2Linux和Windows实例上出现的AWS应用程序.
6.
将以下语句分别复制并粘贴到查询编辑器中,将Bucket-Name和Bucket-Prefix替换为有关AmazonS3的信息,然后选择RunQuery.
这些语句在Athena中设置其他清单表.
CREATEEXTERNALTABLEIFNOTEXISTSssminventory.
AWS_AWSComponent(`ResourceId`string,`Name`string,`ApplicationType`string,203AmazonEC2SystemsManager用户指南使用资源数据同步聚合清单数据`Publisher`string,`Version`string,`InstalledTime`string,`Architecture`string,`URL`string)PARTITIONEDBY(AccountIdstring,Regionstring,ResourceTypestring)ROWFORMATSERDE'org.
openx.
data.
jsonserde.
JsonSerDe'WITHSERDEPROPERTIES('serialization.
format'='1')LOCATION's3://Bucket-Name/Bucket-Prefix/AWS:AWSComponent/'MSCKREPAIRTABLEssminventory.
AWS_AWSComponentCREATEEXTERNALTABLEIFNOTEXISTSssminventory.
AWS_WindowsUpdate(`ResourceId`string,`HotFixId`string,`Description`string,`InstalledTime`string,`InstalledBy`string)PARTITIONEDBY(AccountIdstring,Regionstring,ResourceTypestring)ROWFORMATSERDE'org.
openx.
data.
jsonserde.
JsonSerDe'WITHSERDEPROPERTIES('serialization.
format'='1')LOCATION's3://Bucket-Name/Bucket-Prefix/AWS:WindowsUpdate/'MSCKREPAIRTABLEssminventory.
AWS_WindowsUpdateCREATEEXTERNALTABLEIFNOTEXISTSssminventory.
AWS_InstanceInformation(`AgentType`string,`AgentVersion`string,`ComputerName`string,`IamRole`string,`InstanceId`string,`IpAddress`string,`PlatformName`string,`PlatformType`string,`PlatformVersion`string)PARTITIONEDBY(AccountIdstring,Regionstring,ResourceTypestring)ROWFORMATSERDE'org.
openx.
data.
jsonserde.
JsonSerDe'WITHSERDEPROPERTIES('serialization.
format'='1')LOCATION's3://Bucket-Name/Bucket-Prefix/AWS:InstanceInformation/'MSCKREPAIRTABLEssminventory.
AWS_InstanceInformationCREATEEXTERNALTABLEIFNOTEXISTSssminventory.
AWS_Network(`ResourceId`string,`Name`string,`SubnetMask`string,`Gateway`string,`DHCPServer`string,`DNSServer`string,`MacAddress`string,`IPV4`string,`IPV6`string)PARTITIONEDBY(AccountIdstring,Regionstring,ResourceTypestring)ROWFORMATSERDE'org.
openx.
data.
jsonserde.
JsonSerDe'WITHSERDEPROPERTIES(204AmazonEC2SystemsManager用户指南使用资源数据同步聚合清单数据'serialization.
format'='1')LOCATION's3://Bucket-Name/Bucket-Prefix/AWS:Network/'MSCKREPAIRTABLEssminventory.
AWS_NetworkCREATEEXTERNALTABLEIFNOTEXISTSssminventory.
AWS_PatchCompliance(`ResourceId`string,`Title`string,`KBId`string,`Classification`string,`Severity`string,`State`string,`InstalledTime`string)PARTITIONEDBY(AccountIdstring,Regionstring,ResourceTypestring)ROWFORMATSERDE'org.
openx.
data.
jsonserde.
JsonSerDe'WITHSERDEPROPERTIES('serialization.
format'='1')LOCATION's3://Bucket-Name/Bucket-Prefix/AWS:PatchCompliance/'MSCKREPAIRTABLEssminventory.
AWS_PatchComplianceCREATEEXTERNALTABLEIFNOTEXISTSssminventory.
AWS_PatchSummary(`ResourceId`string,`PatchGroup`string,`BaselineId`string,`SnapshotId`string,`OwnerInformation`string,`InstalledCount`int,`InstalledOtherCount`int,`NotApplicableCount`int,`MissingCount`int,`FailedCount`int,`OperationType`string,`OperationStartTime`string,`OperationEndTime`string)PARTITIONEDBY(AccountIdstring,Regionstring,ResourceTypestring)ROWFORMATSERDE'org.
openx.
data.
jsonserde.
JsonSerDe'WITHSERDEPROPERTIES('serialization.
format'='1')LOCATION's3://Bucket-Name/Bucket-Prefix/AWS:PatchSummary/'MSCKREPAIRTABLEssminventory.
AWS_PatchSummary在AmazonQuickSight中处理数据以下部分提供概述,包含用于在AmazonQuickSight中构建可视化内容的链接.
在AmazonQuickSight中构建可视化内容1.
注册AmazonQuickSight,然后登录QuickSight控制台.
2.
从AWS_Application表和您创建的任何其他表创建数据集.
有关更多信息,请参阅使用AmazonAthena数据创建数据集.
3.
联接表.
例如,您可以联接AWS_InstanceInformation中的instanceid列,因为它与其他清单表中的resourceid列匹配.
有关联接表的更多信息,请参阅联接表.
4.
构建可视化内容.
有关更多信息,请参阅处理AmazonQuickSight视觉对象.
205AmazonEC2SystemsManager用户指南SystemsManager补丁管理SystemsManagerPatchManager可自动执行修补托管实例的过程.
您可以浏览实例以查看缺失补丁的报告,也可以浏览并自动安装所有缺失的补丁.
PatchManager使用补丁基准,该基准包含用于在补丁发行几天内自动批准补丁的规则以及一系列已批准和已拒绝的补丁.
您可以通过安排修补作为SystemsManagerMaintenanceWindow任务运行来定期安装补丁.
您还可以单独安装补丁,或使用AmazonEC2标签将补丁安装到大型实例组.
PatchManager可以修补以下操作系统:操作系统详细信息Linux64位和32位系统AmazonLinux2012.
03-2017.
03UbuntuServer14.
04LTS或16.
04LTSRedHatEnterpriseLinux(RHEL)6.
5-6.
9仅64位系统AmazonLinux2015.
03-2015.
09RedHatEnterpriseLinux(RHEL)7.
0-7.
4WindowsWindowsServer2008至WindowsServer2016,包括R2版本.
在Microsoft发布适用于受支持的操作系统的补丁后的几小时内,PatchManager将提供所有这些补丁.
Important在PatchManager中提供Windows或Linux补丁之前,AWS不会测试这些补丁.
PatchManager与AWSIdentityandAccessManagement(IAM)、AWSCloudTrail和AmazonCloudWatchEvents集成,以提供包括事件通知和审核使用情况的能力的安全修补体验.
206AmazonEC2SystemsManager用户指南开始使用PatchManager开始使用PatchManager要开始使用PatchManager,请完成以下任务.
任务了解更多信息验证SystemsManager先决条件.
SystemsManager先决条件(p.
5)了解如何设置和配置修补.
使用PatchManager(p.
207)为MaintenanceWindow配置权限(如果您打算在修补时使用此功能,则需要此操作).
控制对MaintenanceWindow的访问权限(p.
79)创建补丁基准、补丁组和MaintenanceWindow,以在测试环境中执行修补.
SystemsManagerPatchManager演练(p.
210)使用PatchManager要使用PatchManager,请完成以下任务.
此部分更详细地说明了这些任务.
1.
验证默认补丁基准是否满足您的需求,或创建为您的实例定义一组标准补丁的补丁基准.

2.
使用AmazonEC2标签将实例组织到补丁组中(可选,但不建议).
3.
使用定义要修补的实例以及修补这些实例的时间的MaintenanceWindow来计划修补.
4.
监视修补以验证合规性和调查故障.
步骤1:验证默认补丁基准或创建补丁基准补丁基准定义批准在您的实例上安装的补丁.
您可以单独指定批准或拒绝的补丁.
您还可以创建自动批准规则,指定应自动批准的某些更新类型(例如重要更新).
自动批准规则将覆盖ApprovedPatches列表中的项目.
如果计划使用一系列已批准的补丁来安装特定软件包,则删除所有自动批准规则.
如果您将补丁显式标识为rejected,即使它匹配自动批准规则中的所有条件,也不会被批准或安装.
此外,即使补丁被批准用于某个实例,只有它适用于该实例上的软件时,才能安装补丁.
PatchManager为PatchManager支持的每个操作系统预定义了补丁基准.
下表介绍了每个预定义的补丁基准:Name支持的产品详细信息AWS-DefaultPatchBaselineWindows(WindowsServer2008–2016)在发布7天后批准分类为"重要更新"或"安全更新"且MSRC严重性为"关键"或"重要"的所有操作系统补丁.
AWS-AmazonLinuxDefaultPatchBaselineAmazonLinux(2012.
03–2017.
09)在发布7天后批准分类为"安全"且严重性为"关键"或"重要"的所有操作系统补丁.
在发布7天后批准分类为"缺陷修正"的所有补丁AWS-UbuntuDefaultPatchBaselineUbuntu(14.
04/16.
04)立即批准优先级为"必需"或"重要"的与所有操作系统安全相关的补丁.
由于存储库中未提供可靠207AmazonEC2SystemsManager用户指南步骤1:验证默认补丁基准或创建补丁基准Name支持的产品详细信息的发布日期,因此批准之前无需等待.
AWS-RedHatDefaultPatchBaselineRedhatEnterpriseLinux(6.
5、6.
6、6.
7、6.
8、6.
9、7.
0、7.
1、7.
2、7.
3)在发布7天后批准分类为"安全"且严重性为"关键"或"重要"的所有操作系统补丁.
在发布7天后批准分类为"缺陷修正"的所有补丁.
您可以按照这些基准的当前配置使用这些基准(您不能对其进行自定义),或者,如果您想更好地控制批准或拒绝将哪些补丁用于您的环境,则可创建自己的补丁基准.
如果您创建自己的补丁基准,则可使用以下类别选择自动批准哪些补丁.

操作系统:Windows、AmazonLinux、Ubuntu等.
产品名称:例如,RHEL6.
5、AmazonLinux2014.
09、WindowsServer2012、WindowsServer2012R2等.
分类:例如,关键更新、安全更新等严重性:例如,关键、重要等对于您创建的每个自动批准规则,可指定自动批准延迟.
此延迟是发布补丁后到自动批准补丁用于修补前等待的天数.
例如,如果您使用关键更新分类创建一条规则并将其自动批准延迟配置为7天,则将在1月14日自动批准1月7日发布的新关键补丁.
Note如果Linux存储库不提供程序包的发布日期信息,SystemsManager会将自动批准延迟的值视为零.
您还可以指定合规性严重性级别.
如果经批准的补丁报告为缺失,则ComplianceLevel是违反合规性的严重性.
通过使用多个带不同的自动批准延迟的补丁基准,您可以不同的速率将补丁部署到不同的实例.
例如,您可以为开发环境和生产环境创建单独的补丁基准和自动批准延迟.
这使您能够先在开发环境中测试补丁,然后再在生产环境中部署这些补丁.
创建补丁基准时,请记住以下信息:PatchManager为每个受支持的操作系统提供默认补丁基准.
您还可以创建自己的补丁基准并将其指定为相应操作系统的默认补丁基准.
对于本地或非AmazonEC2实例,PatchManager将尝试使用您的自定义默认补丁基准.
如果不存在自定义默认补丁基准,系统将使用相应操作系统的预定义补丁基准.
如果某个补丁在相同的补丁基准中同时被列为已批准和已拒绝,则该补丁将被拒绝.

一个实例只能定义一个补丁基准.
在为AmazonLinux和RHEL创建补丁基准时,如果您指定ApprovedPatches,请注意SystemsManager支持BugzillaID、CVEID、AdvisoryID和软件包名称通配符.
如果您指定RejectedPatches,则SystemsManager仅支持软件包名称通配符.
对于Ubuntu基准,Approved和RejectedPatches字段中仅支持完整的软件包名称.
要查看如何使用AmazonEC2控制台或AWSCLI创建补丁基准的示例,请参阅SystemsManagerPatchManager演练(p.
210).
Windows和Linux修补之间的重要区别下表介绍了Windows和Linux修补之间的重要区别.
208AmazonEC2SystemsManager用户指南步骤2:将实例组织到补丁组中区别详细信息补丁评估PatchManager使用不同的流程评估应该在Windows托管实例和Linux托管实例上出现的补丁.
对于Windows修补,SystemsManager直接在服务中评估补丁基准规则以及批准和拒绝的补丁列表.
它可以执行此操作是因为Windows补丁从单个存储库(Windows更新)拉取.
对于Linux修补,SystemsManager在每个托管实例中评估补丁基准规则以及批准和拒绝的补丁列表.
SystemsManager必须在每个实例上评估修补,因为该服务从实例上配置的存储库检索已知补丁和更新列表.
不适用的补丁由于Linux操作系统有大量可用的软件包,因此SystemsManager不报告处于不适用状态的补丁的详细信息.
例如,当实例未安装Apache时,Apache软件的补丁就是不适用的补丁.
SystemsManager会在摘要中报告不适用的补丁数量,但是如果您调用实例的DescribeInstancePatchesAPI,则返回的数据不包括处于不适用状态的补丁.
这一行为不同于Windows.
Note另请注意Linux修补的以下更改和要求:要修补Linux实例,您的实例必须运行SSM代理2.
0.
834.
0版或更高版本.
有关更新此代理的信息,请参阅从EC2控制台执行命令(p.
266)中标题为示例:更新SSM代理的部分.
AWS-ApplyPatchBaselineSSM文档将替换为AWS-RunPatchBaseline文档.
步骤2:将实例组织到补丁组中补丁组是一种组织实例以进行修补的可选方法.
例如,您可以为不同操作系统(Linux或Windows)、不同环境(开发、测试和生产)或不同服务器功能(Web服务器、文件服务器、数据库)创建补丁组.
补丁组可以帮助您避免将补丁部署到一组错误的实例.
它们还可帮助您避免过早地部署补丁(在对补丁进行充分测试之前).
您可以使用AmazonEC2标签创建补丁组.
与其他跨SystemsManager的标记方案不同,必须使用此标签键定义补丁组:补丁组.
请注意,此键区分大小写.
您可以指定任何值,例如"Web服务器",但键必须为补丁组.
Note一个实例只能在一个补丁组中.
创建补丁组和标记实例后,可以将补丁组注册到补丁基准.
通过将补丁组注册到补丁基准,您可以确保在修补执行期间安装正确的补丁.
当系统执行将补丁基准应用于实例的任务时,服务将检查以了解是否为该实例定义了补丁组.
如果该实例已分配给一个补丁组,则系统将检查以了解已将哪个补丁基准注册到该组.
如果找到了该组的补丁基准,则系统将应用此补丁基准.
如果没有为补丁组配置实例,系统将自动使用当前配置的默认补丁基准.

209AmazonEC2SystemsManager用户指南步骤3:使用MaintenanceWindow计划补丁更新例如,假设使用键"补丁组"和值"前端服务器"标记了一个实例.
当PatchManager在该实例上执行AWS-RunPatchBaseline任务时,此服务将检查以了解哪个补丁基准已注册到前端服务器.
如果找到一个补丁基准,系统将使用该基准.
如果未为前端服务器注册补丁基准,系统将使用默认补丁基准.

要查看如何使用AWSCLI创建补丁基准和补丁组的示例,请参阅SystemsManagerPatchManager演练(p.
210).
有关AmazonEC2标签的更多信息,请参阅AmazonEC2用户指南中的标记AmazonEC2资源.
步骤3:使用MaintenanceWindow计划补丁更新在配置补丁基准(还可以选择配置补丁组)后,您可以使用MaintenanceWindow将补丁应用于您的实例.
MaintenanceWindow通过让您指定在不中断业务运营的时间执行修补流程,可以减少对服务器可用性的影响.
MaintenanceWindow的工作方式如下所示:1.
创建带修补操作计划的MaintenanceWindow.
2.
通过为标签名称指定补丁组标签并指定已定义AmazonEC2标签的任意值(例如,"生产服务器"),来选择MaintenanceWindow的目标.
3.
创建新的MaintenanceWindow任务,并指定AWS-RunPatchBaseline文档.
在配置任务时,可以选择扫描实例或扫描并修补实例.
如果选择扫描实例,则PatchManager将扫描每个实例并生成缺失补丁的列表以供您审查.
如果选择扫描并修补实例,则PatchManager将扫描每个实例并将已安装补丁的列表与基准中已批准补丁的列表进行比较.
PatchManager将标识缺失的补丁,然后下载并安装所有缺失的补丁和已批准的补丁.
如果您希望执行一次性扫描或安装来解决问题,可以使用RunCommand直接调用AWS-RunPatchBaseline文档.
Important在安装补丁后,SystemsManager重启每个实例.
需要重启才能确保正确安装补丁,并确保系统不会使实例处于潜在的不良状态.
相关内容要查看如何创建补丁基准、补丁组和MaintenanceWindow的示例,请参阅SystemsManagerPatchManager演练(p.
210).
有关MaintenanceWindow的更多信息,请参阅SystemsManagerMaintenanceWindow(p.
79).
有关监视补丁合规性的信息,请参阅关于补丁合规性(p.
294).
SystemsManagerPatchManager演练以下演练将向您说明如何使用AmazonEC2控制台或AWSCLI创建补丁基准、补丁组和执行修补的MaintenanceWindow.
内容使用AmazonEC2控制台的PatchManager演练(p.
211)使用AWSCLI的PatchManager演练(p.
213)开始前的准备工作以下演练将在MaintenanceWindow期间执行修补.
您必须先为MaintenanceWindow配置角色和权限,然后才能开始使用.
有关更多信息,请参阅控制对MaintenanceWindow的访问权限(p.
79).
210AmazonEC2SystemsManager用户指南使用AmazonEC2控制台的PatchManager演练使用AmazonEC2控制台的PatchManager演练以下演练介绍如何使用默认补丁基准、补丁组和MaintenanceWindow来修补服务器环境.
要详细了解此演练介绍的过程,请参阅使用PatchManager(p.
207).
开始前的准备工作在您的实例上安装或更新SSM代理.
要修补Linux实例,您的实例必须运行SSM代理2.
0.
834.
0版或更高版本.
有关更新此代理的信息,请参阅从EC2控制台执行命令(p.
266)中标题为示例:更新SSM代理的部分.
使用AmazonEC2控制台创建默认补丁基准PatchManager包含用于PatchManager支持的每个操作系统的默认补丁基准.
您可以利用这些默认补丁基准(您不能对其进行自定义),也可创建自己的补丁基准.
以下程序介绍了如何查看默认补丁基准,以查看它们是否满足需求.
该程序还介绍了如何创建自己的默认补丁基准.
要了解有关补丁基准的更多信息,请参阅步骤1:验证默认补丁基准或创建补丁基准(p.
207).
创建默认补丁基准1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerServices,然后选择PatchBaselines.
2.
在补丁基准列表中,选择要修补的操作系统的补丁基准.
Note如果WelcometoEC2SystemsManager-PatchBaselines页面出现,则选择CreatePatchBaseline.
当Createpatchbaseline页面出现时,在浏览器中选择后退按钮以查看补丁基准列表.
3.
选择默认基准后,选择ApprovalRules选项卡.
如果您的实例接受自动批准规则,则可跳至下面的步骤.
4.
要创建自己的默认补丁基准,则选择CreatePatchBaseline.
5.
在Name字段中,键入新补丁基准的名称,例如RHEL-Default.
6.
(可选)键入此补丁基准的描述.
7.
在OperatingSystem字段中,选择操作系统,例如RedhatEnterpriseLinux.
8.
在ApprovalRules部分,使用字段创建一个或多个自动批准规则.
Note如果经批准的补丁报告为缺失,则ComplianceLevel是违反合规性的严重性.
9.
在PatchExceptions部分,列出基准显式批准和拒绝的补丁.
对于已批准的补丁,选择相应的合规性严重性级别.
10.
选择CreatePatchBaseline.
将实例添加到补丁组为了帮助您组织修补工作,我们建议您使用AmazonEC2标签将实例添加到补丁组.
补丁组需要以下标签键:补丁组.
您可以指定任何值,但标签键必须为补丁组.
有关补丁组的更多信息,请参阅步骤2:将实例组织到补丁组中(p.
209).
将实例添加到补丁组1.
打开AmazonEC2控制台,然后在左侧导航窗格中选择Instances.
211AmazonEC2SystemsManager用户指南使用AmazonEC2控制台的PatchManager演练2.
从实例列表中选择您要配置用于修补的实例.
3.
从Actions菜单中,选择InstanceSettings、Add/EditTags.
4.
在Key字段中,键入"PatchGroup".
5.
在Value字段中,键入可帮助您了解要修补的实例的值.
6.
选择Save.
7.
重复此程序,为同一补丁组中的其他实例添加标签.
创建MaintenanceWindow用于修补为了最大程度减少对服务器可用性的影响,我们建议您将MaintenanceWindow配置为在不中断业务运营的时间执行修补.
有关MaintenanceWindow的更多信息,请参阅SystemsManagerMaintenanceWindow(p.
79).
创建MaintenanceWindow用于修补1.
在AmazonEC2控制台导航窗格中,选择MaintenanceWindow,然后选择Createmaintenancewindow.
2.
在Name字段中,键入一个将此项指定为用于修补关键更新和重要更新的MaintenanceWindow的名称.
3.
在Specifyschedule区域中,选择所需的计划选项.
4.
在Duration字段中,键入您希望MaintenanceWindow处于活动状态的小时数.
5.
在Stopinitiatingtasks字段中,键入您希望系统在MaintenanceWindow周期结束前几小时停止启动新任务.
6.
选择Createmaintenancewindow.
7.
在MaintenanceWindow列表中,选择您刚创建的MaintenanceWindow,然后选择Actions、Registertargets.
8.
在Ownerinformation字段中,键入您的姓名或别名.
9.
在Selecttargetsby区域中,选择Specifyingtags.
10.
在TagFilters部分,使用列表选择标签键和标签值.
11.
选择注册目标.
系统将创建MaintenanceWindow目标.
12.
在MaintenanceWindow列表中,选择您使用该过程创建的MaintenanceWindow,然后选择Actions、Registertask.
13.
在Registertask页面的Documents部分中,选择AWS-RunPatchBaseline.
14.
在TaskPriority部分中,指定优先级.
1表示最高优先级.
15.
在Targets部分中,选择Select,然后选择您在此过程中先前创建的MaintenanceWindow目标.
16.
在Operation列表中,选择Scan以扫描缺失的补丁,或选择Install以扫描并安装缺失的补丁.
NoteInstall操作将使实例重启(如果已安装补丁).
Scan操作不会导致重启.
17.
您不需要在SnapshotId字段中指定任何值.
此系统将自动生成并提供此参数.
18.
在Role字段中,输入已附加AmazonSSMMaintenanceWindowRole策略的角色的ARN.
有关更多信息,请参阅控制对MaintenanceWindow的访问权限(p.
79).
19.
在Executeon字段中,选择Targets或Percent以限制系统可以同时在其中执行修补操作的实例的数目.
20.
在Stopafter字段中,指定系统停止向其他实例发送修补任务之前所允许的错误数.
21.
如果您要向AmazonS3存储桶中写入命令输出和结果,请在Advanced部分中,选择WritetoS3.
212AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练22.
选择Registertask.
MaintenanceWindow任务完成后,您可以在ManagedInstances页面上的AmazonEC2控制台中查看补丁合规性详细信息.
在筛选栏中,使用AWS:PatchSummary和AWS:ComplianceItem筛选器.
Note指定筛选器后,您可以通过为URL添加书签来保存您的查询.
您还可以通过在ManagedInstances页面中选择实例来向下钻取到特定实例,然后选择Patch选项卡.
您也可以使用DescribePatchGroupState和DescribeInstancePatchStatesForPatchGroupAPI来查看合规性详细信息.
有关帮助您了解补丁合规性数据的信息,请参阅关于补丁合规性(p.
294).
使用AWSCLI的PatchManager演练以下过程将说明用户如何使用自定义补丁基准、补丁组和MaintenanceWindow来修补服务器环境.
开始前的准备工作在您的实例上安装或更新SSM代理.
要修补Linux实例,您的实例必须运行SSM代理2.
0.
834.
0版或更高版本.
有关更新此代理的信息,请参阅从EC2控制台执行命令(p.
266)中标题为示例:更新SSM代理的部分.
使用AWSCLI配置PatchManager和修补实例1.
在您的本地计算机上,下载最新版本的AWSCLI.
2.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER3.
(Windows)执行以下命令以创建一个名为"Production-Baseline"的补丁基准,该补丁基准将在发布适用于生产环境的补丁7天后批准这些补丁.
213AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练awsssmcreate-patch-baseline--name"Production-Baseline"--operating-system"WINDOWS"--product"WindowsServer2012R2"--approval-rules"PatchRules=[{PatchFilterGroup={PatchFilters=[{Key=MSRC_SEVERITY,Values=[Critical,Important]},{Key=CLASSIFICATION,Values=[SecurityUpdates,Updates,UpdateRollups,CriticalUpdates]}]},ApproveAfterD--description"Baselinecontainingallupdatesapprovedforproductionsystems"(Linux)执行以下命令以创建一个名为"Production-Baseline"的补丁基准,该补丁基准将在发布适用于生产环境的补丁7天后批准这些补丁.
awsssmcreate-patch-baseline--name"Production-Baseline"--operating-system"AMAZON_LINUX"--approval-rules"PatchRules=[{PatchFilterGroup={PatchFilters=[{Key=PRODUCT,Values=[AmazonLinux2016.
03,AmazonLinux2{Key=SEVERITY,Values=[Critical,Important]},{Key=CLASSIFICATION,Values=[Security]}]},ApproveAfterDays=7}]"--description"Baselinecontainingallupdatesapprovedforproductionsystems"系统将返回类似于以下内容的信息.
{"BaselineId":"pb-034cba5a84f030362"}4.
执行以下命令,为三个分别名为"Production"、"DatabaseServers"和"Front-EndPatchGroup"的补丁组注册"Production-Baseline"补丁基准.
awsssmregister-patch-baseline-for-patch-group--baseline-idpb-034cba5a84f030362--patch-group"Production"系统将返回类似于以下内容的信息.
{"PatchGroup":"Production","BaselineId":"pb-034cba5a84f030362"}awsssmregister-patch-baseline-for-patch-group--baseline-idpb-034cba5a84f030362--patch-group"DatabaseServers"系统将返回类似于以下内容的信息.
{"PatchGroup":"DatabaseServers","BaselineId":"pb-034cba5a84f030362"}5.
执行以下命令,为生产服务器创建两个MaintenanceWindow.
第一个时段在每周二晚上10点运行.
第二个时段在每周六晚上10点运行.
awsssmcreate-maintenance-window--name"Production-Tuesdays"--schedule"cron(0022*TUE*)"--duration1--cutoff0--no-allow-unassociated-targets系统将返回类似于以下内容的信息.
{"WindowId":"mw-0c66948c711a3b5bd"214AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练}awsssmcreate-maintenance-window--name"Production-Saturdays"--schedule"cron(0022*SAT*)"--duration2--cutoff0--no-allow-unassociated-targets系统将返回类似于以下内容的信息.
{"WindowId":"mw-09e2a75baadd84e85"}6.
执行以下命令,将生产服务器注册到两个生产MaintenanceWindow.
awsssmregister-target-with-maintenance-window--window-idmw-0c66948c711a3b5bd--targets"Key=tag:PatchGroup,Values=Production"--owner-information"Productionservers"--resource-type"INSTANCE"系统将返回类似于以下内容的信息.
{"WindowTargetId":"557e7b3a-bc2f-48dd-ae05-e282b5b20760"}awsssmregister-target-with-maintenance-window--window-idmw-0c66948c711a3b5bd--targets"Key=tag:PatchGroup,Values=DatabaseServers"--owner-information"Databaseservers"--resource-type"INSTANCE"系统将返回类似于以下内容的信息.
{"WindowTargetId":"767b6508-f4ac-445e-b6fe-758cc912e55c"}awsssmregister-target-with-maintenance-window--window-idmw-09e2a75baadd84e85--targets"Key=tag:PatchGroup,Values=Production"--owner-information"Productionservers"--resource-type"INSTANCE"系统将返回类似于以下内容的信息.
{"WindowTargetId":"faa01c41-1d57-496c-ba77-ff9cadba4b7d"}awsssmregister-target-with-maintenance-window--window-idmw-09e2a75baadd84e85--targets"Key=tag:PatchGroup,Values=DatabaseServers"--owner-information"Databaseservers"--resource-type"INSTANCE"系统将返回类似于以下内容的信息.
{"WindowTargetId":"673b5840-58a4-42ab-8b80-95749677cb2e"}215AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练7.
执行以下命令以注册一个补丁任务,此任务仅在第一个生产MaintenanceWindow内扫描生产服务器是否存在缺失的更新.
awsssmregister-task-with-maintenance-window--window-idmw-0c66948c711a3b5bd--targets"Key=WindowTargetIds,Values=557e7b3a-bc2f-48dd-ae05-e282b5b20760"--task-arn"AWS-ApplyPatchBaseline"--service-role-arn"arn:aws:iam::12345678:role/MW-Role"--task-type"RUN_COMMAND"--max-concurrency2--max-errors1--priority1--task-parameters'{\"Operation\":{\"Values\":[\"Scan\"]}}'系统将返回类似于以下内容的信息.
{"WindowTaskId":"968e3b17-8591-4fb2-932a-b62389d6f635"}awsssmregister-task-with-maintenance-window--window-idmw-0c66948c711a3b5bd--targets"Key=WindowTargetIds,Values=767b6508-f4ac-445e-b6fe-758cc912e55c"--task-arn"AWS-ApplyPatchBaseline"--service-role-arn"arn:aws:iam::12345678:role/MW-Role"--task-type"RUN_COMMAND"--max-concurrency2--max-errors1--priority5--task-parameters'{\"Operation\":{\"Values\":[\"Scan\"]}}'系统将返回类似于以下内容的信息.
{"WindowTaskId":"09f2e873-a3a7-443f-ba0a-05cf4de5a1c7"}8.
执行以下命令以注册一个补丁任务,此任务在第二个MaintenanceWindow内在生产服务器上安装缺失的更新.
awsssmregister-task-with-maintenance-window--window-idmw-09e2a75baadd84e85--targets"Key=WindowTargetIds,Values=557e7b3a-bc2f-48dd-ae05-e282b5b20760"--task-arn"AWS-ApplyPatchBaseline"--service-role-arn"arn:aws:iam::12345678:role/MW-Role"--task-type"RUN_COMMAND"--max-concurrency2--max-errors1--priority1--task-parameters'{\"Operation\":{\"Values\":[\"Install\"]}}'系统将返回类似于以下内容的信息.
{"WindowTaskId":"968e3b17-8591-4fb2-932a-b62389d6f635"}awsssmregister-task-with-maintenance-window--window-idmw-09e2a75baadd84e85--targets"Key=WindowTargetIds,Values=767b6508-f4ac-445e-b6fe-758cc912e55c"--task-arn"AWS-ApplyPatchBaseline"--service-role-arn"arn:aws:iam::12345678:role/MW-Role"--task-type"RUN_COMMAND"--max-concurrency2--max-errors1--priority5--task-parameters'{\"Operation\":{\"Values\":[\"Install\"]}}'系统将返回类似于以下内容的信息.
{"WindowTaskId":"09f2e873-a3a7-443f-ba0a-05cf4de5a1c7"}9.
执行以下命令以获取补丁组的高级补丁合规性摘要.
高级补丁合规性摘要将为您提供补丁组的大量具有以下状态的补丁的实例数:"NotApplicable"、"Missing"、"Failed"、"InstalledOther"和"Installed".

216AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练awsssmdescribe-patch-group-state--patch-group"Production"系统将返回类似于以下内容的信息.
{"InstancesWithNotApplicablePatches":0,"InstancesWithMissingPatches":0,"InstancesWithFailedPatches":1,"InstancesWithInstalledOtherPatches":4,"Instances":4,"InstancesWithInstalledPatches":3}10.
执行以下命令以获取补丁组的每个实例的补丁摘要状态.
每个实例的摘要将为您提供补丁组的每个实例中具有以下状态的大量补丁:"NotApplicable"、"Missing"、"Failed"、"InstalledOther"和"Installed".

awsssmdescribe-instance-patch-states-for-patch-group--patch-group"Production"系统将返回类似于以下内容的信息.
{"InstancePatchStates":[{"OperationStartTime":1481259600.
0,"FailedCount":0,"InstanceId":"i-08ee91c0b17045407","OwnerInformation":"","NotApplicableCount":2077,"OperationEndTime":1481259757.
0,"PatchGroup":"Production","InstalledOtherCount":186,"MissingCount":7,"SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e","Operation":"Scan","InstalledCount":72},{"OperationStartTime":1481259602.
0,"FailedCount":0,"InstanceId":"i-0fff3aab684d01b23","OwnerInformation":"","NotApplicableCount":2692,"OperationEndTime":1481259613.
0,"PatchGroup":"Production","InstalledOtherCount":3,"MissingCount":1,"SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e","Operation":"Scan","InstalledCount":1},{"OperationStartTime":1481259547.
0,"FailedCount":0,"InstanceId":"i-0a00def7faa94f1dc","OwnerInformation":"","NotApplicableCount":1859,"OperationEndTime":1481259592.
0,"PatchGroup":"Production","InstalledOtherCount":116,"MissingCount":1,"SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e",217AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练"Operation":"Scan","InstalledCount":110},{"OperationStartTime":1481259549.
0,"FailedCount":0,"InstanceId":"i-09a618aec652973a9","OwnerInformation":"","NotApplicableCount":1637,"OperationEndTime":1481259837.
0,"PatchGroup":"Production","InstalledOtherCount":388,"MissingCount":2,"SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e","Operation":"Scan","InstalledCount":141}]}其他PatchManagerCLI命令此部分包括您可用于执行PatchManager配置任务的CLI命令的其他示例.
创建补丁基准以下命令将创建一个补丁基准,该补丁基准将在发布WindowsServer2012R2的关键和重要安全更新后5天内批准所有这些更新.
awsssmcreate-patch-baseline--name"Windows-Server-2012R2"--approval-rules"PatchRules=[{PatchFilterGroup={PatchFilters=[{Key=MSRC_SEVERITY,Values=[Important,Critical]},{Key=CLASSIFICATION,Values=SecurityUpdates},{Key=PRODUCT,Values=WindowsServer2012R2}]},ApproveAfterDays=5}]"--description"WindowsServer2012R2,ImportantandCriticalsecurityupdates"系统将返回类似于以下内容的信息.
{"BaselineId":"pb-00dbb759999aa2bc3"}更新补丁基准以下命令将两个带已拒绝状态的补丁和一个带已批准状态的补丁添加到现有补丁基准.

awsssmupdate-patch-baseline--baseline-idpb-00dbb759999aa2bc3--rejected-patches"KB2032276""MS10-048"--approved-patches"KB2124261"系统将返回类似于以下内容的信息.
{"BaselineId":"pb-00dbb759999aa2bc3","Name":"Windows-Server-2012R2","RejectedPatches":["KB2032276","MS10-048"],"GlobalFilters":{218AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练"PatchFilters":[]},"ApprovalRules":{"PatchRules":[{"PatchFilterGroup":{"PatchFilters":[{"Values":["Important","Critical"],"Key":"MSRC_SEVERITY"},{"Values":["SecurityUpdates"],"Key":"CLASSIFICATION"},{"Values":["WindowsServer2012R2"],"Key":"PRODUCT"}]},"ApproveAfterDays":5}]},"ModifiedDate":1481001494.
035,"CreatedDate":1480997823.
81,"ApprovedPatches":["KB2124261"],"Description":"WindowsServer2012R2,ImportantandCriticalsecurityupdates"}重命名补丁基准awsssmupdate-patch-baseline--baseline-idpb-00dbb759999aa2bc3--name"Windows-Server-2012-R2-Important-and-Critical-Security-Updates"系统将返回类似于以下内容的信息.
{"BaselineId":"pb-00dbb759999aa2bc3","Name":"Windows-Server-2012-R2-Important-and-Critical-Security-Updates","RejectedPatches":["KB2032276","MS10-048"],"GlobalFilters":{"PatchFilters":[]},"ApprovalRules":{"PatchRules":[219AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练{"PatchFilterGroup":{"PatchFilters":[{"Values":["Important","Critical"],"Key":"MSRC_SEVERITY"},{"Values":["SecurityUpdates"],"Key":"CLASSIFICATION"},{"Values":["WindowsServer2012R2"],"Key":"PRODUCT"}]},"ApproveAfterDays":5}]},"ModifiedDate":1481001795.
287,"CreatedDate":1480997823.
81,"ApprovedPatches":["KB2124261"],"Description":"WindowsServer2012R2,ImportantandCriticalsecurityupdates"}删除补丁基准awsssmdelete-patch-baseline--baseline-id"pb-0a34d8c0f03c1e529"系统将返回类似于以下内容的信息.
{"BaselineId":"pb-0a34d8c0f03c1e529"}列出所有补丁基准awsssmdescribe-patch-baselines系统将返回类似于以下内容的信息.
{"BaselineIdentities":[{"BaselineName":"AWS-DefaultPatchBaseline","DefaultBaseline":true,"BaselineDescription":"DefaultPatchBaselineProvidedbyAWS.
","BaselineId":"arn:aws:ssm:us-west-2:755505623295:patchbaseline/pb-04f1feddd7c0c5339"},220AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练{"BaselineName":"Windows-Server-2012R2","DefaultBaseline":false,"BaselineDescription":"WindowsServer2012R2,ImportantandCriticalsecurityupdates","BaselineId":"pb-00dbb759999aa2bc3"}]}以下是另一个命令,该命令将列出区域中的所有补丁基准.
awsssmdescribe-patch-baselines--regionus-west-1--filters"Key=OWNER,Values=[All]"系统将返回类似于以下内容的信息.
{"BaselineIdentities":[{"BaselineName":"AWS-DefaultPatchBaseline","DefaultBaseline":true,"BaselineDescription":"DefaultPatchBaselineProvidedbyAWS.
","BaselineId":"arn:aws:ssm:us-west-2:755505623295:patchbaseline/pb-04f1feddd7c0c5339"},{"BaselineName":"Windows-Server-2012R2","DefaultBaseline":false,"BaselineDescription":"WindowsServer2012R2,ImportantandCriticalsecurityupdates","BaselineId":"pb-00dbb759999aa2bc3"}]}列出所有AWS提供的补丁基准awsssmdescribe-patch-baselines--regionus-west-1--filters"Key=OWNER,Values=[AWS]"系统将返回类似于以下内容的信息.
{"BaselineIdentities":[{"BaselineName":"AWS-DefaultPatchBaseline","DefaultBaseline":true,"BaselineDescription":"DefaultPatchBaselineProvidedbyAWS.
","BaselineId":"arn:aws:ssm:us-west-2:755505623295:patchbaseline/pb-04f1feddd7c0c5339"}]}列出我的补丁基准awsssmdescribe-patch-baselines--regionus-west-1--filters"Key=OWNER,Values=[Self]"系统将返回类似于以下内容的信息.
221AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练{"BaselineIdentities":[{"BaselineName":"Windows-Server-2012R2","DefaultBaseline":false,"BaselineDescription":"WindowsServer2012R2,ImportantandCriticalsecurityupdates","BaselineId":"pb-00dbb759999aa2bc3"}]}显示补丁基准awsssmget-patch-baseline--baseline-idpb-00dbb759999aa2bc3系统将返回类似于以下内容的信息.
{"BaselineId":"pb-00dbb759999aa2bc3","Name":"Windows-Server-2012R2","PatchGroups":["WebServers"],"RejectedPatches":[],"GlobalFilters":{"PatchFilters":[]},"ApprovalRules":{"PatchRules":[{"PatchFilterGroup":{"PatchFilters":[{"Values":["Important","Critical"],"Key":"MSRC_SEVERITY"},{"Values":["SecurityUpdates"],"Key":"CLASSIFICATION"},{"Values":["WindowsServer2012R2"],"Key":"PRODUCT"}]},"ApproveAfterDays":5}]},"ModifiedDate":1480997823.
81,222AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练"CreatedDate":1480997823.
81,"ApprovedPatches":[],"Description":"WindowsServer2012R2,ImportantandCriticalsecurityupdates"}获取默认补丁基准awsssmget-default-patch-baseline--regionus-west-1系统将返回类似于以下内容的信息.
{"BaselineId":"arn:aws:ssm:us-west-1:075727635805:patchbaseline/pb-0ca44a362f8afc725"}设置默认补丁基准awsssmregister-default-patch-baseline--regionus-west-1--baseline-id"pb-08b654cf9b9681f04"{"BaselineId":"pb-08b654cf9b9681f04"}将补丁组"Web服务器"注册到补丁基准awsssmregister-patch-baseline-for-patch-group--baseline-id"pb-00dbb759999aa2bc3"--patch-group"WebServers"系统将返回类似于以下内容的信息.
{"PatchGroup":"WebServers","BaselineId":"pb-00dbb759999aa2bc3"}将补丁组"后端"注册到AWS提供的补丁基准awsssmregister-patch-baseline-for-patch-group--regionus-west-1--baseline-id"arn:aws:ssm:us-west-1:075727635805:patchbaseline/pb-0ca44a362f8afc725"--patch-group"Backend"系统将返回类似于以下内容的信息.
{"PatchGroup":"Backend","BaselineId":"arn:aws:ssm:us-west-1:075727635805:patchbaseline/pb-0ca44a362f8afc725"}显示补丁组注册awsssmdescribe-patch-groups--regionus-west-1223AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练系统将返回类似于以下内容的信息.
{"PatchGroupPatchBaselineMappings":[{"PatchGroup":"Backend","BaselineIdentity":{"BaselineName":"AWS-DefaultPatchBaseline","DefaultBaseline":false,"BaselineDescription":"DefaultPatchBaselineProvidedbyAWS.
","BaselineId":"arn:aws:ssm:us-west-1:075727635805:patchbaseline/pb-0ca44a362f8afc725"}},{"PatchGroup":"WebServers","BaselineIdentity":{"BaselineName":"Windows-Server-2012R2","DefaultBaseline":true,"BaselineDescription":"WindowsServer2012R2,ImportantandCriticalupdates","BaselineId":"pb-08b654cf9b9681f04"}}]}从补丁基准取消注册补丁组awsssmderegister-patch-baseline-for-patch-group--regionus-west-1--patch-group"Production"--baseline-id"arn:aws:ssm:us-west-1:075727635805:patchbaseline/pb-0ca44a362f8afc725"系统将返回类似于以下内容的信息.
{"PatchGroup":"Production","BaselineId":"arn:aws:ssm:us-west-1:075727635805:patchbaseline/pb-0ca44a362f8afc725"}获取补丁基准定义的所有补丁awsssmdescribe-effective-patches-for-patch-baseline--regionus-west-1--baseline-id"pb-08b654cf9b9681f04"系统将返回类似于以下内容的信息.
{"NextToken":"--tokenstringtruncated--","EffectivePatches":[{"PatchStatus":{"ApprovalDate":1384711200.
0,"DeploymentStatus":"APPROVED"},"Patch":{"ContentUrl":"https://support.
microsoft.
com/en-us/kb/2876331","ProductFamily":"Windows","Product":"WindowsServer2012R2","Vendor":"Microsoft","Description":"AsecurityissuehasbeenidentifiedinaMicrosoftsoftwareproductthatcouldaffectyoursystem.
Youcanhelpprotectyoursystembyinstalling224AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练thisupdatefromMicrosoft.
Foracompletelistingoftheissuesthatareincludedinthisupdate,seetheassociatedMicrosoftKnowledgeBasearticle.
Afteryouinstallthisupdate,youmayhavetorestartyoursystem.
","Classification":"SecurityUpdates","Title":"SecurityUpdateforWindowsServer2012R2Preview(KB2876331)","ReleaseDate":1384279200.
0,"MsrcClassification":"Critical","Language":"All","KbNumber":"KB2876331","MsrcNumber":"MS13-089","Id":"e74ccc76-85f0-4881-a738-59e9fc9a336d"}},{"PatchStatus":{"ApprovalDate":1428858000.
0,"DeploymentStatus":"APPROVED"},"Patch":{"ContentUrl":"https://support.
microsoft.
com/en-us/kb/2919355","ProductFamily":"Windows","Product":"WindowsServer2012R2","Vendor":"Microsoft","Description":"WindowsServer2012R2Updateisacumulativesetofsecurityupdates,criticalupdatesandupdates.
YoumustinstallWindowsServer2012R2UpdatetoensurethatyourcomputercancontinuetoreceivefutureWindowsUpdates,includingsecurityupdates.
Foracompletelistingoftheissuesthatareincludedinthisupdate,seetheassociatedMicrosoftKnowledgeBasearticleformoreinformation.
Afteryouinstallthisitem,youmayhavetorestartyourcomputer.
","Classification":"SecurityUpdates","Title":"WindowsServer2012R2Update(KB2919355)","ReleaseDate":1428426000.
0,"MsrcClassification":"Critical","Language":"All","KbNumber":"KB2919355","MsrcNumber":"MS14-018","Id":"8452bac0-bf53-4fbd-915d-499de08c338b"}}---outputtruncated---获取所有MSRC严重性为"关键"的适用于WindowsServer2012的补丁awsssmdescribe-available-patches--regionus-west-1--filtersKey=PRODUCT,Values=WindowsServer2012Key=MSRC_SEVERITY,Values=Critical系统将返回类似于以下内容的信息.
{"Patches":[{"ContentUrl":"https://support.
microsoft.
com/en-us/kb/2727528","ProductFamily":"Windows","Product":"WindowsServer2012","Vendor":"Microsoft","Description":"Asecurityissuehasbeenidentifiedthatcouldallowanunauthenticatedremoteattackertocompromiseyoursystemandgaincontroloverit.
YoucanhelpprotectyoursystembyinstallingthisupdatefromMicrosoft.
Afteryouinstallthisupdate,youmayhavetorestartyoursystem.
","Classification":"SecurityUpdates","Title":"SecurityUpdateforWindowsServer2012(KB2727528)","ReleaseDate":1352829600.
0,"MsrcClassification":"Critical",225AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练"Language":"All","KbNumber":"KB2727528","MsrcNumber":"MS12-072","Id":"1eb507be-2040-4eeb-803d-abc55700b715"},{"ContentUrl":"https://support.
microsoft.
com/en-us/kb/2729462","ProductFamily":"Windows","Product":"WindowsServer2012","Vendor":"Microsoft","Description":"Asecurityissuehasbeenidentifiedthatcouldallowanunauthenticatedremoteattackertocompromiseyoursystemandgaincontroloverit.
YoucanhelpprotectyoursystembyinstallingthisupdatefromMicrosoft.
Afteryouinstallthisupdate,youmayhavetorestartyoursystem.
","Classification":"SecurityUpdates","Title":"SecurityUpdateforMicrosoft.
NETFramework3.
5onWindows8andWindowsServer2012forx64-basedSystems(KB2729462)","ReleaseDate":1352829600.
0,"MsrcClassification":"Critical","Language":"All","KbNumber":"KB2729462","MsrcNumber":"MS12-074","Id":"af873760-c97c-4088-ab7e-5219e120eab4"}---outputtruncated---获取所有可用补丁awsssmdescribe-available-patches--regionus-west-1系统将返回类似于以下内容的信息.
{"NextToken":"--tokenstringtruncated--","Patches":[{"ContentUrl":"https://support.
microsoft.
com/en-us/kb/2032276","ProductFamily":"Windows","Product":"WindowsServer2008R2","Vendor":"Microsoft","Description":"Asecurityissuehasbeenidentifiedthatcouldallowanunauthenticatedremoteattackertocompromiseyoursystemandgaincontroloverit.
YoucanhelpprotectyoursystembyinstallingthisupdatefromMicrosoft.
Afteryouinstallthisupdate,youmayhavetorestartyoursystem.
","Classification":"SecurityUpdates","Title":"SecurityUpdateforWindowsServer2008R2x64Edition(KB2032276)","ReleaseDate":1279040400.
0,"MsrcClassification":"Important","Language":"All","KbNumber":"KB2032276","MsrcNumber":"MS10-043","Id":"8692029b-a3a2-4a87-a73b-8ea881b4b4d6"},{"ContentUrl":"https://support.
microsoft.
com/en-us/kb/2124261","ProductFamily":"Windows","Product":"Windows7","Vendor":"Microsoft","Description":"Asecurityissuehasbeenidentifiedthatcouldallowanunauthenticatedremoteattackertocompromiseyoursystemandgaincontroloverit.
YoucanhelpprotectyoursystembyinstallingthisupdatefromMicrosoft.
Afteryouinstallthisupdate,youmayhavetorestartyoursystem.
",226AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练"Classification":"SecurityUpdates","Title":"SecurityUpdateforWindows7(KB2124261)","ReleaseDate":1284483600.
0,"MsrcClassification":"Important","Language":"All","KbNumber":"KB2124261","MsrcNumber":"MS10-065","Id":"12ef1bed-0dd2-4633-b3ac-60888aa8ba33"}---outputtruncated---标记补丁基准awsssmadd-tags-to-resource--resource-type"PatchBaseline"--resource-id"pb-0869b5cf84fa07081"--tags"Key=Project,Value=Testing"列出补丁基准的标签awsssmlist-tags-for-resource--resource-type"PatchBaseline"--resource-id"pb-0869b5cf84fa07081"从补丁基准删除标签awsssmremove-tags-from-resource--resource-type"PatchBaseline"--resource-id"pb-0869b5cf84fa07081"--tag-keys"Project"获取每个实例的修补摘要状态每个实例的摘要将为您提供每个实例中具有以下状态的大量补丁:"NotApplicable"、"Missing"、"Failed"、"InstalledOther"和"Installed".
awsssmdescribe-instance-patch-states--instance-idsi-08ee91c0b17045407i-09a618aec652973a9i-0a00def7faa94f1ci-0fff3aab684d01b23系统将返回类似于以下内容的信息.
{"InstancePatchStates":[{"OperationStartTime":"2016-12-09T05:00:00Z","FailedCount":0,"InstanceId":"i-08ee91c0b17045407","OwnerInformation":"","NotApplicableCount":2077,"OperationEndTime":"2016-12-09T05:02:37Z","PatchGroup":"Production","InstalledOtherCount":186,"MissingCount":7,"SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e","Operation":"Scan","InstalledCount":72},{"OperationStartTime":"2016-12-09T04:59:09Z","FailedCount":0,"InstanceId":"i-09a618aec652973a9","OwnerInformation":"","NotApplicableCount":1637,"OperationEndTime":"2016-12-09T05:03:57Z",227AmazonEC2SystemsManager用户指南使用AWSCLI的PatchManager演练"PatchGroup":"Production","InstalledOtherCount":388,"MissingCount":2,"SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e","Operation":"Scan","InstalledCount":141}---outputtruncated---获取实例的补丁合规性详细信息awsssmdescribe-instance-patches--instance-idi-08ee91c0b17045407系统将返回类似于以下内容的信息.
{"NextToken":"--tokenstringtruncated--","Patches":[{"KBId":"KB2919355","Severity":"Critical","Classification":"SecurityUpdates","Title":"Windows8.
1Updateforx64-basedSystems(KB2919355)","State":"Installed","InstalledTime":"2014-03-18T12:00:00Z"},{"KBId":"KB2977765","Severity":"Important","Classification":"SecurityUpdates","Title":"SecurityUpdateforMicrosoft.
NETFramework4.
5.
1and4.
5.
2onWindows8.
1andWindowsServer2012R2x64-basedSystems(KB2977765)","State":"Installed","InstalledTime":"2014-10-15T12:00:00Z"},{"KBId":"KB2978126","Severity":"Important","Classification":"SecurityUpdates","Title":"SecurityUpdateforMicrosoft.
NETFramework4.
5.
1and4.
5.
2onWindows8.
1(KB2978126)","State":"Installed","InstalledTime":"2014-11-18T12:00:00Z"},---outputtruncated---228AmazonEC2SystemsManager用户指南SystemsManager参数入门SystemsManagerParameterStoreAmazonEC2SystemsManagerParameterStore提供安全的分层存储,用于配置数据管理和秘钥管理.
也可以将密码、数据库字符串和许可证代码等数据存储为参数值.
可以将值存储为纯文本或加密数据.
然后,可以使用创建参数时指定的唯一名称来引用对应值.
使用AWS管理控制台和AWSCLI可以轻松访问ParameterStore.
ParameterStore由AWS云支持,它可扩展、高度可用且持久.
ParameterStore无需额外付费且限制极少.
ParameterStore提供以下优势和功能.
使用安全、可扩展的托管密钥管理服务(无需管理服务器).
通过将数据与代码分离来提高安全性.
分层存储配置数据和密钥字符串,而且可跟踪版本.
实现以细粒度控制和审核访问.
配置更改通知并触发自动操作.
单独标记参数,然后从不同级别进行安全访问,包括操作、参数、EC2标签或路径级别.
跨AWS服务引用参数,如AmazonEC2、AmazonElasticContainerService、AWSLambda、AWSCloudFormation、AWSCodeBuild、AWSCodeDeploy和其他SystemsManager功能.
对于与AWSKMS、AmazonSNS、AmazonCloudWatch和AWSCloudTrail的集成进行配置,以实现加密、通知、监控和审核功能.
SystemsManager参数入门要开始使用SystemsManager参数,请完成以下任务.
任务了解更多信息了解如何使用不同类型的SystemsManager参数.
关于SystemsManager参数(p.
230)了解如何组织、创建和标记参数.
使用SystemsManager参数(p.
233)配置参数访问权限和通知.
设置SystemsManager参数(p.
244)了解如何在测试环境中创建和使用SystemsManager参数.
SystemsManagerParameterStore演练(p.
247)相关内容以下博客文章提供了关于ParameterStore以及如何借助其他AWS服务使用此功能的更多信息.
229AmazonEC2SystemsManager用户指南关于SystemsManager参数使用ParameterStore和任务的IAM角色来管理AmazonECS应用程序的密钥使用ParameterStore安全地访问AWSCodeDeploy中的密钥和配置数据有关EC2SystemsManagerParameterStore的有趣文章关于SystemsManager参数您可以在脚本、命令、配置和自动化流程中引用SystemsManager参数.
参数与SystemsManager功能(如RunCommand、StateManager和Automation)结合使用.
您还可以在其他AWS服务(如AmazonElasticContainerService和AWSLambda)中引用参数.
使用SystemsManager功能,您可以在AWSCLI或AWSToolsforWindowsPowerShell命令或脚本中引用SystemsManager参数.
您还可以在SSM文档中引用参数.
有关SSM文档的更多信息,请参阅SystemsManager文档(p.
39).
以下是一个在RunCommand的AWSCLI命令中使用SystemsManager参数的示例.
SystemsManager参数始终带有前缀ssm:.
awsssmsend-command--instance-idsi-1a2b3c4d5e6f7g8--document-nameAWS-RunPowerShellScript--parameter'{"commands":["echo{{ssm:parametername}}"]}'您还可以在SSM文档的参数部分引用SystemsManager参数,如下例所示.
{"schemaVersion":"2.
0","description":"Sampleversion2.
0documentv2","parameters":{"commands":{"type":"StringList","default":["{{ssm:parametername}}"]}},"mainSteps":[{"action":"aws:runShellScript","name":"runShellScript","inputs":{"runCommand":"{{commands}}"}}]}NoteSSM文档的runtimeConfig部分使用的是类似于本地参数的语法.
本地参数不同于SystemsManager参数.
您可以通过是否存在ssm:前缀区分本地参数和SystemsManager参数.
"runtimeConfig":{"aws:runShellScript":{"properties":[{"id":"0.
aws:runShellScript","runCommand":"{{commands}}","workingDirectory":"{{workingDirectory}}","timeoutSeconds":"{{executionTimeout}}"SSM文档当前不支持对安全字符串参数的引用.
这意味着,要通过RunCommand(举例来说)使用安全字符串参数,您必须在将参数值传递到RunCommand之前对它们进行检索,如以下示例所示:230AmazonEC2SystemsManager用户指南使用安全字符串参数AWSCLI$value=awsssmget-parameters--namestheparametername--with-decryptionawsssmsend-command–nameAWS-JoinDomain–parameterspassword=$value–instance-idtheinstanceIDToolsforWindowsPowerShell$secure=(Get-SSMParameterValue-Namestheparametername-WithDecryption$True).
Parameters[0].
Value|ConvertTo-SecureString-AsPlainText-Force$cred=New-ObjectSystem.
Management.
Automation.
PSCredential-argumentlistusername,$secure使用安全字符串参数安全字符串参数是需要以安全的方式存储和引用的任何敏感数据.
如果您有不希望用户更改或以明文形式引用的数据(例如密码或许可证密钥),则应使用安全字符串数据类型创建这些参数.
我们建议您对以下情形使用安全字符串参数.
您想要在各种AWS服务间使用数据/参数,但又不想以明文形式在命令、函数、代理日志或AWSCloudTrail日志中公开这些值.
您想要控制可以访问敏感数据的人.
您希望在有人访问敏感数据时进行审核(AWSCloudTrail).
您希望对您的敏感数据进行AWS级别的加密,并想用自己的加密密钥管理访问.
如果您在创建参数时选择安全字符串数据类型,则AWSKMS会加密参数值.
有关AWSKMS的更多信息,请参阅AWSKeyManagementServiceDeveloperGuide.
Important只有安全字符串参数的值会被加密.
参数的名称、描述和其他属性不会被加密.
因此,请考虑创建一个在参数名称中避免单词"password"的命名系统.
使用默认KMS密钥创建安全字符串参数SystemsManager包含一个默认AWSKMS密钥.
您可以通过AWSCLI执行以下命令,以查看此密钥:awskmsdescribe-key--key-idalias/aws/ssm如果您使用默认KMS密钥创建安全字符串参数,则无需为--key-id参数提供值.
以下CLI示例显示了在ParameterStore中不使用--key-id参数创建新的安全字符串参数的命令:awsssmput-parameter--namea_name--value"avalue"--typeSecureString使用KMS客户主密钥(CMK)创建安全字符串参数如果您希望使用自定义KMS密钥而非分配给您账户的默认密钥,则必须使用--key-id参数指定ARN.
该参数支持以下AWSKMS参数格式.
密钥ARN示例arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012231AmazonEC2SystemsManager用户指南使用安全字符串参数别名ARN示例arn:aws:kms:us-east-1:123456789012:alias/MyAliasName全局唯一密钥ID示例12345678-1234-1234-1234-123456789012别名示例alias/MyAliasName您可以从AWSCLI使用以下命令创建自定义AWSKMS密钥:awskmscreate-key使用以下命令,利用您刚刚创建的密钥创建安全字符串参数.
awsssmput-parameter--namea_name--value"avalue"--typeSecureString--key-idarn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5eNote您可以使用加密值手动创建参数.
在本例中,由于值已经加密,所以您无需选择安全字符串数据类型.
如果您选择安全字符串,将对您的参数进行双重加密.
默认情况下,所有安全字符串值在AmazonEC2控制台和AWSCLI中显示为密码文本.
要解密安全字符串值,用户必须具有KMS解密权限.
将安全字符串参数用于其他AWS服务您还可以在其他AWS服务中使用安全字符串参数.
在以下示例中,Lambda函数使用GetParametersAPI检索安全字符串参数.
from__future__importprint_functionimportjsonimportboto3ssm=boto3.
client('ssm','us-east-1')defget_parameters():response=ssm.
get_parameters(Names=['LambdaSecureString'],WithDecryption=True)forparameterinresponse['Parameters']:returnparameter['Value']deflambda_handler(event,context):value=get_parameters()print("value1="+value)returnvalue#Echobackthefirstkeyvalue相关主题有关如何创建和使用安全字符串参数的示例,请参阅创建安全字符串参数并将实例加入域(PowerShell)(p.
251).
有关将SystemsManager参数与其他AWS服务结合使用的更多信息,请参阅以下博客文章.
使用ParameterStore和任务的IAM角色来管理AmazonECS应用程序的密钥使用ParameterStore安全地访问AWSCodeDeploy中的密钥和配置数据有关AmazonEC2SystemsManagerParameterStore的有趣文章232AmazonEC2SystemsManager用户指南使用SystemsManager参数使用SystemsManager参数此部分介绍如何组织、创建和标记参数.
主题将参数组织成层次结构(p.
233)创建SystemsManager参数(p.
235)标记SystemsManager参数(p.
240)使用参数版本(p.
241)将参数组织成层次结构以平面列表的形式管理几十个或数百个参数十分耗时且容易出错.
而且为任务确定正确参数也很难.
这意味着,您可能意外地使用了错误的参数,或者您可能创建多个使用相同配置数据的参数.

您可以使用参数层次结构来帮助组织和管理参数.
一个层次结构是一个参数名称,包括您使用正斜杠定义的路径.
下面是一个示例,它在名称中使用三个层次结构级别来标识以下内容:/环境/计算机类型/应用程序/数据/Dev/DBServer/MySQL/db-string13您可以创建具有最多五个级别的层次结构.
我们建议您创建反映环境中现有层次结构的层次结构,如以下示例所示:您的持续集成和持续交付环境(CI/CD工作流)/Dev/DBServer/MySQL/db-string/Staging/DBServer/MySQL/db-string/Prod/DBServer/MySQL/db-string您的使用容器的应用程序/MyApp/.
NET/Libaries/git-password您的业务组织/Finance/Accountants/UserList/Finance/Analysts/UserList/HR/Employees/EU/UserList参数层次结构规范了创建参数的方式,而且使得随时间的推移管理参数更为容易.
参数层次结构还可帮助您为配置任务确定正确参数.
这可帮助您避免使用相同的配置数据创建多个参数.

您可以创建一个层次结构,允许您在不同的环境中共享参数,如以下示例所示,这些示例在开发和暂存环境中使用密码.
233AmazonEC2SystemsManager用户指南将参数组织成层次结构/DevTest/MyApp/database/db_password然后您可以为生产环境创建一个唯一密码,如以下示例所示:/prod/MyApp/database/db_password您无需指定参数层次结构.
您可以在第一级创建参数.
它们叫做根参数.
考虑到向后兼容性,在发布层次结构之前在ParameterStore中创建的所有参数都是根参数.
系统将以下两个参数视为根参数.
/parameter-nameparameter-name有关如何使用参数层次结构的示例,请参阅使用层次结构管理参数(p.
252).
查询层次结构中的参数使用层次结构的另一个好处是,能够通过使用GetParametersByPathAPI操作查询层次结构中的所有参数.
例如,如果您从AWSCLI执行以下命令,系统将返回IIS级别中的所有参数.
awsssmget-parameters-by-path--path/Dev/Web/IIS要查看层次结构中解密的SecureString参数,请指定路径和--with-decryption参数,如以下示例所示.
awsssmget-parameters-by-path--path/Prod/ERP/SAP--with-decryption使用层次结构限制IAM权限通过对ParameterStoreAPI操作使用层次结构和AWSIdentityandAccessManagement(IAM)策略,您可以提供或限制对层次结构的一个级别中所有参数的访问权限.
以下示例策略允许对us-east-1区域中AWS账户123456789012的所有参数执行所有ParameterStore操作.
用户不能创建参数,因为PutParameter操作已被显式拒绝.
此策略还禁止用户调用GetParametersByPath操作.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:*"],"Resource":"arn:aws:ssm:us-east-1:123456789012:parameter/*"},{"Effect":"Deny","Action":["ssm:GetParametersByPath"],"Condition":{"StringEquals":{"ssm:Recursive":["true"]}},"Resource":"arn:aws:ssm:us-east-1:123456789012:parameter/Dev/ERP/Oracle/*"},{"Effect":"Deny",234AmazonEC2SystemsManager用户指南创建参数"Action":["ssm:PutParameter"],"Condition":{"StringEquals":{"ssm:Overwrite":["false"]}},"Resource":"arn:aws:ssm:us-east-1:123456789012:parameter/*"}]}创建SystemsManager参数您可以使用AWSCLI、AWSToolsforWindowsPowerShell或AmazonEC2控制台创建参数,如此部分中所述.
主题使用AWSCLI创建SystemsManager参数(p.
236)使用AWSToolsforWindows创建SystemsManager参数(p.
238)使用AmazonEC2控制台创建SystemsManager参数(p.
239)当您创建参数时,需要指定以下信息:名称:(必填)指定用于识别您的参数的名称.
请注意以下有关SystemsManager参数名称的要求和限制:参数名称区分大小写.
在您的AWS账户中,参数名称必须是唯一的.
例如,SystemsManager将以下两个参数视为不同的参数:/CMH/TestParam1/TestParam1以下示例也是唯一的:/CMH/TestParam1/Logpath1/CMH/TestParam1以下示例不是唯一的:/TestParam1TestParam1参数名称不得以"aws"或"ssm"(不区分大小写)作为前缀.
例如,awsTestParameter、SSM-testparameter或/aws/testparam1将失败并引发异常.
参数名称只能包含下列符号和字母:a-zA-Z0-9_.
-/参数名称不能包含空格.
如果指定参数层次结构,则层次结构可以具有最多五个级别的深度.
可以在该层次结构的任何级别定义参数.
以下两个例子都是有效的:/Level-1/Level-2/Level-3/Level-4/Level-5/parameter-name/Level-1/parameter-name尝试创建以下参数将失败并引发HierarchyLevelLimitExceededException异常:235AmazonEC2SystemsManager用户指南创建参数/Level-1/Level-2/Level-3/Level-4/Level-5/Level-6/parameter-name数据类型:(必填)指定数据类型,以定义系统使用参数的方式.
ParameterStore目前支持以下数据类型:String、StringList和SecureString.
NoteStringList中的项目必须用逗号(,)分隔.
不能使用其他标点符号或特殊字符对列表中的项目进行转义.
如果您有需要逗号的参数值,则使用String数据类型.
描述(可选,但建议):键入描述,以帮助您识别参数及其预期用途.
值:(必填)您的参数值.
密钥ID:KeyID仅适用于使用SecureString数据类型的参数.
KeyID可以是自动分配给您的AWS账户的默认AWSKeyManagementService(AWSKMS)密钥,也可以是自定义密钥.
请注意以下几点:要使用默认AWSKMS密钥,请选择SecureString类型数据,而且在创建参数时不要指定KeyID.
系统会自动用您的默认KMS密钥填充KeyID.
要使用自定义KMS密钥,请选择带有KeyID参数的SecureString数据类型.
Note您可以使用句点".
"或下划线"_"来分组类似参数.
例如,您可以按照如下所示对参数进行分组:prod.
db.
string和prod.
domain.
password.
创建参数后,您可以在SSM文档、命令或脚本中使用以下语法指定该参数(括号之间没有空格):{{ssm:parameter_name}}或{{ssm:parameter_name}}NoteSystemsManager参数的名称不得以"ssm"或"aws"作为前缀,但是当您在SSM文档或命令中指定参数时,语法中就会包括"ssm",如以下示例所示.
有效:{{ssm:addUsers}}无效:{{ssm:ssmAddUsers}}.
使用AWSCLI创建SystemsManager参数使用以下过程创建一个使用String或StringList数据类型的参数.
使用AWSCLI创建SecureString参数的过程在本主题的稍后部分介绍.
Note参数只在创建它的区域可用.
使用AWSCLI创建String或StringList参数1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令创建一个参数.
236AmazonEC2SystemsManager用户指南创建参数awsssmput-parameter--name"a_name"--value"avalue,oracomma-separatedlistofvalues"--typeStringorStringList如果成功,则命令没有输出.
下面是使用StringList数据类型的示例.
awsssmput-parameter--name/IAD/ERP/Oracle/addUsers--value"Milana,Mariana,Mark,Miguel"--typeStringListNoteStringList中的项目必须用逗号(,)分隔.
不能使用其他标点符号或特殊字符对列表中的项目进行转义.
如果您有需要逗号的参数值,则使用String数据类型.
3.
执行以下命令验证参数的详细信息.
awsssmget-parameters--name"thenameyouspecified"下面是使用前面示例中指定的名称的示例.
awsssmget-parameters--name"/IAD/ERP/Oracle/addUsers"使用AWSCLI创建SecureString参数1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonElasticComputeCloud(AmazonEC2)中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令创建一个参数.
awsssmput-parameter--name"a_name"--value"avalue"--typeSecureString--key-id"acustomKMSkeyID"Note要使用分配给您的账户的默认AWSKMS密钥,请从命令中删除key-id参数.
下面是对密码和自定义AWSKMS密钥使用模糊名称(elixir3131)的示例.
awsssmput-parameter--name/Finance/Payroll/elixir3131--value"P@sSwW)rd"--typeSecureString--key-idarn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e3.
执行以下命令验证参数的详细信息.
237AmazonEC2SystemsManager用户指南创建参数awsssmget-parameters--name"thenameyouspecified"--with-decryptionNote如果您不指定with-decryption参数,或者如果您指定no-with-decryption参数,命令会返回加密的GUID.
有关使用AWSCLI创建参数的更多信息,请参阅在命令中创建和使用参数(AWSCLI)(p.
248).
使用AWSToolsforWindows创建SystemsManager参数使用以下过程创建一个使用String或StringList数据类型的参数.
使用AWSToolsforWindows创建SecureString参数的过程在本主题的稍后部分介绍.
Note参数只在创建它的区域可用.
使用AWSToolsforWindows创建String或StringList参数1.
打开AWSToolsforWindowsPowerShell并执行以下命令指定您的凭证.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
Set-AWSCredentials–AccessKeykey_name–SecretKeykey_name2.
执行以下命令为PowerShell会话设置区域.
该示例使用us-east-2区域.
Set-DefaultAWSRegion-Regionus-east-23.
执行以下命令创建一个参数.
Write-SSMParameter-Name"aname"-Value"avalue,oracomma-separatedlistofvalues"-Type"StringorStringList"如果成功,则命令没有输出.
NoteStringList中的项目必须用逗号(,)分隔.
不能使用其他标点符号或特殊字符对列表中的项目进行转义.
如果您有需要逗号的参数值,则使用String数据类型.
下面是使用String数据类型的示例.
Write-SSMParameter-Name"/IAD/Web/SQL/IPaddress"-Value"99.
99.
99.
999"-Type"String"4.
执行以下命令验证参数的详细信息.
(Get-SSMParameterValue-Name"thenameyouspecified").
Parameters使用AWSToolsforWindows创建SecureString参数1.
打开AWSToolsforWindowsPowerShell并执行以下命令指定您的凭证.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
238AmazonEC2SystemsManager用户指南创建参数Set-AWSCredentials–AccessKeykey_name–SecretKeykey_name2.
执行以下命令为PowerShell会话设置区域.
该示例使用us-east-2区域.
Set-DefaultAWSRegion-Regionus-east-23.
执行以下命令创建一个参数.
Write-SSMParameter-Name"aname"-Value"avalue"-Type"SecureString"-KeyId"acustomKMSkeyID"如果成功,则命令没有输出.
Note要使用分配给您的账户的默认AWSKMS密钥,请从命令中删除-KeyId参数.
下面是对密码和用户默认KMS密钥使用模糊名称(elixir3131)的示例.
Write-SSMParameter-Name"/Finance/Payroll/elixir3131"-Value"P@sSwW)rd"-Type"SecureString"4.
执行以下命令验证参数的详细信息.
(Get-SSMParameterValue-Name"thenameyouspecified"–WithDecryption$true).
Parameters使用AmazonEC2控制台创建SystemsManager参数执行以下过程,使用AmazonEC2控制台创建SystemsManager参数.
Note参数只在创建它的区域可用.
使用EC2控制台创建参数1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择ParameterStore.
2.
选择创建参数.
3.
对于Name,键入层次结构和参数名称.
例如,键入/Test/helloWorld.
4.
在Description框中,键入用于将此参数标识为测试参数的描述.
5.
对于Type,选择String、StringList或SecureString.
Note如果选择SecureString,则会显示KMSKeyID字段.
如果不提供KMS密钥ID,系统将使用alias/aws/ssm(默认),它是SystemsManager的默认KMS密钥.
如果您不想使用此密钥,则可以选择自定义密钥.
6.
在Value框中,键入一个值.
例如,键入MyFirstParameter.
如果您选择SecureString,则在您键入时值会被掩蔽.
7.
选择创建参数.
在系统创建参数后,选择Close.
8.
在参数列表中,选择您刚创建的参数.
验证Description选项卡上的详细信息.
如果您创建了SecureString参数,请选择Show查看未加密值.
239AmazonEC2SystemsManager用户指南标记参数标记SystemsManager参数使用AddTagsToResourceAPI向资源(例如AmazonEC2实例、SystemsManagerMaintenanceWindow和SystemsManager参数)添加标签.
标签用于对参数进行组织.
例如,可以为特定环境、部门或用户和组标记参数.
在标记参数之后,可以通过创建一个指定用户可访问的标签的IAM策略来限制对该参数的访问权限.
有关使用标签限制对参数的访问权限的更多信息,请参阅使用标签控制对参数的访问权限(p.
245).
有关提供SystemsManager的区域的信息,请参阅区域.
使用AWSCLI标记参数1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令列出您可以标记的参数.
awsssmdescribe-parameters记下您想标记的参数的名称.
3.
执行以下命令标记一个参数.
awsssmadd-tags-to-resource--resource-type"Parameter"--resource-id"theparametername"--tags"Key=akey,forexampleEnvironment,Value=avalue,forexampleTEST"如果成功,则命令没有输出.
4.
执行以下命令验证参数标签.
awsssmlist-tags-for-resource--resource-type"Parameter"--resource-id"theparametername"使用AWSToolsforWindows标记参数1.
打开AWSToolsforWindowsPowerShell并执行以下命令指定您的凭证.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
Set-AWSCredentials–AccessKeykey_name–SecretKeykey_name2.
执行以下命令为PowerShell会话设置区域.
该示例使用us-east-2区域.
SystemsManager目前在以下区域可用.
Set-DefaultAWSRegion-Regionus-east-23.
执行以下命令列出您可以标记的参数.
240AmazonEC2SystemsManager用户指南使用参数版本Get-SSMParameterList4.
执行以下命令标记一个参数.
$tag1=New-ObjectAmazon.
SimpleSystemsManagement.
Model.
Tag$tag1.
Key="Environment"$tag1.
Value="TEST"Add-SSMResourceTag-ResourceType"Parameter"-ResourceId"theparametername"-Tag$tag1如果成功,则命令没有输出.
5.
执行以下命令验证参数标签.
Get-SSMResourceTag-ResourceType"Parameter"-ResourceId"theparametername"使用参数版本在最初创建一个参数时,ParameterStore为该参数分配版本1.
每次编辑参数时,ParameterStore自动将其版本号增加1.
您可以在API调用和SSM文档中指定参数名和特定版本号.
如果不指定版本号,系统自动使用最新版本.
参数版本针对意外更改参数的情况提供额外保护.
您可以查看详细信息,包括所有版本的值.
还可以使用参数版本查看一段时间内更改参数的次数.
可以使用以下格式,在命令、API调用和SSM文档中引用包括旧版本在内的特定参数版本:{{ssm:parameter_name:version}}.
以下示例是关于在SSM文档中指定的、名为RunCommand的参数:{"schemaVersion":"1.
2","description":"Runashellscriptorspecifythecommandstorun.
","parameters":{"commands":{"type":"StringList","description":"(Required)Specifyashellscriptoracommandtorun.
","minItems":1,"displayType":"textarea","default":"{{ssm:RunCommand:2}}"},"executionTimeout":{"type":"String","default":"3600","description":"(Optional)Thetimeinsecondsforacommandtocompletebeforeitisconsideredtohavefailed.
Defaultis3600(1hour).
Maximumis28800(8hours).
","allowedPattern":"([1-9][0-9]{0,3})|(1[0-9]{1,4})|(2[0-7][0-9]{1,3})|(28[0-7][0-9]{1,2})|(28800)"}},"runtimeConfig":{"aws:runShellScript":{"properties":[{"id":"0.
aws:runShellScript","runCommand":"{{commands}}","timeoutSeconds":"{{executionTimeout}}"}]241AmazonEC2SystemsManager用户指南使用参数版本}}}以下过程向您演示如何编辑参数,并在之后验证是否已创建新版本.
主题使用EC2控制台创建新版本(p.
242)使用AWSCLI创建新版本(p.
242)使用PowerShell创建新版本(p.
243)使用EC2控制台创建新版本执行以下过程,使用AmazonEC2控制台创建参数的新版本.
通过使用EC2控制台创建新的参数版本1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择ParameterStore.
2.
选择您之前创建的一个参数.
有关创建新参数的信息,请参阅创建SystemsManager参数(p.
235).
Note参数只在创建它的区域可用.
如果看不到要更新的参数,请验证您的区域.

3.
依次选择Actions、Editparameter.
4.
在Value框中键入新的值,然后选择Saveparameter.
5.
在参数列表中选择刚刚更新的参数,然后选择History选项卡.
验证版本号是否增加1,并验证新值.
使用AWSCLI创建新版本执行以下过程,使用AWSCLI创建参数的新版本.
通过使用AWSCLI创建参数的新版本1.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
awsconfigure系统将提示您指定以下内容:AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER2.
执行以下命令列出您可以更新的参数.
Note参数只在创建它的区域可用.
如果看不到要更新的参数,请验证您的区域.

awsssmdescribe-parameters242AmazonEC2SystemsManager用户指南使用参数版本记下您想更新的参数的名称.
3.
执行以下命令更新参数值.
awsssmput-parameter--name"the_parameter_name"--typethe_parameter_type--value"the_new_value"--overwrite4.
执行以下命令,查看该参数的所有版本.
awsssmget-parameter-history--name"the_parameter_name"5.
执行以下命令,按版本号检索有关参数的信息.
awsssmget-parameters--names"the_parameter_name:the_version_number"以下是示例.
awsssmget-parameters--names"/Production/SQLConnectionString:3"使用PowerShell创建新版本执行以下过程,使用AWSToolsforWindowsPowerShell创建参数的新版本.
通过使用PowerShell创建参数的新版本1.
打开AWSToolsforWindowsPowerShell并执行以下命令指定您的凭证.
您必须在AmazonEC2中具有管理员权限,或者您必须在IAM中被授予相应权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
Set-AWSCredentials–AccessKeykey_name–SecretKeykey_name2.
执行以下命令为PowerShell会话设置区域.
该示例使用us-east-2区域.
SystemsManager目前在以下区域可用.
Set-DefaultAWSRegion-Regionus-east-23.
执行以下命令列出您可以更新的参数.
Note参数只在创建它的区域可用.
如果看不到要更新的参数,请验证您的区域.

Get-SSMParameterList记下您想更新的参数的名称.
4.
执行以下命令更新参数值.
Write-SSMParameter-Name"the_parameter_name"-Value"the_new_value"-Type"the_parameter_type"-Overwrite$true5.
执行以下命令,查看该参数的所有版本.
Get-SSMParameterHistory-Name"the_parameter_name"6.
执行以下命令,按版本号检索有关参数的信息.
243AmazonEC2SystemsManager用户指南设置SystemsManager参数(Get-SSMParameterValue-Names"the_parameter_name").
Parameters|fl设置SystemsManager参数要设置SystemsManager参数,您需要配置AWSIdentityandAccessManagement(IAM)角色,这样SystemsManager才有权限执行您为服务指定的操作.
此部分提供有关如何使用IAM控制台手动配置这些角色的信息.
此部分还介绍了如何创建AmazonCloudWatchEvents事件以接收有关SystemsManager参数操作的通知.
内容控制对SystemsManager参数的访问权限(p.
244)为SystemsManager参数设置通知和事件(p.
247)控制对SystemsManager参数的访问权限您将使用AWSIdentityandAccessManagement(IAM)控制对SystemsManager参数的访问权限.
更具体地说,您将创建IAM策略来限制对以下API操作的访问权限:DeleteParameterDeleteParameters(使用AmazonEC2控制台删除参数)DescribeParametersGetParametersPutParameter我们建议您通过创建限制性IAM策略来控制对SystemsManager参数的访问权限.
例如,以下策略允许您为特定资源调用DescribeParameters和GetParametersAPI操作.
这意味着,您可以获取有关以prod-*开头的所有参数的信息并使用这些参数.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:DescribeParameters"],"Resource":"*"},{"Effect":"Allow","Action":["ssm:GetParameters"],"Resource":"arn:aws:ssm:us-east-1:123456123:parameter/prod-*"}]}对于受信任的管理员,您可以通过使用类似以下示例的策略提供对所有SystemsManager参数API操作的完全访问权限.
此策略将授予用户对所有以"dbserver-prod-*"开头的生产参数的完全访问权限.

{"Version":"2012-10-17",244AmazonEC2SystemsManager用户指南控制对SystemsManager参数的访问权限"Effect":"Allow","Action":["ssm:DescribeParameters","ssm:PutParameter","ssm:GetParameters","ssm:DeleteParameter"],"Resource":["arn:aws:ssm:region:accountid:parameter/dbserver-prod-*"]}仅允许特定参数在实例上运行您还可以控制访问权限,以使实例只能运行特定参数.
以下示例支持实例获取仅用于以"prod-"开头的参数的参数值.
如果参数是安全字符串,则实例会使用AWSKMS解密该字符串.
Note如果您在创建参数时选择安全字符串数据类型,则AWSKMS会加密参数值.
有关AWSKMS的更多信息,请参阅AWSKeyManagementServiceDeveloperGuide.
每个AWS账户都分配有默认AWSKMS密钥.
您可以通过AWSCLI执行以下命令,以查看您的密钥:awskmsdescribe-key--key-idalias/aws/ssm{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:GetParameters"],"Resource":["arn:aws:ssm:region:account-id:parameter/prod-*"]},{"Effect":"Allow","Action":["kms:Decrypt"],"Resource":["arn:aws:kms:region:account-id:key/CMK"]}]}Note如上述实例所示,实例策略会分配到IAM中的实例角色中.
要详细了解如何配置对SystemsManager功能的访问权限,包括如何将策略分配给用户和实例,请参阅配置对SystemsManager的访问权限(p.
7).
使用标签控制对参数的访问权限在标记参数之后,可以通过创建一个指定用户可访问的标签的IAM策略来限制对该参数的访问权限.
当用户尝试使用参数时,系统会检查IAM策略和为该参数指定的标签.
如果用户对分配给该参数的标签没有访问权限,用户会收到访问被拒绝错误.
使用以下过程创建一个IAM策略来通过使用标签限制对参数的访问权限.
245AmazonEC2SystemsManager用户指南控制对SystemsManager参数的访问权限开始前的准备工作创建并标记参数.
有关更多信息,请参阅设置SystemsManager参数(p.
244).
使用标签限制用户对参数的访问权限1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中选择Policies,然后选择Createpolicy.
3.
在CreateYourOwnPolicy部分,选择Select.
4.
在PolicyName字段中,指定一个将它标识为目标参数的用户策略的名称.
5.
输入描述.
6.
在PolicyDocument字段中,复制并粘贴以下示例策略.
将tag_key和tag_value替换为您的标签的键值对.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:GetParameters"],"Resource":"*","Condition":{"StringLike":{"ssm:resourceTag/tag_key":["tag_value"]}}}]}您可以使用以下Condition格式在策略中指定多个键.
指定多个键会为这些键创建AND关系.
"Condition":{"StringLike":{"ssm:resourceTag/tag_key1":["tag_value1"],"ssm:resourceTag/tag_key2":["tag_value2"]}}您可以使用以下Condition格式在策略中指定多个值.
ForAnyValue为这些值建立OR关系.
还可以指定ForAllValues来建立AND关系.
"Condition":{"ForAnyValue:StringLike":{"ssm:resourceTag/tag_key1":["tag_value1","tag_value2"]}}246AmazonEC2SystemsManager用户指南为SystemsManager参数设置通知和事件7.
选择CreatePolicy.
8.
将策略分配给IAM用户或组.
有关更多信息,请参阅更改IAM用户的权限和将策略附加到IAM组.
将策略附加到IAM用户或组账户之后,如果用户尝试使用参数,并且用户的策略不允许用户访问该参数的标签(调用GetParametersAPI),系统会返回错误.
错误类似于以下内容:User:user_nameisnotauthorizedtoperform:ssm:GetParametersonresource:parameterARNwiththefollowingcommand.
当参数具有多个标签时,如果用户无权访问这些标签中的任何一个,则用户仍会收到访问被拒绝错误.

为SystemsManager参数设置通知和事件您可以使用AmazonCloudWatchEvents和AmazonSNS来告知您有关SystemsManager参数的更改.
在参数被访问、更新或删除时,您会收到通知.
您还可以在参数有一段时间未被更新或访问时收到通知.

您还可以使用CloudWatch对特定参数事件的目标执行操作.
这意味着,例如,您可以执行AWSLambda函数在参数被删除后重新创建它.
您还可以设置一个通知,以在数据库密码被更新时触发Lambda函数.
Lambda函数可以强制您的数据库连接重置或使用新密码重新连接.
开始前的准备工作创建AmazonSNS主题.
有关更多信息,请参阅AmazonSimpleNotificationServiceDeveloperGuide中的AmazonSNS入门.
为SystemsManager参数配置CloudWatchEvents1.
SignintotheAWSManagementConsoleandopentheCloudWatchconsoleathttps://console.
amazonaws.
cn/cloudwatch/.
2.
在左侧导航窗格中,选择Events,然后选择Createrule.
3.
在EventSource下,验证已选中EventPattern.
4.
在ServiceName字段中,选择EC2SimpleSystemsManager(SSM)5.
在EventType字段中,选择ParameterStore.
6.
选择您要接收通知的详细类型和状态,然后选择Addtargets.
7.
在Targets列表中,选择一个目标类型.
例如,选择Lambdafuction或选择SNStopic.
有关不同目标类型的信息,请参阅对应的AWS帮助文档.
8.
在页面上向下滚动,然后选择Configuredetails.
9.
指定规则详细信息,然后选择Createrule.
SystemsManagerParameterStore演练以下演练向您展示如何使用ParameterStore在测试环境中创建、存储和执行参数.
以下演练说明如何将ParameterStore与其他SystemsManager功能结合使用.
此外,您还可以将ParameterStore与其他AWS服务结合使用.
有关更多信息,请参阅将安全字符串参数用于其他AWS服务(p.
232).
内容在命令中创建和使用参数(EC2控制台)(p.
248)在命令中创建和使用参数(AWSCLI)(p.
248)创建安全字符串参数并将实例加入域(PowerShell)(p.
251)247AmazonEC2SystemsManager用户指南在命令中创建和使用参数(EC2控制台)使用层次结构管理参数(p.
252)在命令中创建和使用参数(EC2控制台)以下过程将指导您完成在ParameterStore中创建参数然后执行使用此参数的RunCommand命令的过程.
使用ParameterStore创建参数1.
打开AmazonEC2控制台,展开导航窗格中的SystemsManagerSharedResources,然后选择ParameterStore.
2.
选择创建参数.
3.
对于Name,键入层次结构和名称.
例如,键入/Test/helloWorld.
有关参数层次结构的更多信息,请参阅将参数组织成层次结构(p.
233).
4.
在描述字段中,键入用于将此参数标识为测试参数的描述.
5.
对于类型,选择字符串.
6.
在Value字段中,键入一个字符串.
例如,键入My1stParameter.
7.
选择创建参数.
在系统创建参数后,选择OK.
8.
在EC2控制台导航窗格中,展开Commands,然后选择RunCommand.
9.
选择Runacommand.
10.
在CommandDocument列表中,选择AWS-RunPowershellScript(Windows)或AWS-RunShellScript(Linux).
11.
在目标实例下,选择您之前创建的实例.
12.
在Commands字段中,键入echo{{ssm:parametername}},例如echo{{ssm:/Test/helloWorld}}.
13.
选择Run.
14.
在命令历史记录列表中,选择您刚刚运行的命令,然后选择Output选项卡,再选择ViewOutput.
在命令中创建和使用参数(AWSCLI)以下过程将指导您完成使用AWSCLI创建和存储参数的过程.
使用ParameterStore创建字符串参数1.
将AWSCLI下载到本地计算机上.
2.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER3.
执行以下命令,使用字符串数据类型创建参数.
--name参数使用层次结构.
有关层次结构的更多信息,请参阅将参数组织成层次结构(p.
233).
awsssmput-parameter--name"a_name"--value"avalue"--typeString248AmazonEC2SystemsManager用户指南在命令中创建和使用参数(AWSCLI)下面是在名称中使用参数层次结构的示例.
有关参数层次结构的更多信息,请参阅将参数组织成层次结构(p.
233).
awsssmput-parameter--name"/Test/IAD/helloWorld"--value"My1stParameter"--typeString该命令没有输出.
4.
执行以下命令,查看参数元数据.
awsssmdescribe-parameters--filters"Key=Name,Values=/Test/IAD/helloWorld"Note名称必须大写.
系统将返回类似于以下内容的信息.
{"Parameters":[{"LastModifiedUser":"arn:aws:iam::123456789:user/User'sname","LastModifiedDate":1494529763.
156,"Type":"String","Name":"helloworld"}]}5.
执行以下命令,更改参数值.
awsssmput-parameter--name"/Test/IAD/helloWorld"--value"gooddaysunshine"--typeString--overwrite该命令没有输出.
6.
执行以下命令,查看最新的参数值.
awsssmget-parameters--names"/Test/IAD/helloWorld"系统将返回类似于以下内容的信息.
{"InvalidParameters":[],"Parameters":[{"Type":"String","Name":"/Test/IAD/helloWorld","Value":"gooddaysunshine"}]}7.
执行以下命令,查看参数值的历史记录.
awsssmget-parameter-history--name"/Test/IAD/helloWorld"8.
执行以下命令,在RunCommand命令中使用该参数.
249AmazonEC2SystemsManager用户指南在命令中创建和使用参数(AWSCLI)awsssmsend-command--document-name"AWS-RunShellScript"--parameters"commands=["echo{{ssm:/Test/IAD/helloWorld}}"]"--targets"Key=instance-ids,Values=theIDofaninstanceconfiguredforSystemsManager"使用以下过程创建安全字符串参数.
有关安全字符串参数的更多信息,请参阅使用安全字符串参数(p.
231).
使用AWSCLI创建安全字符串参数1.
执行下列命令之一以使用安全字符串数据类型创建参数.
创建使用默认KMS密钥的安全字符串参数awsssmput-parameter--name"a_name"--value"avalue,forexampleP@ssW%rd区1"--type"SecureString"创建使用自定义AWSKMS密钥的安全字符串参数awsssmput-parameter--name"a_name"--value"avalue"--type"SecureString"--key-id"yourAWSuseraccountID/thecustomAWSKMSkey"下面是使用自定义AWSKMS密钥的示例.
awsssmput-parameter--name"db-password"--value"P@ssW%rd#1"--type"SecureString"--key-id"arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e"Important只有安全字符串参数的值会被加密.
参数的名称、描述和其他属性不会被加密.
因此,请考虑创建一个在参数名称中避免单词"password"的命名系统.
2.
执行以下命令,查看参数元数据.
awsssmdescribe-parameters--filters"Key=Name,Values=thenamethatyouspecified"3.
执行以下命令,更改参数值.
awsssmput-parameter--name"thenamethatyouspecified"--value"newvalue"--type"SecureString"--overwrite更新使用默认KMS密钥的安全字符串参数awsssmput-parameter--name"thenamethatyouspecified"--value"newvalue"--type"SecureString"--key-id"theAWSKMSkeyID"--overwrite更新使用自定义KMS密钥的安全字符串参数awsssmput-parameter--name"thenamethatyouspecified"--value"newvalue"--type"SecureString"--key-id"yourAWSuseraccountalias/thecustomKMSkey"--overwrite4.
执行以下命令,查看最新的参数值.
awsssmget-parameters--names"thenamethatyouspecified"--with-decryption250AmazonEC2SystemsManager用户指南创建安全字符串参数并将实例加入域(PowerShell)5.
执行以下命令,查看参数值的历史记录.
awsssmget-parameter-history--name"thenamethatyouspecified"Important只有安全字符串参数的值会被加密.
参数的名称、描述和其他属性不会被加密.
因此,请考虑创建一个在参数名称中避免单词"password"的命名系统.
创建安全字符串参数并将实例加入域(PowerShell)本演练介绍如何使用SystemsManager安全字符串参数和RunCommand将Windows实例加入到域中.
演练中使用了典型的域参数,例如DNS地址、域名和域用户名.
这些值作为未加密的字符串值传递.
将使用AWSKMS主秘钥加密域密码并将其作为安全字符串传递.
创建安全字符串参数并将实例加入域1.
使用AWSToolsforWindowsPowerShell将参数输入到系统中.
Write-SSMParameter-NameDNS-IP-ValueaDNSIPaddress-TypeStringWrite-SSMParameter-NamedomainName-Valuethedomainname-TypeStringWrite-SSMParameter-NamedomainJoinUserName-Valueausername-TypeStringWrite-SSMParameter-NamedomainJoinPassword-Valueapassword-TypeSecureStringImportant只有安全字符串参数的值会被加密.
参数的名称、描述和其他属性不会被加密.
因此,请考虑创建一个在参数名称中避免单词"password"的命名系统.
2.
将AmazonEC2RoleforSSM托管策略附加到您的实例的IAM角色权限.
有关信息,请参阅托管策略与内联策略.
3.
编辑附加到实例的IAM角色并添加以下策略.
此策略授予实例调用kms:DecryptAPI的权限.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["kms:Decrypt"],"Resource":["arn:aws:kms:region:account_id:key/key_id"]}]}4.
复制以下json示例并粘贴到简单文本编辑器中,并将文件保存为以下位置中的JoinInstanceToDomain.
json:c:\temp\JoinInstanceToDomain.
json.
{"schemaVersion":"2.
0","description":"RunaPowerShellscripttosecurelydomain-joinaWindowsinstance","mainSteps":[{"action":"aws:runPowerShellScript","name":"runPowerShellWithSecureString",251AmazonEC2SystemsManager用户指南使用层次结构管理参数"inputs":{"runCommand":["$ipdns=(Get-SSMParameterValue-Namedns).
Parameters[0].
Value\n","$domain=(Get-SSMParameterValue-NamedomainName).
Parameters[0].
Value\n","$username=(Get-SSMParameterValue-NamedomainJoinUserName).
Parameters[0].
Value\n","$password=(Get-SSMParameterValue-NamedomainJoinPassword-WithDecryption$True).
Parameters[0].
Value|ConvertTo-SecureString-asPlainText-Force\n","$credential=New-ObjectSystem.
Management.
Automation.
PSCredential($username,$password)\n","Set-DnsClientServerAddress\"Ethernet2\"-ServerAddresses$ipdns\n","Add-Computer-DomainName$domain-Credential$credential\n","Restart-Computer-force"]}}]}5.
在AWSToolsforWindowsPowerShell中执行以下命令以创建新SSM文档.
$json=Get-ContentC:\temp\JoinInstanceToDomain|Out-StringNew-SSMDocument-NameJoinInstanceToDomain-Content$json6.
在AWSToolsforWindowsPowerShell中执行以下命令以将实例加入到域Send-SSMCommand-InstanceIdInstance-ID-DocumentNameJoinInstanceToDomain使用层次结构管理参数此演练向您说明如何通过使用AWSCLI来使用参数和参数层次结构参数.
有关参数层次结构的更多信息,请参阅将参数组织成层次结构(p.
233).
使用层次结构管理参数1.
将AWSCLI下载到本地计算机上.
2.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER3.
执行以下命令创建一个使用allowedPattern参数和String数据类型的参数.
本示例中的允许模式表示参数的值必须为1到4个数字.
awsssmput-parameter--name"/MyService/Test/MaxConnections"--value100--allowed-pattern"\d{1,4}"--typeString该命令没有输出.
252AmazonEC2SystemsManager用户指南使用层次结构管理参数4.
执行以下命令尝试用新值覆盖您刚刚创建的参数.
awsssmput-parameter--name"/MyService/Test/MaxConnections"--value10,000--typeString--overwrite系统会引发以下错误,因为新值不满足您在上一步骤中指定的允许模式的要求.

Anerroroccurred(ParameterPatternMismatchException)whencallingthePutParameteroperation:Parametervalue,cannotbevalidatedagainstallowedPattern:\d{1,4}5.
执行以下命令创建一个使用您的默认AWSKMS密钥的安全字符串参数.
本示例中的允许模式表示用户可以指定任意字符,并且值必须在8到20个字符之间.
awsssmput-parameter--name"/MyService/Test/DBpassword"--value"p#sW*rd33"--allowed-pattern".
{8,20}"--typeSecureString6.
执行以下命令创建多个使用上一步骤中的层次结构的参数.
awsssmput-parameter--name"/MyService/Test/DBname"--value"SQLDevDb"--typeStringawsssmput-parameter--name"/MyService/Test/user"--value"SA"--typeStringawsssmput-parameter--name"/MyService/Test/userType"--value"SQLuser"--typeString7.
执行以下命令获取两个参数的值.
awsssmget-parameters--names"/MyService/Test/user""/MyService/Test/userType"8.
执行以下命令查询单个级别内的所有参数.
awsssmdescribe-parameters--filtersKey=Name,Values="/MyService/Test"9.
执行以下命令删除两个参数awsssmdelete-parameters--name"/IADRegion/Dev/user""/IADRegion/Dev/userType"253AmazonEC2SystemsManager用户指南SystemsManagerRunCommandSystemsManagerRunCommand可让您以远程方式安全地管理托管实例的配置.
托管实例是您混合环境中已经针对SystemsManager配置的任意AmazonEC2实例或本地计算机.
利用RunCommand,您可以自动完成常用管理任务以及大规模执行临时配置更改.
您可以从EC2控制台、AWSCommandLineInterface、WindowsPowerShell或AWS软件开发工具包使用RunCommand.
RunCommand不另外收取费.
管理员使用RunCommand可以在其托管实例上执行以下类型的任务:安装或引导应用程序,构建部署管道,从AutoScaling组终止实例时捕获日志文件,以及将实例加入Windows域等等.
入门下表包含可帮助您开始使用RunCommand的信息.
主题详细信息教程:远程管理您的AmazonEC2实例(AmazonEC2用户指南)(可选)此教程介绍如何在AWSToolsforWindowsPowerShell或AWSCommandLineInterface(AWSCLI)中使用RunCommand快速发送命令.
SystemsManager先决条件(p.
5)(必需)验证您的实例是否符合RunCommand的最低要求,配置所需的角色,以及安装SSM代理.
在混合环境中设置SystemsManager(p.
25)(可选)将内部服务器和虚拟机注册到AWS,以便使用RunCommand管理.
使用SystemsManagerRunCommand执行命令(p.
266)了解如何从EC2控制台执行命令,以及如何对托管实例队列执行命令.
RunCommand演练(p.
271)了解如何使用AWSToolsforWindowsPowerShell或AWSCLI执行命令.
组件和概念在您开始使用SystemsManagerRunCommand时,了解此功能的组件和概念会非常有用.
254AmazonEC2SystemsManager用户指南设置RunCommand组件/概念详细信息SystemsManager文档SystemsManager文档定义在计算机上执行命令时要运行的插件和要使用的参数.
在执行命令时,您指定RunCommand使用的SystemsManager文档.
RunCommand包含预定义的文档,可利用这些文档在计算机上快速执行常见任务.
您还可以创建自己的SystemsManager文档.
首次从新的SystemsManager文档执行命令时,系统将使用您的AWS账户存储此文档.
有关更多信息,请参阅SystemsManager文档(p.
39).
命令您可以通过从本地计算机发送命令来配置托管实例.
您无需本地登录即可配置实例.
您可以使用以下项之一发送命令:AmazonEC2控制台、AWSToolsforWindowsPowerShell、AWSCommandLineInterface(AWSCLI)、SystemsManagerAPI或Amazon软件开发工具包.
有关更多信息,请参阅适用于WindowsPowerShell的SystemsManagerAWS工具参考、SystemsManagerAWSCLI参考和AWS开发工具包.
SSM代理SSM代理是您安装在混合环境中EC2实例以及服务器和虚拟机上的AWS软件.
代理负责处理RunCommand请求并按照请求中指定的方式配置计算机.
有关更多信息,请参阅在Linux实例上安装和配置SSM代理(p.
13)(Linux)和在Windows实例上安装和配置SSM代理(p.
11)(Windows).
有关SystemsManager限制的信息,请参阅AmazonEC2SystemsManager限制.
要增加限制,请转到AWS支持中心并提交限制增加请求表单.
内容设置RunCommand(p.
255)使用SystemsManagerRunCommand执行命令(p.
266)RunCommand演练(p.
271)SystemsManagerRunCommand疑难解答(p.
281)相关内容配置对SystemsManager的访问权限(p.
7)安装和配置SSM代理(p.
11)将RunCommand配置为CloudWatchEvents目标(p.
261)AmazonEC2SystemsManagerAPIReference设置RunCommand本部分包括用于限制对标记的实例的命令访问和监控命令执行的建议任务.
本部分中的任务不是必需的,但它们有助于最大程度地提高您的实例的安全性和减少日常管理.
因此,我们强烈建议您完成本部分中的任务.
主题255AmazonEC2SystemsManager用户指南基于实例标签限制RunCommand访问基于实例标签限制RunCommand访问(p.
256)设置事件和通知(p.
258)基于实例标签限制RunCommand访问您必须为执行命令的任何用户配置AWSIdentityandAccessManagement(IAM)用户策略,并为处理命令的任何实例配置IAM实例配置文件角色(如配置对SystemsManager的访问权限(p.
7)中所述),然后才能使用RunCommand管理实例.
您可以通过创建一个IAM用户策略将命令执行进一步限制为特定实例,该用户策略包含一个条件,规定用户仅可以对使用特定AmazonEC2标签标记的实例执行命令.
在以下示例中,用户可以通过使用任何实例(Resource:arn:aws:ec2:*:*:instance/*)上的任何SSM文档(Resource:arn:aws:ssm:*:*:document/*)使用RunCommand(Effect:Allow、Action:ssm:SendCommand),条件是该实例是FinanceWebServer(ssm:resourceTag/Finance:WebServer).
如果用户向未设置标签或具有除Finance:WebServer以外的任意标签的实例发送命令,则执行结果将显示AccessDenied.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:SendCommand"],"Resource":["arn:aws:ssm:*:*:document/*"]},{"Effect":"Allow","Action":["ssm:SendCommand"],"Resource":["arn:aws:ec2:*:*:instance/*"],"Condition":{"StringLike":{"ssm:resourceTag/Finance":["WebServers"]}}}]}您可以创建支持用户对使用多个标签进行标记的实例执行命令的IAM策略.
以下策略支持用户对具有两个标签的实例执行命令.
如果用户向未使用这两个标签标记的实例发送命令,则执行结果将显示AccessDenied.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:SendCommand"],"Resource":"*","Condition":{"StringLike":{256AmazonEC2SystemsManager用户指南基于实例标签限制RunCommand访问"ssm:resourceTag/tag_key1":["tag_value1"],"ssm:resourceTag/tag_key2":["tag_value2"]}}},{"Effect":"Allow","Action":["ssm:SendCommand"],"Resource":["arn:aws:ssm:us-west-1::document/AWS-*","arn:aws:ssm:us-east-1::document/AWS-*"]},{"Effect":"Allow","Action":["ssm:UpdateInstanceInformation","ssm:ListCommands","ssm:ListCommandInvocations","ssm:GetDocument"],"Resource":"*"}]}您也可以创建支持用户对多个标记的实例组执行命令的IAM策略.
以下策略支持用户对任一标记的实例组或两个标记的实例组执行命令.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:SendCommand"],"Resource":"*","Condition":{"StringLike":{"ssm:resourceTag/tag_key1":["tag_value1"]}}},{"Effect":"Allow","Action":["ssm:SendCommand"],"Resource":"*","Condition":{"StringLike":{"ssm:resourceTag/tag_key2":["tag_value2"]}257AmazonEC2SystemsManager用户指南设置事件和通知}},{"Effect":"Allow","Action":["ssm:SendCommand"],"Resource":["arn:aws:ssm:us-west-1::document/AWS-*","arn:aws:ssm:us-east-1::document/AWS-*"]},{"Effect":"Allow","Action":["ssm:UpdateInstanceInformation","ssm:ListCommands","ssm:ListCommandInvocations","ssm:GetDocument"],"Resource":"*"}]}有关创建IAM用户策略的更多信息,请参阅IAMUserGuide中的托管策略与内联策略.
有关标记实例的更多信息,请参阅AmazonEC2UserGuideforLinuxInstances的标记您的AmazonEC2资源(内容适用于Windows和Linux实例).
设置事件和通知SystemsManagerRunCommand报告关于处理过程中命令经历的不同状态以及处理该命令的每个实例的详细状态信息.
您可以使用以下方法监视命令状态.
在AmazonEC2控制台的RunCommand页面上,单击Refresh图标.
使用AWSCLI调用list-commands或list-command-invocations.
或者,使用AWSToolsforWindowsPowerShell调用Get-SSMCommand或Get-SSMCommandInvocation.
将CloudWatchEvents配置为记录状态更改.
将AmazonSNS配置为发送所有状态更改或特定状态(例如"失败"或"超时")的通知.
内容RunCommand状态(p.
258)为RunCommand配置CloudWatchEvents(p.
260)为RunCommand配置AmazonSNS通知(p.
262)RunCommand状态RunCommand报告以下三个区域的状态详情:插件、调用和总体命令状态.
插件是在您命令的SystemsManager文档中定义的代码执行块.
AWS-*文档仅包含一个插件,但是您可以自行创建使用多个插件的文档.
有关插件的更多信息,请参阅SSM文档插件参考(p.
58).
在将一条命令同时发送给多个实例时,针对每个实例的命令的每个副本均为一个命令调用.
例如,如果您使用AWS-RunShellScript文档并将一个ifconfig命令发送到20个实例,则该命令具有20个调用.
每个命令调用都会单独报告状态.
给定命令调用的插件也会单独报告状态.
最后,RunCommand包含适用于所有插件和调用的聚合命令状态.
聚合命令状态可能不同于插件或调用报告的状态,如下表所述.
258AmazonEC2SystemsManager用户指南设置事件和通知Note如果您使用max-concurrency或max-errors参数对大量实例执行命令,则命令状态会反映这些参数施加的限制,如下表所述.
有关这些参数的更多信息,请参阅将命令发送到队列(p.
268).
命令插件和调用的详细状态状态详细信息Pending实例上的代理尚未收到命令.
如果代理在达到超时(秒)参数指定的值之前还未收到命令,则状态会变为DeliveryTimedOut.
正在进行代理已收到命令,或者命名已开始在实例上执行.
根据所有命令插件的结果,状态会变为Success、Failed或ExecutionTimedOut.
如果代理在实例上不可用,则命令状态会显示InProgress,直至代理再次可用.
状态将变为最终状态.
延迟系统尝试向实例发送命令,但未成功.
系统将重试.
成功命令由实例上的SSM代理接收,并返回一个为零的退出代码.
此状态并不意味着命令在实例上处理成功.
这是最终状态.
Note要解决错误或获取有关命令执行的更多信息,请通过返回适当的退出代码(针对命令失败的非零退出代码)来发送一个处理错误或异常的命令.
传输超时命令未在传输超时过期之前传输到实例.
传输超时不计入父命令的max-errors限制,但是有助于区别父命令的状态是Success还是Incomplete.
这是最终状态.
执行超时命令执行在实例上开始,但未在执行超时过期之前完成.
执行超时不计入父命令的max-errors限制.
这是最终状态.
已失败实例上的命令失败了.
对于插件,这表示结果代码不为零.
对于命令调用,这表示一个或多个插件的结果代码不为零.
调用失败不计入父命令的max-errors限制.
这是最终状态.
已取消命令在完成之前终止.
这是最终状态.
无法传输命令无法传输到实例.
实例可能不存在或可能未响应.
无法传输的调用不计入父命令的max-errors限制,而且无法用于区别父命令的状态是Success还是Incomplete.
这是最终状态.
已终止父命令超过其max-errors限制且系统取消了后续命令调用.
这是最终状态.
259AmazonEC2SystemsManager用户指南设置事件和通知命令的详细状态状态详细信息Pending任何实例上的代理都尚未收到命令.
正在进行命令已发送到至少一个实例,但是在所有实例上都未达到最终状态.
延迟系统尝试向实例发送命令,但未成功.
系统将重试.
成功命令由所有指定或目标实例上的SSM代理接收,并返回一个为零的退出代码.
所有命令调用都已达到最终状态,且未超过值max-errors.
此状态并不意味着命令在所有指定或目标实例上处理成功.
这是最终状态.
Note要解决错误或获取有关命令执行的更多信息,请通过返回适当的退出代码(针对命令失败的非零退出代码)来发送一个处理错误或异常的命令.
传输超时命令未在传输超时过期之前传输到实例.
max-errors值或更多命令调用显示DeliveryTimedOut状态.
这是最终状态.
执行超时命令执行在实例上开始,但未在执行超时过期之前完成.
max-errors值或更多命令调用显示ExecutionTimedOut状态.
这是最终状态.
已失败实例上的命令失败了.
max-errors值或更多命令调用显示Failed状态.
这是最终状态.
未完成命令尝试在所有实例上执行,且一个或多个调用没有Success值.
不过,调用失败的次数不足以使状态变为Failed.
这是最终状态.
已取消命令在完成之前终止.
这是最终状态.
数量超出限制命令定位的实例数量超出了待处理调用的账户限制.
系统在实例上执行命令之前取消了命令.
这是最终状态.
为RunCommand配置CloudWatchEvents使用AmazonCloudWatchEvents记录命令执行状态更改.
您可以创建一个规则,只要状态发生变换或者在变换到一个或多个感兴趣的状态时,就运行该规则.
您还可将RunCommand指定作为发生CloudWatch事件时的目标操作.
例如,假设触发的CloudWatch事件是将要终止AutoScaling组中的一个实例.
您可以配置CloudWatch,使得此事件的目标是RunCommand脚本,该脚本在实例终止前从实例上捕获日志文件.
您还可在配置在AutoScaling组中创建了新实例时执行的RunCommand操作.
例如,在CloudWatch接收实例已创建的事件时,RunCommand可以启用Web服务器角色或者在实例上安装软件.
为RunCommand配置CloudWatchEvents(p.
261)将RunCommand配置为CloudWatchEvents目标(p.
261)260AmazonEC2SystemsManager用户指南设置事件和通知为RunCommand配置CloudWatchEvents您可以配置CloudWatchEvents来向您通知RunCommand状态更改,或者特定命令调用的状态更改.
使用以下过程配置CloudWatchEvents以发送有关RunCommand的通知.
为RunCommand配置CloudWatchEvents1.
SignintotheAWSManagementConsoleandopentheCloudWatchconsoleathttps://console.
amazonaws.
cn/cloudwatch/.
2.
在左侧导航窗格中,选择Events,然后选择Createrule.
3.
在EventSource下,验证已选中EventPattern.
4.
在ServiceName字段中,选择EC2SimpleSystemsManager(SSM)5.
在EventType字段中,选择RunCommand.
6.
选择您要接收通知的详细类型和状态,然后选择Addtargets.
7.
在Selecttargettype列表中,选择目标类型.
有关不同目标类型的信息,请参阅对应的AWS帮助文档.
8.
选择Configuredetails.
9.
指定规则详细信息,然后选择Createrule.
将RunCommand配置为CloudWatchEvents目标使用以下过程配置RunCommand操作作为CloudWatch事件目标.
配置RunCommand作为CloudWatch事件目标1.
SignintotheAWSManagementConsoleandopentheCloudWatchconsoleathttps://console.
amazonaws.
cn/cloudwatch/.
2.
在左侧导航窗格中,选择Events,然后选择创建新规则还是编辑现有规则.
3.
指定或验证规则的详细信息之后,选择Addtarget.
4.
在Selecttargettype列表中,选择SSMRunCommand.
5.
在Document列表中,选择SSM文档.
该文档确定RunCommand可在您实例上执行的操作类型.
Note验证您选择的文档是否可在实例操作系统上运行.
一些文档仅适用于Windows或Linux操作系统.
有关SSM文档的更多信息,请参阅SystemsManager文档(p.
39).
6.
在Targetkey字段中,指定InstanceIds或tag:EC2_tag_name.
以下是使用EC2标签的Targetkey的一些示例:tag:production和tag:server-role.
7.
在Targetvalue(s)字段中,如果在上一步选择了"InstanceIds",则指定一个或多个实例ID,以逗号分隔.
如果您在上一步中选择了"tag:EC2_tag_name",则指定一个或多个标签值.
在键入值之后,例如web-server或database,选择Add.
8.
在Configureparameter(s)部分中,选择选项,然后完成由您的选项填充的所有字段.
将鼠标悬停在文本上可获取有关选项的更多信息.
有关文档的参数字段的更多信息,请查看使用SystemsManagerRunCommand执行命令(p.
266)并选择适用于您文档的过程.
9.
在权限部分中,选择Createanewroleforthisspecificresource可为RunCommand创建带有所需实例配置文件角色的新角色.
或者,选择Useexistingrole.
有关RunCommand所需角色的更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
10.
选择Configuredetails并完成向导.
261AmazonEC2SystemsManager用户指南设置事件和通知为RunCommand配置AmazonSNS通知针对使用SystemsManagerRunCommand发送的命令,您可以将AmazonSimpleNotificationService(AmazonSNS)配置为发送有关这些命令的状态的通知.
AmazonSNS协调并管理传输,或将通知发送到订阅客户端或终端节点.
您可以在命令更改为新状态或特定状态(例如"失败"或"超时")时接收通知.
如果您将一条命令发送给多个实例,则可接收发送给特定实例的命令的每个副本的通知.
每个副本称为一个调用.

AmazonSNS能够以HTTP或HTTPSPOST以及电子邮件(SMTP、纯文本或JSON格式)的方式传输通知,或者将通知作为消息发布到AmazonSimpleQueueService(AmazonSQS)队列.
有关更多信息,请参阅AmazonSimpleNotificationServiceDeveloperGuide中的什么是AmazonSNS.
例如,如果您将AmazonSNS配置为在命令状态更改为失败时发送通知,则SNS将发送包含命令执行的详细信息的电子邮件通知.
Note如果您愿意,您可以使用AmazonCloudWatchEvents将目标配置为在命令更改状态时调用AWSLambda函数.
有关更多信息,请参阅为RunCommand配置CloudWatchEvents(p.
260).
要设置命令更改状态时的AmazonSNS通知,您必须完成以下任务.
1.
配置账户权限(p.
263)2.
为通知创建IAM角色(p.
264)3.
配置AmazonSNS(p.
265)4.
发送可返回状态通知的命令(p.
265)为SystemsManager配置AmazonSNS通知对于进入以下状态的命令,RunCommand支持发送相应的AmazonSNS通知.
有关导致命令进入以下状态之一的条件的信息,请参阅设置事件和通知(p.
258).
正在进行成功已失败超时已取消Note使用RunCommand发送的命令还报告"正在取消"和"正在挂起"状态.
SNS通知不会捕获这些状态.
如果您为SNS通知配置RunCommand,SNS将发送包含以下信息的摘要消息:字段类型描述EventTime字符串触发事件的时间.
由于SNS不保证消息传输顺序,因此时间戳很重要.
示例:2016-04-26T13:15:30ZDocumentName字符串用于执行此命令的SSM文档的名称.
CommandId字符串RunCommand在发送命令后生成的ID.
262AmazonEC2SystemsManager用户指南设置事件和通知字段类型描述ExpiresAfter日期如果达到此时间但命令尚未开始执行,则它将不会执行.
OutputS3BucketName字符串将命令执行响应存储到的AmazonSimpleStorageService(AmazonS3)存储桶.
OutputS3KeyPrefix字符串将命令执行响应存储到的存储桶中的AmazonS3目录路径.
RequestedDateTime字符串请求发送到此特定实例的日期和时间.
实例ID字符串命令的目标实例.
状态字符串命令的命令状态.
如果您将一条命令发送给多个实例,则AmazonSNS可发送有关命令的每个副本或调用的消息,其中包含以下信息:字段类型描述EventTime字符串触发事件的时间.
由于SNS不保证消息传输顺序,因此时间戳很重要.
示例:2016-04-26T13:15:30ZDocumentName字符串用于执行此命令的SystemsManager文档的名称.
RequestedDateTime字符串请求发送到此特定实例的日期和时间.
CommandId字符串RunCommand在发送命令后生成的ID.
实例ID字符串命令的目标实例.
状态字符串此调用的命令状态.
配置账户权限在发送为通知配置的命令时,可指定服务角色Amazon资源名称(ARN).
例如:--service-role-arn=arn:aws-cn:iam::123456789012:myrole.
此服务角色供SystemsManager用来触发SNS通知.
要从AmazonSNS服务接收通知,您必须将iam:PassRole策略附加到现有AWSIdentityandAccessManagement(IAM)用户账户,或创建一个新的IAM账户并向其附加此策略.
如果您创建新账户,则还必须附加AmazonSSMFullAccess策略,以便账户能够与SystemsManagerAPI进行通信.
使用以下过程可将IAM策略附加到您的用户账户.
如果您需要创建新的用户账户,请参阅IAMUserGuide中的在您的AWS账户中创建IAM用户.
将iam:PassRole策略附加到您的用户账户1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
263AmazonEC2SystemsManager用户指南设置事件和通知2.
在导航窗格中,选择用户,然后选择相应用户(在用户名下).
3.
在页面的顶部,将您的UserARN复制到剪贴板.
4.
在权限下,验证AmazonSSMFullAccess策略是否已列出,或者是否存在可向您授予SystemsManagerAPI访问权限的相当策略.
5.
选择添加内联策略.
6.
在SetPermissions页面上,选择PolicyGenerator,然后选择Select.
7.
验证Effect是否已设置为Allow.
8.
从AWS服务中,选择AWSIdentityandAccessManagement.
9.
从Actions中,选择PassRole.
10.
在AmazonResourceName(ARN)字段中,粘贴您的ARN.
11.
选择AddStatement,然后选择Next.
12.
在ReviewPolicy页面上,选择ApplyPolicy.
为通知创建IAM角色在上一个过程中,您已将IAM策略添加到用户账户,以便能发送用于返回通知的命令.
在下面的过程中,您将创建一个角色,以使SystemsManager服务能够在发送通知时代表您执行操作.
1.
OpentheIAMconsoleathttps://console.
amazonaws.
cn/iam/.
2.
在导航窗格中选择Roles,然后选择CreateNewRole.
3.
在Step1:SetRoleName中,为通知输入用于将此角色标识为RunCommand角色的名称.
4.
在Step2:SelectRoleType中,选择AmazonEC2.
系统会跳过Step3:EstablishTrust,因为这是一个托管策略.
5.
在Step4:AttachPolicy中,选择AmazonSNSFullAccess.
6.
选择NextStep,然后选择CreateRole.
系统将让您返回到Roles页.
7.
找到刚刚创建的角色,然后双击它.
8.
选择TrustRelationships选项卡,然后选择EditTrustRelationship.
9.
将"ssm.
amazonaws.
com"添加到现有策略,如以下代码段所示:{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"Service":"ec2.
amazonaws.
com","Service":"ssm.
amazonaws.
com"},"Action":"sts:AssumeRole"}]}Note您必须在现有条目后添加逗号.
"Service":"sns.
amazonaws.
com",否则JSON将不会验证.
10.
选择UpdateTrustPolicy.
11.
复制或记下RoleARN.
在发送配置为返回通知的命令时将指定此ARN.
264AmazonEC2SystemsManager用户指南设置事件和通知配置AmazonSNS要使用AmazonSNS发送电子邮件通知,必须先创建一个主题,然后用您的电子邮件地址订阅该主题.

创建一个AmazonSNS主题AmazonSNS主题是一个逻辑接入点,即RunCommand用来发送通知的通信通道.
您可通过为主题指定名称来创建主题.
有关更多信息,请参阅AmazonSimpleNotificationServiceDeveloperGuide中的创建主题.
Note创建主题后,复制或记下TopicARN.
在发送配置为返回状态通知的命令时将指定此ARN.
订阅AmazonSNS主题要接收RunCommand发送到该主题的通知,必须让一个终端节点订阅该主题.
在此过程中,为Endpoint指定要用来从RunCommand接收通知的电子邮件地址.
有关更多信息,请参阅AmazonSimpleNotificationServiceDeveloperGuide中的订阅主题.
确认AmazonSNS订阅AmazonSNS向在上一步骤中指定的电子邮件地址发送确认电子邮件.
确保打开来自AWS通知的电子邮件,选择链接以确认订阅,然后继续执行下一步骤.
您将从AWS收到确认消息.
AmazonSNS现已配置为接收通知并将通知以电子邮件形式发送到您指定的电子邮件地址.
发送可返回状态通知的命令此部分介绍如何使用AmazonEC2控制台或AWSCommandLineInterface(AWSCLI)发送配置为返回状态通知的命令.
从AmazonEC2控制台发送可返回通知的命令1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,选择RunCommand.
3.
选择Runacommand.
4.
对于Commanddocument,选择SystemsManager文档.
5.
对于Targetinstances,选择您要在其中运行命令的实例.
如果您在此列表中未看到实例,则可能未针对RunCommand正确地配置实例.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
6.
在SystemsManager文档的必填字段中输入信息.
在SNSNotifications部分中,选择EnableSNSnotifications.
7.
在Role字段中,键入或粘贴之前创建的IAM角色ARN.
8.
在SNSTopic字段中,键入或粘贴之前创建的AmazonSNSARN.
9.
在Notifymeon字段中,选择要接收其通知的事件.
10.
在Notifymefor字段中,选择接收发送给多个实例(调用)或命令摘要的命令的每个副本的通知.
11.
选择Run.
12.
检查来自AmazonSNS的电子邮件消息并打开电子邮件.
AmazonSNS发送电子邮件需要花费几分钟的时间.
265AmazonEC2SystemsManager用户指南执行命令从AWSCLI发送为通知配置的命令1.
打开AWSCLI.
2.
指定以下命令中的参数.
awsssmsend-command--instance-ids"ID-1,ID-2"--document-name"name"--parameterscommands=date--service-roleServiceRoleARN--notification-configNotificationArn=SNSARN例如awsssmsend-command--instance-ids"i-12345678,i-34567890"--document-name"AWS-RunPowerShellScript"--parameterscommands=date--service-rolearn:aws-cn:iam::123456789012:myrole--notification-configNotificationArn=arn:aws-cn:sns:cn-north-1:123456789012:test3.
按Enter.
4.
检查来自AmazonSNS的电子邮件消息并打开电子邮件.
AmazonSNS发送电子邮件需要花费几分钟的时间.
有关从命令行配置RunCommand的更多信息,请参阅AmazonEC2SystemsManagerAPIReference和SystemsManagerAWSCLI参考.
使用SystemsManagerRunCommand执行命令本部分包括有关如何从AmazonEC2控制台发送命令的信息,以及如何使用带有EC2标签的Targets参数将命令发送到实例队列.
此部分还包括有关如何取消命令的信息.
有关使用WindowsPowerShell发送命令的信息,请参阅使用AWSToolsforWindowsPowerShell的SystemsManagerRunCommand演练(p.
274)或ToolsforWindowsPowerShell参考中的示例.
有关如何使用AWSCLI发送命令的信息,请参阅使用AWSCLI的SystemsManagerRunCommand演练(p.
272)或SSMCLI参考中的示例.
Important如果这是您第一次使用RunCommand,建议您对测试实例或未在生产环境中使用的实例执行命令.
内容从EC2控制台执行命令(p.
266)将命令发送到队列(p.
268)取消命令(p.
271)从EC2控制台执行命令您可以从AmazonEC2控制台使用RunCommand配置实例而无需登录到每个实例.
此主题包括演示如何使用RunCommand在实例上更新SSM代理(p.
267)的示例.
开始前的准备工作在使用RunCommand发送命令之前,请验证您的实例是否符合SystemsManager要求(p.
5).
以下过程介绍了如何从EC2控制台执行命令.
266AmazonEC2SystemsManager用户指南从EC2控制台执行命令使用RunCommand发送命令1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中,展开SystemsManagerServices,然后选择RunCommand.
3.
选择Runacommand.
4.
在Commanddocument部分中,选择一个文档.
5.
在SelectTargetsby部分中,选择ManuallySelectingInstances以选择各个实例.
或选择SpecifyingaTag,通过指定一个或多个AmazonEC2标签选择一组实例.
6.
在Executeon字段中,选择列表中的Targets或Percent.
如果选择Targets,则可以指定一次应允许运行命令的确切实例数,例如10.
如果选择Percent,则可以选择一次应允许运行命令的实例的百分比,例如30.
在将EC2标签设为目标且您不确定将运行命令的实例总数时,Percent是一个有用的选项.
此功能允许您限制一次运行命令的实例数,以免影响实例性能和可用性.
有关更多信息,请参阅将命令发送到队列(p.
268).
7.
在Stopafter__errors字段中,指定系统停止向其他实例发送命令之前所允许的最大错误数.
例如,如果您指定1,则系统会在收到第二个错误时停止向其他实例发送命令.
当达到此值时,将允许完成已经在运行命令的实例,但是其中一些执行也可能失败.
有关更多信息,请参阅将命令发送到队列(p.
268).
8.
在下一个部分,为您的SSM文档指定参数或选项.
每个文档的参数和选项都不同.
9.
对于Comment,我们建议提供信息以帮助您在命令列表中标识此命令.
10.
对于Timeout(seconds),键入在实例被视为无法访问且命令执行失败之前,RunCommand应尝试连接实例的秒数.
最短为30秒,最长为30天,默认值为10分钟.
11.
(可选)如果要将命令输出写入AmazonS3存储桶,则选择WriteoutputtoanS3bucket.
如果选择此选项,则指定S3存储桶以及可选的S3键前缀.
S3键前缀是S3存储桶中的一个子文件夹.
如果您对多个实例执行多个命令,子文件夹可帮助您组织RunCommand输出.
ImportantAmazonEC2控制台中的RunCommandOutput页面将在2500个字符后截断输出.
在使用RunCommand执行命令之前,请配置AmazonS3存储桶.
如果命令输出超过2500个字符,您可在AmazonS3存储桶中查看完整输出.
有关更多信息,请参阅创建存储桶.
12.
(可选)如果您要接收使用RunCommand所执行命令的状态的通知,请选择EnableSNSnotifications.
有关更多信息,请参阅为RunCommand配置AmazonSNS通知(p.
262).
Note在为您的SSM文档指定参数和选项之后,展开AWSCommandLineInterfacecommand部分.
此部分包括面向不同命令行平台的可重用命令.
13.
选择Run,然后选择Viewresults.
14.
在命令列表中,选择刚刚执行的命令.
如果命令仍在执行中,则选择控制台右上角的"刷新"图标.

15.
在Status列显示Success或Failed时,选择Output选项卡.
16.
选择ViewOutput.
命令输出页面将显示命令执行的结果.
有关取消命令的信息,请参阅thesectioncalled"取消命令"(p.
271).
示例:更新SSM代理您可使用AWS-UpdateSSMAgent文档来更新在Windows和Linux实例上运行的AmazonEC2SSM代理.
您可以更新到最新版本或降级到较旧版本.
在执行命令时,系统将从AWS下载并安装需要的版本,然后卸载运行命令前存在的版本.
如果此过程中出现错误,系统将回滚到命令运行之前服务器上的版本,并且命令状态将显示命令失败.
267AmazonEC2SystemsManager用户指南将命令发送到队列使用RunCommand更新SSM代理1.
OpentheAmazonEC2consoleathttps://console.
amazonaws.
cn/ec2/.
2.
在导航窗格中的SystemsManagerServices下,选择RunCommand.
3.
选择Runacommand.
4.
对于Commanddocument,选择AWS-UpdateSSMAgent.
5.
在SelectTargetsby部分中,选择ManuallySelectingInstances以选择各个实例.
或选择SpecifyingaTag,以通过指定一个或多个AmazonEC2标签来选择一组实例.
6.
在Executeon字段中,选择列表中的Targets或Percent.
如果选择Targets,则可以指定一次应允许运行命令的确切实例数,例如10.
如果选择Percent,则可以选择一次应允许运行命令的实例的百分比,例如30.
在将EC2标签设为目标且您不确定将运行命令的实例总数时,Percent是一个有用的选项.
此功能允许您限制一次运行命令的实例数,以免影响实例性能和可用性.
有关更多信息,请参阅将命令发送到队列(p.
268).
7.
在Stopafter__errors字段中,指定系统停止向其他实例发送命令之前所允许的最大错误数.
例如,如果您指定1,则系统会在收到第二个错误时停止向其他实例发送命令.
有关更多信息,请参阅将命令发送到队列(p.
268).
8.
(可选)对于Version,键入要安装的SSM代理的版本.
您可以安装代理的较旧版本.
如果您不指定版本,则服务将安装最新版本.
9.
(可选)对于AllowDowngrade,选择true以安装SSM代理的早期版本.
如果选择此选项,则必须指定较早的版本号.
选择false以仅安装此服务的最新版本.
10.
对于Comment,我们建议提供将帮助您在命令列表中标识此命令的信息.
11.
对于Timeout(seconds),键入在实例被视为无法访问且命令执行失败之前,RunCommand应尝试连接实例的秒数.
最短为30秒,最长为30天,默认值为10分钟.
12.
(可选)如果要将命令输出写入AmazonS3存储桶,则选择WriteoutputtoanS3bucket.
如果选择此选项,则指定S3存储桶以及可选的S3键前缀.
S3键前缀是S3存储桶中的一个子文件夹.
如果您对多个实例执行多个命令,子文件夹可帮助您组织RunCommand输出.
ImportantAmazonEC2控制台中的RunCommandOutput页面将在2500个字符后截断输出.
在使用RunCommand执行命令之前,请配置AmazonS3存储桶.
如果命令输出超过2500个字符,您可在AmazonS3存储桶中查看完整输出.
有关更多信息,请参阅创建存储桶.
13.
(可选)如果您要接收使用RunCommand所执行命令的状态的通知,请选择EnableSNSnotifications.
有关更多信息,请参阅为RunCommand配置AmazonSNS通知(p.
262).
Note在为您的SSM文档指定参数和选项之后,展开AWSCommandLineInterfacecommand部分.
此部分包括面向不同命令行平台的可重用命令.
14.
选择Run,然后选择Viewresults.
15.
在命令列表中,选择刚刚执行的命令.
如果命令仍在执行中,则选择控制台右上角的"刷新"图标.

16.
在Status列显示Success或Failed时,选择Output选项卡.
17.
选择ViewOutput.
命令输出页面将显示命令执行的结果.
将命令发送到队列您可以使用targets参数向数十个、数百个或数千个实例发送命令(AmazonEC2控制台中的SelectTargetsbySpecifyingaTag选项).
targets参数支持基于您为实例指定的AmazonEC2标签Key,Value组合.
当您执行该命令时,系统会找到并尝试在匹配指定标签的所有实例上运行命令.
有关AmazonEC2标签的更多信息,请参阅AmazonEC2用户指南中的标记AmazonEC2资源(内容适用于Windows和Linux实例).
268AmazonEC2SystemsManager用户指南将命令发送到队列Note您也可以使用targets参数将特定实例ID的列表设为目标,如下一部分中所述.
为控制数百个或数千个实例的命令执行,RunCommand还包含一些参数,用于限制同时处理请求的实例数量以及终止命令前其引发的错误数量.
内容针对多个实例(p.
269)使用并发控件(p.
270)使用错误控件(p.
270)针对多个实例您可以通过指定AmazonEC2标签或实例ID执行命令并将实例设为目标.
在AWSCLI中,targets参数使用以下语法:示例1:将标签设为目标awsssmsend-command--document-namename--targetsKey=tag:tag_name,Values=tag_value[.
.
.
]Note本部分的示例命令使用[.
.
.
]进行截断.
示例2:将实例ID设为目标awsssmsend-command--document-namename--targetsKey=instanceids,Values=ID1,ID2,ID3[.
.
.
]如果您使用名为Key的Environment,以及Values、Development、Test和Pre-productionProduction的标记不同环境的实例,则可以使用采用以下语法的参数,向其中一个环境的所有实例发送命令.
targetsawsssmsend-command--document-namename--targetsKey=tag:Environment,Values=Development[.
.
.
]通过添加到Values列表,您可以将其他环境中的其他实例设为目标.
使用逗号分隔项目.
awsssmsend-command--document-namename--targetsKey=tag:Environment,Values=Development,Test,Pre-production[.
.
.
]示例:使用多个Key条件细化您的目标.
通过包括多个Key条件,您可以细化您的命令的目标数.
如果包括多个Key条件,系统会将符合所有条件的实例设为目标.
以下命令会将标记为财务部门和标记为数据库服务器角色的所有实例设为目标.

awsssmsend-command--document-namename--targetsKey=tag:Department,Values=FinanceKey=tag:ServerRole,Values=Database[.
.
.
]示例:使用多个Key和Value条件对上一个示例进行扩展,您可以通过在Values条件中包括其他项目来将多个部门和多个服务器角色设为目标.
269AmazonEC2SystemsManager用户指南将命令发送到队列awsssmsend-command--document-namename--targetsKey=tag:Department,Values=Finance,MarketingKey=tag:ServerRole,Values=WebServer,Database[.
.
.
]示例:针对使用多个Values条件标记的实例如果您使用名为Department的Key,以及Sales和Finance的Values标记不同环境的实例,则可以使用采用以下语法的targets参数,向这些环境的所有实例发送命令.
awsssmsend-command--document-namename--targetsKey=tag:Department,Values=Sales,Finance[.
.
.
]Note您可以指定最大值为5个密钥,每个密钥5个值.
如果某个标签密钥(标签名称)或某个标签值包含空格,则必须将该标签密钥或该值用引号引起来,如以下示例所示.
示例1:Value标签中的空格.
awsssmsend-command--document-namename--targetsKey=tag:OS,Values="WindowsServer2016Nano"[.
.
.
]示例2:tag密钥和Value中的空格.
awsssmsend-command--document-namename--targetsKey="tag:OperatingSystem",Values="WindowsServer2016Nano"[.
.
.
]示例3:Values的列表中一个项目中的空格.
awsssmsend-command--document-namename--targetsKey=tag:Department,Values="Sales","Finance","SystemsMgmt"[.
.
.
]使用并发控件您可以使用max-concurrency参数(AmazonEC2控制台中的Executeon字段)控制同时执行命令的服务器的数量.
您可以指定绝对数量的实例(如10),也可以指定目标集百分比(如10%).
队列系统将该命令传输到单个实例,等到初始调用完成之后,再将命令发送到两个或更多实例.
系统以指数增长方式将命令发送到更多实例,直到达到max-concurrency值.
max-concurrency值默认为50.
下列示例介绍如何为max-concurrency参数指定值:awsssmsend-command--document-namename--max-concurrency10--targetsKey=tag:Environment,Values=Development[.
.
.
]awsssmsend-command--document-namename--max-concurrency10%--targetsKey=tag:Department,Values=Finance,MarketingKey=tag:ServerRole,Values=WebServer,Database[.
.
.
]使用错误控件通过使用max-errors参数(AmazonEC2控制台中的Stopafter__errors字段)设置错误限制,您还可以控制向数百个或数千个实例发送的命令的执行.
该参数指定系统停止向其他实例发送命令之前所允许的错误270AmazonEC2SystemsManager用户指南取消命令数.
您可以指定绝对数量的错误(如10),也可以指定目标集百分比(如10%).
例如,如果您指定3,系统将在收到第四个错误时停止发送命令.
如果您指定0,则系统会在返回第一个错误结果后停止向其他实例发送命令.
如果您向50个实例发送命令并将max-errors设置为10%,则系统会在收到第六个错误时停止向其他实例发送命令.
当达到max-errors时,允许完成已经运行命令的调用,但是其中一些调用也可能失败.
如果您需要确保失败的调用数不超过max-errors,请将max-concurrency设置为1,以便一次进行一个调用.
最大并发数默认为50.
下列示例介绍如何为max-errors参数指定值:awsssmsend-command--document-namename--max-errors10--targetsKey=tag:Database,Values=Development[.
.
.
]awsssmsend-command--document-namename--max-errors10%--targetsKey=tag:Environment,Values=Development[.
.
.
]awsssmsend-command--document-namename--max-concurrency1--max-errors1--targetsKey=tag:Environment,Values=Production[.
.
.
]取消命令只要服务指明命令处于Pending或Executing状态,您就可以尝试取消该命令.
但是,即使命令仍处于其中某种状态,我们也无法保证该命令将终止并且基础流程将停止.
使用控制台取消命令1.
在导航窗格中,选择RunCommand.
2.
选择要取消的命令调用.
3.
选择Actions、CancelCommand.
使用AWSCLI取消命令使用以下命令.
awsssmcancel-command--command-id"commandID"--instance-ids"instanceID"有关已取消命令的状态的信息,请参阅设置事件和通知(p.
258).
RunCommand演练此部分中的演练向您演示如何使用AWSCommandLineInterface或AWSToolsforWindowsPowerShell通过RunCommand执行命令.
内容使用AWSCLI的SystemsManagerRunCommand演练(p.
272)使用AWSToolsforWindowsPowerShell的SystemsManagerRunCommand演练(p.
274)您还可以查看以下参考中的示例命令.
SystemsManagerAWSCLI参考271AmazonEC2SystemsManager用户指南使用AWSCLI适用于WindowsPowerShell的SystemsManagerAWS工具参考使用AWSCLI的SystemsManagerRunCommand演练以下示例演练说明如何使用AWSCLI查看有关命令和命令参数的信息、如何执行命令以及如何查看这些命令的状态.
Important仅允许受信任的管理员使用本主题中所示的SystemsManager预配置文档.
在SystemsManager文档中指定的命令和脚本需要管理权限才能在您的实例上运行.
如果用户有权执行任何预定义的SystemsManager文档(任何以AWS开头的文档),则该用户也具有实例的管理员访问权限.
对于所有其他用户,您应创建限制性文档并与特定用户共享这些文档.
有关限制对RunCommand的访问权限的更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
步骤1:入门您必须具有要配置的实例的管理员权限或必须已获得IAM中的适当权限.
另请注意,此示例将使用us-east-1区域.
RunCommand目前在以下SystemsManager区域中可用.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
使用AWSCLI执行命令1.
运行以下命令指定您的凭证和区域.
awsconfigure2.
系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:us-east-1Defaultoutputformat[None]:ENTER3.
列出所有可用文档此命令将基于IAM权限列出您的账户可用的所有文档.
此命令将返回Linux和Windows文档的列表.
awsssmlist-documents4.
验证实例是否准备好接收命令以下命令的输出将显示实例是否处于联机状态.
awsssmdescribe-instance-information--outputtext--query"InstanceInformationList[*]"5.
使用以下命令查看有关特定实例的详细信息.
Note要执行本演练中的命令,您必须替换实例和命令ID.
命令ID将作为send-command的响应返回.
可从AmazonEC2控制台获得实例ID.
awsssmdescribe-instance-information--instance-information-filter-listkey=InstanceIds,valueSet=instanceID272AmazonEC2SystemsManager用户指南使用AWSCLI步骤2:运行Shell脚本利用RunCommand和AWS-RunShellScript文档,您可以在EC2实例上执行任何命令或脚本,就像您已在本地登录一样.
查看说明和可用参数使用以下命令查看SystemsManagerJSON文档的描述.
awsssmdescribe-document--name"AWS-RunShellScript"--query"[Document.
Name,Document.
Description]"使用以下命令查看可用参数和有关这些参数的详细信息.
awsssmdescribe-document--name"AWS-RunShellScript"--query"Document.
Parameters[*]"步骤3:使用AWS-RunShellScript文档发送命令-示例1使用以下命令获取实例的IP信息.
awsssmsend-command--instance-ids"instanceID"--document-name"AWS-RunShellScript"--comment"IPconfig"--parameterscommands=ifconfig--outputtext使用响应数据获取命令信息以下命令使用从上一个命令返回的命令ID来获取命令执行的详细信息和响应数据.
如果命令已完成,系统将返回响应数据.
如果命令执行显示"Pending",您将需要再次执行此命令来查看响应数据.

awsssmlist-command-invocations--command-id"commandID"--details步骤4:使用AWS-RunShellScript文档发送命令-示例2以下命令显示运行命令的默认用户账户.
sh_command_id=$(awsssmsend-command--instance-ids"instanceID"--document-name"AWS-RunShellScript"--comment"DemorunshellscriptonLinuxInstance"--parameterscommands=whoami--outputtext--query"Command.
CommandId")获取命令状态以下命令使用命令ID获取实例上的命令执行的状态.
此示例使用上一个命令中返回的命令ID.
awsssmlist-commands--command-id$sh_command_id获取命令详细信息以下命令使用来自上一命令的命令ID来获取每个实例的命令执行的状态.
awsssmlist-command-invocations--command-id$sh_command_id--details获取带有特定实例的响应数据的命令信息273AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShell以下命令返回特定实例的原始awsssmsend-command的输出.
awsssmlist-command-invocations--instance-idinstanceID--command-id$sh_command_id–-details步骤5:其他示例以下命令返回在实例上运行的Python的版本.
sh_command_id=$(awsssmsend-command--instance-idsinstanceID--document-name"AWS-RunShellScript"--comment"DemorunshellscriptonLinuxInstances"--parameterscommands='python'--version--outputtext--query"Command.
CommandId")以下命令使用RunCommand执行Python脚本.
awsssmsend-command--instance-idsinstanceID--document-name"AWS-RunShellScript"--comment"DemorunshellscriptonLinuxInstances"--parameters'{"commands":["#!
/usr/bin/python","print\"Helloworldfrompython\outputtext--query"Command.
CommandId"使用AWSToolsforWindowsPowerShell的SystemsManagerRunCommand演练以下示例说明如何使用ToolsforWindowsPowerShell查看有关命令和命令参数的信息、如何执行命令以及如何查看这些命令的状态.
本演练为每个预定义的SystemsManager文档包含了一个示例.
Important仅允许受信任的管理员使用本主题中所示的SystemsManager预配置文档.
在SystemsManager文档中指定的命令和脚本需要管理权限才能在您的实例上运行.
如果用户有权执行任何预定义的SystemsManager文档(任何以AWS开头的文档),则该用户也具有实例的管理员访问权限.
对于所有其他用户,您应创建限制性文档并与特定用户共享这些文档.
有关限制对RunCommand的访问权限的更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
配置AWSToolsforWindowsPowerShell会话设置在本地计算机上打开AWSToolsforWindowsPowerShell并执行以下命令来指定凭证.
您必须具有要配置的实例的管理员权限或必须已获得IAM中的适当权限.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
Set-AWSCredentials–AccessKeykey_name–SecretKeykey_name执行以下命令为PowerShell会话设置区域.
该示例使用us-east-1区域.
RunCommand目前在以下SystemsManager区域中可用.
Set-DefaultAWSRegion-Regionus-east-1列出所有可用文档此命令列出对您的账户可用的所有文档:Get-SSMDocumentList274AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShell运行PowerShell命令或脚本利用RunCommand和AWS-RunPowerShell文档,您可使用远程桌面在EC2实例上执行任何命令或脚本,就像您已登录到该实例一样.
您可以发出命令或键入本地脚本的路径以执行命令.

查看说明和可用参数Get-SSMDocumentDescription-Name"AWS-RunPowerShellScript"查看有关参数的更多信息Get-SSMDocumentDescription-Name"AWS-RunPowerShellScript"|select-ExpandPropertyParameters使用AWS-RunPowerShellScript文档发送命令以下命令在两个实例上显示C:\Users目录的内容和C:\目录的内容.
$runPSCommand=Send-SSMCommand-InstanceId@('Instance-ID','Instance-ID')-DocumentNameAWS-RunPowerShellScript-Comment'DemoAWS-RunPowerShellScriptwithtwoinstances'-Parameter@{'commands'=@('dirC:\Users','dirC:\')}获取命令请求详细信息以下命令使用命令ID获取两个实例上的命令执行的状态.
此示例使用上一个命令中返回的命令ID.
Get-SSMCommand-CommandId$runPSCommand.
CommandId此示例中命令的状态可以是Success、Pending或InProgress.
获取每个实例的命令信息以下命令使用来自上一命令的命令ID来获取每个实例的命令执行的状态.
Get-SSMCommandInvocation-CommandId$runPSCommand.
CommandId获取带有特定实例的响应数据的命令信息以下命令返回特定实例的原始Send-SSMCommand的输出.
Get-SSMCommandInvocation-CommandId$runPSCommand.
CommandId-Details$true-InstanceIdInstance-ID|select-ExpandPropertyCommandPlugins取消命令以下命令取消AWS-RunPowerShellScript文档的Send-SSMComand.
$cancelCommandResponse=Send-SSMCommand-InstanceId@('Instance-ID','Instance-ID')-DocumentNameAWS-RunPowerShellScript-Comment'DemoAWS-RunPowerShellScriptwithtwoinstances'-Parameter@{'commands'='Start-Sleep–Seconds120;dirC:\'}Stop-SSMCommand-CommandId$cancelCommandResponse.
CommandIdGet-SSMCommand-CommandId$cancelCommandResponse.
CommandId查看命令状态275AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShell以下命令检查Cancel命令的状态Get-SSMCommand-CommandId$cancelCommandResponse.
CommandId使用AWS-InstallApplication文档安装应用程序利用RunCommand和AWS-InstallApplication文档,您可以在实例上安装、修复或卸载应用程序.
该命令需要MSI的路径或地址.
查看说明和可用参数Get-SSMDocumentDescription-Name"AWS-InstallApplication"查看有关参数的更多信息Get-SSMDocumentDescription-Name"AWS-InstallApplication"|select-ExpandPropertyParameters使用AWS-InstallApplication文档发送命令以下命令将自动在您的实例上安装Python版本,并将输出记录在C:驱动器上的本地文本文件中.
$installAppCommand=Send-SSMCommand-InstanceIdInstance-ID-DocumentNameAWS-InstallApplication-Parameter@{'source'='https://www.
python.
org/ftp/python/2.
7.
9/python-2.
7.
9.
msi';'parameters'='/norestart/quiet/logc:\pythoninstall.
txt'}获取每个实例的命令信息以下命令使用命令ID获取命令执行的状态Get-SSMCommandInvocation-CommandId$installAppCommand.
CommandId-Details$true获取带有特定实例的响应数据的命令信息以下命令返回Python安装的结果.
Get-SSMCommandInvocation-CommandId$installAppCommand.
CommandId-Details$true-InstanceIdInstance-ID|select-ExpandPropertyCommandPlugins使用AWS-InstallPowerShellModuleJSON文档安装PowerShell模块您可使用RunCommand在EC2实例上安装PowerShell模块.
有关PowerShell模块的更多信息,请参阅WindowsPowerShell模块.
查看说明和可用参数Get-SSMDocumentDescription-Name"AWS-InstallPowerShellModule"查看有关参数的更多信息Get-SSMDocumentDescription-Name"AWS-InstallPowerShellModule"|select-ExpandPropertyParameters276AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShell安装PowerShell模块以下命令下载EZOut.
zip文件,安装该文件,然后运行另一个命令来安装XPSViewer.
最后,此命令的输出将上传到一个名为demo-ssm-output-bucket的AmazonS3存储桶中.
$installPSCommand=Send-SSMCommand-InstanceIdInstance-ID-DocumentNameAWS-InstallPowerShellModule-Parameter@{'source'='https://gallery.
technet.
microsoft.
com/EZOut-33ae0fb7/file/110351/1/EZOut.
zip';'commands'=@('Add-WindowsFeature-nameXPS-Viewer-restart')}-OutputS3BucketNamedemo-ssm-output-bucket获取每个实例的命令信息以下命令使用命令ID获取命令执行的状态.
Get-SSMCommandInvocation-CommandId$installPSCommand.
CommandId-Details$true获取具有实例的响应数据的命令信息以下命令返回特定命令ID的原始Send-SSMCommand的输出.
Get-SSMCommandInvocation-CommandId$installPSCommand.
CommandId-Details$true|select-ExpandPropertyCommandPlugins使用AWS-JoinDirectoryServiceDomainJSON文档将实例加入域借助RunCommand,您可以将实例快速加入AWSDirectoryService域.
在执行此命令前,您必须创建目录.
还建议您了解有关AWSDirectoryService的更多信息.
有关更多信息,请参阅什么是AWSDirectoryService.
目前,您只能将一个示例加入域.
无法从域中删除实例.
查看说明和可用参数Get-SSMDocumentDescription-Name"AWS-JoinDirectoryServiceDomain"查看有关参数的更多信息Get-SSMDocumentDescription-Name"AWS-JoinDirectoryServiceDomain"|select-ExpandPropertyParameters将实例加入域以下命令将实例加入给定的AWSDirectoryService域,并将任何生成的输出上传到AmazonS3存储桶中.
$domainJoinCommand=Send-SSMCommand-InstanceIdInstance-ID-DocumentNameAWS-JoinDirectoryServiceDomain-Parameter@{'directoryId'='d-9067386b64';'directoryName'='ssm.
test.
amazon.
com';'dnsIpAddresses'=@('172.
31.
38.
48','172.
31.
55.
243')}-OutputS3BucketNamedemo-ssm-output-bucket获取每个实例的命令信息以下命令使用命令ID获取命令执行的状态.
Get-SSMCommandInvocation-CommandId$domainJoinCommand.
CommandId-Details$true获取具有实例的响应数据的命令信息277AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShell此命令返回特定命令ID的原始Send-SSMCommand的输出.
Get-SSMCommandInvocation-CommandId$domainJoinCommand.
CommandId-Details$true|select-ExpandPropertyCommandPlugins使用AWS-ConfigureCloudWatch文档将Windows指标发送到AmazonCloudWatch您可以将应用程序、系统、安全和Windows事件跟踪(ETW)日志中的WindowsServer消息发送到AmazonCloudWatch日志.
在首次启用日志记录时,SystemsManager会发送从您开始上传该应用程序、系统、安全和ETW日志时起1分钟内生成的所有日志.
其中不包括在此时间之前产生的日志.
如果您禁用日志记录并在以后再次启用日志记录,则SystemsManager会从其上次停止的时间继续发送日志.
对于任何自定义日志文件和InternetInformationServices(IIS)日志,SystemsManager会从头读取日志文件.
此外,SystemsManager还可以将性能计数器数据发送到AmazonCloudWatch.
如果您先前在EC2Config中启用了CloudWatch集成,那么SystemsManager设置会覆盖实例本地在C:\ProgramFiles\Amazon\EC2ConfigService\Settings\AWS.
EC2.
Windows.
CloudWatch.
json文件中存储的任何设置.
有关使用EC2Config在一个实例上管理性能计数器和日志的更多信息,请参阅将性能计数器发送到CloudWatch并将日志发送到CloudWatch日志.
查看说明和可用参数Get-SSMDocumentDescription-Name"AWS-ConfigureCloudWatch"查看有关参数的更多信息Get-SSMDocumentDescription-Name"AWS-ConfigureCloudWatch"|select-ExpandPropertyParameters将应用程序日志发送到CloudWatch以下命令配置实例并将Windows应用程序日志移至CloudWatch.
$cloudWatchCommand=Send-SSMCommand-InstanceIDInstance-ID-DocumentName'AWS-ConfigureCloudWatch'-Parameter@{'properties'='{"engineConfiguration":{"PollInterval":"00:00:15","Components":[{"Id":"ApplicationEventLog","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Application","Levels":"7"}},{"Id":"CloudWatch","FullName":"AWS.
EC2.
Windows.
CloudWatch.
CloudWatchLogsOutput,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"Region":"us-east-1","LogGroup":"My-Log-Group","LogStream":"i-1234567890abcdef0"}}],"Flows":{"Flows":["ApplicationEventLog,CloudWatch"]}}}'}获取每个实例的命令信息以下命令使用命令ID获取命令执行的状态.
Get-SSMCommandInvocation-CommandId$cloudWatchCommand.
CommandId-Details$true获取带有特定实例的响应数据的命令信息以下命令返回AmazonCloudWatch配置的结果.
Get-SSMCommandInvocation-CommandId$cloudWatchCommand.
CommandId-Details$true-InstanceIdInstance-ID|select-ExpandPropertyCommandPlugins278AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShell使用AWS-ConfigureCloudWatch文档将性能计数器发送到CloudWatch以下演示命令将性能计数器数据上传到CloudWatch.
有关更多信息,请参阅AmazonCloudWatch文档.
$cloudWatchMetricsCommand=Send-SSMCommand-InstanceIDInstance-ID-DocumentName'AWS-ConfigureCloudWatch'-Parameter@{'properties'='{"engineConfiguration":{"PollInterval":"00:00:15","Components":[{"Id":"PerformanceCounter","FullName":"AWS.
EC2.
Windows.
CloudWatch.
PerformanceCounterComponent.
PerformanceCounterInputComponent,AW"Parameters":{"CategoryName":"Memory","CounterName":"AvailableMBytes","InstanceName":"","MetricName":"AvailableMemory","Unit":"Megabytes","DimensionName":"","DimensionValue"Id":"CloudWatch","FullName":"AWS.
EC2.
Windows.
CloudWatch.
CloudWatch.
CloudWatchOutputComponent,AWS.
EC2.
Windows.
CloudWatch"Parameters":{"AccessKey":"","SecretKey":"","Region":"us-east-1","NameSpace":"Windows-Default"}}],"Flows":{"Flows":["PerformanceCounter,CloudWatch"]}}}'}使用AWS-ConfigureWindowsUpdate文档启用/禁用Windows自动更新利用RunCommand和AWS-ConfigureWindowsUpdate文档,您可以在Windows实例上启用或禁用自动Windows更新.
此命令将Windows更新代理配置为在您指定的日期和时间下载并安装Windows更新.
如果更新需要重启,计算机将在安装更新15分钟后自动重启.
利用此命令,您还可以将Windows更新配置为检查更新但不安装更新.
AWS-ConfigureWindowsUpdate文档可与WindowsServer2008、2008R2、2012、2012R2和2016兼容.
查看说明和可用参数Get-SSMDocumentDescription–Name"AWS-ConfigureWindowsUpdate"查看有关参数的更多信息Get-SSMDocumentDescription-Name"AWS-ConfigureWindowsUpdate"|select-ExpandPropertyParameters启用Windows自动更新以下命令将WindowsUpdate配置为在每天晚上10:00自动下载和安装更新.
$configureWindowsUpdateCommand=Send-SSMCommand-InstanceIdInstance-ID-DocumentName'AWS-ConfigureWindowsUpdate'-Parameters@{'updateLevel'='InstallUpdatesAutomatically';'scheduledInstallDay'='Daily';'scheduledInstallTime'='22:00'}查看用于启用Windows自动更新的命令状态以下命令使用命令ID获取用于启用Windows自动更新的命令执行的状态.
Get-SSMCommandInvocation-Details$true-CommandId$configureWindowsUpdateCommand.
CommandId|select-ExpandPropertyCommandPlugins禁用Windows自动更新以下命令降低WindowsUpdate通知级别,使系统检查更新但不自动更新实例.
$configureWindowsUpdateCommand=Send-SSMCommand-InstanceIdInstance-ID-DocumentName'AWS-ConfigureWindowsUpdate'-Parameters@{'updateLevel'='NeverCheckForUpdates'}279AmazonEC2SystemsManager用户指南使用ToolsforWindowsPowerShell查看用于禁用Windows自动更新的命令状态以下命令使用命令ID获取用于禁用Windows自动更新的命令执行的状态.
Get-SSMCommandInvocation-Details$true-CommandId$configureWindowsUpdateCommand.
CommandId|select-ExpandPropertyCommandPlugins使用AWS-UpdateEC2Config文档更新EC2Config利用RunCommand和AWS-EC2ConfigUpdate文档,您可以更新正在Windows实例上运行的EC2Config服务.
此命令可将EC2Config服务更新为最新版本或您指定的版本.
查看说明和可用参数Get-SSMDocumentDescription-Name"AWS-UpdateEC2Config"查看有关参数的更多信息Get-SSMDocumentDescription-Name"AWS-UpdateEC2Config"|select-ExpandPropertyParameters将EC2Config更新为最新版本Send-SSMCommand-InstanceIdInstance-ID-DocumentName"AWS-UpdateEC2Config"获取具有实例的响应数据的命令信息此命令从上一个Send-SSMCommand返回指定命令的输出:Get-SSMCommandInvocation-CommandIdID-Details$true-InstanceIdInstance-ID|select-ExpandPropertyCommandPlugins将EC2Config更新为特定版本以下命令将EC2Config降级到较旧版本:Send-SSMCommand-InstanceIdInstance-ID-DocumentName"AWS-UpdateEC2Config"-Parameter@{'version'='3.
8.
354';'allowDowngrade'='true'}使用RunCommand管理Windows更新RunCommand包含三个文档,可帮助您管理AmazonEC2Windows实例的更新.
AWS-FindWindowsUpdates-扫描实例并确定缺少的更新.
AWS-InstallMissingWindowsUpdates-在EC2实例上安装缺少的更新.
AWS-InstallSpecificUpdates-安装特定更新.
以下示例演示如何执行指定的WindowsUpdate管理任务.
搜索所有缺少的Windows更新Send-SSMCommand-InstanceIdInstance-ID-DocumentName'AWS-FindWindowsUpdates'-Parameters@{'UpdateLevel'='All'}280AmazonEC2SystemsManager用户指南对RunCommand进行故障排除安装特定的Windows更新Send-SSMCommand-InstanceIdInstance-ID-DocumentName'AWS-InstallSpecificWindowsUpdates'-Parameters@{'KbArticleIds'='123456,KB567890,987654'}安装缺少的重要Windows更新Send-SSMCommand-InstanceIdInstance-ID-DocumentName'AWS-InstallMissingWindowsUpdates'-Parameters@{'UpdateLevel'='Important'}安装缺少的Windows更新(带特定排除内容)Send-SSMCommand-InstanceIdInstance-ID-DocumentName'AWS-InstallMissingWindowsUpdates'-Parameters@{'UpdateLevel'='All';'ExcludeKbArticleIds'='KB567890,987654'}SystemsManagerRunCommand疑难解答使用以下信息来帮助解决与RunCommand相关的问题.
我的实例在哪里如果您选择SelectTargetinstances后未看到预期的实例列表,请验证以下内容.
您在实例上安装了SSM代理的最新版本.
AmazonEC2WindowsAmazonMachineImage(AMI)预配置了SSM代理.
LinuxAMI则没有.
有关在实例上安装SSM代理的信息,请参阅在Linux实例上安装和配置SSM代理(p.
13)(适用于Linux)或在Windows实例上安装和配置SSM代理(p.
11)(适用于Windows).
您的实例配置了AWSIdentityandAccessManagement(IAM)角色,使得此实例能够与SystemsManagerAPI通信.
此外,还验证您的用户账户是否具有一个允许您的账户与SystemsManagerAPI通信的IAM用户信任策略.
有关更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
使用HealthAPI检查实例状态您可以使用AmazonEC2HealthAPI快速确定以下有关AmazonEC2实例的信息:一个或多个实例的状态该实例上次发送检测信号值的时间SSM代理的版本操作系统EC2Config服务的版本(Windows)EC2Config服务的状态(Windows)获取有关Windows实例的状态信息使用以下命令可获取有关一个或多个实例的状态详细信息:Get-SSMInstanceInformation-InstanceInformationFilterList@{Key="InstanceIds";ValueSet="instance-ID","instance-ID"}281AmazonEC2SystemsManager用户指南获取有关Linux实例的状态信息使用以下不带筛选条件的命令可查看注册到您的账户的当前报告联机状态的所有实例.
将ValueSet="Online"替换为"ConnectionLost"或"Inactive"可查看这些状态:Get-SSMInstanceInformation-InstanceInformationFilterList@{Key="PingStatus";ValueSet="Online"}使用以下命令可查看哪些实例正在运行EC2Config服务的最新版本.
将ValueSet="LATEST"替换为特定版本(例如,3.
0.
54或3.
10)可查看这些详细信息:Get-SSMInstanceInformation-InstanceInformationFilterList@{Key="AgentVersion";ValueSet="LATEST"}获取有关Linux实例的状态信息使用以下命令可获取有关一个或多个实例的状态详细信息:awsssmdescribe-instance-information--instance-information-filter-listkey=InstanceIds,valueSet=instance-ID使用以下不带筛选条件的命令可查看注册到您的账户的当前报告联机状态的所有实例.
将ValueSet="Online"替换为"ConnectionLost"或"Inactive"可查看这些状态:awsssmdescribe-instance-information--instance-information-filter-listkey=PingStatus,valueSet=Online使用以下命令可查看哪些实例正在运行SSM代理的最新版本.
将ValueSet="LATEST"替换为特定版本(例如,1.
0.
145或1.
0)可查看这些详细信息:awsssmdescribe-instance-information--instance-information-filter-listkey=AgentVersion,valueSet=LATEST如果describe-instance-informationAPI操作返回的AgentStatus为Online,则可使用RunCommand来管理实例.
如果状态为"Inactive",则该实例具有下面的一个或多个问题.
未安装SSM代理.
实例没有出站Internet连接.
未使用支持实例与SSMAPI通信的IAM角色来启动实例,或IAM角色的权限对RunCommand不适用.
有关更多信息,请参阅配置对SystemsManager的访问权限(p.
7).
SSM代理故障排除如果您在使用RunCommand执行命令时遇到问题,则可能是因为SSM代理有问题.
使用以下信息可帮助您排查代理问题.
查看代理日志SSM代理在下列文件中记录信息.
这些文件中的信息可帮助您排查问题.
在Windows上%PROGRAMDATA%\Amazon\SSM\Logs\amazon-ssm-agent.
log%PROGRAMDATA%\Amazon\SSM\Logs\error.
log282AmazonEC2SystemsManager用户指南SSM代理故障排除在Linux上/var/log/amazon/ssm/amazon-ssm-agent.
log/var/log/amazon/ssm/errors.
log在Linux上,您可通过更新seelog.
xml文件来启用延长日志记录.
默认情况下,配置文件位于以下位置:/etc/amazon/ssm/seelog.
xml.
有关cihub/seelog配置的更多信息,请转到cihub/seelogWiki.
有关cihub/seelog配置的示例,请转到cihub/seelog示例.
283AmazonEC2SystemsManager用户指南状态管理器入门SystemsManager状态管理SystemsManager状态管理器是一项安全的、可扩展的配置管理服务,可确保您的AmazonEC2和混合基础设施处于您定义的所需状态或一致状态.
这些配置的一些示例包括:在启动时通过特定软件引导实例定期下载和更新代理,包括SSM代理.
配置网络设置将实例加入Windows域在实例的整个生命周期内利用软件更新修补实例在Linux和Windows托管的实例的整个生命周期内对这些实例执行脚本状态管理器可与AWSCloudTrail集成以提供您可审核的所有执行的记录,它还可与AmazonCloudWatchEvents集成以跟踪状态更改.
您也可以在AmazonS3中查看详细输出.
状态管理器入门要开始使用状态管理器,请完成以下任务.
任务了解更多信息将托管实例上的SSM代理更新到最新版本.
安装和配置SSM代理(p.
11)验证SystemsManager先决条件.
SystemsManager先决条件(p.
5)选择预定义的AWS命令或策略类型文档并在运行时指定参数.
或创建定义要在实例上执行的操作的文档.
创建SystemsManager文档(p.
46)创建关联并将其应用到实例上.
创建关联(p.
287)相关内容284AmazonEC2SystemsManager用户指南关于状态管理器有关如何使用状态管理器的其他示例,请参阅以下博客文章:使用AmazonEC2SystemsManager和WindowsPowerShellDSC来防止配置偏差使用AmazonEC2SystemsManagerRunCommand和状态管理器运行AnsiblePlaybook使用状态管理器在AutoScaling组中配置AmazonEC2实例关于状态管理器SystemsManager状态管理器是一项安全的、可扩展的配置管理服务,可确保您的AmazonEC2和混合基础设施处于您定义的所需状态或一致状态.
状态管理器按如下所示工作.
1.
首先,确定您要应用于托管实例的状态.
例如,确定要引导的应用程序或要配置的网络设置.
在运行时,可使用AWS预配置文档指定状态的详细信息作为参数.
您也可以创建您自己的文档并直接在文档中指定状态,或在运行时指定状态作为参数.
这些文档以JSON格式编写,有时称为SSM文档.
一个文档可包含多个操作或步骤(例如,要执行的多条命令).
状态管理器使用命令或策略类型文档.
有关SSM文档的更多信息,请参阅SystemsManager文档(p.
39).
2.
您指定应用状态的时间或频率的计划.
您可以指定cron或rate表达式.
3.
您为状态指定目标.
您可以将托管实例(AmazonEC2实例,或混合环境中为SystemsManager配置的计算机)设为目标.
您可以通过指定一个或多个实例ID来以实例为目标,也可以通过将EC2标签设为目标来以大型托管实例组为目标.
使用AWSCLI、AWSToolsforWindowsPowerShell或SSM开发工具包,您可以通过指定多个标签来设定目标.
4.
然后将此信息(计划、目标、文档、参数)绑定到托管实例.
此信息与目标的绑定称为关联.
您可以使用AmazonEC2控制台、AWSCLI、AWSToolsforWindowsPowerShell或AWS开发工具包来创建关联.
5.
在发送创建关联的请求后,关联的状态将显示"待处理".
系统将尝试访问所有目标并立即应用关联中指定的状态.
Note如果您创建计划在之前的关联仍在运行时运行的新关联,那么之前的关联将超时,系统会执行新关联.
6.
SystemsManager为请求的每个目标实例报告请求的状态.
您可以在EC2控制台(通过使用DescribeInstanceAssociationsStatusAPI操作)或AmazonS3中(如果您在创建关联时指定了S3存储桶)查看状态详细信息.
7.
创建关联之后,状态管理器将根据关联中定义的计划重新应用状态.
您可以更新您的关联文档并根据需要重新应用它们.
您还可以创建关联版本.
示例状态管理器文档此部分包含示例状态管理器文档.
此部分中的示例仅用于演示目的.
有关如何创建您自己的文档的更多信息,请参阅SystemsManager文档(p.
39).
文档1:此文档包含一个调用aws:runPowerShellScript插件以返回实例主机名的步骤.
此文档可在Windows和Linux实例上执行.
有关SystemsManager插件的更多信息,请参阅顶级元素(p.
58).
{"schemaVersion":"2.
2","description":"Sampledocument","mainSteps":[{"action":"aws:runPowerShellScript","name":"runPowerShellScript","inputs":{285AmazonEC2SystemsManager用户指南示例状态管理器文档"runCommand":["hostname"]}}]}文档2:此文档包含一个调用aws:runShellScript插件以返回实例主机名的步骤.
此文档可在Linux实例上执行.
{"schemaVersion":"2.
2","description":"Sampledocument","mainSteps":[{"action":"aws:runShellScript","name":"runShellScript","inputs":{"runCommand":["hostname"]}}]}文档3:此文档包含一个调用aws:cloudWatch插件以启用AmazonCloudWatchLogs的步骤.
此文档可在Windows实例上执行.
{"schemaVersion":"2.
2","description":"Sampledocument","mainSteps":[{"action":"aws:cloudWatch","name":"cloudWatch","settings":{"startType":"Enabled"}}]}文档4:此文档包含两个调用aws:runPowerShellScript和aws:runShellScript插件以返回实例主机名的步骤.
此文档可在Linux实例上执行.
{"schemaVersion":"2.
2","description":"Sampledocument","mainSteps":[{"action":"aws:runPowerShellScript","name":"runPowerShellScript","inputs":{"runCommand":["hostname"]}},{"action":"aws:runShellScript",286AmazonEC2SystemsManager用户指南创建关联"name":"runShellScript","inputs":{"runCommand":["hostname"]}}]}创建关联此部分介绍如何使用AmazonEC2控制台创建状态管理器关联.
此部分中的示例说明如何基于自定义SSM文档创建关联.
如果这是您首次创建关联,我们建议您在测试环境中执行此过程.
有关如何使用AWSCLI创建关联的示例,请参阅SystemsManager状态管理器演练(p.
289).
开始前的准备工作在完成以下过程之前,请确认您至少有一个为SystemsManager配置的实例正在运行.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
创建状态管理器关联1.
打开AmazonEC2控制台,在导航窗格中展开SystemsManagerSharedResources,然后选择Documents.
2.
选择CreateDocument.
3.
在Name字段中,键入一个将此文档标识为状态管理器的测试文档的描述性名称.
4.
在文档类型列表中,选择命令.
5.
删除Contentfield字段中预先填充的括号{},然后将以下示例文档复制并粘贴到Content字段中.
此文档包含一个调用aws:runPowerShellScript插件以返回实例主机名的步骤.
此文档可在Windows实例上执行.
{"schemaVersion":"2.
0","description":"Sampledocument","mainSteps":[{"action":"aws:runPowerShellScript","name":"runPowerShellScript","inputs":{"runCommand":["hostname"]}}]}6.
选择创建文档.
在系统创建文档后,选择Close.
7.
在EC2控制台导航窗格中,展开SystemsManagerServices,然后选择状态管理器.
8.
选择创建关联.
9.
在AssociationName中,为此关联指定一个描述性名称.
例如,指定TestHostnameAssociation.
10.
在SelectDocument部分中,选择您刚刚创建的文档.
11.
在DocumentVersion列表中,保留默认值.
12.
在SelectTargetsby部分中,选择选项.
13.
在计划部分,选择一个选项.
287AmazonEC2SystemsManager用户指南编辑关联(版本控制)14.
忽略Parameters部分,因为测试文档不采用参数.
此外,忽略WritetoS3选项,因为下一过程中将介绍此选项的使用.
15.
选择创建关联.
系统将尝试在实例上创建关联并立即应用状态.
在此情况下,创建关联后,系统将尝试返回主机名.
关联状态显示Pending.
16.
在"Association"页面的右角,选择刷新按钮.
状态将变为Success.
您无法查看此过程的输出(主机名),因为您未将输出写入AmazonS3.
要编辑关联,请将输出写入S3,并查看主机名,完成下一过程.
编辑关联(版本控制)您可以编辑关联以指定新名称、计划或目标.
您还可选择WritetoS3选项(如果您之前未选择此选项).
编辑关联后,SystemsManager将创建新版本.
您可在编辑后查看不同的版本,如以下过程中所述.
Note此过程需要一个S3存储桶.
如果您之前未使用S3,请注意使用S3会产生费用.
有关如何创建存储桶的信息,请参阅创建存储桶.
编辑状态管理器关联1.
打开AmazonEC2控制台,在导航窗格中展开SystemsManagerServices,然后选择状态管理器.
2.
选择上一过程中创建的关联.
3.
从Actions菜单中选择EditAssociation.
4.
在Name字段中,键入一个新名称.
例如,键入TestHostnameAssociation2.
5.
在Schedule部分中,选择一个新选项.
例如,选择Cronschedulebuilder,然后选择Every1hour.
6.
在Advanced部分中,选择WritetoS3.
7.
忽略S3Region字段.
此字段已弃用.
在S3BucketName字段中指定存储桶的名称.
如果要将输出写入子文件夹,请在S3KeyPrefix字段中指定子文件夹名称.
8.
选择EditAssociation,然后选择Close.
9.
在状态管理器页面中,选择您刚编辑的关联,然后选择Versions选项卡.
系统将列出您已创建和编辑的关联的每个版本.
10.
OpentheAmazonS3consoleathttps://console.
amazonaws.
cn/s3/.
11.
选择您的存储桶名称,然后选择运行关联的实例ID.
12.
下拉多个级别至awsrunPowerShell文件夹中的stdout文件.
13.
选择该文件,然后选择Link部分中的链接.
主机名将在HostId标签中列出.
使用Targets参数创建关联利用targets参数,您可以在数十、数百或数千个实例上创建关联.
targets参数支持基于您为实例指定的AmazonEC2标签Key,Value组合.
在您执行创建关联的请求时,系统会在符合指定条件的所有实例上查找并尝试创建关联.
有关targets参数的更多信息,请参阅将命令发送到队列(p.
268).
有关AmazonEC2标签的更多信息,请参阅AmazonEC2用户指南中的标记AmazonEC2资源.
以下AWSCLI示例显示了如何在创建关联时使用targets参数.
awsssmcreate-association--targetsKey=tag:TagKey,Values=TagValue--nameAWS-UpdateSSMAgent--schedule"cron(002*SUN*)"为名为"ws-0123456789012345"的托管实例创建关联288AmazonEC2SystemsManager用户指南状态管理器演练awsssmcreate-association--namevalue--targets"Key=InstanceIds,Values=ws-0123456789"}--nameAWS-UpdateSSMAgent--schedule"cron(002*SUN*)"Note如果您从与文档关联的标记实例组中删除一个实例,则该实例将不再与文档相关联.

SystemsManager状态管理器演练以下演练可以帮助您理解如何使用AmazonEC2控制台或AWSCLI创建和配置状态管理器关联.
这些演练还可以帮助您理解如何使用状态管理器自动执行常见管理任务.
内容演练:自动更新SSM代理(p.
289)演练:在EC2Windows实例上自动更新半虚拟化驱动程序(p.
290)演练:自动更新SSM代理以下步骤将指导您完成使用AWSCommandLineInterface(AWSCLI)创建状态管理器关联的过程.
关联会根据您指定的计划自动更新SSM代理.
有关SSM代理的更多信息,请参阅安装和配置SSM代理(p.
11).
要查看有关不同版本SSM代理的详细信息,请参阅发行说明.
开始前的准备工作在完成以下过程之前,请确认您至少有一个为SystemsManager配置的AmazonEC2实例(Linux或Windows)正在运行.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
1.
在您的本地计算机上,下载最新版本的AWSCLI.
2.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER3.
执行以下命令,通过使用AmazonEC2标签将实例设为目标来创建关联.
Schedule参数可以设置一个计划,以在每周日凌晨2:00(UTC)运行关联.
awsssmcreate-association--targetsKey=tag:TagKey,Values=TagValue--nameAWS-UpdateSSMAgent--scheduleExpression"cron(002*SUN*)"Note状态管理器关联不支持所有的cron和rate表达式.
有关为关联创建cron和rate表达式的更多信息,请参阅使用SystemsManager的Cron和Rate表达式(p.
299).
289AmazonEC2SystemsManager用户指南自动更新半虚拟化驱动程序如果需要,您也可以通过在以逗号分隔的列表中指定实例ID来将多个实例设为目标.
awsssmcreate-association--targetsKey=instanceids,Values=InstanceID,InstanceID,InstanceID--nameyourdocumentname--scheduleExpression"cron(002*SUN*)"系统将返回类似于以下内容的信息.
{"AssociationDescription":{"ScheduleExpression":"cron(002*SUN*)","Name":"AWS-UpdateSSMAgent","Overview":{"Status":"Pending","DetailedStatus":"Creating"},"AssociationId":"123.
"DocumentVersion":"$DEFAULT","LastUpdateAssociationDate":1504034257.
98,"Date":1504034257.
98,"AssociationVersion":"1","Targets":[{"Values":["TagValue"],"Key":"tag:TagKey"}]}}系统将尝试在实例上创建关联并立即应用状态.
关联状态显示Pending.
4.
执行以下命令查看您刚刚创建的关联的更新状态.
awsssmlist-associationsNote如果您的实例目前正在运行SSM代理的最新版本,则状态将显示Failed.
这是预期行为.
发布SSM代理的新版本时,关联将自动安装新代理,而且状态将显示Success.
演练:在EC2Windows实例上自动更新半虚拟化驱动程序AmazonWindowsAMI包含一系列驱动程序,以允许访问虚拟化硬件.
AmazonEC2会使用这些驱动程序将实例存储和AmazonEBS卷映射到其设备.
我们建议您安装最新的驱动程序来提高您的EC2Windows实例的稳定性和性能.
有关半虚拟化驱动程序的更多信息,请参阅AWS半虚拟化驱动程序.
以下演练介绍如何配置状态管理器关联以在新的AWS半虚拟化驱动程序可用时自动下载和安装这些驱动程序.
开始前的准备工作在完成以下过程之前,请确认您至少有一个为SystemsManager配置的AmazonEC2Windows实例正在运行.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
290AmazonEC2SystemsManager用户指南自动更新半虚拟化驱动程序创建自动更新半虚拟化驱动程序的状态管理器关联1.
打开AmazonEC2控制台,在导航窗格中展开SystemsManagerServices,然后选择状态管理器.
2.
选择创建关联.
3.
在AssociationName字段中,键入一个描述性名称.
4.
在SelectDocument列表中,选择AWS-ConfigureAWSPackage.
5.
在SelectTargetsby部分中,选择选项.
Note如果您选择使用标签将实例设为目标,并指定映射到Linux实例的标签,则关联在Windows实例上将成功,但在Linux实例上将失败.
关联的总体状态将显示Failed.
6.
在计划部分,选择一个选项.
更新的半虚拟化驱动程序每年仅发布几次,因此如果需要,您可以计划每月运行一次关联.
7.
在Parameters部分中,选择Action列表中的Install.
8.
从Name列表中,选择AWSPVDriver.
您可以将Version字段留空.
9.
如果您要向AmazonS3存储桶中写入关联详细信息,请在Advanced部分中,选择WritetoS3.
10.
忽略S3Region字段.
此字段已弃用.
在S3BucketName字段中指定存储桶的名称.
如果要将输出写入子文件夹,请在S3KeyPrefix字段中指定子文件夹名称.
11.
选择CreateAssociation,然后选择Close.
系统将尝试在实例上创建关联并立即应用状态.
关联状态显示Pending.
12.
在Association页面的右角,选择刷新按钮.
如果您在一个或多个EC2Windows实例上创建关联,状态将更改为Success.
如果未为SystemsManager正确配置实例,或您无意中将Linux实例设为了目标,则状态将显示Failed.
13.
如果状态为Failed,则选择Instances选项卡并验证关联是否已在EC2Windows实例上成功创建.
如果Windows实例显示Failed状态,请验证SSM代理是否在实例上运行,并验证实例是否配置有适用于SystemsManager的IAM角色.
有关更多信息,请参阅SystemsManager先决条件(p.
5).
291AmazonEC2SystemsManager用户指南配置合规性入门SystemsManager配置合规性您可以使用AmazonEC2SystemsManager配置合规性扫描托管实例队列,了解补丁合规性和配置不一致性.
您可以从多个AWS账户和区域中收集并聚合数据,然后深入了解不合规的特定资源.
默认情况下,配置合规性将显示有关SystemsManagerPatchManager修补和SystemsManager状态管理器关联的合规性数据.
您也可以根据IT或业务要求自定义服务并创建自己的合规性类型.
您可以使用SystemsManagerRunCommand、状态管理器或AmazonCloudWatchEvents快速修复问题.
您也可以将数据传送到AmazonAthena和AmazonQuickSight来生成队列范围的报告.
配置合规性不另外收取费用.
您仅需为实际使用的AWS资源付费.
内容配置合规性入门(p.
292)关于配置合规性(p.
294)修复合规性问题(p.
296)SystemsManager配置合规性管理器演练(p.
296)配置合规性入门要开始使用配置合规性,请完成以下任务.
任务了解更多信息配置合规性在SystemsManager托管实例上使用PatchManager补丁数据、状态管理器关联和自定义合规类型.
通过验证SystemsManager先决条件验证您的AmazonEC2实例和混合计算机是否配置为托管实例.
SystemsManager先决条件(p.
5)将托管实例上的SSM代理更新到最新版本.
安装和配置SSM代理(p.
11)如果您计划监控补丁合规性,请验证您是否已配置SystemsManagerPatchManager.
您必须使用PatchManager执行修补操作,然后配置合规性才能显示补丁合规性数据.
SystemsManager补丁管理(p.
206)如果您计划监控关联合规性,请验证您是否已创建状态管理器关联.
您必须创建关联,配置合规性才能显示关联合规性数据.
SystemsManager状态管理(p.
284)292AmazonEC2SystemsManager用户指南为配置合规性创建资源数据同步任务了解更多信息(可选)创建自定义合规性类型.
SystemsManager配置合规性管理器演练(p.
296)(可选)创建资源数据同步以将所有合规性数据聚合在一个目标AmazonS3存储桶.
为配置合规性创建资源数据同步(p.
293)为配置合规性创建资源数据同步您可以使用SystemsManager资源数据同步将来自所有托管实例的合规性数据发送到目标AmazonS3存储桶.
在创建同步时,可以指定多个AWS账户、AWS区域和您的本地混合环境的托管实例.
收集新的合规性数据后,资源数据同步自动更新集中式数据.
所有合规性数据存储在目标AmazonS3存储桶中后,您可以使用AmazonAthena和AmazonQuickSight等服务查询和分析聚合数据.
为配置合规性配置资源数据同步是一次性操作.
下图显示资源数据同步如何将来自不同账户、区域和您的混合环境的所有数据聚合到一个中央存储库.

通过使用AmazonEC2控制台,使用以下程序创建配置合规性的资源数据同步.
为配置合规性创建资源数据同步1.
OpentheAmazonS3consoleathttps://console.
amazonaws.
cn/s3/.
2.
创建用来存储聚合合规性数据的存储桶.
有关更多信息,请参阅AmazonSimpleStorageServiceGettingStartedGuide中的创建存储桶.
请记下存储桶名称和创建此存储桶的AWS区域.
3.
选择Permissions选项卡,然后选择BucketPolicy.
4.
将下面的存储桶策略复制并粘贴到策略编辑器中.
使用您创建的AmazonS3存储桶的名称和有效的AWS账户ID替换Bucket-Name和Account-ID.
或者,使用AmazonS3前缀(子目录)的名称替换Bucket-Prefix.
如果您未创建前缀,则从该策略的ARN中删除Bucket-Prefix/.
{"Version":"2012-10-17","Statement":[293AmazonEC2SystemsManager用户指南关于配置合规性{"Sid":"SSMBucketPermissionsCheck","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"s3:GetBucketAcl","Resource":"arn:aws:s3:::Bucket-Name"},{"Sid":"SSMBucketDelivery","Effect":"Allow","Principal":{"Service":"ssm.
amazonaws.
com"},"Action":"s3:PutObject","Resource":["arn:aws:s3:::Bucket-Name/Bucket-Prefix/*/accountid=Account-ID/*"],"Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}}}]}5.
打开AmazonEC2控制台,在导航窗格中展开SystemsManagerSharedResources,然后选择ManagedInstances.
6.
选择ResourceDataSyncs,然后选择CreateaResourceDataSync.
7.
在SyncName字段中,键入同步配置的名称.
8.
在BucketName字段中,键入您在此程序开始时创建的AmazonS3存储桶的名称.
9.
(可选)在BucketPrefix字段中,键入AmazonS3存储桶前缀(子目录)的名称.
10.
在BucketRegion字段中,如果您创建的AmazonS3存储桶位于当前AWS区域,则选择Thisregion.
如果存储桶位于不同的AWS区域,则选择Anotherregion,然后键入该区域的名称.
Note如果同步和目标AmazonS3存储桶位于不同区域,您可能需要支付数据传输价格.
有关更多信息,请参阅AmazonS3定价.
11.
选择Create.
关于配置合规性本部分包括有关不同类型的信息(合规性类型)的信息,您可以使用配置合规性进行查看.
配置合规性目前支持PatchManager修补数据、状态管理器关联和自定义合规性类型.
主题关于补丁合规性(p.
294)关于关联合规性(p.
295)关于自定义合规性(p.
295)关于补丁合规性您使用PatchManager配置和执行修补后,配置合规性将自动报告补丁合规性状态.
您不需要执行任何其他步骤即可查看这些状态.
如果您想将特定补丁合规性状态分配给某个实例,则可以使用PutComplianceItems294AmazonEC2SystemsManager用户指南关于关联合规性API操作显式分配状态.
您可以从AWSCLI、AWSToolsforWindowsPowerShell或软件开发工具包使用此API操作.
您目前无法使用AmazonEC2控制台分配合规性状态.
您可以在ComplianceConfiguration页面上的AmazonEC2控制台中查看并深入了解补丁合规性详细信息,您也可以使用以下API操作.
ListComplianceSummaries:根据您指定的筛选条件返回合规和不合规补丁状态的摘要计数.

ListResourceComplianceSummaries:返回资源级摘要计数.
根据您指定的筛选条件,摘要包括有关合规和不合规状态的信息,以及详细的合规性项目严重性计数.
DescribePatchGroupState:返回补丁组的高级聚合补丁合规性状态.
DescribeInstancePatchStatesForPatchGroup:返回指定补丁组中的实例的高级补丁状态.

每个补丁的结果将显示下列状态之一.
Installed:补丁已安装,或者在实例上运行AWS-RunPatchBaseline文档时PatchManager安装了补丁.
Installed_Other:补丁不在基准中,但已安装在实例上.
某人可能已手动安装补丁.

Missing:基准中已批准补丁,但实例上未安装补丁.
如果将AWS-RunPatchBaseline文档任务配置为扫描(而不是安装),系统将为扫描期间找到但未安装的补丁报告此状态.
Not_Applicable:基准中已批准补丁,但实例上未安装使用补丁的服务或功能.
例如,如果基准中已批准Web服务器服务的补丁,但实例上未安装该Web服务,则补丁将显示"Not_Applicable".
Failed:基准中已批准补丁,但无法安装补丁.
要解决此问题,请查看命令输出中是否有可帮助您理解此问题的信息.
要查看如何配置修补以及如何使用AWSCLI查看补丁合规性详细信息的示例,请参阅SystemsManagerPatchManager演练(p.
210).
关于关联合规性创建一个或多个状态管理器关联后,配置合规性将自动报告关联合规性状态.
您不需要执行任何其他步骤即可查看这些状态.
如果您想将特定关联合规性状态分配给某个实例,则可以使用PutComplianceItemsAPI操作显式分配状态.
您可以从AWSCLI、AWSToolsforWindowsPowerShell或软件开发工具包使用此API操作.
您目前无法使用AmazonEC2控制台分配合规性状态.
您可以在AmazonEC2控制台中的ComplianceConfiguration页面上查看关联合规性详细信息,您也可以使用以下API查看合规性详细信息:Note目前,配置合规性显示Compliant或Non-compliant的合规性状态和Unspecified的严重性.
ListComplianceSummaries:根据您指定的筛选条件返回合规和不合规关联状态的摘要计数.

ListResourceComplianceSummaries:返回资源级摘要计数.
根据您指定的筛选条件,摘要包括有关合规和不合规状态的信息,以及Unspecified计数.
关于自定义合规性您可以将合规性元数据分配给托管实例.
然后此元数据可以与用于合规性报告目的的其他合规性数据聚合.

例如,假设您的企业在您的托管实例上运行软件X版本2.
0、3.
0和4.
0.
公司希望在版本4.
0上实现标准化,这意味着运行版本2.
0和3.
0的实例将不合规.
您可以使用PutComplianceItemsAPI操作显式注释哪些托管实例在运行较旧版本的软件X.
目前您只能使用AWSCLI、AWSToolsforWindowsPowerShell或软件开发工具包分配合规性元数据.
以下CLI示例命令会将合规性元数据分配给一个托管实例并以要求的格式Custom:指定合规性类型.
295AmazonEC2SystemsManager用户指南修复合规性问题awsssmput-compliance-items--resource-idi-1234567890--resource-typeManagedInstance--compliance-typeCustom:SoftwareXCheck--execution-summaryExecutionTime=AnyStringToDenoteTimeOrDate,--itemsId=Version2.
0,Title=SoftwareXVersion,Severity=CRITICAL,Status=NON_COMPLIANT然后合规经理可以查看摘要或创建有关哪些实例合规或不合规的报告.
您最多可将10个不同的自定义合规性类型分配给一个实例.
有关如何创建自定义合规性类型并查看合规性数据的示例,请参阅SystemsManager配置合规性管理器演练(p.
296).
修复合规性问题您可以使用SystemsManagerRunCommand快速修复补丁和关联合规性问题.
您可以将实例ID或AmazonEC2标签设为目标并执行AWS-RefreshAssociation文档或AWS-RunPatchBaseline文档.
如果刷新关联或重新运行补丁基准未能解决合规性问题,则需要调查您的关联、补丁基准或实例配置,以了解RunCommand不能解决问题的原因.
有关运行命令的更多信息,请参阅使用SystemsManagerRunCommand执行命令(p.
266).
您也可以将CloudWatchEvents配置为执行操作以响应配置合规性事件.
例如,如果一个或多个实例未能安装重要补丁更新或运行安装反病毒软件的关联,则您可以将CloudWatch配置为在配置合规性事件发生时运行AWS-RunPatchBaseline文档或AWS-RefreshAssocation文档.
使用以下过程将配置合规性配置为CloudWatch事件的目标.
将配置合规性配置为CloudWatch事件的目标1.
SignintotheAWSManagementConsoleandopentheCloudWatchconsoleathttps://console.
amazonaws.
cn/cloudwatch/.
2.
在左侧导航窗格中,选择Events,然后选择Createrule.
3.
选择EventPattern.
利用EventPattern,您可以构建将为AWSServices中的特定操作生成事件的规则.
4.
在ServiceName字段中,选择EC2SimpleSystemsManager(SSM)5.
在EventType字段中,选择ConfigurationCompliance.
6.
选择Addtarget.
7.
在Selecttargettype列表中,选择SSMRunCommand.
8.
在Document列表中,选择在调用目标时要运行的SSM文档.
例如,为不合规关联事件选择AWS-RefreshAssociation,或为不合规补丁事件选择AWS-RunPatchBaseLine.
9.
指定剩余字段和参数的信息.
Note必需字段和参数的名称旁有一个星号(*).
要创建目标,您必须为每个必需的参数或字段指定一个值.
如果没有指定,系统将创建规则,但不执行规则.
10.
选择Configuredetails并完成向导.
SystemsManager配置合规性管理器演练以下步骤为您演示了使用PutComplianceItemsAPI操作将自定义合规性元数据分配给资源的过程.
您也可以使用此API操作手动将补丁或关联合规性元数据分配给某个实例,如以下演练中所示.
有关自定义合规性的更多信息,请参阅关于自定义合规性(p.
295).
296AmazonEC2SystemsManager用户指南配置合规性演练将自定义合规性元数据分配给托管实例1.
在您的本地计算机上,下载最新版本的AWSCLI.
2.
打开AWSCLI并运行以下命令指定您的凭证和区域.
您必须在AmazonEC2中具有管理员权限,或者您必须在AWSIdentityandAccessManagement(IAM)中被授予相应权限.
awsconfigure系统将提示您指定以下内容.
AWSAccessKeyID[None]:key_nameAWSSecretAccessKey[None]:key_nameDefaultregionname[None]:regionDefaultoutputformat[None]:ENTER3.
执行以下命令,以便将自定义合规性元数据分配给某个实例.
当前,仅支持ManagedInstance资源类型.
awsssmput-compliance-items--resource-idInstanceID--resource-typeManagedInstance--compliance-typeCustom:User-definedstring--execution-summaryExecutionTime=User-definedtimeand/ordatevalue--itemsId=User-definedID,Title=User-definedtitle,Severity=Oneormorecomma-separatedseverities:CRITICAL,MAJOR,MINOR,INFORMATIONAL,orUNSPECIFIED,Status=COMPLIANTorNON_COMPLIANt4.
重复上一步以将其他自定义合规性元数据分配给一个或多个实例.
您也可以使用以下命令将补丁或关联合规性元数据手动分配给托管实例:关联合规性元数据awsssmput-compliance-items--resource-idInstanceID--resource-typeManagedInstance--compliance-typeAssociation--execution-summaryExecutionTime=User-definedtimeand/ordatevalue--itemsId=User-definedID,Title=User-definedtitle,Severity=Oneormorecomma-separatedseverities:CRITICAL,MAJOR,MINOR,INFORMATIONAL,orUNSPECIFIED,Status=COMPLIANTorNON_COMPLIANT,Details="{DocumentName=TheSSMdocumentfortheassociation,DocumentVersion=Aversionnumber}"补丁合规性元数据awsssmput-compliance-items--resource-idInstanceID--resource-typeManagedInstance--compliance-typePatch--execution-summaryExecutionTime=User-definedtimeand/ordatevalue,ExecutionId=User-definedID,ExecutionType=Command--itemsId=forexample,KB12345,Title=User-definedtitle,Severity=Oneormorecomma-separatedseverities:CRITICAL,MAJOR,MINOR,INFORMATIONAL,orUNSPECIFIED,Status=COMPLIANTorNON_COMPLIANT,Details="{PatchGroup=Nameofgroup,PatchSeverity=Thepatchseverity,forexample,CRITICAL}"5.
执行以下命令,查看特定托管实例的合规性项目列表.
使用筛选条件深入了解特定合规性数据.

awsssmlist-compliance-items--resource-idsInstanceID--resource-typesManagedInstance--filtersOneormorefilters.
以下示例向您演示如何将此命令与筛选条件结合使用.
awsssmlist-compliance-items--resource-idsi-1234567890abcdef0--resource-typeManagedInstance--filtersKey=DocumentName,Values=AWS-RunPowerShellScript297AmazonEC2SystemsManager用户指南配置合规性演练Key=Status,Values=NON_COMPLIANT,Type=NotEqualKey=Id,Values=cee20ae7-6388-488e-8be1-a88cc6c46dccKey=Severity,Values=UNSPECIFIEDawsssmlist-resource-compliance-summaries--filtersKey=OverallSeverity,Values=UNSPECIFIEDawsssmlist-resource-compliance-summaries--filtersKey=OverallSeverity,Values=UNSPECIFIEDKey=ComplianceType,Values=AssociationKey=InstanceId,Values=i-1234567890abcdef06.
执行以下命令查看合规性状态的摘要.
使用筛选条件深入了解特定合规性数据.

awsssmlist-resource-compliance-summaries--filtersOneormorefilters.
以下示例向您演示如何将此命令与筛选条件结合使用.
awsssmlist-resource-compliance-summaries--filtersKey=ExecutionType,Values=Commandawsssmlist-resource-compliance-summaries--filtersKey=AWS:InstanceInformation.
PlatformType,Values=WindowsKey=OverallSeverity,Values=CRITICAL7.
执行以下命令查看某个合规性类型的合规资源和不合规资源的摘要计数.
使用筛选条件深入了解特定合规性数据.
awsssmlist-compliance-summaries--filtersOneormorefilters.
以下示例向您演示如何将此命令与筛选条件结合使用.
awsssmlist-compliance-summaries--filtersKey=AWS:InstanceInformation.
PlatformType,Values=WindowsKey=PatchGroup,Values=TestGroupawsssmlist-compliance-summaries--filtersKey=AWS:InstanceInformation.
PlatformType,Values=WindowsKey=ExecutionId,Values=4adf0526-6aed-4694-97a5-145222f4c2b6298AmazonEC2SystemsManager用户指南适用于关联的Cron和Rate表达式使用SystemsManager的Cron和Rate表达式当您创建SystemsManagerMaintenanceWindow或状态管理器关联时,指定一个有关该时段或关联应何时运行的计划.
您能够以基于时间的条目(也称为cron表达式)或基于频率的条目(也称为rate表达式)的形式指定计划.
如果您使用AmazonEC2控制台创建MaintenanceWindow或关联,则可以使用用户界面中的工具来创建您的计划.
如果您要以编程方式或从命令行使用AWSCLI等来创建MaintenanceWindow或关联,则必须以正确格式指定带有cron或rate表达式的计划参数.
Note要通过AWSCLI创建MaintenanceWindow,请使用带有cron或rate表达式的--schedule参数.
要通过AWSCLI创建状态管理器关联,请使用带有cron或rate表达式的--scheduleExpression参数.
以下一些示例显示带有cron和rate表达式的schedule参数:Cron示例:此cron表达式在每个星期二下午4点(16:00)运行关联.
--scheduleExpression"cron(016*TUE*)"Rate示例:此rate表达式每隔一天运行MaintenanceWindow或关联.
--schedule"rate(2days)"Important与MaintenanceWindow相比,状态管理器关联已限制cron和rate表达式的选项.
在您为关联创建这些表达式之前,请查看以下部分中的限制.
如果您不熟悉cron和rate表达式,则建议您阅读有关Cron和Rate表达式的一般信息(p.
301).
适用于关联的Cron和Rate表达式此部分包括适用于状态管理器关联的cron和rate表达式的示例.
在您创建这些表达式之前,请注意以下限制.
299AmazonEC2SystemsManager用户指南适用于MaintenanceWindow的Cron和Rate表达式关联仅支持以下cron表达式:每1/2、1、2、4、8或12个小时;每天或每周的特定时间.
关联仅支持以下rate表达式:30分钟的时间间隔或大于和小于31天.
以下是一些适用于关联的cron示例.
适用于关联的Cron示例示例详细信息cron(0/30每30分钟cron(00/1每小时cron(00/2每2小时cron(00/4每4小时cron(00/8每8小时cron(00/12每12小时cron(1513每天下午1:15cron(1513*MON*)每星期一下午1:15以下是一些适用于关联的rate示例.
适用于关联的Rate示例示例详细信息rate(30minutes)每30分钟rate(1hour)每小时rate(5hours)每5小时rate(15days)每15天适用于MaintenanceWindow的Cron和Rate表达式与状态管理器关联不同,MaintenanceWindow支持所有cron和rate表达式.
以下是一些适用于MaintenanceWindow的cron示例.
适用于MaintenanceWindow的Cron示例示例详细信息021/1THU#3*每月第三个星期四凌晨2:001510***每天上午10:1501510*MON-FRI星期一到星期五每天上午10:15002L*每月最后一天凌晨2:00300AmazonEC2SystemsManager用户指南有关Cron和Rate表达式的一般信息示例详细信息01510*6L每月最后一个星期五上午10:15以下是一些适用于MaintenanceWindow的rate示例.
适用于MaintenanceWindow的Rate示例示例详细信息rate(30minutes)每30分钟rate(1hour)每小时rate(5hours)每5小时rate(25days)每25天有关Cron和Rate表达式的一般信息适用于SystemsManager的Cron表达式有六个必需字段.
这些字段用空格分隔.
分钟小时日期月星期几年代意义010***每天上午的10:00(UTC)运行1512***每天下午12:15(UTC)运行018*MON-FRI*每星期一到星期五下午6:00(UTC)运行081**每月第1天上午8:00(UTC)运行0/15每15分钟运行一次0/10**MON-FRI*从星期一到星期五,每10分钟运行一次0/58-17*MON-FRI*在每星期一到星期五的上午8:00到下午5:55(UTC)之间,每5分钟运行一次301AmazonEC2SystemsManager用户指南有关Cron和Rate表达式的一般信息下表显示了必需cron条目支持的值:字段值通配符分钟0-59,-*/小时0-23,-*/日期1-31LW月1-12或JAN-DEC,-*/星期几1-7或SUN-SATL年代1970-2199,-*/Note您无法在同一cron表达式中的"日期"和"星期几"字段中指定值.
如果您在其中一个字段中指定了值,则必须在另一个字段中使用(问号).
通配符Cron表达式支持下列通配符:,(逗号)通配符包含其他值.
在"月份"字段中,JAN、FEB和MAR将包含January、February和March.
-(破折号)通配符用于指定范围.
在"日"字段中,1-15将包含指定月份的1-15日.
*(星号)通配符包含该字段中的所有值.
在"小时"字段中,*将包含每个小时.
/(正斜杠)通配符用于指定增量.
在"分钟"字段中,您可以输入1/10以指定从一个小时的第一分钟开始的每个第十分钟(例如,第11分钟、第21分钟和第31分钟,依此类推).
这些区域有:(问号)通配符用于指定一个或另一个.
在"日期"字段中,您可以输入7,如果您不介意7日是星期几,则可以在"星期几"字段中输入.
"日期"或"星期几"字段中的L通配符用于指定月或周的最后一天.
"日期"字段中的W通配符用于指定工作日.
在"日期"字段中,3W用于指定最靠近当月的第三周的日.
Note不支持产生的速率快于5分钟的Cron表达式.
对指定星期几值和日期值的支持不完整.
您当前必须在以下任一字段中使用""字符.
有关cron表达式的更多信息,请参阅Wikipedia网站上的CRON表达式.
Rate表达式Rate表达式有以下两个必需字段.
这些字段用空格分隔.
字段值值正数单位分钟、小时或天Note如果值等于1,则单位必须为单数.
同样,对于大于1的值,单位必须为复数.
例如,rate(1hours)和rate(5hour)无效,而rate(1hour)和rate(5hours)有效.
302AmazonEC2SystemsManager用户指南使用案例和最佳实践此主题列出了SystemsManager功能的常用案例和最佳实践.
如果可用,本主题还包括指向相关博客文章和技术文档的链接.
Note此处的每个部分标题都是一个指向技术文档中相应部分的有效链接.
自动化(p.
107)为基础设施创建Automation文档形式的自助服务运行手册.
使用Automation可对创建AWSMarketplace中的AMI或自定义AMI、使用公共SSM文档或编写自己的工作流程进行简化.
使用AWS-UpdateLinuxAmi和AWS-UpdateWindowsAmiAutomation文档(或创建自定义Automation文档)可构建和维护AMI.
(p.
113)清单(p.
190)将SystemsManagerInventory和AWSConfig结合使用可随着时间的推移审核您的应用程序配置.
MaintenanceWindow(p.
79)定义一个时间表以便在您的实例上执行具有潜在破坏性的操作,例如操作系统修补、驱动程序更新或软件安装.
ParameterStore(p.
229)使用ParameterStore集中管理全局配置设置.
使用ParameterStore通过AWSKMS加密和管理密钥(p.
247).
将ParameterStore与ECS任务定义结合使用来存储密钥.
PatchManager(p.
206)使用补丁管理器大规模地推出补丁,并在您的实例中增加队列合规可见性.

华纳云-618大促3折起,18元/月买CN2 GIA 2M 香港云,物理机高防同享,10M带宽独享三网直连,无限流量!

官方网站:点击访问华纳云活动官网活动方案:一、香港云服务器此次推出八种配置的香港云服务器,满足不同行业不同业务规模的客户需求,同时每种配置的云服务都有不同的带宽选择,灵活性更高,可用性更强,性价比更优质。配置带宽月付6折季付5.5折半年付5折年付4.5折2年付4折3年付3折购买1H1G2M/99180324576648直达购买5M/17331556710081134直达购买2H2G2M892444...

宝塔面板企业版和专业版618年中活动 永久授权仅1888元+

我们一般的站长或者企业服务器配置WEB环境会用到免费版本的宝塔面板。但是如果我们需要较多的付费插件扩展,或者是有需要企业功能应用的,短期来说我们可能选择按件按月付费的比较好,但是如果我们长期使用的话,有些网友认为选择宝塔面板企业版或者专业版是比较划算的。这样在年中大促618的时候,我们也可以看到宝塔面板也有发布促销活动。企业版年付899元,专业版永久授权1888元起步。对于有需要的网友来说,还是值...

久久网云-目前最便宜的国内,香港,美国,日本VPS云服务器19.9元/月起,三网CN2,2天内不满意可以更换其他机房机器,IP免费更换!。

久久网云怎么样?久久网云好不好?久久网云是一家成立于2017年的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,久久网云目前提供有美国免费主机、香港主机、韩国服务器、香港服务器、美国云服务器,香港荃湾CN2弹性云服务器。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端部署化简为零,轻松快捷运用云计算!多年云计算领域服务经验,遍布亚太地区的海量节点为...

如何建立自己的网站为你推荐
google地球打不开谷歌地球 打不开怎么办 急啊~ghostxp3GhostXP3电脑公司特别版V499怎么安装公章制作word里如何制作公章?照片转手绘有什么软件可以把相片变成手绘的,不是美图秀秀里面的arm开发板ARM开发板和树莓派有什么区别彩信中心移动的短信中心号码是多少天天酷跑刷金币如何使用八门神器给天天酷跑刷钻刷金币开机滚动条如何关闭开机滚动条?怎么点亮qq空间图标怎样点亮qq空间的图标srv记录如何验证是否为域控制器创建了 SRV DNS 记录
老域名全部失效请记好新域名 php主机 koss payoneer unsplash win8升级win10正式版 12306抢票助手 铁通流量查询 e蜗牛 gspeed 新家坡 nerds 电信虚拟主机 hkt 河南移动梦网 windowssever2008 电信测速器在线测网速 卡巴斯基官方下载 日本小学生 screen 更多