

• Amazon Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 更新 Windows Server AMI
<a name="automation-tutorial-update-patch-windows-ami"></a>

使用 `AWS-UpdateWindowsAmi` 运行手册可以在 Amazon Windows Amazon Machine Image (AMI) 上自动完成映像维护任务，而无需使用 JSON 或 YAML 编写工作流程。本运行手册在 Windows Server 2008 R2 或更高版本中受支持。您可以使用 `AWS-UpdateWindowsAmi` 运行手册执行以下类型的任务。
+ 安装所有 Windows 更新并升级 Amazon 软件 (默认行为)。
+ 安装特定 Windows 更新并升级 Amazon 软件。
+ 使用您的脚本自定义 AMI。

**开始前的准备工作**  
在开始使用运行手册之前，[为自动化配置角色](automation-setup-iam.md)以添加 `iam:PassRole` 策略，此策略引用要授予其访问权限的实例配置文件的 ARN。也可选择为 Automation（Amazon Systems Manager 中的一项工具）配置 Amazon EventBridge。有关更多信息，请参阅 [设置自动化](automation-setup.md)。此演练还要求您指定 Amazon Identity and Access Management (IAM) 实例配置文件的名称。有关创建 IAM 实例配置文件的更多信息，请参阅[配置 Systems Manager 所需的实例权限](setup-instance-permissions.md)。

**注意**  
Amazon Systems Manager SSM Agent 的更新通常会在不同时间向不同区域推广。自定义或更新 AMI 时，请仅使用为您工作所在的区域发布的源 AMI。这将确保您使用该区域发布的最新 SSM Agent并避免兼容性问题。

`AWS-UpdateWindowsAmi` 运行手册接受以下输入参数。


****  

| 参数 | 类型 | 说明 | 
| --- | --- | --- | 
|  SourceAmiId  |  字符串  |  （必需）源 AMI ID。您可以使用 Systems Manager Parameter Store *公有*参数自动引用最新的 Windows Server AMI ID。有关更多信息，请参阅[使用 Amazon Systems ManagerParameter Store 查询最新的 Windows AMI ID](https://www.amazonaws.cn/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/)。  | 
|  SubnetId  |  字符串  |  （可选）要在其中启动临时实例的子网。如果您已删除默认 VPC，则必须为此参数指定值。  | 
|  IamInstanceProfileName  |  字符串  |  （必需）您在[配置 Systems Manager 所需的实例权限](setup-instance-permissions.md)中创建的 IAM 实例配置文件角色的名称。实例配置文件角色为自动化提供在您实例上执行操作的权限，例如运行命令或启动和停止服务。运行手册仅使用实例配置文件角色的名称。  | 
|  AutomationAssumeRole  |  字符串  |  （必需）您在 [设置自动化](automation-setup.md) 中创建的 IAM 服务角色的名称。服务角色（也称为担任角色）为自动化提供权限，用于担任您的 IAM 角色和代表您执行操作。例如，在运行手册中运行 `aws:createImage` 操作时，服务角色允许自动化创建新的 AMI。对于此参数，必须指定完整的 ARN。  | 
|  TargetAmiName  |  字符串  |  （可选）新 AMI 在创建之后的名称。默认名称是系统生成的字符串，其中包括源 AMI ID 以及创建时间和日期。  | 
|  InstanceType  |  字符串  |  (可选) 启动作为工作区主机的实例的类型。实例类型因区域而异。默认类型为 t2.medium。  | 
|  PreUpdateScript  |  字符串  |  (可选) 要在更新 AMI 之前运行的脚本。在运行手册中或在运行时输入脚本作为参数。  | 
|  PostUpdateScript  |  字符串  |  （可选）要在更新 AMI 之后运行的脚本。在运行手册中或在运行时输入脚本作为参数。  | 
|  IncludeKbs  |  字符串  |  (可选) 指定一个或多个要包括的 Microsoft 知识库 (KB) 文章 ID。可以使用逗号分隔值安装多个 ID。有效格式：KB9876543 或 9876543。  | 
|  ExcludeKbs  |  字符串  |  (可选) 指定一个或多个要排除的 Microsoft 知识库 (KB) 文章 ID。可以使用逗号分隔值排除多个 ID。有效格式：KB9876543 或 9876543。  | 
|  类别  |  字符串  |  (可选) 指定一个或多个更新类别。可以使用逗号分隔值筛选类别。选项：关键更新、安全更新、定义更新、Update Rollup、Service Pack、工具、更新或驱动程序。有效格式包括单个条目，例如：关键更新。或者，可以指定逗号分隔列表：关键更新,安全更新,定义更新。  | 
|  SeverityLevels  |  字符串  |  (可选) 指定一个或多个与更新关联的 MSRC 严重性级别。可以使用逗号分隔值筛选严重性级别。选项：关键、重要、低、中或未指定。有效格式包括单个条目，例如：关键。或者，可以指定逗号分隔列表：关键,重要,低。  | 

**自动化步骤**  
默认情况下，`AWS-UpdateWindowsAmi` 运行手册包括以下步骤。

**步骤 1：launchInstance（`aws:runInstances` 操作）**  
此步骤以从指定的 `SourceAmiID` 启动一个具有 IAM 实例配置文件角色的实例。

**步骤 2：runPreUpdateScript（`aws:runCommand` 操作）**  
此步骤可让您以字符串形式指定一个在安装更新前运行的脚本。

**步骤 3：更新 EC2Config（`aws:runCommand` 操作）**  
此步骤使用 `AWS-InstallPowerShellModule` 运行手册下载 Amazon 共有 PowerShell 模块。Systems Manager 使用 SHA-256 哈希验证模块的完整性。然后，Systems Manager 将检查操作系统，以确定是更新 EC2Config 还是 EC2Launch。EC2Config 通过 Windows Server 2012 R2 在 Windows Server 2008 R2 上运行。EC2Launch 在 Windows Server 2016 上运行。

**步骤 4：updateSSMAgent（`aws:runCommand`操作）**  
此步骤通过使用 `AWS-UpdateSSMAgent` 运行手册更新 SSM Agent。

**步骤 5：updateAWSPVDriver（`aws:runCommand`操作）**  
此步骤通过使用 `AWS-ConfigureAWSPackage` 运行手册更新 Amazon PV 驱动程序。

**步骤 6：updateAwsEnaNetworkDriver（`aws:runCommand`操作）**  
此步骤通过使用 `AWS-ConfigureAWSPackage` 运行手册更新 Amazon ENA 网络驱动程序。

**步骤 7：installWindowsUpdates（`aws:runCommand` 操作） **  
此步骤使用 `AWS-InstallWindowsUpdates` 运行手册安装 Windows 更新。默认情况下，Systems Manager 搜索并安装任何缺失的更新。可以通过指定下列参数之一更改默认行为：`IncludeKbs`、`ExcludeKbs`、`Categories` 或 `SeverityLevels`。

**步骤 8：runPostUpdateScript（`aws:runCommand` 操作)**  
此步骤可让您以字符串形式指定一个在安装更新后运行的脚本。

**步骤 9：runSysprepGeneralize（`aws:runCommand` 操作) **  
此步骤使用 `AWS-InstallPowerShellModule` 运行手册下载 Amazon 共有 PowerShell 模块。Systems Manager 使用 SHA-256 哈希验证模块的完整性。然后 Systems Manager 使用 Amazon 支持的方法针对 EC2Launch (Windows Server 2016) 或 EC2Config（Windows Server 2008 R2 到 2012 R2）运行 sysprep。

**步骤 10：stopInstance（`aws:changeInstanceState` 操作） **  
此步骤停止已更新实例。

**步骤 11：createImage（`aws:createImage` 操作） **  
此步骤创建一个新 AMI，带有可将其链接到源 ID 和创建时间的描述性名称。例如：“EC2自动化在 \$1\$1global:DATE\$1TIME\$1\$1 从 \$1\$1SourceAmiId\$1\$1 生成了 AMI”，其中 DATE\$1TIME 和 SourceID 表示自动化变量。

**步骤 12：TerminateInstance（`aws:changeInstanceState` 操作） **  
此步骤通过终止正在运行的实例来清除自动化。

**Output**  
此部分可让您将各个步骤的输出或任何参数的值指定为自动化输出。默认情况下，输出是由执行创建的已更新 Windows AMI 的 ID。

**注意**  
默认情况下，当自动化运行 `AWS-UpdateWindowsAmi` 运行手册并创建一个临时实例时，系统会使用默认 VPC (172.30.0.0/16)。如果您删除了默认 VPC，会收到以下错误：  
VPC not defined 400  
要解决此问题，您必须复制 `AWS-UpdateWindowsAmi` 运行手册并指定子网 ID。有关更多信息，请参阅 [VPC not defined 400](automation-troubleshooting.md#automation-trbl-common-vpc)。

**使用自动化创建经过修补的 Windows AMI**

1. 安装并配置 Amazon Command Line Interface（Amazon CLI）（如果尚未执行该操作）。

   有关信息，请参阅[安装或更新 Amazon CLI 的最新版本](https://docs.amazonaws.cn/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令来运行 `AWS-UpdateWindowsAmi` 运行手册。将每个*示例资源占位符*替换为您自己的信息。以下示例命令使用的是最新的 Amazon EC2 AMI，以最大限度减少需应用的补丁数量。如果您多次运行此命令，则必须为 `targetAMIname` 指定唯一的值。AMI 名称必须唯一。

   ```
   aws ssm start-automation-execution \
       --document-name="AWS-UpdateWindowsAmi" \
       --parameters SourceAmiId='AMI ID',IamInstanceProfileName='IAM instance profile',AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'
   ```

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

   ```
   {
       "AutomationExecutionId": "automation execution ID"
   }
   ```

1. 要使用 Amazon CLI 查看自动化，请运行以下命令：

   ```
   aws ssm describe-automation-executions
   ```

1. 要查看有关自动化进程的详细信息，请运行以下命令。

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

**注意**  
根据应用的补丁数量，在该示例自动化中运行的 Windows 修补过程可能需要 30 分钟或更长时间才能完成。