Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pemecahan Masalah Operasi Batch S3
Operasi Batch Amazon S3 memungkinkan Anda melakukan operasi skala besar pada objek Amazon S3. Panduan ini membantu Anda memecahkan masalah umum yang mungkin Anda temui.
Untuk memecahkan masalah dengan Replikasi Batch S3, lihat. Memecahkan masalah replikasi
Ada dua jenis kegagalan utama yang mengakibatkan kesalahan operasi Batch:
-
Kegagalan API — API yang diminta (seperti
CreateJob) gagal dijalankan. -
Job Failure — Permintaan API awal berhasil tetapi pekerjaan gagal, misalnya, karena masalah dengan manifes atau izin ke objek yang ditentukan dalam manifes.
NoSuchJobException
Jenis: Kegagalan API
NoSuchJobExceptionTerjadi ketika Operasi Batch S3 tidak dapat menemukan pekerjaan yang ditentukan. Kesalahan ini dapat terjadi dalam beberapa skenario di luar kedaluwarsa pekerjaan sederhana. Penyebab umum termasuk yang berikut ini.
Job expiration — Pekerjaan secara otomatis dihapus 90 hari setelah mencapai status terminal (
Complete,Cancelled, atauFailed).ID pekerjaan salah - ID pekerjaan yang digunakan
DescribeJobatauUpdateJobStatustidak cocok dengan ID yang dikembalikan olehCreateJob.Wilayah yang salah — Mencoba mengakses pekerjaan di wilayah yang berbeda dari tempat pekerjaan itu dibuat.
Akun salah — Menggunakan ID pekerjaan dari AWS akun yang berbeda.
Kesalahan format Job ID - Kesalahan ketik, karakter tambahan, atau pemformatan yang salah di ID pekerjaan.
Masalah waktu - Memeriksa status pekerjaan segera setelah pembuatan sebelum pekerjaan terdaftar sepenuhnya.
Pesan kesalahan terkait termasuk yang berikut ini.
No such jobThe specified job does not exist
Praktik terbaik untuk mencegah kegagalan NoSuchJobException API
Simpan pekerjaan IDs segera - Simpan ID pekerjaan dari
CreateJobrespons sebelum melakukan panggilan API berikutnya.Terapkan logika coba lagi - Tambahkan backoff eksponensial saat memeriksa status pekerjaan segera setelah pembuatan.
Siapkan pemantauan — Buat CloudWatch alarm untuk melacak penyelesaian pekerjaan sebelum kedaluwarsa 90 hari. Untuk detailnya, lihat Menggunakan CloudWatch alarm di Panduan CloudWatch Pengguna Amazon.
Gunakan wilayah yang konsisten — Pastikan semua operasi pekerjaan menggunakan wilayah yang sama dengan penciptaan lapangan kerja.
Validasi input - Periksa format ID pekerjaan sebelum melakukan panggilan API.
Saat pekerjaan kedaluwarsa
Pekerjaan di status terminal secara otomatis dihapus setelah 90 hari. Untuk menghindari kehilangan informasi pekerjaan, pertimbangkan hal berikut.
Unduh laporan penyelesaian sebelum kedaluwarsa — Untuk petunjuk tentang mengambil dan menyimpan hasil pekerjaan, lihat.
Arsipkan metadata pekerjaan di sistem Anda sendiri — Simpan informasi pekerjaan penting di database atau sistem pemantauan Anda.
Siapkan notifikasi otomatis sebelum batas waktu 90 hari — Gunakan Amazon EventBridge untuk membuat aturan yang memicu pemberitahuan saat pekerjaan selesai. Untuk informasi selengkapnya, lihat Notifikasi Peristiwa Amazon S3.
Memecahkan Masalah NoSuchJobException
Gunakan perintah berikut untuk memverifikasi pekerjaan yang ada di akun dan wilayah Anda.
aws s3control list-jobs --account-id111122223333--regionus-east-1Gunakan comamand berikut untuk mencari di semua status pekerjaan. Status pekerjaan yang mungkin termasuk
Active,Cancelled,Cancelling,Complete,,Completing,Failed,Failing,New,Paused,Pausing,PreparingReady, danSuspended.aws s3control list-jobs --account-id111122223333--job-statusesyour-job-statusGunakan perintah berikut untuk memeriksa apakah pekerjaan itu ada di wilayah lain tempat Anda biasanya membuat pekerjaan.
aws s3control list-jobs --account-id111122223333--regionjob-region-1aws s3control list-jobs --account-id111122223333--regionjob-region-2-
Validasi format ID pekerjaan. Job IDs biasanya berisi 36 karakter, seperti
12345678-1234-1234-1234-123456789012. Periksa spasi tambahan, karakter yang hilang, atau masalah sensitivitas kasus dan verifikasi bahwa Anda menggunakan ID pekerjaan lengkap yang dikembalikan olehCreateJobperintah. -
Gunakan perintah berikut untuk memeriksa CloudTrail log untuk acara penciptaan pekerjaan.
aws logs filter-log-events --log-group-name CloudTrail/S3BatchOperations \ --filter-pattern "{ $.eventName = CreateJob }" \ --start-timetimestamp
AccessDeniedException
Jenis: Kegagalan API
AccessDeniedExceptionHal ini terjadi ketika permintaan Operasi Batch S3 diblokir karena izin yang tidak memadai, operasi yang tidak didukung, atau pembatasan kebijakan. Ini adalah salah satu kesalahan paling umum dalam Operasi Batch. Ini memiliki penyebab umum berikut:
Izin IAM tidak ada - Identitas IAM tidak memiliki izin yang diperlukan untuk Operasi Batch. APIs
Izin S3 tidak memadai - Izin tidak ada untuk mengakses bucket dan objek sumber atau tujuan.
Masalah peran eksekusi Job — Peran eksekusi pekerjaan tidak memiliki izin untuk melakukan operasi yang ditentukan.
Operasi yang tidak didukung — Mencoba menggunakan operasi yang tidak didukung di wilayah saat ini atau tipe bucket.
Masalah akses lintas akun — Izin tidak ada untuk bucket lintas akun atau akses objek.
Pembatasan kebijakan berbasis sumber daya — Kebijakan bucket atau objek ACLs yang memblokir operasi.
Pembatasan Kebijakan Kontrol Layanan (SCP) — Kebijakan tingkat organisasi yang mencegah operasi.
Pesan kesalahan terkait:
Access DeniedUser: arn:aws:iam::account:user/username is not authorized to perform: s3:operationCross-account pass role is not allowedThe bucket policy does not allow the specified operation
Praktik terbaik untuk mencegah kegagalan AccessDeniedException API
Gunakan prinsip hak istimewa terkecil — Berikan hanya izin minimum yang diperlukan untuk operasi spesifik Anda.
Izin uji sebelum pekerjaan besar — Jalankan pekerjaan pengujian kecil untuk memvalidasi izin sebelum memproses ribuan objek.
Gunakan simulator kebijakan IAM — Uji kebijakan sebelum penerapan menggunakan simulator kebijakan IAM. Untuk informasi selengkapnya, lihat pengujian kebijakan IAM dengan simulator kebijakan IAM di Panduan Pengguna IAM.
Terapkan pengaturan lintas akun yang tepat — Periksa konfigurasi akses lintas akun Anda untuk konfigurasi pekerjaan lintas akun. Untuk informasi selengkapnya, lihat tutorial IAM: Mendelegasikan akses di seluruh AWS akun menggunakan peran IAM dalam Panduan Pengguna IAM.
Pantau perubahan izin — Siapkan CloudTrail peringatan untuk modifikasi kebijakan IAM yang mungkin memengaruhi Operasi Batch.
Persyaratan peran dokumen - Pertahankan dokumentasi yang jelas tentang izin yang diperlukan untuk setiap jenis pekerjaan.
Gunakan templat izin umum - Gunakan contoh izin dan templat polcy:
Sumber daya lintas akun di IAM di Panduan Pengguna IAM.
Kontrol akses ke titik akhir VPC menggunakan kebijakan titik akhir dalam Panduan. AWS PrivateLink
AccessDeniedException pemecahan masalah
Ikuti langkah-langkah ini secara sistematis untuk mengidentifikasi dan menyelesaikan masalah izin.
Periksa Operasi yang didukung oleh Operasi Batch S3 operasi yang didukung berdasarkan wilayah. Operasi bucket direktori konfirmasi hanya tersedia di titik akhir Regional dan Zonal. Pastikan operasi didukung untuk kelas penyimpanan bucket Anda.
Gunakan perintah berikut untuk menentukan apakah Anda dapat membuat daftar pekerjaan.
aws s3control list-jobs --account-id111122223333Gunakan perintah berikut untuk memeriksa izin IAM untuk identitas yang meminta. Akun yang menjalankan pekerjaan memerlukan izin berikut:
s3:CreateJob,,s3:DescribeJobs3:ListJobs-s3:UpdateJobPriority,s3:UpdateJobStatus-iam:PassRole.aws sts get-caller-identity111122223333Gunakan perintah berikut untuk memeriksa apakah peran itu ada dan dapat diasumsikan.
aws iam get-role --role-namerole-name-
Gunakan perintah berikut untuk meninjau kebijakan kepercayaan peran. Peran menjalankan pekerjaan harus memiliki yang berikut:
Hubungan kepercayaan yang memungkinkan
batchoperations---s3.amazonaws.com.rproxy.govskope.cauntuk mengambil peran.Operasi yang dilakukan operasi batch (seperti
s3:PutObjectTagginguntuk operasi penandaan).Akses ke ember sumber dan tujuan.
Izin untuk membaca file manifes.
Izin untuk menulis laporan penyelesaian.
aws iam get-role --role-namerole-name--query 'Role.AssumeRolePolicyDocument' Gunakan perintah berikut untuk mengistirahatkan akses ke manifes dan ember sumber.
aws s3 ls s3://bucket-name-
Uji operasi yang dilakukan oleh operasi batch. Misalnya, jika operasi batch melakukan penandaan, beri tag objek sampel di bucket sumber.
Tinjau kebijakan bucket untuk kebijakan yang mungkin menolak operasi.
Periksa objek ACLs jika bekerja dengan kontrol akses lama.
Verifikasi tidak ada Kebijakan Kontrol Layanan (SCPs) yang memblokir operasi.
Konfirmasi kebijakan titik akhir VPC mengizinkan Operasi Batch jika menggunakan titik akhir VPC.
Gunakan perintah berikut untuk digunakan CloudTrail untuk mengidentifikasi kegagalan izin.
aws logs filter-log-events --log-group-name CloudTrail/S3BatchOperations \ --filter-pattern "{ $.errorCode = AccessDenied }" \ --start-timetimestamp
SlowDownError
Jenis: Kegagalan API
SlowDownErrorPengecualian terjadi ketika akun Anda telah melampaui batas tingkat permintaan untuk Operasi Batch S3. APIs Ini adalah mekanisme pelambatan untuk melindungi layanan agar tidak kewalahan oleh terlalu banyak permintaan. Ini memiliki penyebab umum berikut:
Frekuensi permintaan API tinggi - Membuat terlalu banyak panggilan API dalam waktu singkat.
Operasi pekerjaan bersamaan — Beberapa aplikasi atau creating/managing pekerjaan pengguna secara bersamaan.
Skrip otomatis tanpa pembatasan tarif — Skrip yang tidak menerapkan strategi backoff yang tepat.
Polling status pekerjaan terlalu sering — Memeriksa status pekerjaan lebih sering daripada yang diperlukan.
Pola lalu lintas burst — Lonjakan mendadak dalam penggunaan API selama waktu pemrosesan puncak.
Batas kapasitas regional — Melebihi kapasitas permintaan yang dialokasikan untuk wilayah Anda.
Pesan kesalahan terkait:
SlowDownPlease reduce your request rateRequest rate exceeded
Praktik terbaik untuk mencegah kegagalan SlowDownError API
Menerapkan pembatasan tingkat sisi klien — Tambahkan penundaan di antara panggilan API di aplikasi Anda.
Gunakan backoff eksponensial dengan jitter — Acak penundaan coba lagi untuk menghindari masalah kawanan yang menggelegar.
Siapkan logika coba lagi yang tepat - Terapkan percobaan ulang otomatis dengan peningkatan penundaan untuk kesalahan sementara.
Gunakan arsitektur berbasis peristiwa — Ganti polling dengan EventBridge notifikasi untuk perubahan status pekerjaan.
Mendistribusikan beban sepanjang waktu — Pembuatan lapangan kerja yang mengejutkan dan pemeriksaan status di seluruh periode waktu yang berbeda.
Pantau dan waspada pada batas tarif - Siapkan CloudWatch alarm untuk mendeteksi saat Anda mendekati batas.
Sebagian besar AWS SDKs menyertakan logika coba ulang bawaan untuk kesalahan pembatas laju. Konfigurasikan mereka sebagai berikut:
AWS CLI— Gunakan
cli-read-timeoutdancli-connect-timeoutparameter.AWS SDK for Python (Boto3) - Konfigurasikan mode coba lagi dan upaya maksimal dalam konfigurasi klien Anda.
AWS SDK for Java -
RetryPolicyPenggunaanClientConfigurationdan pengaturan.AWS SDK untuk JavaScript — Konfigurasi
maxRetriesdanretryDelayOptions.
Untuk informasi lebih lanjut tentang pola coba lagi dan praktik terbaik, lihat Coba lagi dengan pola backoff di panduan Panduan Preskriptif. AWS
SlowDownError pemecahan masalah
Dalam kode Anda, segera terapkan backoff eksponensial.
contoh dari backoff eksponensial di bash
for attempt in {1..5}; do if aws s3control describe-job --account-id111122223333--job-idjob-id; then break else wait_time=$((2**attempt)) echo "Rate limited, waiting ${wait_time} seconds..." sleep $wait_time fi done-
Gunakan CloudTrail untuk mengidentifikasi sumber volume permintaan tinggi.
aws logs filter-log-events \ --log-group-name CloudTrail/S3BatchOperations \ --filter-pattern "{ $.eventName = CreateJob || $.eventName = DescribeJob }" \ --start-timetimestamp\ --query 'events[*].[eventTime,sourceIPAddress,userIdentity.type,eventName]' Tinjau frekuensi polling.
Hindari memeriksa status pekerjaan lebih dari sekali setiap 30 detik untuk pekerjaan aktif.
Gunakan pemberitahuan penyelesaian pekerjaan alih-alih melakukan polling jika memungkinkan.
Terapkan jitter dalam interval polling Anda untuk menghindari permintaan yang disinkronkan.
-
Optimalkan pola penggunaan API Anda.
Batch beberapa operasi bila memungkinkan.
Gunakan
ListJobsuntuk mendapatkan status beberapa pekerjaan dalam satu panggilan.Cache informasi pekerjaan untuk mengurangi panggilan API yang berlebihan.
Sebarkan penciptaan lapangan kerja sepanjang waktu daripada menciptakan banyak pekerjaan secara bersamaan.
-
Gunakan CloudWatch metrik untuk panggilan API untuk memantau pola permintaan Anda.
aws logs put-metric-filter \ --log-group-name CloudTrail/S3BatchOperations \ --filter-name S3BatchOpsAPICallCount \ --filter-pattern "{ $.eventSource = s3.amazonaws.com && $.eventName = CreateJob }" \ --metric-transformations \ metricName=S3BatchOpsAPICalls,metricNamespace=Custom/S3BatchOps,metricValue=1
InvalidManifestContent
Jenis: Kegagalan Job
InvalidManifestContentPengecualian terjadi ketika ada masalah dengan format file manifes, konten, atau struktur yang mencegah Operasi Batch S3 memproses pekerjaan. Ini memiliki penyebab umum berikut:
Pelanggaran format — Kolom yang diperlukan tidak ada, pembatas yang salah, atau struktur CSV yang salah.
Masalah pengkodean konten - Pengkodean karakter yang salah, penanda BOM, atau karakter non-UTF-8.
Masalah kunci objek - Karakter tidak valid, pengkodean URL yang tidak tepat, atau kunci yang melebihi batas panjang.
Keterbatasan ukuran - Manifest berisi lebih banyak objek daripada dukungan operasi.
Kesalahan format ID versi - Versi cacat atau tidak valid IDs untuk objek berversi.
ETag masalah format — ETag Format yang salah atau tanda kutip yang hilang untuk operasi yang memerlukan ETags.
Data yang tidak konsisten — Format campuran dalam manifes yang sama atau jumlah kolom yang tidak konsisten.
Pesan kesalahan terkait:
Required fields are missing in the schema: + missingFieldsInvalid Manifest ContentThe S3 Batch Operations job failed because it contains more keys than the maximum allowed in a single jobInvalid object key formatManifest file is not properly formattedInvalid version ID formatETag format is invalid
Praktik terbaik untuk mencegah kegagalan InvalidManifestContent pekerjaan
Validasi sebelum diunggah - Uji format manifes dengan pekerjaan kecil sebelum memproses kumpulan data besar.
Gunakan pengkodean yang konsisten — Selalu gunakan pengkodean UTF-8 tanpa BOM untuk file manifes.
Menerapkan standar pembuatan manifes — Buat templat dan prosedur validasi untuk pembuatan manifes.
Menangani karakter khusus dengan benar - URL menyandikan kunci objek yang berisi karakter khusus.
Pantau jumlah objek - Lacak ukuran manifes dan pisahkan pekerjaan besar secara proaktif.
Validasi keberadaan objek — Verifikasi objek ada sebelum memasukkannya ke dalam manifes.
Gunakan AWS alat untuk pembuatan manifes — Leverage AWS CLI
s3api list-objects-v2untuk menghasilkan daftar objek yang diformat dengan benar.
Masalah dan solusi manifes umum:
Kolom wajib hilang - Pastikan manifes Anda mencakup semua kolom yang diperlukan untuk jenis operasi Anda. Kolom hilang yang paling umum adalah Bucket dan Key.
Format CSV salah - Gunakan pembatas koma, pastikan jumlah kolom yang konsisten di semua baris, dan hindari jeda baris yang disematkan di dalam bidang.
Karakter khusus dalam kunci objek — URL menyandikan kunci objek yang berisi spasi, karakter Unicode, atau karakter khusus XHTML (<, >, &, “, ').
File manifes besar — Pisahkan manifes dengan lebih dari batas operasi menjadi beberapa manifes yang lebih kecil dan buat pekerjaan terpisah.
Versi tidak valid IDs - Pastikan versi diformat string IDs alfanumerik dengan benar. Hapus kolom ID versi jika tidak diperlukan.
Masalah pengkodean - Simpan file manifes sebagai UTF-8 tanpa BOM. Hindari menyalin manifes melalui sistem yang dapat mengubah pengkodean.
Untuk spesifikasi dan contoh format manifes terperinci, lihat berikut ini:
InvalidManifestContent pemecahan masalah
Unduh dan periksa file manifes. Verifikasi manifes secara manual memenuhi persyaratan format:
Format CSV dengan pembatas koma.
Pengkodean UTF-8 tanpa BOM.
Jumlah kolom yang konsisten di semua baris.
Tidak ada garis kosong atau spasi tambahan.
Kunci objek dengan benar URL dikodekan jika mengandung karakter khusus.
Gunakan perintah berikut untuk mengunduh file manifes.
aws s3 cp s3://amzn-s3-demo-bucket1/manifest-key./manifest.csv-
Periksa kolom yang diperlukan untuk operasi Anda:
Semua operasi:
Bucket,KeyOperasi penyalinan:
VersionId(opsional)Kembalikan operasi:
VersionId(opsional)Ganti operasi tag: Tidak diperlukan kolom tambahan.
Ganti operasi ACL: Tidak diperlukan kolom tambahan.
Memulai pemulihan:
VersionId(opsional)
-
Periksa batas jumlah objek:
Salin: Maksimal 1 miliar objek.
Hapus: Maksimal 1 miliar objek.
Pulihkan: Maksimal 1 miliar objek.
Penandaan: Maksimal 1 miliar objek.
ACL: Maksimal 1 miliar objek.
-
Buat manifes uji dengan beberapa objek dari manifes asli Anda.
-
Gunakan perintah berikut untuk cehck jika sampel objek dari manifes ada.
aws s3 ls s3://amzn-s3-demo-bucket1/object-key -
Periksa detail kegagalan pekerjaan dan tinjau alasan kegagalan dan detail kesalahan spesifik apa pun dalam deskripsi pekerjaan.
aws s3control describe-job --account-id111122223333--job-idjob-id