首页 > 解决方案 > 当向 AWS 发送 cli 命令时得到“null”,即使我可以看到数据存在

问题描述

发送 CLI 命令 - ec2 describe-instances --instance-id 时,我正在获取所有数据,但我需要专门获取私有 ip,并且它返回 null,即使我可以看到它们。

CLI 命令:ec2 describe-instances --instance-id i-0b7xxxxxxxxxxx --query Reservations[] --output json 返回以下输出:

[
     {
         "Groups": [],
         "Instances": [
             {
                 "AmiLaunchIndex": 0,
                 "ImageId": "ami-1bxxxxxxx",
                 "InstanceId": "i-0b7xxxxxxxxx",
                 "InstanceType": "r4.2xlarge",
                 "KeyName": "QA-xxx-xxxxxyz",
                 "LaunchTime": "2019-05-21T06:40:57.000Z",
                 "Monitoring": {
                     "State": "disabled"
            },
                   "Placement": {
                   "AvailabilityZone": "eu-west-1c",
                   "GroupName": "",
                   "Tenancy": "default"
               },
                "PrivateDnsName": "ip-172-xxx-11-211.eu-west- 
1.compute.internal",
                "PrivateIpAddress": "172.xxx.11.211",
                "ProductCodes": [],
                "PublicDnsName": "",
                "State": {
                   "Code": 16,
                   "Name": "running"
               },
               "StateTransitionReason": "",
               "SubnetId": "subnet-3362797a",
               "VpcId": "vpc-02a19a65",
               "Architecture": "x86_64",
               "BlockDeviceMappings": [
                   {
                       "DeviceName": "/dev/sda1",
                       "Ebs": {
                        "AttachTime": "2019-04-28T11:19:09.000Z",
                        "DeleteOnTermination": true,
                        "Status": "attached",
                        "VolumeId": "vol-02a052466755e023d"
                    }
                }
            ],
            "ClientToken": "qa-sip-sc1-1FBXNRII3WO13",
            "EbsOptimized": false,
            "EnaSupport": true,
            "Hypervisor": "xen",
            "IamInstanceProfile": {
                "Arn": "arn:aws:iam::1xxxxxxx14:instance-profile/qa.tester.SBC-HA",
                "Id": "AIPAI2xxxxxRPSC"
            },
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2019-04-28T11:19:09.000Z",
                        "AttachmentId": "eni-attach-05xxxxxa8",
                        "DeleteOnTermination": false,
                        "DeviceIndex": 0,
                        "Status": "attached"
                    },
                    "Description": "SC1 interface for HA and cluster maintenance",
                    "Groups": [
                        {
                            "GroupName": "qa-sip-EvgenyZ-qa-Auto-network-clusterSecurityGroup-A4xxxxxxxC8",
                            "GroupId": "sg-0a2xxxxxxx2a"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "06:xx:xx:xx:xx:xa",
                    "NetworkInterfaceId": "eni-xxxxxxxx",
                    "OwnerId": "xxxxxxx",
                    "PrivateDnsName": "ip-172-xxx-11-211.eu-west-1.compute.internal",
                    "PrivateIpAddress": "172.xxx.11.211",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateDnsName": "ip-172-xxx-11-211.eu-west-1.compute.internal",
                            "PrivateIpAddress": "172.xxx.11.211"
                        },
                        {
                            "Primary": false,
                            "PrivateDnsName": "ip-172-xxx-9-204.eu-west-1.compute.internal",
                            "PrivateIpAddress": "172.xxx.9.204"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-3xxxxa",
                    "VpcId": "vpc-xxxxx5"
                }

我想获取 PrivateIpAddresses:172-xxx-9-204 和 172.xxx.11.211。为此,我使用以下 CLI 命令

ec2 describe-instances  --instance-id i-0b722cc96f7a14bfc --query 
Reservations[].Instances[].PrivateIpAddress[].PrivateIpAddress --output 
json

为空。期待:72-xxx-9-204 和 172.xxx.11.211

标签: python-3.xamazon-web-servicescommand-line-interface

解决方案


在查询的输出中,--query=Reservations[]对象Instances位于列表中。所以你必须先索引到列表中。

[*].Instances[*].PrivateIpAddress

这会给你:

[
  [
    "172.xxx.11.211"
  ]
]

相似地,

[*].Instances[*].NetworkInterfaces[*].PrivateIpAddresses[*].PrivateIpAddress

给你:

[
  [
    [
      [
        "172.xxx.11.211",
        "172.xxx.9.204"
      ]
    ]
  ]
]

旁注:AWS CLI 使用 JMESPath 查询语言。您可以在这里试验您的查询:http: //jmespath.org/


推荐阅读