boto3相当于boto.utils.get_instance_metadata()?

时间:2015-07-25 20:29:37

标签: amazon-web-services boto3

在常规boto 2.38中我曾经通过boto的

访问实例元数据(例如获取当前的堆栈名称)
boto.utils.get_instance_metadata()

boto3中是否有等价物,或者我是否需要转到下层直接http地址来获取有关正在运行的实例的元数据?

2 个答案:

答案 0 :(得分:15)

不,在boto3中仍然没有等同,只是自己打了这个差距 他们有一个针对此https://github.com/boto/boto3/issues/313的开放功能请求,引用此问题。

至于解决方法,
您可以继续使用boto.utils或使用urllib / urllib2手动执行HTTP请求,即

# 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()

有关urllib的快速介绍,请参阅What is the quickest way to HTTP GET in Python?,有关元数据服务的URI结构,请参阅http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-data-categories

答案 1 :(得分:1)

您可以使用第三方库ec2-metadata

docs中的示例显示了如何获取EC2区域:

  pip install ec2-metadata

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