Jak wybrać profil AWS podczas używania boto3 do łączenia się z CloudFront

127

Używam biblioteki Python Boto 3 i chcę połączyć się z AWS CloudFront. Muszę określić prawidłowy profil AWS (poświadczenia AWS), ale patrząc na oficjalną dokumentację, nie widzę sposobu, aby go określić.

Inicjalizuję klienta za pomocą kodu: client = boto3.client('cloudfront')

Jednak powoduje to użycie domyślnego profilu do połączenia. Nie mogłem znaleźć metody, w której mogę określić, którego profilu użyć.

Nader A. Jabbar
źródło
Zobacz też: odczyt i pobranie pliku z AWS S3 z profilami
Martin Thoma
czy próbowałeś użyć kluczy do kodu? (możesz również użyć env var, aby ukryć go przed kodem)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Odpowiedzi:

224

Myślę, że doktorzy nie są wspaniali w ujawnianiu, jak to zrobić. Jest to jednak obsługiwana funkcja od jakiegoś czasu i jest kilka szczegółów w tym żądaniu ściągnięcia .

Można to zrobić na trzy różne sposoby:

Opcja A) Utwórz nową sesję z profilem

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

Opcja B) Zmień profil domyślnej sesji w kodzie

    boto3.setup_default_session(profile_name='dev')

Opcja C) Zmień profil sesji domyślnej za pomocą zmiennej środowiskowej

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')
Jordon Phillips
źródło
1
Czy zmienna env nie powinna mieć wartości AWS_PROFILE?
Stefano M
Dziękuję za to! Jak dotąd nie udało się znaleźć tych informacji. Wygląda na to, że potrzebowałem tylko kroku 2, aby to zadziałało. Co zrobił krok 1? (ponieważ zmienna dev nie jest używana ani przekazywana do niczego innego?)
Mark
40
To są opcje, a nie kroki. W pierwszej opcji tworzysz nową sesję do użycia zamiast sesji domyślnej. Tak, aby utworzyć klienta z tej sesji zrobiłbyś coś takiego dev.client('s3')zamiastboto3.client('s3')
Jordon Phillips
poza tematem, ipythonrównież mi się przydało.
Mike D
7
Pobierz listę profili za pomocą boto3.session.Session().available_profiles- to lista. Następnie użyj tego, który chcesz @ jordan-phillips.
Daisuke Aramaki
35

Zrób to, aby użyć profilu o nazwie „dev”:

session = boto3.session.Session(profile_name='dev')
s3 = session.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)
asmaier
źródło
24

Ta sekcja dokumentacji boto3 jest pomocna.

Oto, co zadziałało dla mnie:

session = boto3.Session(profile_name='dev')
client = session.client('cloudfront')
mgig
źródło
5

Wystarczy dodać profil do konfiguracji sesji przed wezwaniem klienta. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

MrKulli
źródło