为什么我的映像生成管道发生故障,并且 Image Builder 中出现错误“在步骤验证目标实例上的 Systems Manager Agent 可用性时,步骤超时”?

2 分钟阅读
0

我的映像生成在 Amazon Elastic Compute Cloud (Amazon EC2) Image Builder 中超时。然后,会返回错误“故障消息 = '在步骤验证目标实例上的 SSM Agent 可用性时,步骤超时'”。如何解决此问题?

简短描述

EC2 Image Builder 使用 AWS Systems Manager Automation 生成自定义映像。确保用于生成映像和运行测试的 Amazon EC2 实例可以访问 AWS Systems Manager 服务。

由于以下原因,可能会出现错误消息故障消息 = “在步骤验证目标实例上的 SSM Agent 可用性时,步骤超时”

  • 生成或测试实例无法访问 Systems Manager 端点。要解决此问题,请检查安全组和网络访问控制列表(网络 ACL)的入站和出站规则。
  • 实例配置文件没有所需的权限。要解决此问题,请验证实例配置文件是否附加了正确的策略。
  • 实例无法访问实例元数据服务 (IMDS)。要解决此问题,请验证实例是否可以访问 IMDS。
  • 基本映像上未安装 AWS Systems Manager Agent (SSM Agent)。

解决方法

检查安全组和网络 ACL 的出站和入站规则

如果生成或测试实例无法访问 Systems Manager 端点,则检查以下内容:

  • 安全组已对端口 443 开放出站。
  • 网络 ACL 已对临时端口 (1024–65535) 开放入站,对端口 443 开放出站。

对于公有子网生成:

  • 子网必须已开启启用自动分配公有 IPv4 地址
  • 路由表必须连接互联网网关。

对于私有子网生成:

  • 路由表必须具有 NAT 网关或实例,或指向 Systems Manager(ssmssmmessagesec2messages)和 Image Builder 的 AWS PrivateLink 端点。如果开启了日志记录,则路由表还必须具有指向 Amazon Simple Storage Service (Amazon S3) 或 Amazon CloudWatch 的端点。
  • Amazon Virtual Private Cloud (Amazon VPC) 端点的安全组必须允许端口 443 上的入站流量到达 VPC CIDR。

验证实例配置文件是否具有正确的策略

实例配置文件是在基础设施配置中定义的 AWS Identity and Access Management (IAM) 角色。如果没有所需的权限,就会生成失败。实例配置文件必须附加以下托管策略才能具有生成映像的权限:

  • EC2InstanceProfileForImageBuilder
  • EC2InstanceProfileForImageBuilderECRContainerBuilds(适用于 Docker 映像)
  • AmazonSSMManagedInstanceCore

您还可以创建与前面的托管策略具有类似权限的自定义策略。

**注意:**请检查角色的信任策略以确保允许 ec2.amazonaws.com 承担该角色。

验证实例是否可以访问 IMDS

IMDS 用于从正在运行的实例访问元数据。如果实例无法访问 IMDS,就会生成失败。确保操作系统 (OS) 防火墙允许端口 80 上的流量 169.254.169.254,以便实例可以访问 IMDS。

运行以下命令测试连接性:

$ telnet 169.254.169.254 80

如果您使用的是代理,请将 SSM Agent 配置为使用代理。对于 Linux,请参阅配置 SSM Agent 以使用代理 (Linux)。对于 Microsoft Windows,请参阅配置 SSM Agent 以将代理用于 Windows Server 实例

验证基本映像上是否已安装 SSM Agent

Image Builder 用来生成映像和运行测试的实例必须安装 Systems Manager Agent。

Linux

对于没有 SSM Agent 的 Amazon EC2 Linux 实例,默认情况下,Image Builder 会在构建实例上安装 SSM Agent。但是,如果您在配方中提供了用户数据,则还必须确保在基本映像上安装了 SSM Agent。或者,使用您的用户数据输入安装 SSM Agent。

Windows

Image Builder 不会在 Windows Server 的 Amazon EC2 构建实例上安装 SSM Agent。要检查基本映像上是否预装了 SSM Agent,请使用基本映像启动 EC2 实例。然后,在 PowerShell 中运行以下命令:

Get-Service AmazonSSMAgent

如果基本映像上未预装 SSM Agent,则必须从源映像启动实例。接下来,在 EC2 实例上手动安装 SSM Agent,然后从您的实例创建新的基本映像。

关闭“失败时终止实例”

如果上述解决方法无法解决问题,则:

1.    打开 EC2 Image Builder 控制台

2.    在基础设施配置下启用失败时终止实例,然后再次运行管道。

3.    连接到实例,并运行以下命令以验证与 Systems Manager 端点的连接:

Linux 实例

$ curl -v https://ssm.region.amazonaws.com
$ curl -v https://ec2messages.region.amazonaws.com
$ curl -v https://ssmmessages.region.amazonaws.com

Windows 实例

Test-NetConnection ssm.region.amazonaws.com -port 443
Test-NetConnection ec2messages.region.amazonaws.com -port 443
Test-NetConnection ssmmessages.region.amazonaws.com -port 443

注意:请将 region 替换为您的 AWS 区域。

4.    使用以下路径检查 SSM 日志是否存在任何故障或错误:

Linux

  • /var/log/amazon/ssm/amazon-ssm-agent.log
  • /var/log/amazon/ssm/errors.log

Windows

  • %PROGRAMDATA%\Amazon\SSM\Logs\amazon-ssm-agent.log
  • %PROGRAMDATA%\Amazon\SSM\Logs\errors.log

AWS 官方
AWS 官方已更新 2 年前