亚马逊AWS官方博客

使用支持自动化工作流程 (SAW) 诊断 AWS 环境中的常见问题

简介

在 AWS 环境中执行手动排查和解决系统问题可能存在重复性且容易出错。AWS Support 推出了支持自动化工作流程(Support Automation Workflow,简称 SAW),可为 AWS 客户提供自助诊断和问题修复功能。利用 AWS System Manager,SAW 提供了一系列用户友好的精选自动化操作手册,可简化故障排除过程并提供解决步骤。借助 Runbook,您可以快速解决连接问题、诊断权限错误、重置 Amazon EC2 访问权限等等。自动化运行手册(以 AWSSupportAWSPemiumSupport 为前缀)适用于一系列 AWS 服务,包括但不限于 Amazon EC2Amazon Simple Storage Service (Amazon S3)Amazon Elastic Kubernetes Service (EKS),and Amazon Elastic Container Service (ECS)

在本文,您将了解 SAW 如何自动进行故障排除,以便在联系 AWS Support 之前自行诊断 AWS 环境中的常见问题。

什么是支持自动化工作流程(SAW)

在了解支持自动化工作流程(SAW)之前,我们需要了解什么是 AWS System Manager,因为它是 SAW 的基础。AWS Systems Manager 是您的 AWS 应用程序和资源的操作中心。SAW 是在 AWS Systems Manager 自动化服务之上构建的自动化运行手册。这些运行手册可帮助您解决 AWS 资源的常见问题、主动监控和识别网络问题、收集和分析日志等。

AWS 基于技术支持经验开发了 SAW,当客户联系 AWS Support 时,技术支持工程师会解决问题并记录下来。我们观察到问题反复出现的趋势以及改善客户体验的潜力。根据这些见解,我们构建了自定义工具,以实现自助服务,从而更好地为客户提供支持。

利用多年来的经验和最佳实践,SAW 消除了重复且耗时的手动任务,使其成为解决可能出现的各种故障排除问题的实用工具。其中一些用例包括:排除 SSH 连接问题、分析 EC2 磁盘使用情况、诊断 Amazon S3 问题以及在 Amazon EKS 或 Amazon ECS 环境上收集重要日志。在无法通过 SSH 访问 EC2 实例,或者 EC2 实例位于启用了 AWS System Manager VPC 终端节点的私有子网中,这些运行手册可能特别有用。您可能还会发现其他用例,例如:

要查看其他可以帮助解决各种用例的运行手册,您可以访问 AWS Support 自动化工作流程(SAW)登录页面,以获取更多信息。

开始使用支持自动化工作流程

先决条件

在运行 SAW 前,您需要满足以下条件:

  • 确保您使用的 AWS Identity and Access Management(IAM)用户或角色具有访问 Systems Manager 控制台所需的最低权限
  • 足够启动运行手册的 IAM 权限。 有时 IAM 政策可能因运行手册而异,但它需要:
    • ssm:StartAutomationExecution
    • ssm:GetAutomationExecution
    • ssm:SendComman
  • 如果您想访问带有前缀 AWSPremiumSupport 的运行手册,请确保您拥有 AWS 商业或企业支持计划
  • 若您运行的运行手册会对您的 EC2 实例进行操作,您必须在实例安装 AWS Systems Manager 代理(SSM 代理),并通过将 AWS 托管策略 AmazonSSMManagedInstanceCore 附加到与您的 EC2 实例配置文件对应的 IAM 角色。

要使用 AWS Support 自动化工作流程(SAW)运行手册,请导航到 AWS Systems Manager 控制台,选择您打算使用的 AWS 区域。在 Systems Manager 控制台中,在左侧导航菜单的 “共享资源” 部分下查找 “文档”。 在这里,您可以看到亚马逊提供的所有运行手册。

通过搜索文档名称前缀 AWSSupport 的关键字,可以找到 AWS Support 托管的 SAW 运行手册。

让我们从运行手册 AWSSupport-ListEC2Resources 开始。該运行手册可帮助您列出 AWS 账户中的 EC2 相关资源,例如实例、弹性 IP、EBS 卷和自动扩缩组。 要执行运行手册,请选择执行自动化(Execute automation)

您可以在单击状态后查看详细信息或导航到 “自动化” 页面,查看执行结果的输出:

如果您偏好使用 AWS CLI 来启动运行手册,则可以使用 aws ssm start-automation-execution 命令来启动运行手册。 以下是列出所有 AWS 区域的 EC2 资源的示例:

aws ssm start-automation-execution --document-name "AWSSupport-ListEC2Resources" --parameters '{"RegionsToQuery":["All"]}'

输出:

{“automationExecutionID”:“6053b7c6-7ec7-4b9b9b-b52c-04ddd912ede1"} 

要检索自动化的状态,请运行以下命令 (请将 6053b7c6-7ec7-4b9b-b52c-04ddd912ede1 更换为您的自动化执行 ID):

aws ssm describe-automation-executions \
    --filter "Key=ExecutionId,Values=6053b7c6-7ec7-4b9b-b52c-04ddd912ede1"

输出:

{
    "AutomationExecutionMetadataList": [
        {
            "AutomationExecutionId": "6053b7c6-7ec7-4b9b-b52c-04ddd912ede1",
            "DocumentName": "AWSSupport-ListEC2Resources",
            "DocumentVersion": "7",
            "AutomationExecutionStatus": "InProgress",
            "ExecutionStartTime": "2024-03-13T09:53:45.685000+00:00",
            "ExecutedBy": "arn:aws:sts::123456789012:assumed-role/Administrator/Admin",
            "LogFile": "",
            "Outputs": {},
            "Mode": "Auto",
            "CurrentStepName": "listVolumes",
            "CurrentAction": "aws:executeScript",
            "Targets": [],
            "ResolvedTargets": {
                "ParameterValues": [],
                "Truncated": false
            },
            "AutomationType": "Local"
        }
    ]
}

其他用例

解决 SSH 连接问题

AWSSupport-TroubleshootSSH 用于解决常见的 Linux SSH 问题,并且透过 Linux 版 Amazon EC2Rescue 工具(ec2rl)的执行,简化修复 SSH 远程连接到 Linux 计算机的常见问题。无论您的 EC2 实例中是否安装了 AWS Systems Manager 代理,当您无法连接到 EC2 实例时,本运行手册都可用于诊断 SSH 错误。

您可以运行此 SAW 运行手册并选择要分析的 EC2 实例。 如果您的 EC2 实例安装了 SSM 代理,请确保您的实例配置文件具有足够的 IAM 权限并且可以由 AWS 系统管理器进行管理;否则,运行手册可以通过支持离线模式以分离并附加有问题的实例的 EBS 卷来尝试进行修复。

请注意:执行此自动化将停止 EC2 实例,并在尝试任何操作之前创建 AMI。任何存储在实例存储卷中的数据将会丢失。与此同时,如果您并不是绑定弹性 IP 地址(Elastic IP address),关联 EC2 实例的公有 IP 地址将会发生变化。

在离线模式下执行自动化时,这些步骤将创建一个救援 EC2 实例,该实例将尝试通过附加有问题的实例的 EBS 卷来修复错误:

自动化完成后,您可以查看您的执行输出和资源并且再次以 SSH 尝试连结 EC2 实例。例如,以下为使用该自动化修复配置错误的 SSH 文件:

恢复 EC2 访问权限和密码

AWSSupport-ResetAccess 运行手册旨在解决在 Windows 或 Linux 上丢失 EC2 管理权限的访问问题。它使用指定的 EC2 实例上的 EC2Rescue 工具通过 EC2 控制台(Windows)重新启用密码解密,或者生成和添加新的 SSH 密钥对(Linux),您可以点击此运行此自动化流程

如果您丢失了 EC2 Windows 实例的密钥对,此自动化将创建一个启用密码的 AMI,您可以使用该 AMI 启动带有新密钥对的 EC2 实例。与 AWSSupport-TroubleshootSSH 运行手册类似,在执行步骤之前,请确保连接的实例存储卷(如果有)上没有数据保留,因为此自动化会停止实例。 此外,如果您不使用弹性 IP 地址,则停止实例还可能导致公有 IP 地址发生变化要恢复您对 EC2 实例的访问权限,您可以参阅文档中如何在 EC2 实例上重置密码和 SSH 密钥

执行该步骤后,您可以在输出部分中找到后续步骤的说明。本运行手册创建了一个 EC2 实例的备份 AMI 和一个可用于恢复访问权限的 AMI(Password-enabled AMI)。 要从丢失的密钥对中恢复访问权限,您可以使用 Password-enabled AMI 启动带有新密钥对的新 EC2 Windows 实例:

同样,您可以使用相同的运行手册来恢复 EC2 Linux 实例的 SSH 访问权限。 它以安全字符串生成一个新的 SSH 私钥,你可以在 AWS System Manager Parameter Store 中找到该私钥,名为 /ec2rl/openssh/<instance ID>/key,你可以解密并获取私钥:

分析 EC2 磁盘使用情况并扩展可用磁盘空间

如果您是 AWS Business、Enterprise On-Ramp 或企业支持计划的客户,您还可以使用 AWSPremiumSupport-TroubleshootEC2DiskUsage 运行手册简化您的工作,以分析您的 EBS 卷使用情况及自动扩展分区和文件系统。它已在 AWS 区域、AWS 中国区域和 AWS GovCloud(美国)区域推出,并支持 Windows 和 Linux 实例。 简化扩展磁盘空间的过程,请参阅 aws:rePost 上的文章以了解更多详细信息。

例如,如果您的 Linux 文件系统的可用磁盘空间已用完,并且想要对其进行扩展,您首先需要增加 EBS 卷的大小,然后执行多个 Linux 命令行工具来扩展文件系统。 如果您拥有一批 EC2 实例,并且需要扩展磁盘空间,则可能需要花费大量的时间和精力操作。你可以利用自动化运行手册和 aws ssm start-automation-execution 命令或 StartAutomationExecution API 来批量运行自动化。 它不仅可以帮助您诊断磁盘使用情况,还可以修复问题,同时扩展卷及其文件系统。

从 EKS 或 ECS 节点收集重要日志

Amazon EKS 和 Amazon ECS 是 AWS 上的完全托管的容器编排服务。 两者都提供不同的计算选项来运行您的容器化应用程序。 一种典型的计算资源类型是使用 EC2 实例。需要将这些实例添加到集群中,这样该实例才能由 Amazon EKS 或 Amazon ECS 进行管理。

但是,当实例出现需要故障排除的问题时,必须通过运行 EKS 日志收集器ECS 日志收集器脚本收集日志和详细信息(例如 kubelet、ECS 代理和系统配置)来收集重要的系统级信息以识别错误。 但是,在某些情况下,运行脚本和收集日志可能很困难,因为 EC2 实例不提供 SSH 访问或受私有网络配置的限制。

AWSSupport-CollectEKSInstanceLogsAWSSupport-CollectECSInstanceLogs 是可以帮助解决这种情境的运行手册。两者都是从 EKS 或 ECS 自动执行日志收集的运行手册。使用这些运行手册,您可以简化收集步骤并选择由 SSM 管理的 EC2 实例。它们执行日志收集器脚本并将结果存储在 EC2 实例上。此外,它们还提供了另一种将捆绑日志上传到 Amazon S3 存储桶的选项,当您需要集中查看多个实例日志时,该选项非常有用。

为 EKS 节点运行此自动化

为 ECS 节点运行此自动化

对 EKS 集群进行故障排除

AWSSupport-TroubleshootEKSWorkerNode 用于帮助您快速识别可能导致 Kubernetes 工作节点无法加入您的 Amazon EKS 集群的可能原因。在大多数用例中,Amazon EKS 集群需要使用 EKS 优化的 AMI 启动 EC2 实例,并将其注册为集群的计算资源。 但是,向集群添加工作节点时,有几个因素可能会失败,例如错误的 VPC 设置、不正确的用户数据、缺少必需的标签、连接问题等。

过去,您需要通过查看每种配置来尝试解决这些问题,有时会遗漏某些可能不明显的错误。 现在,您可以运行该自动化来节省所有这些操作的时间。 它将显示可能的错误,并在输出详细信息中突出显示可能的原因:

此外,对于订阅 AWS Business、Enterprise On-Ramp 计划或企业支持计划的客户,您还可以使用 AWSPremiumSupport-TroubleshootEKSCluster 运行手册。 它提供了另一种方法来检查您的 Amazon EKS 环境中的常见错误,包括 Kubernetes Cluster Autoscaler、负载均衡器创建问题、无法从 Amazon ECR 提取映像或托管节点故障。您可以参考AWS re:Post 知识中心文章,了解它将运行哪些检查。

ECS 任务启动失败故障排除

Amazon ECS 使用 ECS 任务作为概念对象来管理容器化应用程序的生命周期。 但是,有时 ECS 任务可能由于许多不同的错误而无法启动,难以确定根本原因。

AWSSupport-TroubleshootECSTaskFailedToStart 是另一个可以帮助解决这种情况的运行手册。通过自动检查配置和测试连接,它可以简化分析导致任务无法启动的常见问题,并为您提供可行的指导来解决问题。

例如,如果您有一个 ECS 任务无法启动,在公有子网中出现以下连接错误。您通常将检查 VPC 和子网的网络配置以厘清可能的原因:

在这种情况下,您可以运行这个自动化运行手册简化这项排查工作,您可以指定输入参数 ClusterName 和 TaskId 执行运行手册诊断失败的任务。以下是输出示例:

在这个示例中,SAW 自动化运行手册发现在启动 ECS 任务时并未启用自动分配公有 IP 选项,并分享了解决问题的相应步骤。

了解有关支持自动化工作流程(SAW)的更多信息

本文分享数个 SAW 使用案例,并了解了它如何为您简化故障诊断和排除流程。要了解更多信息,请浏览以下资源:

AWS Support 工程师和技术客户经理(TAM)可以在 AWS 上提供一般指导、最佳实务、疑难排解和操作支援,为您提供协助。 要进一步了解我们的计划和产品,请参阅 AWS Support

本篇作者

Eason Cao

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