好的,AWS Windows Powershell的家伙...这里有一个问题要问你。如何将 ENI(弹性网络接口)添加到 Windows EC2?看起来很简单,因为许多例子都表明:
Add-EC2NetworkInterface -NetworkInterfaceId <your-eni-id> `
-InstanceId <your-ec2-id> `
-DeviceIndex 1 `
-Force
但在我过去的经验中,DeviceId=1停止工作,我切换到DeviceIndex=2。我一路走来,突然 DeviceIndex=2 不起作用,生成异常
Instance 'i-xxxxxxxxxxxxxxxxx' already has an interface attached at device index '2'
并且 ENI 显示永久"附加"(并且必须强制分离)。但是,今天使用 DeviceIndex=1 确实会再次附加 ENI。现在我认识到我应该以编程方式确定哪个 DeviceIndex 可用并使用它,但我看到的最接近此值的是本博客中的"InterfaceIndex":
https://blogs.technet.microsoft.com/heyscriptingguy/2014/01/15/using-powershell-to-find-connected-network-adapters/
使用此命令:
get-wmiobject win32_networkadapter | select netconnectionid, name, InterfaceIndex, netconnectionstatus
但在尝试了这些价值观之后,它显然不是我想要的价值。例如,添加 DeviceIndex=1 将获得 InterfaceIndex=29 的网络适配器。
奇怪的是,当从控制台附加 ENI 甚至没有地方输入此值(并且工作正常)时,api 中需要此参数。
总而言之,如何确定用于向 Windows EC2 添加新 ENI 的设备索引?
我正在使用较小的 EC2 实例,最多只允许两个网络设备,但我敢打赌这就是答案。如果您查看 ec2 的网络接口:
$instances = Get-Instances -InstanceId <your-ec2-id>
$instances.Instances[0].NetworkInterfaces.Attachment
您将看到与我一直在寻找的 DeviceIndex 属性一起附加的网络设备:
AttachmentId : eni-attach-aaaaaaaa
AttachTime : 5/15/2017 12:47:31 PM
DeleteOnTermination : True
DeviceIndex : 0
Status : attached
AttachmentId : eni-attach-bbbbbbbb
AttachTime : 5/17/2017 5:28:21 PM
DeleteOnTermination : False
DeviceIndex : 1
Status : attached
我的猜测是控制台会找到当前值并为您生成下一个值,因此您不必提供它,但由于 Add-EC2NetworkInterface 需要它,请找到 DeviceIndex 的最大值并使用下一个最高数字进行附加。
请记住,即使您的调用失败,您仍然必须分离 ENI(使用 Dismount-EC2NetworkInterface 或从 AWS 控制台),因为它很可能会卡在"附加"状态。
希望这对某人有所帮助!