Я пытаюсь получить список экземпляров AWS EC2.Мне нужно вытащить список экземпляров из каждой зоны и региона AWS.
Проблемы, с которыми я сталкиваюсь:
- Необходимо извлекать экземпляры только из соответствующей зоны и области каждого цикла.
- Ec2 Экземпляр, зона и регион должны соответствовать и быть точными.
В настоящее время мой сценарий извлекает список экземпляров, но корреляция не имеет смысла.Например:
-------------------------------------
Instance ID: i-6143add1
Type: m4.2xlarge
State: stopped
Private IP: 10.1.232.175
Public IP: None
Region: eu-north-1
Availability Zone: us-east-1a
Launch Time: February 08 2016
-----------------------------------
Выводится скриптом.Но идентификатор экземпляра: i-6143add1 действительно находится в регионе us-east-1a, и, очевидно, зона доступности us-east-1a не находится в регионе eu-north-1.
Как получить данные в линиювверх?Вот мой код:
#!/usr/bin/env python
import boto3
import collections
from collections import defaultdict
import time
from datetime import datetime
from colorama import init, deinit, Fore, Back, Style
import csv
init()
print(Fore.YELLOW)
aws_account = input("Enter the name of the AWS account you'll be working in: ")
session = boto3.Session(profile_name=aws_account)
ec2 = session.client('ec2')
aws_regions = ec2.describe_regions()
aws_azs = ec2.describe_availability_zones()
ec2info = defaultdict()
for region in aws_regions['Regions']:
region_name = region['RegionName']
for az in aws_azs['AvailabilityZones']:
zone = az['ZoneName']
instance_list = ec2.describe_instances()
for reservation in instance_list["Reservations"]:
for instance in reservation.get("Instances", []):
private_ip_address = instance.get("PrivateIpAddress" , None)
public_ip_address = instance.get("PublicIpAddress" , None)
instance_state = instance['State']['Name']
if private_ip_address and public_ip_address:
launch_time = instance['LaunchTime']
launch_time_friendly = launch_time.strftime("%B %d %Y")
ec2info[instance['InstanceId']] = {
'Instance ID': instance['InstanceId'],
'Type': instance['InstanceType'],
'State': instance_state,
'Private IP': instance['PrivateIpAddress'],
'Public IP': instance['PublicIpAddress'],
'Region': region_name,
'Availability Zone': zone,
'Launch Time' : launch_time_friendly
}
attributes = ['Instance ID', 'Type',
'State', 'Private IP', 'Public IP', 'Region', 'Availability Zone', 'Launch Time' ]
for instance_id, instance in ec2info.items():
print(Fore.RESET + "-------------------------------------")
for key in attributes:
print(Fore.CYAN + "{0}: {1}".format(key, instance[key]))
writer.writerow({'Instance ID': key, 'Type': key, 'Launch Time': key})
print(Fore.RESET + "-------------------------------------")
elif private_ip_address:
launch_time = instance['LaunchTime']
launch_time_friendly = launch_time.strftime("%B %d %Y")
ec2info[instance['InstanceId']] = {
'Instance ID': instance['InstanceId'],
'Type': instance['InstanceType'],
'State': instance_state,
'Private IP': instance['PrivateIpAddress'],
'Public IP': None,
'Region': region_name,
'Availability Zone': zone,
'Launch Time' : launch_time_friendly
}
attributes = ['Instance ID', 'Type',
'State', 'Private IP', 'Public IP', 'Region', 'Availability Zone', 'Launch Time' ]
for instance_id, instance in ec2info.items():
print(Fore.RESET + "-------------------------------------")
for key in attributes:
print(Fore.CYAN + "{0}: {1}".format(key, instance[key]))
print(Fore.RESET + "-------------------------------------")