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ć.


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')

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)

24

Ta sekcja dokumentacji boto3 jest pomocna.

Oto, co zadziałało dla mnie:

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

5

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.