使用boto3连接到CloudFront时如何选择AWS配置文件


127

我正在使用Boto 3 python库,并想连接到AWS CloudFront。我需要指定正确的AWS Profile(AWS凭证),但是在查看官方文档时,我看不到指定它的方法。

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

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


另请参阅:从AWS S3中读取下载具有配置文件的文件
Martin Thoma,

您是否尝试过在代码中使用密钥?(您也可以使用env var将其从代码中隐藏)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Answers:


224

我认为文档在展示如何执行此操作方面并不出色。一段时间以来,它一直是受支持的功能,并且此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')

1
env变量不应该是AWS_PROFILE吗?
Stefano M

感谢那!到目前为止,似乎都找不到该信息。看来我只需要步骤2即可完成这项工作。第1步做了什么?(因为未使用dev变量或未将dev变量传递给其他变量?)
Mark

40
这些是选项,不是步骤。在第一个选项中,创建一个要使用的新会话,而不是默认会话。因此,要在该会话中创建客户,您可以执行以下操作,dev.client('s3')而不是boto3.client('s3')
Jordon Phillips

离题,ipython对我也很有用。
麦克D

7
使用boto3.session.Session().available_profiles- 获取个人资料列表-这是一个列表。然后使用您想要的@ jordan-phillips。
荒木大辅'18

35

这样做以使用名称为'dev'的配置文件:

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

24

boto3文档的本部分非常有用。

这对我有用:

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

5

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.