【问题标题】:AWS EC2 Windows 10 can't access metadataAWS EC2 Windows 10 无法访问元数据
【发布时间】:2017-12-19 02:23:59
【问题描述】:

什么可以解释为什么运行 Windows 10 的 EC2 实例不能始终访问其自己的元数据或用户数据?

我知道 userdata 设置正确,因为在大约 30 次启动 t2.nano 和 c4.xlarge 实例时使用了完全相同的脚本:t2.nano 在读取元数据时从未遇到任何问题,但在使用 a c4.xlarge 只有一个可以访问它。该脚本仅在实例名称上有所不同(至少根据 git 历史记录)。

我按照下面的说明进行操作,即使从 Powershell 中,Uri 也无法加载(参见图 2)。

感谢任何提示。

【问题讨论】:

  • 如果您尝试从 Internet 检索正常网页,是否有效?
  • 我没有尝试完整的网页,但我可以 ping google.com。
  • 您使用的是 Windows 10?您是否将自己的图像从 PC 上拿来?你有安装 SSM 吗?有人告诉我,如果您更改子网,Windows 2016 会有些奇怪——尝试运行 InitializeInstance.ps1 脚本来修复。
  • @JohnRotenstein 谢谢,这行得通!似乎您也可以运行脚本 ProgramData/Amazon/EC2-Windows/Launch/Module/Scripts/Add-Routes.ps1 以便仅启动路由。完整的脚本还将重置密码。如果您将评论作为答案发布,我可以接受它作为正确答案。干杯。
  • 很高兴你成功了!

标签: amazon-ec2 windows-10 metadata


【解决方案1】:

有一个脚本调用InitializeInstance.ps1会重置一些配置信息。

例如,如果实例更改了子网,它可能由于缓存的路由规则而无法正常工作。 InitializeInstance.ps1 可以纠正这个问题。

【讨论】:

  • 在 Windows 实例中,此脚本位于:C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1
  • 这个脚本有副作用吗?
【解决方案2】:

我们在 EC2 上的 Windows 2016 服务器上遇到了同样的问题。我们注意到 169 个 IP 路由(持久)上的默认网关指向一个不存在的(旧的?)网关 IP。

我们更改了到主适配器默认网关的路由,之后实例元数据开始工作并且 AmazonSSMAgent 服务再次运行。

旧情况:

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0     172.16.3.129     172.16.3.152     15
     ....
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
  169.254.169.254  255.255.255.255     172.16.0.129      15
  169.254.169.250  255.255.255.255     172.16.0.129      15
  169.254.169.251  255.255.255.255     172.16.0.129      15

注意 169 的持久路由上的网关指向一个 IP,这不是 0.0.0.0 的默认值。这个 172.16.0.129 也无法 ping 通。

使用 route CHANGE 更改路线后:

route CHANGE 169.254.169.254 MASK 255.255.255.255  172.16.3.129 METRIC 15 IF 4 /P
route CHANGE 169.254.169.250 MASK 255.255.255.255  172.16.3.129 METRIC 15 IF 4 /P
route CHANGE 169.254.169.251 MASK 255.255.255.255  172.16.2.129 METRIC 15 IF 4 /P

地点:

  • 172.16.3.129 是主网络接口上的默认网关。每个实例都会有所不同。
  • 然后末尾的 4 METRIC 15 IF 4 是主适配器的接口 ID,列在路由 PRINT 的接口列表中,每个实例上也可能不同。

我们现在有:

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0     172.16.3.129     172.16.3.152     15
....
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
  169.254.169.254  255.255.255.255     172.16.3.129      15
  169.254.169.250  255.255.255.255     172.16.3.129      15
  169.254.169.251  255.255.255.255     172.16.3.129      15
===========================================================================

这基本上就是提到的ProgramData/Amazon/EC2-Windows/Launch/Module/Scripts/Add-Routes.ps1 脚本的作用。

【讨论】:

  • 我们刚刚遇到了类似的问题。我们认为这是因为我们在默认 VPC 中获取了一个实例的 AMI,并在新 VPC 中启动了它。假设是在启动时没有重新创建路由。
【解决方案3】:

无法编辑 John Rotenstein,所以我将在此处添加,

我通过再次初始化实例解决了这个问题, 当您在一个子网或 vpc 中创建映像并在另一个子网或 vpc 中启动它时,就会发生这种情况。

警告这将更改管理员密码,请确保您有权访问所需的密钥以在控制台获取新密码。

为了初始化实例只运行一次:

C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule

为了在每次启动运行时初始化它

C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -SchedulePerBoot

文档:https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html

运行后,重启实例,从控制台获取新密码,内部 rdp,您可以获取元数据并使用 aws s3 cli / powershell 和附加的实例 IAM 角色

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2013-04-08
    相关资源
    最近更新 更多