亚马逊AWS官方博客

使用 AWS Support 自助服务运行手册 (SAW) 排查 AWS Systems Manager 中的托管节点问题

本文为 2024 年 9 月 18 日发表的 re:Post Troubleshooting managed node issues in Systems Manager with SAW 的中文译文版本。如有差异,以英文原文版本为准。

本文介绍了一个使用 AWS Support 自助服务运行手册 (Support Automation Workflow,简称 SAW) 监控和自动分析 AWS Systems Manager 托管节点问题的示例架构。

引言

作为 AWS Support 技术支持工程师,我们经常接到客户反映在使用 AWS Systems Manager 管理 Amazon Elastic Compute Cloud (Amazon EC2) 实例时遇到的问题,例如,EC2 实例未在 AWS Systems Manager 中注册为托管节点。通常要解决这些问题,需要检查安全组、网络设置和权限等,这些步驟可能非常耗时。

为了简化相关问题的排查流程,AWS Support 创建了自助服务运行手册 (SAW) 来协助客户自主对 AWS 资源的常见问题进行排查、诊断和修复。SAW 框架通过消除通常需要的手动操作,能够帮助您缩短故障排查所需的时间。

在本文中,您将了解如何使用 SAW 自动化故障排查过程。同时,您还将学习如何利用 SAW 配置架构,以监控和自动分析 AWS Systems Manager 中的托管节点问题。

SAW 解决流程概述

本解决方案的第一部分介绍了如何使用 SAW 解决 EC2 实例未在 AWS Systems Manager 中注册为托管节点的问题。第二部分介绍了如何配置架构以自动化故障排除过程,从而加速问题解决。

1. 使用 SAW 确定根本原因

按照以下步骤使用 SAW 确定 AWS Systems Manager 未显示 Amazon EC2 托管实例的原因:

  1. 使用 AWSSupport-TroubleshootManagedInstance 运行手册。更多信息请参考 re:Post 为什么我的 EC2 实例在 Systems Manager 中未显示为托管节点或显示“连接丢失”状态?
  2. 运行完成后,通过查看 Outputs 部分获取详细结果。例如,如果问题是由于 AWS Identity and Access Management (IAM) 实例配置文件缺少所需的权限而导致的,则 Outputs 部分将显示以下详细信息:
  3. 修复从 Outputs 部分识别的任何问题。例如,要修复上述权限不足的问题,您需要确保将所需的权限添加到 IAM 实例配置文件。然后,可通过执行 AWS Command Line Interface (AWS CLI) 命令describe-instance-information,来检查 EC2 实例是否在 AWS Systems Manager 中注册为托管节点:
    aws ssm describe-instance-information --filters "Key=InstanceIds,Values=${example-instance}"
    PowerShell

    请将上述命令中的 example-instance 替换为您实际 EC2 实例的 ID。

    注意:如果您在执行 AWS CLI 命令时遇到错误,请确保使用的是最新版本的 AWS CLI。如果成功执行命令并检索到实例的详细信息,则表示该实例已在 AWS Systems Manager 中注册为托管节点。

2. 使用 SAW 自动检测问题

您可以配置架构以使用 SAW 自动检测 AWS Systems Manager 托管节点的问题并确定根本原因。在此之前,请确保满足以下先决条件:

  • 您在本地开发工作站上安装并配置了 AWS SAM CLI
  • 您已激活通知设置。

您可以通过以下方式之一激活通知设置:

整合 Slack 使用构建自动化工作流程

如果您采用 Slack 整合 SAW 检查结果报告通知,您可以按照以下步骤设置自定义变量:

  1. 选择 Starts when an app or service sends a web request 旁边的 Edit
  2. Set up variables 下,选择 Add Variable
  3. 对于 Key,输入 main。对于 Data type,输入 text。然后选择 Save
  4. 选择 Add Variable
  5. 对于 Key输入 thread。对于 Data type输入 text。然后选择 Save
  6. 选择 Send this message to 旁边的 Edit。在 Send a message 页面上,对于 Send this message to;选择您想要接收通知的 Slack 频道。然后选择 Insert a variable。对于 Message text选择 main。然后选择 Save
  7. 选择 Send this message to 旁边的 Edit。在 Send a message 页面上,对于 Send this message to;选择 Message thread。然后选择 Insert a variable。对于 Message text选择 thread。然后选择 Save

要查看本演练的示例代码,请参考 GitHub 网站上的 AWS SAW Monitoring And Automatic Analysis Architecture

下图显示了该解决方案的高层架构。

本架构包括以下组件:

监控:Amazon EventBridge 检测 EC2 实例的启动。在 EventBridge 中,事件模式与 EC2 实例 RUNNING 状态匹配,然后启动 AWS Step Functions 状态机。

# Event pattern
{
  "detail-type": ["EC2 Instance State-change Notification"],
  "source": ["aws.ec2"],
  "detail": {
    "state": ["running"]
  }
}
PowerShell

在启动 EC2 实例后,AWS Systems Manager 代理可能需要最长 5 分钟才能启动完成。因此,状态机在执行分析之前会待机几分钟。

分析:AWS Step Functions 执行以下步骤:

通知:Lambda 函数会设置通知字符串的格式。然后根据您的配置通过 Slack 或电子邮件发送通知。

套用解决方案

这一部分介绍使用 SAW 自动检测托管节点问题的解决方案的步骤。要查看步骤的示例代码,请参考 GitHub 网站上的 aws-samples

  1. 执行以下命令,在 AWS Secrets Manager 中注册 SlackWebHookUrl
    $ export SLACK_WEB_HOOK_URL="YOUR_SLACK_WEB_HOOK_URL"
    $ export SECRET_NAME="YOUR_SECRET_NAME"
    
    $ aws secretsmanager create-secret --name ${SECRET_NAME} --secret-string ${SLACK_WEB_HOOK_URL}
    
    PowerShell
  2. 将仓库复制到本地开发工作站:
    $ git clone https://github.com/aws-samples/introducing-monitoring-and-automatic-analysis-architecture-using-aws-saw.git
    $ cd introducing-monitoring-and-automatic-analysis-architecture-using-aws-saw/
    
    PowerShell
  3. 构建并部署在 AWS SAM 模板 template.yaml 中定义的 Lambda 函数、EventBridge 规则、Step Functions 状态机和相关的 IAM 角色。
    注意:在部署向导中输入参数,例如 Amazon SNS 主题的 ARN、Secrets Manager 中的 SECRET_NAME,或者两者。如果您使用 AWS Key Management System (AWS KMS) 加密了 SNS 主题,则需要指定 AWS KMS 密钥的 ARN 作为参数。

    $ sam build
    $ sam deploy --guided
    Configuring SAM deploy
    ======================
    Looking for config file [samconfig.toml] : Found
    Reading default arguments : Success
    Setting default arguments for 'sam deploy'
    =========================================
    Stack Name [sam-app]:
    AWS Region [ap-northeast-1]:
    Parameter SecretsManagerNameForSlackWebHookUrl [SLACK_WEB_HOOK_URL]:
    Parameter TopicArn [arn:aws:sns:ap-northeast-1:<ACCOUNT_ID>:kms-topic]:
    Parameter TopicKmsKeyArn [arn:aws:kms:ap-northeast-1:<ACCOUNT_ID>:key/<ID>]:
    PowerShell
  1. 为了测试架构是否正常工作,本文通过启动一个 EC2 实例,并在关联的 IAM 实例配置策略中移除 AWS Systems Manager 相关的权限。由于权限不足,AWS Systems Manager 将无法将此 EC2 实例注册为托管节点。
  2. 根据您的通知配置,检查是否在 Slack 或电子邮件中收到 SAW 分析结果,如下图所示。在这个示例中,SAW 能够自动检测到错误,并显示该问题是由于 IAM 实例配置文件权限不足造成的。要解决该问题,请参考分析结果中显示的文档链接。

清理示例资源

完成以下步骤来删除您为本教程创建的资源:

这些步骤可以帮助您避免在完成实验后继续产生 AWS 资源费用。删除这些资源后,您创建的示例环境将不再可用。

总结

在本文中,您学习了如何使用 SAW 排查 AWS Systems Manager 未将 EC2 实例注册为托管节点的原因。您可以使用本文介绍的示例架构来监控您的 EC2 实例,并在实例未能正常注册时自动调用 SAW 运行手册。这可以帮助您保持对基础设施的可见性,并协助您进行自动化排查。

本文讨论的技术可以帮助您通过自动化的问题检测和修复来实现,在 AWS Systems Manager 中保持 EC2 实例的准确视图。

如需了解更多信息,请参见 使用 AWS Support 自助服务运行手册 和 AWS Support 自动化工作流 (SAW)

AWS Support 技术支持工程师和技术客户经理 (TAM) 可以为您提供一般指导、最佳实践、故障排除和运营支持。要了解我们的 Support 计划和产品的更多详情,请访问 AWS Support 相关网页。

本篇作者

Toshihiro Furuno

亚马逊云科技资深技术支持工程师,热衷于帮助客户使用容器和持续集成/持续交付 (CI/CD)。工作之余,他很享受与儿子们共度的亲子时光。

校译作者

Man Liu

亚马逊云科技 Tech Translator,主要负责管理和优化 AWS 面向客户技术内容的本地化项目,以及与相关团队的合作流程。

Eason Cao

亚马逊云科技资深技术支持工程师,专门研究 AWS 容器解决方案。作为 AWS 容器服务领域的主题专家,致力于帮助客户克服云环境挑战和优化分布式系统。