Comment choisir un profil AWS lors de l'utilisation de boto3 pour se connecter à CloudFront

127

J'utilise la bibliothèque python Boto 3 et je souhaite me connecter à AWS CloudFront. Je dois spécifier le bon profil AWS (AWS Credentials), mais en regardant la documentation officielle, je ne vois aucun moyen de le spécifier.

J'initialise le client en utilisant le code: client = boto3.client('cloudfront')

Cependant, cela se traduit par l'utilisation du profil par défaut pour se connecter. Je n'ai pas trouvé de méthode permettant de spécifier le profil à utiliser.

Nader A. Jabbar
la source
Voir aussi: lire et télécharger un fichier depuis AWS S3 avec des profils
Martin Thoma
avez-vous essayé d'utiliser les touches dans le code? (vous pouvez également utiliser env var pour le masquer du code)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Réponses:

224

Je pense que les documents ne sont pas merveilleux pour exposer comment faire cela. Cependant, cette fonctionnalité est prise en charge depuis un certain temps et il y a quelques détails dans cette pull request .

Il existe donc trois façons différentes de procéder:

Option A) Créer une nouvelle session avec le profil

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

Option B) Changer le profil de la session par défaut dans le code

    boto3.setup_default_session(profile_name='dev')

Option C) Changer le profil de la session par défaut avec une variable d'environnement

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')
Jordon Phillips
la source
1
La variable env ne devrait-elle pas être AWS_PROFILE?
Stefano M
Merci pour ça! n'a pas semblé trouver cette information nulle part jusqu'ici. Il semble que je n'avais besoin que de l'étape 2 pour que cela fonctionne. Qu'a fait l'étape 1? (puisque la variable dev n'est pas utilisée ou passée dans autre chose?)
Mark
40
Ce sont des options, pas des étapes. Dans la première option, vous créez une nouvelle session à utiliser plutôt que la session par défaut. Donc, pour créer un client avec cette session, vous feriez quelque chose comme à la dev.client('s3')place deboto3.client('s3')
Jordon Phillips
hors sujet, ipythona également été utile pour moi.
Mike D
7
Obtenez la liste des profils en utilisant boto3.session.Session().available_profiles- c'est une liste. Ensuite, utilisez celui que vous voulez @ jordan-phillips.
Daisuke Aramaki
35

Faites ceci pour utiliser un profil avec le nom 'dev':

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

Cette section de la documentation de boto3 est utile.

Voici ce qui a fonctionné pour moi:

session = boto3.Session(profile_name='dev')
client = session.client('cloudfront')
mgig
la source
5

Ajoutez simplement le profil à la configuration de session avant l'appel du client. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

MrKulli
la source