在常规 boto 2.38 中,我曾经通过 boto 访问实例元数据(例如获取当前堆栈名称)
boto.utils.get_instance_metadata()
boto3 中是否有等价物,还是我需要转到下级直接 http 地址来获取有关正在运行的实例的元数据?
在常规 boto 2.38 中,我曾经通过 boto 访问实例元数据(例如获取当前堆栈名称)
boto.utils.get_instance_metadata()
boto3 中是否有等价物,还是我需要转到下级直接 http 地址来获取有关正在运行的实例的元数据?
不,在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()
请参阅Python 中 HTTP GET 的最快方法是什么?快速介绍 urllib 和http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-data-categories元数据服务的 URI 结构。
您可以使用第三方库ec2-metadata。
以下是文档中的一个示例,展示了如何获取您的 EC2 区域:
pip install ec2-metadata
>>> from ec2_metadata import ec2_metadata
>>> print(ec2_metadata.region)
us-east-1
IMDSFetcher
您可以从in获取特定的元数据botocore
:
from botocore.utils import IMDSFetcher
IMDSFetcher()._get_request("/latest/meta-data/instance-type", None).text
这也适用于实施 IMDSv2 的实例。