尝试从其中检索 EC2 实例 ID 元数据时超时

Posted

技术标签:

【中文标题】尝试从其中检索 EC2 实例 ID 元数据时超时【英文标题】:Timeout when trying to retrieve EC2 instance-id metadata from within it 【发布时间】:2020-04-17 00:13:15 【问题描述】:

我正在启动一个 Windows 10 EC2 实例并尝试使用以下命令从 CMD 检索它的实例 ID:

curl http://169.254.169.254/latest/meta-data/instance-id

这一直工作到昨天,但现在每次都失败,引发超时错误。

curl: (7) Failed to connect to 169.254.169.254 port 80: Timed out

我查看了有关检索 EC2 元数据的 aws 文档,但没有发现任何有关检索尝试的到期时间的信息。此外,我尝试从我的实例创建一个 AMI 并基于此 AMI 启动一个新实例以尝试某种可能的到期时间的“刷新”,但它没有奏效。

我在 IAM 角色中搜索了与检索元数据权限相关的内容,但似乎没有任何内容适合我的问题。

我也尝试了 here 的答案,但没有什么能具体解决我的问题。

会发生什么?这连续工作了大约两个月,然后突然停止工作。

解决方法

另一个post,关于类似的问题,得到了解决我问题的答案。

我只是运行了C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1,脚本应用了一个新的 EC2 Windows 实例的默认规范。我仍然不知道为什么会出现这个问题,但是这个解决方案适用于对配置规范没有任何要求的人。

【问题讨论】:

预计这些请求几乎是即时的。我怀疑 EC2 方面存在问题——我会把钱花在某种打开的 Windows 防火墙设置上。 169.254/16 是一个链接本地地址范围,尽管将其用于 ec2 元数据完全在此类地址的预期范围内,但我们经常说,Windows 对如何处理它有误导性的看法。 en.wikipedia.org/wiki/Link-local_address @DanielFarrell 嗯,我在哪里可以获得有关如何防止 Windows 禁止我访问该地址的信息? 如果您将问题表述为“我如何在 Windows 10 中验证防火墙权限”或其他内容,那么您可能会在 SuperUser 堆栈交换站点上走运。我不知道这么难的操作系统:P 获取实例 ID 的另一种解决方案是通过 AWS CLI,如果您能够使用其他标签识别实例,则可以使用 ec2 describe-instances 获取实例 ID 好吧,我试过完全关闭windows防火墙,但没有成功 【参考方案1】:

从您分享的解决方法来看,您无法获取实例 ID 的原因似乎是您的实例的路由配置错误。要从元数据中检索实例 ID,路由 169.254.169.254 必须指向实例的正确网关。当您尝试在与创建 AMI 的父实例不同的子网中从自定义 AMI 启动实例时,Windows Server 2016 或更高版本通常会出现此问题。

当您运行该命令时,它会调度 InitializeInstance.ps1 脚本,并在下次启动时重新配置路由。

以后,如果您看到任何此类问题,请确保 IP 169.254.169.254 指向正确的网关,您可以使用命令 ipconfig /all 和 route print 命令检查,以防您发现路由是如果配置错误,您可以使用带有适当参数的 route delete 和 route add 命令来使路由正确或简单地调度 InitializeInstance.ps1 脚本,该脚本将在下次启动实例时更正路由。

请参考:https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html

【讨论】:

以上是关于尝试从其中检索 EC2 实例 ID 元数据时超时的主要内容,如果未能解决你的问题,请参考以下文章

Amazon SES 从实例配置文件元数据服务器检索凭证时出错。 (客户端错误:404)

从 Docker 容器中获取 AWS 实例元数据?

python AWS:从EC2实例元数据中获取临时凭证,并使用它来访问AWS资源

从 Go 中的 ec2 元数据服务获取 aws 凭据

有没有办法在 ec2 实例中获取实例 ID [重复]

从数据库yii中检索元描述