在常规的boto 2.38中,我习惯于通过boto的访问实例元数据(例如,获取当前的栈名)
boto.utils.get_instance_metadata()在boto3中是否有等效项,或者我是否需要转到更低级别的直接http地址来获取有关运行实例的元数据?
发布于 2015-11-16 19:05:54
不,在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。
发布于 2020-03-23 18:54:14
您可以使用第三方库ec2-metadata。
下面是docs中的一个示例,展示了如何获取您的EC2区域:
pip install ec2-metadata
>>> from ec2_metadata import ec2_metadata
>>> print(ec2_metadata.region)
us-east-1发布于 2022-02-17 08:08:58
您可以从botocore中的IMDSFetcher获取特定的元数据
from botocore.utils import IMDSFetcher
IMDSFetcher()._get_request("/latest/meta-data/instance-type", None).text这也适用于强制执行IMDSv2的实例。
https://stackoverflow.com/questions/31630822
复制相似问题