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

128

Я использую библиотеку Python 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

Я думаю, что документы не очень хорошо раскрывают, как это сделать. Однако это поддерживаемая функция в течение некоторого времени, и в этом запросе на перенос есть некоторые детали .

Итак, есть три разных способа сделать это:

Вариант А) Создать новый сеанс с профилем

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

Вариант Б) Изменить профиль сеанса по умолчанию в коде

    boto3.setup_default_session(profile_name='dev')

Вариант C) Измените профиль сеанса по умолчанию с помощью переменной среды

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')
Джордон Филлипс
источник
1
Разве переменная env не должна быть AWS_PROFILE?
Stefano M
Спасибо за это! похоже, нигде не нашел этой информации. Кажется, мне нужен был только шаг 2, чтобы все заработало. Что сделал шаг 1? (поскольку переменная dev не используется и не передается во что-либо еще?)
Марк
40
Это варианты, а не шаги. В первом варианте вы создаете для использования новый сеанс, а не сеанс по умолчанию. Итак, чтобы создать клиента с этим сеансом, вы бы сделали что-то вроде dev.client('s3')вместоboto3.client('s3')
Джордон Филлипс
не по теме, ipythonмне тоже пригодилось.
Mike D
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)
asmaier
источник
25

Этот раздел документации boto3 полезен.

Вот что у меня сработало:

session = boto3.Session(profile_name='dev')
client = session.client('cloudfront')
mgig
источник
5

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

MrKulli
источник