演练:更新应用程序依赖关系、修补实例并执行特定于应用程序的运行状况检查 - Amazon Web Services Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

演练:更新应用程序依赖关系、修补实例并执行特定于应用程序的运行状况检查

在许多情况下,托管实例在使用最新软件更新修补后必须重新启动。但是,在没有安全措施的情况下重新启动生产中的实例可能会导致几个问题,例如触发警报、记录不正确的指标数据以及中断数据同步。

本演练将展示如何通过使用Amazon Web Services Systems Manager文档(SSM 文档)AWS-RunPatchBaselineWithHooks来实现复杂的多步骤修补操作,该操作可完成以下操作:

  1. 防止新的连接到应用程序

  2. 安装操作系统更新

  3. 更新应用程序的软件包依赖关系

  4. 重启系统

  5. 执行特定于应用程序的运行状况检查

在此示例中,我们以这种方式设置了我们的基础架构:

  • 目标虚拟机在 Systems Manager 中注册为托管实例。

  • Iptables用作本地防火墙。

  • 实例上托管的应用程序正在端口 443 上运行。

  • 实例上托管的应用程序是nodeJS应用程序.

  • 实例上托管的应用程序由 pm2 进程管理器管理。

  • 应用程序已经具有指定的运行状况检查终端节点。

  • 应用程序的运行状况检查终结点不需要最终用户身份验证。终端节点允许进行运行状况检查,以满足组织在建立可用性方面的要求。(在您的环境中,只需确定nodeJS应用程序正在运行,并且能够侦听请求。 在其他情况下,您可能还需要验证是否已建立到缓存图层或数据库图层的连接。)

本演练中的示例仅用于演示目的,并不意味着按原样实施到生产环境中。另外,请记住,修补程序管理器的生命周期挂钩功能(Systems Manager 的一种功能)AWS-RunPatchBaselineWithHooks文档可以支持许多其他方案。下面是几个示例。

  • 在修补之前停止指标报告代理,并在实例重新启动后重新启动该代理。

  • 在进行修补之前,将实例从 CRM 或 PCS 群集分离,并在实例重新启动后重新连接。

  • 更新第三方软件(例如,Java、Tomcat、Adobe 应用程序等)Windows Server计算机在应用操作系统 (OS) 更新之后,但在实例重新启动之前。

更新应用程序依赖关系、修补实例并执行特定于应用程序的运行状况检查

  1. 使用以下内容创建名为的 SSM 文档,并将其命名为的 SSM 文档NodeJSAppPrePatch。Replace您的应用程序替代您的应用程序的名称。

    此脚本会立即阻止新的传入请求,并在开始修补操作之前为已经活动的请求提供 5 秒钟。对于sleep选项,请指定一个比传入请求完成通常所需的秒数大的秒数。

    # exit on error set -e # set up rule to block incoming traffic iptables -I INPUT -j DROP -p tcp --syn --destination-port 443 || exit 1 # wait for current connections to end. Set timeout appropriate to your application's latency sleep 5 # Stop your application pm2 stop your_application

    有关创建 SSM 文档的信息,请参阅创建 SSM 文档

  2. 为安装后脚本创建包含以下内容的另一个 SSM 文档,以更新应用程序依赖关系并将其命名为NodeJSAppPostPatch。Replace/自的/应用程序/路径与您的应用程序的路径。

    cd /your/application/path npm update # you can use npm-check-updates if you want to upgrade major versions
  3. 创建另一个 SSM 文档,其中包含以下内容onExit脚本使应用程序备份并执行运行状况检查。命名该 SSM 文档NodeJSAppOnExitPatch。Replace您的应用程序替代您的应用程序的名称。

    # exit on error set -e # restart nodeJs application pm2 start your_application # sleep while your application starts and to allow for a crash sleep 10 # check with pm2 to see if your application is running pm2 pid your_application # re-enable incoming connections iptables -D INPUT -j DROP -p tcp --syn --destination-port # perform health check /usr/bin/curl -m 10 -vk -A "" http://localhost:443/health-check || exit 1
  4. 在状态管理器中创建关联,具有Amazon Web Services Systems Manager,通过执行以下步骤发出操作:

    1. 打开Amazon Web Services Systems Manager控制台位于https://console.aws.amazon.com/systems-manager/

    2. 在导航窗格中,选择状态管理器,然后选择创建关联

    3. 适用于名称提供一个名称,可帮助标识关联的目的。

    4. 文档列表中,选择AWS-RunPatchBaselineWithHooks

    5. 适用于运算中,选择安装

    6. (可选)快照 ID,提供您生成的 GUID,以帮助加快操作速度并确保一致性。GUID 值可以像00000000-0000-0000-0000-111122223333

    7. 适用于安装前挂钩文档名称输入NodeJSAppPrePatch

    8. 适用于安装后挂钩文档名称输入NodeJSAppPostPatch

    9. 适用于在现有文档名称,输入NodeJSAppOnExitPatch

  5. 适用于目标,通过指定实例标签、手动选择实例、选择资源组或选择所有实例来标识您的实例。

  6. 适用于指定时间表中,指定运行关联的频率。例如,每周一次修补是一个常见的节奏。

  7. 速率控制部分中,选择用于控制如何在多个实例上运行关联的选项。确保一次只更新一部分实例。否则,您的所有或大部分车队都可以同时离线。有关使用速率控制的更多信息,请参阅关于 State Manager 关联中的目标和速率控制

  8. (可选)对于 Output options (输出选项),要将命令输出保存到文件,请选中 Enable writing to S3 (允许写入 S3) 框。在框中输入存储桶和前缀(文件夹)名称。

    注意

    授予将数据写入 S3 存储桶的能力的 S3 权限是分配给实例的实例配置文件的权限,而不是执行此任务的 IAM 用户的权限。有关更多信息,请参阅 。为 Systems Manager 创建 IAM 实例配置文件。此外,如果指定的 S3 存储桶位于不同的Amazon Web Services 账户,请确保与该实例关联的实例配置文件具有写入该存储桶的必要权限。

  9. 选择创建关联