So wählen Sie ein AWS-Profil aus, wenn Sie mit boto3 eine Verbindung zu CloudFront herstellen


127

Ich verwende die Boto 3-Python-Bibliothek und möchte eine Verbindung zu AWS CloudFront herstellen. Ich muss das richtige AWS-Profil (AWS-Anmeldeinformationen) angeben, sehe jedoch in der offiziellen Dokumentation keine Möglichkeit, es anzugeben.

Ich initialisiere den Client mit dem Code: client = boto3.client('cloudfront')

Dies führt jedoch dazu, dass das Standardprofil zum Herstellen einer Verbindung verwendet wird. Ich konnte keine Methode finden, mit der ich angeben kann, welches Profil verwendet werden soll.


Siehe auch: Lesen und Herunterladen einer Datei von AWS S3 mit Profilen
Martin Thoma

Haben Sie versucht, die Schlüssel im Code zu verwenden? (Sie können auch env var verwenden, um es vor dem Code zu verbergen.)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Antworten:


222

Ich denke, die Dokumente sind nicht wunderbar darin, aufzuzeigen, wie das geht. Es ist jedoch seit einiger Zeit eine unterstützte Funktion, und diese Pull-Anforderung enthält einige Details .

Es gibt also drei verschiedene Möglichkeiten, dies zu tun:

Option A) Erstellen Sie eine neue Sitzung mit dem Profil

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

Option B) Ändern Sie das Profil der Standardsitzung im Code

    boto3.setup_default_session(profile_name='dev')

Option C) Ändern Sie das Profil der Standardsitzung mit einer Umgebungsvariablen

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

1
Sollte die env-Variable nicht AWS_PROFILE sein?
Stefano M

Dank dafür! schien diese Informationen bisher nirgendwo zu finden. Es scheint, dass ich nur Schritt 2 brauchte, um diese Arbeit zu machen. Was hat Schritt 1 getan? (da die Entwickler Variable nicht verwendet wird oder in irgendetwas passiert sonst?)
Mark

40
Das sind Optionen, keine Schritte. In der ersten Option erstellen Sie eine neue Sitzung, die anstelle der Standardsitzung verwendet werden soll. Um einen Client mit dieser Sitzung zu erstellen, würden Sie so etwas wie dev.client('s3')anstelle vonboto3.client('s3')
Jordon Phillips

Off Topic, ipythonwar auch nützlich für mich.
Mike D

7
Holen Sie sich die Profilliste mit boto3.session.Session().available_profiles- es ist eine Liste. Verwenden Sie dann die gewünschte @ jordan-phillips.
Daisuke Aramaki

35

Verwenden Sie dazu ein Profil mit dem Namen 'dev':

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

24

Dieser Abschnitt der boto3-Dokumentation ist hilfreich.

Folgendes hat bei mir funktioniert:

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

5

Fügen Sie der Sitzungskonfiguration einfach ein Profil hinzu, bevor Sie den Client aufrufen. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.