Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

创建 Automation 文档

本演练将介绍如何创建和执行自定义 Automation 文档。在您运行 Automation 后,系统会执行以下任务。

  • 从指定的 AMI 启动 Windows 实例。

  • 使用 Run Command 执行命令以将 Windows 更新应用于实例。

  • 停止实例。

  • 创建新的 Windows AMI。

  • 为 Windows AMI 添加标签。

  • 终止原始实例。

Automation 示例文档

Automation 执行以 JSON 格式写入的 Systems Manager 自动化文档。自动化文档包括在工作流执行期间要执行的操作。有关 Systems Manager 文档的更多信息,请参阅 Systems Manager 文档。有关您可以添加到文档的操作的信息,请参阅 Systems Manager Automation 操作

下表列出了支持的操作:

  • aws:runInstance:启动属于给定 AMI ID 的一个或多个实例。

  • aws:runCommand:远程命令执行。执行 SSM Run Command 文档。

  • aws:invokeLambdaFunction:使您能够在自动化工作流中运行外部工作线程函数。

  • aws:changeInstanceState:将实例的状态更改为stoppedterminatedrunning

  • aws:createImage:根据正在运行的实例创建 AMI。

  • aws:deleteImage:删除 AMI。

  • aws:createTags:为 EC2 和 Systems Manager 资源添加标签。

通过执行以下步骤,您可以在示例 Automation 文档中查看这些选项。

注意

默认情况下,当 Automation 运行 AWS-UpdateWindowsAmi 文档并创建一个临时实例时,系统会使用默认 VPC (172.30.0.0/16)。如果您删除了默认 VPC,会收到以下错误:

VPC not defined 400

要解决此问题,您必须复制 AWS-UpdateWindowsAmi 文档并指定子网 ID。有关更多信息,请参阅 VPC not defined 400

使用 Automation 创建经过修补的 AMI

  1. 收集以下信息。您将在此过程的稍后部分指定此信息。

  2. 将以下示例文档复制到一个文本编辑器 (如 Notepad) 中。将 assumeRole 的值和 IamInstanceProfileName 的值分别更改为您之前为 Automation 创建 IAM 角色时所创建的角色 ARN 和角色名称。将该文档以 patchWindowsAmi.json 格式保存在本地硬盘上。

    Copy
    { "description":"Systems Manager Automation Demo - Patch and Create a New AMI", "schemaVersion":"0.3", "assumeRole":"the role ARN you created", "parameters":{ "sourceAMIid":{ "type":"String", "description":"AMI to patch" }, "targetAMIname":{ "type":"String", "description":"Name of new AMI", "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":"the name of the IAM role you created" } }, { "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":"AMI created by EC2 Automation" } }, { "name":"createTags", "action":"aws:createTags", "maxAttempts":1, "onFailure":"Continue", "inputs":{ "ResourceType":"EC2", "ResourceIds":[ "{{createImage.ImageId}}" ], "Tags":[ { "Key": "Generated By Automation", "Value": "{{automation:EXECUTION_ID}}" }, { "Key": "From Source AMI", "Value": "{{sourceAMIid}}" } ] } }, { "name":"terminateInstance", "action":"aws:changeInstanceState", "maxAttempts":1, "onFailure":"Continue", "inputs":{ "InstanceIds":[ "{{ startInstances.InstanceIds }}" ], "DesiredState":"terminated" } } ], "outputs":[ "createImage.ImageId" ] }
  3. 将 AWS CLI 下载到本地计算机上。

  4. 编辑以下命令,并指定 patchWindowsAmi.json 文件在本地计算机上的路径。执行该命令,以创建必需的 Automation 文档。

    Copy
    aws ssm create-document --name "patchWindowsAmi" --content file:///Users/test-user/Documents/patchWindowsAmi.json --document-type Automation

    系统将返回有关命令进程的信息。

    Copy
    { "DocumentDescription": { "Status": "Creating", "Hash": "bce98f80b89668b092cd094d2f2895f57e40942bcc1598d85338dc9516b0b7f1", "Name": "test", "Parameters": [ { "Type": "String", "Name": "sourceAMIid", "Description": "AMI to patch" }, { "DefaultValue": "patchedAMI-{{global:DATE_TIME}}", "Type": "String", "Name": "targetAMIname", "Description": "Name of new AMI" } ], "DocumentType": "Automation", "PlatformTypes": [ "Windows", "Linux" ], "DocumentVersion": "1", "HashType": "Sha256", "CreatedDate": 1488303738.572, "Owner": "12345678901", "SchemaVersion": "0.3", "DefaultVersion": "1", "LatestVersion": "1", "Description": "Systems Manager Automation Demo - Patch and Create a New AMI" } }
  5. 执行以下命令以查看您可以访问的文件列表。

    Copy
    aws ssm list-documents --document-filter-list key=Owner,value=Self

    系统将返回类似于以下内容的信息:

    Copy
    { "DocumentIdentifiers":[ { "Name":" patchWindowsAmi", "PlatformTypes": [ ], "DocumentVersion": "5", "DocumentType": "Automation", "Owner": "12345678901", "SchemaVersion": "0.3" } ] }
  6. 执行以下命令以查看有关 patchWindowsAmi 文档的详细信息。

    Copy
    aws ssm describe-document --name patchWindowsAmi

    系统将返回类似于以下内容的信息:

    Copy
    { "Document": { "Status": "Active", "Hash": "99d5b2e33571a6bb52c629283bca0a164026cd201876adf0a76de16766fb98ac", "Name": "patchWindowsAmi", "Parameters": [ { "DefaultValue": "ami-3f0c4628", "Type": "String", "Name": "sourceAMIid", "Description": "AMI to patch" }, { "DefaultValue": "patchedAMI-{{global:DATE_TIME}}", "Type": "String", "Name": "targetAMIname", "Description": "Name of new AMI" } ], "DocumentType": "Automation", "PlatformTypes": [ ], "DocumentVersion": "5", "HashType": "Sha256", "CreatedDate": 1478904417.477, "Owner": "12345678901", "SchemaVersion": "0.3", "DefaultVersion": "5", "LatestVersion": "5", "Description": "Automation Demo - Patch and Create a New AMI" } }
  7. 执行以下命令以运行 patchWindowsAmi 文档和 Automation 工作流。该命令采用两个输入参数:要修补的 AMI 的 ID 和新 AMI 的名称。以下示例命令使用的是最新的 EC2 AMI,以最大限度减少需应用的补丁数量。如果您多次运行此命令,则必须为 targetAMIname 指定唯一的值。AMI 名称必须是独一无二的。

    Copy
    aws ssm start-automation-execution --document-name="patchWindowsAmi" --parameters sourceAMIid="ami-bd3ba0aa"

    该命令将会返回执行 ID。请将该 ID 复制到剪贴板。您将使用该 ID 查看工作流的状态。

    Copy
    { "AutomationExecutionId": "ID" }

    您可以在 EC2 控制台中监控工作流的状态。请检查控制台以确认是否正在启动新实例。实例启动完成后,您可以确认已执行 Run Command 操作。Run Command 执行完成之后,您应该会在 AMI 映像列表中看到新 AMI。

  8. 要使用 CLI 查看工作流的执行情况,请执行以下命令:

    Copy
    aws ssm describe-automation-executions
  9. 要查看有关执行进程的详细信息,请执行以下命令。

    Copy
    aws ssm get-automation-execution --automation-execution-id ID

注意

根据应用的补丁数量,在该示例工作流中执行的 Windows 修补过程可能需要 30 分钟或更长时间才能完成。

有关如何使用 Automation 的更多示例,包括在您刚完成的演练中构建的示例,请参阅 Systems Manager Automation 示例