Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python boto3中迭代嵌套字典_Python_Python 3.x_Amazon Web Services_Boto3_Boto - Fatal编程技术网

如何在python boto3中迭代嵌套字典

如何在python boto3中迭代嵌套字典,python,python-3.x,amazon-web-services,boto3,boto,Python,Python 3.x,Amazon Web Services,Boto3,Boto,Hi希望只查找停止的实例,并且它们的ID如下所示为嵌套的JSON { "Reservations": [ { "Groups": [], "Instances": [ { "AmiLaunchIndex": 0, "Architecture": "x86_64", "BlockDeviceMappings&q

Hi希望只查找停止的实例,并且它们的ID如下所示为嵌套的JSON



{
 "Reservations": [
  {
   "Groups": [],
   "Instances": [
    {
     "AmiLaunchIndex": 0,
     "Architecture": "x86_64",
     "BlockDeviceMappings": [
      {
       "DeviceName": "/dev/xvda",
       "Ebs": {
        "AttachTime": "2021-03-11 09:43:59+00:00",
        "DeleteOnTermination": true,
        "Status": "attached",
        "VolumeId": "vol-0c49ff5c979904337"
       }
      }
     ],
     "CapacityReservationSpecification": {
      "CapacityReservationPreference": "open"
     },
     "ClientToken": "",
     "CpuOptions": {
      "CoreCount": 1,
      "ThreadsPerCore": 1
     },
     "EbsOptimized": false,
     "EnaSupport": true,
     "EnclaveOptions": {
      "Enabled": false
     },
     "HibernationOptions": {
      "Configured": false
     },
     "Hypervisor": "xen",
     "ImageId": "ami-038f1ca1bd58a5790",
     "InstanceId": "i-041fb789f1554b7d5",
     "InstanceType": "t2.micro",
     "KeyName": "HadoopLearning",
     "LaunchTime": "2021-03-11 09:43:58+00:00",
     "MetadataOptions": {
      "HttpEndpoint": "enabled",
      "HttpPutResponseHopLimit": 1,
      "HttpTokens": "optional",
      "State": "applied"
     },
     "Monitoring": {
      "State": "disabled"
     },
     "NetworkInterfaces": [
      {
       "Attachment": {
        "AttachTime": "2021-03-11 09:43:58+00:00",
        "AttachmentId": "eni-attach-022ac34489909cc78",
        "DeleteOnTermination": true,
        "DeviceIndex": 0,
        "NetworkCardIndex": 0,
        "Status": "attached"
       },
       "Description": "",
       "Groups": [
        {
         "GroupId": "sg-5878120b",
         "GroupName": "default"
        }
       ],
       "InterfaceType": "interface",
       "Ipv6Addresses": [],
       "MacAddress": "0a:15:95:72:23:6b",
       "NetworkInterfaceId": "eni-0d356de72ae7e6bfc",
       "OwnerId": "216808211954",
       "PrivateDnsName": "ip-172-31-29-51.ec2.internal",
       "PrivateIpAddress": "172.31.29.51",
       "PrivateIpAddresses": [
        {
         "Primary": true,
         "PrivateDnsName": "ip-172-31-29-51.ec2.internal",
         "PrivateIpAddress": "172.31.29.51"
        }
       ],
       "SourceDestCheck": true,
       "Status": "in-use",
       "SubnetId": "subnet-e705ccaa",
       "VpcId": "vpc-4401543e"
      }
     ],
     "Placement": {
      "AvailabilityZone": "us-east-1d",
      "GroupName": "",
      "Tenancy": "default"
     },
     "PrivateDnsName": "ip-172-31-29-51.ec2.internal",
     "PrivateIpAddress": "172.31.29.51",
     "ProductCodes": [],
     "PublicDnsName": "",
     "RootDeviceName": "/dev/xvda",
     "RootDeviceType": "ebs",
     "SecurityGroups": [
      {
       "GroupId": "sg-5878120b",
       "GroupName": "default"
      }
     ],
     "SourceDestCheck": true,
     "State": {
      "Code": 80,
      "Name": "stopped"  ####this one only which is stopped ###
     },
     "StateReason": {
      "Code": "Client.UserInitiatedShutdown",
      "Message": "Client.UserInitiatedShutdown: User initiated shutdown"
     },
     "StateTransitionReason": "User initiated (2021-03-11 10:13:00 GMT)",
     "SubnetId": "subnet-e705ccaa",
     "Tags": [
      {
       "Key": "Name",
       "Value": "aviral"
      }
     ],
     "VirtualizationType": "hvm",
     "VpcId": "vpc-4401543e"
    },
    {
     "AmiLaunchIndex": 1,
     "Architecture": "x86_64",
     "BlockDeviceMappings": [
      {
       "DeviceName": "/dev/xvda",
       "Ebs": {
        "AttachTime": "2021-03-11 09:43:59+00:00",
        "DeleteOnTermination": true,
        "Status": "attached",
        "VolumeId": "vol-069a9ca7f860fefd8"
       }
      }
     ],
     "CapacityReservationSpecification": {
      "CapacityReservationPreference": "open"
     },
     "ClientToken": "",
     "CpuOptions": {
      "CoreCount": 1,
      "ThreadsPerCore": 1
     },
     "EbsOptimized": false,
     "EnaSupport": true,
     "EnclaveOptions": {
      "Enabled": false
     },
     "HibernationOptions": {
      "Configured": false
     },
     "Hypervisor": "xen",
     "ImageId": "ami-038f1ca1bd58a5790",
     "InstanceId": "i-0d0c876682eef71ae",
     "InstanceType": "t2.micro",
     "KeyName": "HadoopLearning",
     "LaunchTime": "2021-03-11 09:43:58+00:00",
     "MetadataOptions": {
      "HttpEndpoint": "enabled",
      "HttpPutResponseHopLimit": 1,
      "HttpTokens": "optional",
      "State": "applied"
     },
     "Monitoring": {
      "State": "disabled"
     },
     "NetworkInterfaces": [
      {
       "Attachment": {
        "AttachTime": "2021-03-11 09:43:58+00:00",
        "AttachmentId": "eni-attach-0b0eba3fb5b3c3205",
        "DeleteOnTermination": true,
        "DeviceIndex": 0,
        "NetworkCardIndex": 0,
        "Status": "attached"
       },
       "Description": "",
       "Groups": [
        {
         "GroupId": "sg-5878120b",
         "GroupName": "default"
        }
       ],
       "InterfaceType": "interface",
       "Ipv6Addresses": [],
       "MacAddress": "0a:3d:3e:bc:96:e3",
       "NetworkInterfaceId": "eni-0688951c8bd226676",
       "OwnerId": "216808211954",
       "PrivateDnsName": "ip-172-31-19-102.ec2.internal",
       "PrivateIpAddress": "172.31.19.102",
       "PrivateIpAddresses": [
        {
         "Primary": true,
         "PrivateDnsName": "ip-172-31-19-102.ec2.internal",
         "PrivateIpAddress": "172.31.19.102"
        }
       ],
       "SourceDestCheck": true,
       "Status": "in-use",
       "SubnetId": "subnet-e705ccaa",
       "VpcId": "vpc-4401543e"
      }
     ],
     "Placement": {
      "AvailabilityZone": "us-east-1d",
      "GroupName": "",
      "Tenancy": "default"
     },
     "PrivateDnsName": "ip-172-31-19-102.ec2.internal",
     "PrivateIpAddress": "172.31.19.102",
     "ProductCodes": [],
     "PublicDnsName": "",
     "RootDeviceName": "/dev/xvda",
     "RootDeviceType": "ebs",
     "SecurityGroups": [
      {
       "GroupId": "sg-5878120b",
       "GroupName": "default"
      }
     ],
     "SourceDestCheck": true,
     "State": {
      "Code": 80,
      "Name": "running" ###Not this one #####
     },
     "StateReason": {
      "Code": "Client.UserInitiatedShutdown",
      "Message": "Client.UserInitiatedShutdown: User initiated shutdown"
     },
     "StateTransitionReason": "User initiated (2021-03-11 10:13:00 GMT)",
     "SubnetId": "subnet-e705ccaa",
     "Tags": [
      {
       "Key": "Name",
       "Value": "avinash"
      }
     ],
     "VirtualizationType": "hvm",
     "VpcId": "vpc-4401543e"
    }
   ],
   "OwnerId": "216808211954",
   "ReservationId": "r-0d646190512fec9f8"
  }
 ],
 "ResponseMetadata": {
  "HTTPHeaders": {
   "cache-control": "no-cache, no-store",
   "content-type": "text/xml;charset=UTF-8",
   "date": "Thu, 11 Mar 2021 10:14:39 GMT",
   "server": "AmazonEC2",
   "strict-transport-security": "max-age=31536000; includeSubDomains",
   "transfer-encoding": "chunked",
   "vary": "accept-encoding",
   "x-amzn-requestid": "58065d1d-76fc-4f7a-9229-18584ee1031e"
  },
  "HTTPStatusCode": 200,
  "RequestId": "58065d1d-76fc-4f7a-9229-18584ee1031e",
  "RetryAttempts": 0
 }
}


我只想要那些被停止的人的一个实例,然后我想要使用boto3使用他们的实例ID启动他们

我正在使用下面的代码

import boto3
import json

access_key = "XXXXXXXXXX"
secret_key = "XXXXXXXXXXXXXXXXXXXXX"
client = boto3.client('ec2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name='us-east-1')

ec2_result = client.describe_instances(
    Filters=[
        {
            'Name': 'tag:Name',
            'Values': ['?avi*']
        }
    ]
)

#ids= [ec2_result['Reservations'][0]['Instances'][i]['InstanceId'] for i in range(len(ec2_result['Reservations'][0]['Instances']))]
#print(ids)
print(ec2_result)


使用上面的代码,我得到了第一个块JSON,但我只想要一个停止的实例,因为我的AWS中有4000个实例,我认为以下应该可以工作:


instances_stopped = []

for reservation in ec2_result['Reservations']:
  for instance in reservation['Instances']:   
    
    instance_id = instance['InstanceId']
    
    if 'State' not in instance:
      print(f"Missing state for {instance_id}")
    else:
      state = instance['State']['Name']
      if state == 'stopped':        
        instances_stopped.append(instance_id)
        #print(instance_id, state)

print(instances_stopped)

请尽快删除问题中的访问密钥和秘密密钥谢谢你能建议解决方案吗请你生成新的访问密钥,并删除/删除已烧掉的密钥。好的@Marcin非常感谢,我只在这里等你,请提供输入,要求是我想要所有被停止的实例,名称从avi开始,它们被停止,然后我想要启动它们。你又做了一次,谢谢它现在正在工作。现在指导我如何在python中变得很棒,就像you@RahultheSWE没问题。python使用得越多,您就会变得越好。现在看起来很难,明年您可能要回答专家级的python问题,所以:-)