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



我正在启动一个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

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

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

我也尝试了这里的答案,但没有任何东西对我的问题足够具体。

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

修复的解决方法

另一篇关于类似问题的帖子得到了一个解决我问题的答案。

我只是运行C:ProgramDataAmazonEC2-WindowsLaunchScriptsInitializeInstance.ps1脚本应用了新生 EC2 窗口实例的默认规范。我仍然不知道为什么会出现这个问题,但是此解决方案适用于在配置规范上没有任何可松动的人。

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

运行该命令时,它会计划 InitializeInstance.ps1 脚本,并在下次启动期间重新配置路由。

将来,如果您看到任何此类问题,请确保 IP 169.254.169.254 指向正确的网关,您可以使用命令 ipconfig/all 和路由打印命令进行检查,如果您发现路由配置错误,您可以使用路由删除和路由添加命令与适当的参数使路由正确,或者只是安排 InitializeInstance.ps1 脚本, 这将在实例下次启动时更正路由。

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

最新更新