【问题标题】:How to choose an AWS profile when using boto3 to connect to CloudFront使用 boto3 连接 CloudFront 时如何选择 AWS 配置文件
【发布时间】:2016-01-27 11:32:40
【问题描述】:

我正在使用 Boto 3 python 库,并希望连接到 AWS CloudFront。 我需要指定正确的 AWS 配置文件(AWS 凭证),但是查看官方文档,我看不出有什么办法指定它。

我正在使用代码初始化客户端: client = boto3.client('cloudfront')

但是,这会导致它使用默认配置文件进行连接。 我找不到可以指定使用哪个配置文件的方法。

【问题讨论】:

  • 另请参阅:readdownload 来自 AWS S3 的带有配置文件的文件
  • 您是否尝试过在代码中使用密钥? (也可以使用 env var 从代码中隐藏它)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')

标签: python amazon-web-services boto3


【解决方案1】:

我认为文档在揭示如何做到这一点方面并不出色。不过,它一直是受支持的功能,pull request 中有一些详细信息。

所以有三种不同的方法可以做到这一点:

选项 A)使用配置文件创建一个新会话

    dev = boto3.session.Session(profile_name='dev')

选项 B) 在代码中更改默认会话的配置文件

    boto3.setup_default_session(profile_name='dev')

选项 C) 使用环境变量更改默认会话的配置文件

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')

【讨论】:

  • 环境变量不应该是 AWS_PROFILE 吗?
  • 谢谢!到目前为止,似乎没有在任何地方找到该信息。看来我只需要第 2 步就可以完成这项工作。第 1 步做了什么? (因为 dev 变量没有被使用或传递给其他任何东西?)
  • 这些是选项,而不是步骤。在第一个选项中,您创建一个要使用的新会话而不是默认会话。因此,要使用该会话创建客户端,您需要执行类似dev.client('s3') 而不是boto3.client('s3')
  • 离题,ipython 对我也很有用。
  • 使用boto3.session.Session().available_profiles 获取配置文件列表 - 它是一个列表。然后使用你想要的@jordan-phillips。
【解决方案2】:

这样做以使用名为“dev”的配置文件:

session = boto3.session.Session(profile_name='dev')
s3 = session.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

【讨论】:

    【解决方案3】:

    boto3 文档的This section 很有帮助。

    这对我有用:

    session = boto3.Session(profile_name='dev')
    client = session.client('cloudfront')
    

    【讨论】:

    • 我真的认为这对我在 Secrets Manager 的工作中会起作用。但是 Secrets Manager + KMS = 不。
    【解决方案4】:

    只需在客户端调用之前将配置文件添加到会话配置中。 boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

    【讨论】:

    • 这工作(解密)。将其拆分为两个命令没有。
    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2019-01-26
    • 2022-01-01
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多