将 ENI(弹性网络接口)添加到 Windows EC2



好的,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 控制台),因为它很可能会卡在"附加"状态。

希望这对某人有所帮助!

最新更新