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

Posted

技术标签:

【中文标题】boto3 相当于 boto.utils.get_instance_metadata()?【英文标题】:boto3 equivalent to boto.utils.get_instance_metadata()? 【发布时间】:2015-10-16 07:46:40 【问题描述】:

在常规 boto 2.38 中,我曾经通过 boto 访问实例元数据(例如获取当前堆栈名称)

boto.utils.get_instance_metadata()

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

【问题讨论】:

【参考方案1】:

不,在 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()

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

【讨论】:

还是是真的吗?! siiiiiiigh @dwanderson 不幸的是! 此外,您还可以使用 adamchainz/ec2-metadata 包。它必须安装 pip,所以可能不适合 Lambda,但这个包使用简单。【参考方案2】:

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

这是来自docs 的示例,展示了如何获取您的 EC2 区域:

  pip install ec2-metadata

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

【讨论】:

以上是关于boto3 相当于 boto.utils.get_instance_metadata()?的主要内容,如果未能解决你的问题,请参考以下文章

boto3附加卷投掷卷不可用

如何使用 boto3 将 S3 对象保存到文件中

Boto3 AWS KMS 加密解密文件

如何在 boto3 中设置 executionRoleArn 的值?

调用client.request_spot_instances方法时抛出AWS Boto3 BASE64编码错误

如何使用Boto 3获取域的托管区域?