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.


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

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)

24

Bagian dari dokumentasi boto3 ini berguna.

Inilah yang berhasil untuk saya:

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

5

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.