Amazon web services 在AWS部署脚本中调用169.254.169.254/latest/meta-data/instance-id失败
我使用一些基于的脚本将从AMI创建的新windows实例的主机名设置为实例的名称标记。它运行的脚本不是指向windeploy.exe的HKLM:\System\Setup,而是运行以下命令:Amazon web services 在AWS部署脚本中调用169.254.169.254/latest/meta-data/instance-id失败,amazon-web-services,amazon-ec2,sysprep,Amazon Web Services,Amazon Ec2,Sysprep,我使用一些基于的脚本将从AMI创建的新windows实例的主机名设置为实例的名称标记。它运行的脚本不是指向windeploy.exe的HKLM:\System\Setup,而是运行以下命令: $InstanceName = 'WebServerNew' Try { Start-Transcript -Path D:\WebServerUtility\SysPrep\Windeploy.log -Append Write-Host "Discovering instance i
$InstanceName = 'WebServerNew'
Try
{
Start-Transcript -Path D:\WebServerUtility\SysPrep\Windeploy.log -Append
Write-Host "Discovering instance identity from meta-data web service"
$InstanceId = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/instance-id').ToString()
$AvailabilityZone = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/placement/availability-zone').ToString()
$Region = $AvailabilityZone.Substring(0,$AvailabilityZone.Length-1)
Write-Host "Getting Tags for the instance"
$Tags = Get-EC2Tag -Filters @{Name='resource-id';Value=$InstanceId} -Region $Region
$InstanceName = ($Tags | Where-Object {$_.Key -eq 'Name'}).Value
Write-Host "`tFound Instance Name: $InstanceName"
}
Catch
{
Write-Host $_
$InstanceName = 'WebServerError'
}
try
{
If($InstanceName -ne $null) {
Write-Host "Setting the machine name to $InstanceName"
$AnswerFilePath = "C:\Windows\Panther\unattend.xml"
$AnswerFile = [xml](Get-Content -Path $AnswerFilePath)
$ns = New-Object System.Xml.XmlNamespaceManager($AnswerFile.NameTable)
$ns.AddNamespace("ns", $AnswerFile.DocumentElement.NamespaceURI)
$ComputerName = $AnswerFile.SelectSingleNode('/ns:unattend/ns:settings[@pass="specialize"]/ns:component[@name="Microsoft-Windows-Shell-Setup"]/ns:ComputerName', $ns)
$ComputerName.InnerText = $InstanceName
$AnswerFile.Save($AnswerFilePath)
}
}
Catch
{
Write-Host $_
}
Finally
{
Stop-Transcript
}
然后调用WinDeploy.exe来完成专门化
问题是这条线
Write-Host "Discovering instance identity from meta-data web service"
$InstanceId = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/instance-id').ToString()
失败,无法连接到远程服务器
你知道为什么它不能连接到那个吗
看起来很奇怪。URL看起来是正确的。。让我们试着调试一下。让我们隔离这个问题,看看是脚本问题还是其他问题 请尝试telnet 169.254.169.254 80 如果它说连接与否 也可以在浏览器上尝试并查看输出。。 另外,尝试在系统初始化后运行脚本。。。可能是脚本运行的时间;此本地IP未初始化
每次系统启动时;EC2向主网络适配器添加自定义路由,以便在连接多个NIC时启用以下IP地址:169.254.169.254。你的这个脚本是在连接NIC之前执行的。这就是问题所在。看起来很奇怪。URL看起来是正确的。。让我们试着调试一下。让我们隔离这个问题,看看是脚本问题还是其他问题 请尝试telnet 169.254.169.254 80 如果它说连接与否 也可以在浏览器上尝试并查看输出。。 另外,尝试在系统初始化后运行脚本。。。可能是脚本运行的时间;此本地IP未初始化
每次系统启动时;EC2向主网络适配器添加自定义路由,以便在连接多个NIC时启用以下IP地址:169.254.169.254。你的这个脚本是在连接NIC之前执行的。这就是问题所在。你的脚本对我来说非常好 问题是您实例上的某些内容阻止了对该IP地址的访问,例如防火墙 检查您的系统配置,查看Windows防火墙是否阻止访问,或者是否安装了阻止访问的任何其他安全软件
正在尝试调用RestMethod'http://google.com“这也是一个很好的测试。你的脚本对我来说非常好 问题是您实例上的某些内容阻止了对该IP地址的访问,例如防火墙 检查您的系统配置,查看Windows防火墙是否阻止访问,或者是否安装了阻止访问的任何其他安全软件
正在尝试调用RestMethod'http://google.com'也是一个很好的测试。您需要将此添加到脚本顶部:
Start-Service -Name 'Dhcp'
route add 169.254.169.254 MASK 255.255.255.255 0.0.0.0
触发脚本时,DHCP客户端将停止。这就是你没有IP的原因
您还需要向元数据服务添加路由。Sysprep删除这些路由。您需要将其添加到脚本顶部:
Start-Service -Name 'Dhcp'
route add 169.254.169.254 MASK 255.255.255.255 0.0.0.0
触发脚本时,DHCP客户端将停止。这就是你没有IP的原因
您还需要向元数据服务添加路由。Sysprep删除这些路由。当实例运行时,它可以正常工作。只是在启动脚本中它失败了。当实例运行时,它工作正常。只是在启动脚本中它失败了。当实例运行时,它工作正常。只是在启动脚本中失败了。我将尝试禁用Windows防火墙并创建新映像。我也会打电话给谷歌,看看这是否有效。是的,对我来说也是有效的@BenCurthoys,也许您的脚本在接口启动之前执行;您甚至可能在执行时没有IP地址,因此无法访问元数据服务器。也许您可以尝试进入重试循环。当实例正在运行时,它可以正常工作。只是在启动脚本中失败了。我将尝试禁用Windows防火墙并创建新映像。我也会打电话给谷歌,看看这是否有效。是的,对我来说也是有效的@BenCurthoys,也许您的脚本在接口启动之前执行;您甚至可能在执行时没有IP地址,因此无法访问元数据服务器。也许您可以尝试进入重试循环。谢谢!我没有看到这个答案,我已经不再关心自动化这一点的服务器安装,但你现在可以有一个公认的答案,我会测试它,当我得到它=谢谢!我没有看到这个答案,我已经不再关心自动化这一点的服务器安装,但你可以有一个接受的答案,现在,我会测试它,当我得到它=