boto3を使用してCloudFrontに接続するときにAWSプロファイルを選択する方法


127

Boto 3 Pythonライブラリを使用していて、AWS CloudFrontに接続したいと思います。正しいAWSプロファイル(AWS Credentials)を指定する必要がありますが、公式ドキュメントを見ると、指定する方法がありません。

私はコードを使用してクライアントを初期化しています: 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

回答:


224

私はドキュメントがこれを行う方法を公開するのは素晴らしいとは思いません。これはしばらくの間サポートされている機能であり、このプルリクエストにはいくつかの詳細があります。

これを行うには、3つの異なる方法があります。

オプション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変数が使用されていないか、他に渡されていないため?)
マーク

40
これらはオプションであり、ステップではありません。最初のオプションでは、デフォルトのセッションではなく、使用する新しいセッションを作成します。だからあなたのようなものだろう、そのセッションでクライアントを作成するdev.client('s3')代わりにboto3.client('s3')
ジョーダン・フィリップス

オフトピック、ipython私にとっても役に立ちました。
マイクD

7
を使用してプロファイルリストを取得しますboto3.session.Session().available_profiles。これはリストです。次に、@ jordan-phillipsで使用するものを使用します。
荒巻大輔

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')

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.