4

我一直在尝试使用以下脚本,但没有成功:

$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没有它的参数,脚本可以工作。

谢谢阅读

4

3 回答 3

5

从 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 
于 2014-07-24T18:09:37.923 回答
3

我怀疑这是AWS Tools for Windows PowerShell中的一个错误。如前所述,使用AWS命令​​行界面运行语义相同的命令会产生所需的结果:

$ 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注意and的细微语法差异--associate-public-ip-address,后者不需要值,而是包含标志本身,即[--associate-public-ip-address | --no-associate-public-ip-address],请参阅run-instances

AWS Forum for PowerShell scripting中的一个(很遗憾没有得到答复)查询也证实了这一点,请参阅Unable to get New-EC2Instance to Honor -AssociatePublicIP

因此,解决此问题的最佳选择可能是取消该线程并希望 AWS 团队做出回应。同时,您可以通过 AWS CLI 编写操作脚本来解决此问题。

于 2014-05-26T12:21:53.863 回答
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 地址的属性(请参阅文档

于 2014-07-24T08:52:50.720 回答