Come scegliere un profilo AWS quando si utilizza boto3 per connettersi a CloudFront


127

Utilizzo la libreria Python di Boto 3 e desidero connettermi ad AWS CloudFront. Devo specificare il profilo AWS corretto (credenziali AWS), ma guardando la documentazione ufficiale, non vedo alcun modo per specificarlo.

Sto inizializzando il client utilizzando il codice: client = boto3.client('cloudfront')

Tuttavia, ciò comporta l'utilizzo del profilo predefinito per la connessione. Non sono riuscito a trovare un metodo in cui posso specificare quale profilo utilizzare.


Vedi anche: leggi e scarica un file da AWS S3 con i profili
Martin Thoma

hai provato a usare le chiavi nel codice? (puoi anche usare env var per nasconderlo dal codice)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Risposte:


224

Penso che i documenti non siano meravigliosi nell'esporre come farlo. Tuttavia, è stata una funzionalità supportata per un po 'di tempo e ci sono alcuni dettagli in questa richiesta di pull .

Quindi ci sono tre modi diversi per farlo:

Opzione A) Crea una nuova sessione con il profilo

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

Opzione B) Modifica il profilo della sessione predefinita nel codice

    boto3.setup_default_session(profile_name='dev')

Opzione C) Modificare il profilo della sessione predefinita con una variabile di ambiente

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

1
La variabile env non dovrebbe essere AWS_PROFILE?
Stefano M

Grazie per quello! finora non sembra aver trovato quelle informazioni da nessuna parte. Sembra che mi servisse solo il passaggio 2 per farlo funzionare. Cosa ha fatto il passaggio 1? (dal momento che la variabile dev non viene utilizzata o passata in qualcos'altro?)
Contrassegna il

40
Quelle sono opzioni, non passaggi. Nella prima opzione crei una nuova sessione da usare invece della sessione predefinita. Quindi, per creare un client con quella sessione faresti qualcosa come dev.client('s3')invece diboto3.client('s3')
Jordon Phillips,

fuori tema, è ipythonstato utile anche per me.
Mike D

7
Ottieni l'elenco dei profili utilizzando boto3.session.Session().available_profiles: è un elenco. Quindi usa quello che vuoi @ jordan-phillips.
Daisuke Aramaki il

35

Fai questo per usare un profilo con il nome "dev":

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

24

Questa sezione della documentazione di boto3 è utile.

Ecco cosa ha funzionato per me:

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

5

Basta aggiungere il profilo alla configurazione della sessione prima della chiamata del client. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.