1

我正在尝试通过 .NET Amazon API 将 powershell 脚本连接到 Auto Scaling 组。

我已经检查了此处的文档,但我正在努力获取一个包含属于 Auto Scaling 组的实例的 IP 地址的对象。

我不确定要使用哪个类,或者哪个类包含我的对象。

我目前正在使用:

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

有没有人遇到过同样的情况?哪个类/对象包含在 AutoScaling 组中运行的实例的 IP 地址?

4

3 回答 3

6

对于任何希望通过以下方式执行此操作的人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"`
于 2015-03-08T00:05:22.863 回答
5

使用 SDK 方法,您可以获取从 DescribeAutoScalingInstances 调用返回的响应/结果数据中嵌入的一组实例 ID,并将它们传递给 EC2 的 DescribeInstances 调用(再次使用 new-object 来获取 EC2 客户端和请求对象)。这将为您提供一组 Amazon.EC2.Model.Reservation 对象(同样在响应/结果数据中),每个预留中的 RunningInstance 集合将从这些对象中获取 EC2 实例的 IP 地址。

然而,像这样使用适用于 Windows PowerShell 的 AWS 工具要简单得多:

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

Get-ASAutoScalingInstance 映射到您问题中的请求;这会产生一组 EC2 实例,我们通过选择从中提取每个实例的 id。然后,我们使用 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/获得。

希望这可以帮助。

于 2013-08-14T18:03:44.367 回答
3

扩展上面的答案 - 您可能希望包含 Auto Scaling 组的名称,这样您就不会从每个组中获取每个实例。此外,如果您使用 VPC,您的实例可能没有公共 IP,因此您将使用这样的私有 IP

Get-ASAutoScalingInstance | ? {$_.AutoScalingGroupName -eq "web-autoscaler-group"} | select -ExpandProperty InstanceId | Get-EC2Instance | select -ExpandProperty RunningInstance | ft InstanceId, PrivateIpAddress
于 2013-09-25T08:00:39.213 回答