2012-09-18 101 views
0

我試圖通過.NET亞馬遜API將PowerShell腳本連接到Auto Scaling組。如何使用Powershell獲取AWS Auto Scaling組中實例的IP地址?

我檢查了文檔here,但我很努力地得到一個包含屬於Auto Scaling Group的實例的IP地址的對象。

我不確定要使用哪個類或哪個類包含我的對象。

我目前正在使用:

$request = New-Object -TypeName Amazon.AutoScaling.Model.DescribeAutoScalingInstancesRequest 

有沒有人遇到過同樣的情況?哪個類/對象包含在AutoScaling組中運行的實例的IP地址?

回答

2

在上面的答案上進行擴展 - 您可能希望包含自動縮放組的名稱,這樣您就不會從每個組中獲得每個實例。另外,如果您正在使用VPC您的情況可能沒有公網IP,所以你會成爲私人IP地址這樣

Get-ASAutoScalingInstance | ? {$_.AutoScalingGroupName -eq "web-autoscaler-group"} | select -ExpandProperty InstanceId | Get-EC2Instance | select -ExpandProperty RunningInstance | ft InstanceId, PrivateIpAddress 
+0

是的,我實際上是在尋找私人IP地址!非常感謝主席先生! – Bluz

5

使用SDK方法,您將從DescribeAutoScalingInstances調用返回的響應/結果數據中嵌入的實例ID集合傳遞給DescribeInstances調用EC2(再次使用new-object獲取EC2客戶端和請求對象)。這將爲您提供一組Amazon.EC2.Model.Reservation對象(同樣位於響應/結果數據中),每個預留內的RunningInstance集合將從該對象獲取EC2實例的IP地址。

然而更易於使用的AWS工具適用於Windows PowerShell是這樣的:

Get-ASAutoScalingInstance | select -expandproperty InstanceId | Get-EC2Instance | select -expandproperty RunningInstance | ft InstanceId, IpAddress 

GET-ASAutoScalingInstance映射到你的問題的請求;這產生了一組EC2實例,我們從中提取每個實例的id和select。然後,我們使用Get-EC2Instance請求實例的詳細信息;如上所述,這產生了一個Amazon.EC2.Model.Reservation對象,內部是實例的細節(在RunningInstance集合中)。我們將這個平坦化,以提取表的實例ID和關聯的IP地址。

上面的示例管道假設您已經使用Set-AWSCredentials和Set-DefaultAWSRegion在shell中設置了要使用的憑證和區域。

用於Windows PowerShell的AWS工具包含在SDK和Visual Studio工具包的下載msi中,可在此處獲得http://aws.amazon.com/net/

希望這會有所幫助。

3

對於任何人要做到這一點後,通過aws-cli

更換my autoscale group

aws --output text --query "Reservations[*].Instances[*].PublicIpAddress" ec2 describe-instances --instance-ids `aws --output text --query "AutoScalingGroups[0].Instances[*].InstanceId" autoscaling describe-auto-scaling-groups --auto-scaling-group-names "my autoscale group"`