我一直在尝试使用以下脚本,但没有成功:
$Ami=Get-EC2ImageByName WINDOWS_2012_BASE
New-EC2Instance -ImageId $Ami[0].ImageId -MinCount 1 -MaxCount 1 -KeyName uckey -InstanceType `
t1.micro -SubnetId subnet-56738b33 -AssociatePublicIp $true
错误是:
New-EC2Instance : Object reference not set to an instance of an object.
At line:1 char:1
+ New-EC2Instance -ImageId $Ami[0].ImageId -MinCount 1 -MaxCount 1 -KeyName uckey ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Amazon.PowerShe...2InstanceCmdlet:NewEC2InstanceCmdlet)
[New-EC2Instance], InvalidOperationException
+ FullyQualifiedErrorId : System.NullReferenceException,Amazon.PowerShell.Cmdlets.EC2.NewEC2InstanceC
mdlet
问题在于没有它的参数-AssociatePublicIp
,脚本可以正常工作。
感谢您阅读
答案 0 :(得分:4)
自AWS PowerShell版本2.1.3.0起,此错误已得到纠正。
我能够执行这个脚本:
New-EC2Instance -ImageId $Ami[0].ImageId -MinCount 1 -MaxCount 1 -KeyName uckey -InstanceType `
t1.micro -SubnetId subnet-56738b33 -AssociatePublicIp $true
答案 1 :(得分:3)
我怀疑这是AWS Tools for Windows PowerShell中的错误。由于已经commented,因此使用AWS Command Line Interface运行语义相同的命令会产生所需的结果:
$ aws ec2 run-instances --image-id $ami.Imageid --count 1:1 --instance-type t1.micro `
--key-name uckey --subnet-id subnet-56738b33 --associate-public-ip-address
--count
和--associate-public-ip-address
的轻微语法差异,后者不需要值,而是包含标志本身,即[--associate-public-ip-address | --no-associate-public-ip-address]
,请参阅{{3} }。[{3}}中的(不幸未答复的)查询也证实了这一点,请参阅run-instances。
因此,解决这个问题的最佳方法可能是碰撞该线程并希望AWS团队做出回应。同时,您可以通过AWS CLI编写操作脚本来解决此问题。
答案 2 :(得分:3)
我遇到了同样的问题,在使用PowerShell时可能的解决方法是首先创建网络接口,然后将其与实例关联:
$subnetId = "subnet-56738b33"
$keyName = "uckey"
$instanceType = "t1.micro"
$Ami = Get-EC2ImageByName WINDOWS_2012_BASE
$ImageId = $Ami[0].ImageId
$networkInterface = New-EC2NetworkInterface -SubnetId $subnetId -Description "Primary network interface"
$interfaceSpec = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification -property @{"NetworkInterfaceId"=$networkInterface.NetworkInterfaceId}
$reservation = New-EC2Instance -ImageId $ImageId -MinCount 1 -MaxCount 1 -InstanceType $instanceType -KeyName $keyName -NetworkInterfaces $interfaceSpec
InstanceNetworkInterfaceSpecification有一个属性,用于指示接口是否需要公共IP地址(请参阅the docs)