en utilisant AWS Boto3 Service des ressources que je reçois une liste de toutes mes instance EC2:liste boto3 Python AWS des cas toujours mis à jour
ec2_instances = ec2.instances.all()
chaque fois que je fais quelque chose en utilisant ma variable `ec2_instance » - il coutures pour recharger toute la liste instance ..
Est-il possible de simplement tirer la liste une fois, puis travailler dessus (filtre et tel)
exemple de ce que je fais:
obtenir la liste et le montrer comme un menu après filtrage des valeurs:
Dans ma classe Aws():
def load_ec2_instance(self, region):
"""
Load the EC2 instances a region
:param region:
:rtype: list
:return: a list of the instances in a region or None if there are no instances
"""
ec2 = self._get_resource("ec2", region)
ec2_instances = ec2.instances.all()
counter = collections.Counter(ec2_instances);
ec2_size = sum(counter.itervalues());
if ec2_size == 0:
return None
return ec2_instances
dans mon module de menu:
instances = Aws.get_instance().load_ec2_instance(chosen_region)
show_environments_menu(instances)
def show_environments_menu(instances):
subprocess.call("clear")
print "Please choose the environment your instance is located in:"
environments = Aws.get_instance().get_environments_from_instances(instances)
for i, environment in enumerate(environments):
print "%d. %s" % (i + 1, environment)
def get_environments_from_instances(self, instances):
"""
Get all the environments available from instances lists
:param list instances: the list of instance
:rtype: list
:return: a list of the environments
"""
environments = []
for instance in instances:
tags = instance.tags
for tag in tags:
key = tag.get("Key")
if key == "Environment":
environment = tag.get("Value").strip()
if environment not in environments:
environments.append(environment)
return environments
Il faut du temps en fonction sur ma connexion internet, mais je vois que quand je déconnecte mon internet - il ne peut pas filtrer .. Je n'ai que 12 instances donc la boucle pour les filtrer ne devrait pas prendre du temps du tout ..
Mise à jour: J'ai changé Aws() classe au module et j'utilise ces deux fonctions:
def load_ec2_instances(region):
"""
Load the EC2 instances a region
:param region:
:rtype: list
:return: a list of the instances in a region or None if there are no instances
"""
ec2 = _get_resource("ec2", region)
ec2_instances = ec2.instances.all()
counter = collections.Counter(ec2_instances);
ec2_size = sum(counter.itervalues());
if ec2_size == 0:
return None
return ec2_instances
def get_environments_from_instances(instances):
"""
Get all the environments available from instances lists
:param list instances: the list of instance
:rtype: list
:return: a list of the environments
"""
environments = []
for instance in instances:
tags = instance.tags
for tag in tags:
key = tag.get("Key")
if key == "Environment":
environment = tag.get("Value").strip()
if environment not in environments:
environments.append(environment)
return environments
Pourriez-vous élaborer? Que faites-vous avec la variable 'ec2_instances' et pourquoi pensez-vous que la liste est rechargée à chaque fois? –
oui, j'ai ajouté un exemple à ma question –
Pourriez-vous également écrire le code pour 'Aws.get_instance()'? Je pense que le problème peut être dans cette ligne 'environnements = Aws.get_instance(). Get_environments_from_instances (instances)' –