AWS EC2 CLI - >如何获取可用实例列表

时间:2017-05-31 03:38:15

标签: amazon-web-services amazon-ec2 aws-cli

好日子,教授。 我对aws cli框架有点新意。我需要通过控制台获取的是指定区域中可用实例的列表,其中包含该类型的限制编号。

例如,命令应如下所示:

aws ec2 describe-available-instances --region us-west-1 --type [t1.micro, c3.4xlarge, etc. If not set - list all types] 

,输出结果如下:

t1.micro 5

c3.4xlarge 10

m4.4x 20

3 个答案:

答案 0 :(得分:7)

您可以使用AWS CLI和JQ将此输出实现为JSON。

一步一步:

1)调用describe-instances命令。这将检索有关EC2实例的所有类型的元数据,包括实例类型。我们最终将输出过滤到Instance Type。

aws ec2 describe-instances

2)通过--filter参数指定实例类型过滤器。如果未指定,则此查询将显示所有实例类型,其中count> gt; 0.这不包括0计数类型,因为输出来自您的EC2实例集合。

--filters "Name=instance-type,Values=t2.micro,t2.small"

3)通过--region参数指定区域。如果未指定,则AWS CLI将尝试使用您的默认区域。

--region us-east-1 

4)指定您的查询。输出一个键/值对数组,其中Key =" InstanceType",Value = InstanceType。

--query "Reservations[].Instances[].{InstanceType:InstanceType}"

5)使用jq按实例类型分组,以便聚合like-InstanceTypes。

| jq "group_by(.InstanceType)

6)映射键/值对的最终数组,其中key = InstanceType和value = jq length,或者换句话说,每组实例类型的总和。

| map({(.[0].InstanceType):length})

完整示例:

aws ec2 describe-instances --region us-east-1 --filters "Name=instance-type,Values=t2.micro,t2.small" --query "Reservations[].Instances[].{InstanceType:InstanceType}" | jq "group_by(.InstanceType) | map({(.[0].InstanceType):length})"

输出:

[
  {
    "t2.micro": 12
  },
  {
    "t2.small": 2
  }
]

附加说明

如果您尝试检索每个实例类型限制的Amazon GameLift,请使用describe-ec2-instance-limits:

aws gamelift describe-ec2-instance-limits --query 'EC2InstanceLimits[].{EC2InstanceType:EC2InstanceType,InstanceLimit:InstanceLimit}' --region us-east-1 --output text

进一步阅读

答案 1 :(得分:7)

有目的地查看没有过滤器的所有实例 - 使用:

aws ec2 describe-instances --output text \
--query 'Reservations[*].Instances[*].[InstanceType]' | sort | uniq -c

输出将如下所示:

1 m3.medium
1 m4.10xlarge
9 m4.xlarge
6 t2.large
5 t2.medium
4 t2.micro
2 t2.xlarge

目的是按特定类型进行过滤 - 只需添加过滤器,如下所示:
--filters "Name=instance-type,Values=t2.micro,t2.small",您的命令将如下所示:

aws ec2 describe-instances --output text \
--filters "Name=instance-type,Values=t2.micro,t2.small" \
--query 'Reservations[*].Instances[*].[InstanceType]' | sort | uniq -c

答案 2 :(得分:1)

具有与上述类似的要求,但还希望根据 运行 实例 进行过滤并查看结果每个区域(已排序)。

使用@ Vladimir-Kovpak和@ Anthony Neace的一些令人敬畏的回答,我得出结论,这可能会帮助某个人(那些人帮助了我)

for region in $(aws ec2 describe-regions --query 'Regions[].RegionName | sort(@)' --output text); \
do echo $region; \
    aws ec2 describe-instances \
        --region "${region}" \
        --filter Name=instance-state-name,Values=running \
        --query 'Reservations[].Instances[].{InstanceType:InstanceType}' \
        | jq -r '.[].InstanceType' \
        | sort \
        | uniq -c \
        | sort -r;
done

...导致输出类似于以下内容...

ap-northeast-1
ap-northeast-2
ap-south-1
ap-southeast-1
   5 m3.medium
   4 m4.xlarge
   3 t2.micro
   2 t2.large
   2 t2.medium
   2 m3.large
   1 t2.xlarge
   1 t2.small
   1 m4.large
ap-southeast-2
   5 t2.medium
   4 m4.xlarge
   3 t2.micro
   2 t2.large
   2 m3.medium
   2 m3.large
   1 t2.xlarge
   1 t2.small
   1 m4.large
ca-central-1
eu-central-1
eu-west-1
eu-west-2
eu-west-3
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2

此外,为了避免每次都要粘贴,我将其添加到了aws别名文件中。在cli上运行:

aws all

以下示例。 (在$ HOME / .aws / cli / alias中创建) 有关详细信息,请参见aws cli alias github存储库(以及更多节省时间的别名)

# Add to your existing, or create this file at $HOME/.aws/cli/alias

[toplevel]


# Run, with 'aws who'
who = sts get-caller-identity

# Run, with 'aws all'

all = ! 
  ! g() {
    for region in $(aws ec2 describe-regions --query 'Regions[].RegionName | sort(@)' --output text); \
    do echo $region; \
      aws ec2 describe-instances \
          --region "${region}" \
          --filter Name=instance-state-name,Values=running \
          --query 'Reservations[].Instances[].{InstanceType:InstanceType}' \
          | jq -r '.[].InstanceType' \
          | sort \
          | uniq -c \
          | sort -r;
        done
      }; g