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.

Nader A. Jabbar
quelle
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')
Jordon Phillips
quelle
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)
Asmaier
quelle
24

Dieser Abschnitt der boto3-Dokumentation ist hilfreich.

Folgendes hat bei mir funktioniert:

session = boto3.Session(profile_name='dev')
client = session.client('cloudfront')
mgig
quelle
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')

MrKulli
quelle