AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

修补 Linux AMI(控制台)

此 Systems Manager Automation 演练介绍如何使用控制台和 Systems Manager AWS-UpdateLinuxAmi 文档通过指定的最新版本程序包自动修补 Linux AMI。您可以使用此演练更新以下任一 Linux 版本:Ubuntu、CentOS、RHEL、SLES 或 Amazon Linux AMI。AWS-UpdateLinuxAmi 文档也能自动安装其他具体站点相关的程序包和配置。

使用 AWS-UpdateLinuxAmi 文档可以自动完成映像维护任务,而无需使用 JSON 或 YAML 编写工作流程。您可以使用 AWS-UpdateLinuxAmi 文档执行以下类型的任务。

  • 在 Amazon Linux、Red Hat、Ubuntu、SLES 或 Cent OS Amazon 系统映像 (AMI) 上升级所有分发包和 Amazon 软件。这是默认文档行为。

  • 在现有映像上安装 SSM 代理以启用 Systems Manager 功能,例如使用 Run Command 的远程命令执行,或者使用 Inventory 的软件清单收集。

  • 安装其他软件包。

开始前的准备工作

在您开始使用 Automation 文档之前,请先为 Automation 配置角色和 CloudWatch Events (后者可选)。有关更多信息,请参阅 Automation 入门

AWS-UpdateLinuxAmi 文档接受以下输入参数。

参数 类型 描述

SourceAmiId

字符串

(必需)源 AMI ID。

IamInstanceProfileName

字符串

(必需)您在 Automation 入门 中创建的 AWS Identity and Access Management (IAM) 实例配置文件角色的名称。实例配置文件角色为 Automation 提供在您实例上执行操作的权限,例如运行命令或启动和停止服务。Automation 文档仅使用实例配置文件角色的名称。如果您指定 Amazon 资源名称 (ARN),则 Automation 执行失败。

AutomationAssumeRole

字符串

(必需)您在 IAM 中创建的 Automation 入门 服务角色的名称。服务角色 (也称为代入角色) 为 Automation 提供权限,用于代入您的 IAM 角色和代表您执行操作。例如,在 Automation 文档中运行 aws:createImage 操作时,服务角色允许 Automation 创建新的 AMI。对于此参数,必须指定完整的 ARN。

TargetAmiName

字符串

(可选)新 AMI 在创建之后的名称。默认名称是系统生成的字符串,其中包括源 AMI ID 以及创建时间和日期。

InstanceType

字符串

(可选) 启动作为工作区主机的实例的类型。实例类型因区域而异。默认类型为 t2.micro。

PreUpdateScript

字符串

(可选) 在应用更新前要运行的脚本的 URL。默认值 (\"none\") 不运行脚本。

PostUpdateScript

字符串

(可选) 在应用程序包更新后要运行的脚本的 URL。默认值 (\"none\") 不运行脚本。

IncludePackages

字符串

(可选) 仅更新这些指定的程序包。默认值 (\"all\") 将应用所有可用的更新。

ExcludePackages

字符串

(可选) 在所有情况下从更新中排除的程序包的名称。默认值 (\"none\") 不排除任何程序包。

Automation 步骤

默认情况下 AWS-UpdateLinuxAmi 文档包括以下 Automation 步骤。

步骤 1:launchInstance (aws:runInstances 操作)

此步骤使用 Amazon EC2 用户数据和 IAM 实例配置文件角色启动实例。用户数据根据操作系统安装相应的 SSM 代理。安装 SSM 代理后,您可以利用 Systems Manager 功能,例如 Run Command、State Manager 和 Inventory。

步骤 2:updateOSSoftware (aws:runCommand 操作)

此步骤在已启动实例上运行以下命令:

  • 从 Amazon S3 下载更新脚本。

  • 运行可选的更新前脚本。

  • 更新分发程序包和 Amazon 软件。

  • 运行可选的更新后脚本。

执行日志存储在 /tmp 文件夹中,供用户以后查看。

如果您希望升级特定程序包集,则可以使用 IncludePackages 参数提供列表。在提供时,系统仅尝试更新这些程序包及其依赖项。不执行任何其他更新。默认情况下,如果未指定包含 程序包,则程序将更新所有可用程序包。

如果要在升级中排除特定程序包集,则可以向 ExcludePackages 参数提供列表。如果提供,这些程序包保持其当前版本,与任何其他指定的选项无关。默认情况下,在未指定任何排除 程序包时,将不排除程序包。

步骤 3:stopInstance (aws:changeInstanceState 操作)

此步骤停止已更新实例。

步骤 4:createImage (aws:createImage 操作)

此步骤创建一个新 AMI,带有可将其链接到源 ID 和创建时间的描述性名称。例如:“EC2 Automation 在 {{global:DATE_TIME}} 从 {{SourceAmiId}} 生成了 AMI”,其中 DATE_TIME 和 SourceID 表示 Automation 变量。

步骤 5: terminateInstance (aws:changeInstanceState 操作)

此步骤通过终止正在运行的实例来清除执行过程。

输出

执行过程返回新的 AMI ID 作为输出。

注意

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

VPC not defined 400

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

根据您使用的服务 (AWS Systems Manager 或 Amazon EC2 Systems Manager),请采用下列过程之一:

使用 Automation 创建经过修补的 AMI (AWS Systems Manager)

  1. https://console.www.amazonaws.cn/systems-manager/ 上打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,选择 Automation

    -或者-

    如果 AWS Systems Manager 主页首先打开,请选择菜单图标 ( ) 以打开导航窗格,然后选择 Automation

  3. 选择 Execute automation (执行自动化)

  4. 自动化文档列表中,选择 AWS-UpdateLinuxAmi

  5. Document details (文档详细信息) 部分,验证 Document version (文档版本) 是否设置为 Default version at runtime (运行时的默认版本)

  6. 选择 Next

  7. Execution Mode (执行模式) 部分,选择 Simple Execution (简单执行)

  8. Input parameters 部分,输入在准备工作部分收集的信息。

  9. 选择 Execute (执行)。控制台将显示 Automation 执行的状态。

使用 Automation 创建经过修补的 AMI (Amazon EC2 Systems Manager)

  1. 打开 Amazon EC2 控制台,展开导航窗格中的Systems Manager服务,然后选择自动化

  2. 选择 Run automation

  3. Document name 列表中,选择 AWS-UpdateLinuxAmi

  4. Version 列表中,选择 1

  5. Input parameters 部分,输入在准备工作部分收集的信息。

  6. 选择 Run automation。系统随即会显示自动化执行 ID。选择 OK

  7. 在执行列表中,选择您刚才运行的执行,然后选择步骤选项卡。该选项卡将显示工作流操作的状态。更新过程可能需要 30 分钟或者更久。

在工作流完成后,请从更新后的 AMI 启动测试实例以验证更改。

注意

如果工作流有任何步骤失败,则 Automation Executions 页面上会列出有关失败的信息。工作流设计为在成功完成所有任务后终止临时实例。如果步骤失败,系统可能不会终止实例。因此,如果某个步骤失败,请手动终止临时实例。