Ketika saya hanya menjalankan kode berikut, saya selalu mendapatkan kesalahan ini.
s3 = boto3.resource('s3')
bucket_name = "python-sdk-sample-%s" % uuid.uuid4()
print("Creating new bucket with name:", bucket_name)
s3.create_bucket(Bucket=bucket_name)
Saya telah menyimpan file kredensial saya di
C:\Users\myname\.aws\credentials
, dari mana Boto harus membaca kredensial saya.
Apakah pengaturan saya salah?
Ini adalah keluaran dari boto3.set_stream_logger('botocore', level='DEBUG')
.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Skipping environment variable credential check because profile name was explicitly set.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Looking for credentials via: env
2015-10-24 14:22:28,773 botocore.credentials [DEBUG] Looking for credentials via: shared-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: config-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: ec2-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: boto-config
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: iam-role
boto3.set_stream_logger('botocore', level='DEBUG')
sebelum kode Anda? Ini akan menunjukkan di mana itu mencari kredensial.HOME
untuk diarahkanC:\Users\myname
atau tetapkanAWS_SHARED_CREDENTIALS_FILE
untuk mengarah langsung ke file kredensial Anda.botocore.exceptions.NoRegionError: You must specify a region.
* File konfigurasi saya ↓ terletak di folder yang sama dengan kredentail saya.[default] ap-northeast-1
Jawaban:
coba tentukan kunci secara manual
Pastikan Anda tidak menyertakan ACCESS_ID dan ACCESS_KEY Anda dalam kode secara langsung untuk masalah keamanan. Pertimbangkan untuk menggunakan konfigurasi lingkungan dan memasukkannya ke dalam kode seperti yang disarankan oleh @Tiger_Mike.
Untuk lingkungan Prod, pertimbangkan untuk menggunakan kunci akses yang berputar: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey
sumber
.env
file (tidak dikomit) akan ideal dan lebih baik daripada harus memilih dari~/.aws/
folder.Saya mengalami masalah yang sama dan menemukan bahwa format
~/.aws/credentials
file saya salah.Ini bekerja dengan file yang berisi:
Perhatikan bahwa nama profil harus "
[default]
". Beberapa dokumentasi resmi merujuk ke profil bernama "[credentials]
", yang tidak bekerja untuk saya.sumber
aws configure
juga berfungsi jika Anda menginstal aws-cliJika Anda mencari cara alternatif, coba tambahkan kredensial Anda menggunakan AmazonCLI
dari tipe terminal: -
lalu isi kunci dan wilayah Anda.
sumber
Pastikan file ~ / .aws / credentials Anda di Unix terlihat seperti ini:
Skrip Python Anda akan terlihat seperti ini, dan ini akan berfungsi:
Sumber: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration .
sumber
output = json
biasanya ditempatkan di~/.aws/config
dalam[profile MyProfile1]
bagian. Ini mungkin tidak berfungsi jika ditentukan dalamcredentials
file sebagai gantinya.Instruksi ini untuk mesin windows dengan satu profil pengguna untuk AWS. Pastikan
~/.aws/credentials
file Anda terlihat seperti iniSaya harus menyetel
AWS_DEFAULT_PROFILE
variabel lingkungan untukprofile_name
ditemukan di kredensial Anda.Kemudian python saya bisa terhubung. misalnya dari sini
sumber
Saya juga mengalami masalah yang sama, ini dapat diselesaikan dengan membuat file konfigurasi dan kredensial di direktori home. Di bawah ini menunjukkan langkah-langkah yang saya lakukan untuk mengatasi masalah ini.
Buat file konfigurasi:
Dan di file itu saya memasuki wilayah tersebut
Kemudian buat file kredensial:
Kemudian masukkan kredensial Anda
Setelah mengatur semua ini, maka file python saya untuk menghubungkan ember. Jalankan file ini akan menampilkan semua konten.
Anda juga dapat merujuk tautan di bawah ini:
sumber
dari tipe terminal: -
lalu isi kunci dan wilayah Anda.
setelah ini lakukan langkah selanjutnya gunakan lingkungan apapun. Anda dapat memiliki banyak kunci tergantung akun Anda. Dapat mengelola banyak lingkungan atau kunci
sumber
Saya bekerja untuk perusahaan besar dan mengalami kesalahan yang sama, tetapi membutuhkan penyelesaian yang berbeda. Masalah saya terkait dengan pengaturan proxy. Saya sudah menyiapkan proxy, jadi saya perlu mengatur no_proxy saya ke daftar putih AWS sebelum saya bisa membuat semuanya berfungsi. Anda dapat mengaturnya di skrip bash Anda juga jika Anda tidak ingin membuat kode Python Anda kotor dengan pengaturan os.
Python:
Pesta:
Edit: Di atas asumsikan wilayah S3 Timur AS. Untuk wilayah lain: gunakan s3. [Wilayah] .amazonaws.com dengan wilayah seperti us-east-1 atau us-west-2
sumber
no_proxy
untuk169.254.169.254
sehingga klien AWS bisa mendapatkan layanan metadata untuk menemukan profil misalnya.Boto3 mencari kredensial di folder seperti
Anda harus menyimpan dua file di folder ini
credentials
danconfig
.Anda mungkin ingin memeriksa urutan umum di mana boto3 mencari kredensial di tautan ini . Lihat di bawah sub judul Mengonfigurasi Kredensial .
sumber
Jika Anda yakin Anda mengkonfigurasi aws Anda dengan benar, pastikan saja pengguna proyek dapat membaca dari ./aws atau jalankan proyek Anda sebagai root
sumber
Jika Anda memiliki beberapa profil aws di
~/.aws/credentials
seperti ...Ikuti dua langkah:
Buat satu yang ingin Anda gunakan sebagai default menggunakan
export AWS_DEFAULT_PROFILE=Profile 1
perintah di terminal.Pastikan untuk menjalankan perintah di atas di terminal yang sama dari tempat Anda menggunakan boto3 atau Anda membuka editor. [Pahami skenario berikut]
Skenario:
t1
dant2
.t1
dan membuka JupyterLab atau yang lainnyat2
, Anda akan mendapatkan NoCredentialsError: Tidak dapat menemukan kesalahan kredensial .Larutan:
t1
lalu buka JupyterLab atau lainnya dari terminal yang samat1
.sumber
Buat objek klien S3 dengan kredensial Anda
Itu selalu bagus untuk mendapatkan kredensial dari lingkungan os
sumber