如何使用aws cli过滤器

时间:2016-09-20 19:47:52

标签: amazon-web-services aws-cli

我需要能够在所有环境中获取所有AWS EC2实例的公共IP。

基本命令如下:

    aws ec2 describe-addresses --profile=company-lab_us-east-1
ADDRESSES       eipalloc-blah      eipassoc-blah       vpc     i-blah      eni-blah 486469900423       xxx.xxx.xxx.xx xx.xx.xx.xxx  ## <-- last set of x's is the public IP

我试图过滤输出,以便只显示公共IP:

aws ec2 describe-addresses --profile=company-lab_us-east-1 --filters "Name=public-ip-address"

An error occurred (InvalidParameterValue) when calling the DescribeAddresses operation: The filter 'public-ip-address' is invalid

我想获取filter命令的输出并将其放入bash脚本中的变量中。这样我就可以在所有AWS环境中提供所有IP地址的报告。

3 个答案:

答案 0 :(得分:1)

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].PublicIpAddress'

答案 1 :(得分:0)

--filters选项不会过滤显示的信息。而是在返回信息之前将--filters应用于实例列表。例如,public-ip-address过滤器意味着&#34;描述我的地址,但只描述具有此公共IP地址的地址。&#34;

您必须使用您选择的工具描述所有内容并从输出中解析公共IP地址。

答案 2 :(得分:0)

我需要能够在所有环境中获取所有AWS EC2实例的公共IP

虽然其他答案提供了正确的陈述,但我会完成并假设我们所有的环境也可以参考多区域设置。

我会运行以下查询

aws ec2 describe-regions --output text |\
cut -f 3 | \
xargs -I {} aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId, PublicIpAddress]' \
    --output text \
    --region {} 

这里的优点是该命令的第一部分将返回所有可用区域,因此它将为所有您的环境返回以下信息

  • 可用区(您所在的地区)
  • 实例是否正在运行时的状态
  • 实例的ID
  • 最后是您实例的公共IP