如何解决如何遍历python boto3中的嵌套字典
你好,只想找到停止的实例,下面的 id 是下面嵌套的 JSON
- pipeline.id: first_pipeline
config.string:
input { stdin { } }
output { pipeline { send_to => [commonOut] } }
- pipeline.id: second_pipeline
config.string: |
input { pipeline { address => commonOut } }
filter {
}
output { stdout { codec => rubydebug } }
我只想要那些被停止的实例,然后我想使用 boto3 使用他们的实例 ID 启动它们
我正在使用以下代码
{
"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","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,"PrivateIpAddress": "172.31.29.51"
}
],"SourceDestCheck": true,"Status": "in-use","SubnetId": "subnet-e705ccaa","VpcId": "vpc-4401543e"
}
],"Placement": {
"AvailabilityZone": "us-east-1d","GroupName": "","Tenancy": "default"
},"ProductCodes": [],"PublicDnsName": "","RootDeviceName": "/dev/xvda","RootDeviceType": "ebs","SecurityGroups": [
{
"GroupId": "sg-5878120b","GroupName": "default"
}
],"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)","Tags": [
{
"Key": "Name","Value": "aviral"
}
],"VirtualizationType": "hvm","VpcId": "vpc-4401543e"
},{
"AmiLaunchIndex": 1,"VolumeId": "vol-069a9ca7f860fefd8"
}
}
],"InstanceId": "i-0d0c876682eef71ae","AttachmentId": "eni-attach-0b0eba3fb5b3c3205","MacAddress": "0a:3d:3e:bc:96:e3","NetworkInterfaceId": "eni-0688951c8bd226676","PrivateDnsName": "ip-172-31-19-102.ec2.internal","PrivateIpAddress": "172.31.19.102","PrivateIpAddress": "172.31.19.102"
}
],"Name": "running" ###Not this one #####
},"Value": "avinash"
}
],"VpcId": "vpc-4401543e"
}
],"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
}
}
使用上面的代码,我得到了第一个块 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。