web-dev-qa-db-fra.com

boto3 équivalent à boto.utils.get_instance_metadata ()?

Dans le boto 2.38 normal, j'avais l'habitude d'accéder aux métadonnées d'instance (par exemple, obtenir le nom actuel de la pile), via boto's

boto.utils.get_instance_metadata()

Existe-t-il un équivalent dans boto3, ou dois-je aller à l'adresse http directe de niveau inférieur pour récupérer les métadonnées sur l'instance en cours d'exécution?

32
user2123288

Non, toujours pas d'équivalent dans boto3, je viens de toucher cet écart moi-même.
Ils ont une demande de fonctionnalité ouverte pour cela https://github.com/boto/boto3/issues/31 qui fait référence à cette question.

Quant aux solutions de contournement,
vous pouvez continuer à utiliser boto.utils ou utilisez urllib/urllib2 pour faire les requêtes HTTP manuellement c'est-à-dire.

# Python2
import urllib2
instanceid = urllib2.urlopen('http://169.254.169.254/latest/meta-data/instance-id').read()

# Python3
import urllib.request
instanceid = urllib.request.urlopen('http://169.254.169.254/latest/meta-data/instance-id').read().decode()

voir Quel est le moyen le plus rapide de HTTP GET en Python? pour une introduction rapide sur urllib et http://docs.aws.Amazon.com/AWSEC2/latest/WindowsGuide/ec2- instance-metadata.html # instancedata-data-categories pour la structure URI du service de métadonnées.

16
Nath

Vous pouvez utiliser ec2-metadata .

Voici un exemple de la docs montrant comment obtenir votre région EC2:

  >>> from ec2_metadata import ec2_metadata
  >>> print(ec2_metadata.region)
  us-east-1
0
barbasa