【问题标题】:Obtaining the boto3 profile settings from python从 python 获取 boto3 配置文件设置
【发布时间】:2022-01-03 00:47:35
【问题描述】:

Boto 和 aws-cli 用户在一系列不同配置文件下的一个或多个文件(例如 ~/.aws/config)中编写 ini 样式的配置。我正在编写一个包装 boto API 调用的库,但我想根据用户的活动配置文件设置(即 AWS_PROFILE 和朋友)更改其行为。

如何以编程方式检索有效用户的配置文件设置(即 boto 默认值,被用户的配置文件设置覆盖,被任何具有优先权的环境变量覆盖)。我对配置文件的“区域”键特别感兴趣,但我怀疑其他键的过程类似。

另一种表述方式是:是否有一个 boto API 调用(或一系列调用)将检索给定 boto 会话的“当前活动/有效”设置?

作为反例:提取用户区域设置的一种非常粗略、脆弱且不正确的方法是检查环境 AWS_PROFILE,查找 ~.aws/config,并从中解析出关键“区域”。我宁愿让 boto 应用它自己的规则,然后提取结果。

【问题讨论】:

  • “检索当前会话的设置”是什么意思?您希望查看文件本身的内容,还是希望使用其中一个配置文件来调用 AWS?随时编辑您的问题,以阐明您在寻找什么。
  • 更新问题。我的意思是有效,我并不是要暗示时间约束。例如,s3.create_bucket() uses "us-east-1" 作为主区域。我希望我的库指定一个更接近用户活动区域设置的 LocationConstraint 参数(在调用 create_bucket 时有效),而不强制用户明确重新声明其 ini 文件中已有的内容。跨度>

标签: amazon-web-services boto3


【解决方案1】:

您可以通过读取 AWS_PROFILE 环境变量并将其传递给 boto3 Session 对象来做到这一点。

【讨论】:

  • 谢谢。你能评论一下健壮性吗? AWS_PROFILE 是唯一决定使用哪个配置文件的环境设置(当从 Session、Resource 或 Client 构造函数中省略 profile_name 键时)?例如如果AWS_PROFILE 未定义,那么将应用哪个配置文件? (“默认”?)
【解决方案2】:

我没有测试过,但我认为这是一个很好的起点:

https://stackoverflow.com/a/41270744/220949

特别是对于该地区,Session 中有一个 region_name 属性

【讨论】:

    【解决方案3】:

    配置可以从许多不同的地方加载,仅仅查看“AWS_PROFILE”是不正确的。

    查看配置计算中应用的配置源列表:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html

    一种简单的方法是简单地创建一个默认会话(它应用许多配置源),然后从创建的对象中提取设置:

    import boto3
    session = boto3.Session()
    print(session.region_name)
    

    【讨论】:

      猜你喜欢
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2018-09-04
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      相关资源
      最近更新 更多