Question:
I have been trying to use the following script, but haven’t been successful:
1 2 3 4 5 |
$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 |
The error is:
1 2 3 4 5 6 7 8 9 |
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 |
The problem is about the parameter -AssociatePublicIp
without it, the script works.
Thanks for reading
Answer:
I ran into the same problem, and a possible workaround while still using PowerShell is to create the network interface first, and then associating it with the instance:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$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 |
The InstanceNetworkInterfaceSpecification has a property to indicate if the interface needs a public IP address (see the docs)