Як вибрати профіль AWS при використанні boto3 для підключення до CloudFront


127

Я використовую бібліотеку пітонів Boto 3 і хочу підключитися до AWS CloudFront. Мені потрібно вказати правильний профіль AWS (AWS Credentials), але, дивлячись на офіційну документацію, я не бачу способу її вказати.

Я ініціалізую клієнта за допомогою коду: client = boto3.client('cloudfront')

Однак це призводить до використання за допомогою типового профілю для підключення. Не вдалося знайти метод, де я можу вказати, який профіль використовувати.


Дивіться також: читайте та завантажуйте файл із AWS S3 з профілями
Мартін Тома

ви намагалися використовувати ключі в коді? (також ви можете використовувати env var, щоб сховати його від коду)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Іван Карраско Кіроз

Відповіді:


225

Я думаю, що документи не чудові в тому, щоб розкрити, як це зробити. Однак ця функція підтримується деякий час, і в цьому запиті на витягнення є деякі деталі .

Отже, є три різні способи зробити це:

Варіант A) Створіть новий сеанс за допомогою профілю

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

Варіант B) Змінення профілю сеансу за замовчуванням у коді

    boto3.setup_default_session(profile_name='dev')

Варіант C) Змінення профілю сеансу за замовчуванням за допомогою змінної середовища

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

1
Чи не повинна змінна env бути AWS_PROFILE?
Стефано М

Дякую за це! Схоже, ніколи не знаходили цієї інформації ніде. Здається, мені потрібен був лише крок 2, щоб зробити цю роботу. Що зробив крок 1? (оскільки змінна dev не використовується або передається ні в що інше?)
Марк

40
Це варіанти, а не кроки. У першому варіанті ви створюєте новий сеанс для використання, а не сеансу за замовчуванням. Отже, щоб створити клієнта на цьому сеансі, ви зробили б щось подібне dev.client('s3')замістьboto3.client('s3')
Джордон Філіпс

поза темою, ipythonтакож було корисно для мене.
Майк Д

7
Отримайте список профілів за допомогою boto3.session.Session().available_profiles- це список. Потім використовуйте той, який ви хочете @ jordan-phillips.
Дайсуке Арамакі

35

Зробіть це, щоб використовувати профіль з назвою 'dev':

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

24

Цей розділ документації boto3 є корисним.

Ось що для мене спрацювало:

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

5

Просто додайте профіль до конфігурації сеансу перед викликом клієнта. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.