Cara memilih profil AWS saat menggunakan boto3 untuk terhubung ke CloudFront

127

Saya menggunakan pustaka python Boto 3, dan ingin terhubung ke AWS CloudFront. Saya perlu menentukan Profil AWS (AWS Credentials) yang benar, tetapi melihat dokumentasi resmi, saya tidak melihat cara untuk menentukannya.

Saya menginisialisasi klien menggunakan kode: client = boto3.client('cloudfront')

Namun, ini menyebabkannya menggunakan profil default untuk terhubung. Saya tidak dapat menemukan metode untuk menentukan profil mana yang akan digunakan.

Nader A. Jabbar
sumber
Lihat juga: membaca dan mengunduh file dari AWS S3 dengan profil
Martin Thoma
Sudahkah Anda mencoba menggunakan kunci ke dalam kode? (Anda juga dapat menggunakan env var untuk menyembunyikannya dari kode)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Jawaban:

224

Saya pikir dokumentasinya tidak bagus dalam mengungkapkan bagaimana melakukan ini. Namun, ini telah menjadi fitur yang didukung selama beberapa waktu, dan ada beberapa detail dalam permintaan tarik ini .

Jadi ada tiga cara berbeda untuk melakukan ini:

Opsi A) Buat sesi baru dengan profil

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

Opsi B) Ubah profil sesi default dalam kode

    boto3.setup_default_session(profile_name='dev')

Opsi C) Ubah profil sesi default dengan variabel lingkungan

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')
Jordon Phillips
sumber
1
Bukankah sebaiknya variabel env adalah AWS_PROFILE?
Stefano M
Terima kasih untuk itu! sepertinya tidak menemukan informasi itu di mana pun sejauh ini. Sepertinya saya hanya perlu langkah 2 untuk membuat ini berfungsi. Apa yang dilakukan langkah 1? (karena variabel dev tidak digunakan atau diteruskan ke yang lain?)
Tandai
40
Itu adalah opsi, bukan langkah. Di opsi pertama Anda membuat sesi baru untuk digunakan daripada sesi default. Jadi untuk membuat klien dengan sesi bahwa Anda akan melakukan sesuatu seperti dev.client('s3')bukanboto3.client('s3')
Jordon Phillips
off topic, ipythonjuga berguna bagi saya.
Mike D
7
Dapatkan daftar profil menggunakan boto3.session.Session().available_profiles- ini adalah daftar. Kemudian gunakan yang Anda inginkan @ jordan-phillips.
Daisuke Aramaki
35

Lakukan ini untuk menggunakan profil dengan nama 'dev':

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

Bagian dari dokumentasi boto3 ini berguna.

Inilah yang berhasil untuk saya:

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

Cukup tambahkan profil ke konfigurasi sesi sebelum panggilan klien. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

MrKulli
sumber