

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan pustaka Python dengan Glue AWS
<a name="aws-glue-programming-python-libraries"></a>

 Anda dapat menginstal modul dan pustaka Python tambahan untuk digunakan dengan Glue AWS ETL. Untuk AWS Glue 2.0 ke atas, AWS Glue menggunakan Python Package Installer (pip3) untuk menginstal modul tambahan yang digunakan oleh Glue ETL. AWS AWS Glue menyediakan beberapa opsi untuk membawa modul Python tambahan ke lingkungan kerja AWS Glue Anda. Anda dapat menggunakan `--additional-python-modules` parameter untuk membawa modul baru menggunakan file zip yang berisi roda Python yang dibundel (juga dikenal sebagai “zip roda”, tersedia untuk AWS Glue 5.0 ke atas), file roda Python individual, file persyaratan (requirements.txt, tersedia untuk AWS Glue 5.0 dan di atas), atau daftar modul Python yang dipisahkan koma. Ini juga dapat digunakan untuk mengubah versi modul python yang disediakan di lingkungan AWS Glue (lihat [Modul Python sudah disediakan di Glue AWS](#glue-modules-provided) untuk lebih jelasnya). 

**Topics**
+ [Menginstal modul Python tambahan dengan pip di AWS Glue 2.0 atau yang lebih baru](#addl-python-modules-support)
+ [Termasuk file Python dengan fitur asli PySpark](#extra-py-files-support)
+ [Skrip pemrograman yang menggunakan transformasi visual](#aws-glue-programming-with-cvt)
+ [Pustaka ritsleting untuk dimasukkan](#aws-glue-programming-python-libraries-zipping)
+ [Memuat pustaka Python di notebook Glue Studio AWS](#aws-glue-programming-python-libraries-notebooks)
+ [Memuat pustaka Python di titik akhir pengembangan di Glue 0.9/1.0 AWS](#aws-glue-programming-python-libraries-dev-endpoint)
+ [Menggunakan pustaka Python dalam pekerjaan atau JobRun](#aws-glue-programming-python-libraries-job)
+ [Analisis dependensi Python secara proaktif](#aws-glue-programming-analyzing-python-dependencies)
+ [Modul Python sudah disediakan di Glue AWS](#glue-modules-provided)
+ [Lampiran A: Membuat Artifak Zip Roda](#glue-python-library-zip-of-wheels-appendix)
+ [Lampiran B: Detail lingkungan AWS Glue](#glue-python-libraries-environment-details)

## Menginstal modul Python tambahan dengan pip di AWS Glue 2.0 atau yang lebih baru
<a name="addl-python-modules-support"></a>

AWS Glue menggunakan Python Package Installer (pip3) untuk menginstal modul tambahan yang akan digunakan oleh Glue ETL. AWS Anda dapat menggunakan `--additional-python-modules` parameter dengan daftar modul Python yang dipisahkan koma untuk menambahkan modul baru atau mengubah versi modul yang ada. Anda dapat menginstal artefak roda yang dibangun baik melalui ritsleting roda atau artefak roda mandiri dengan mengunggah file ke Amazon S3, lalu menyertakan jalur ke objek Amazon S3 dalam daftar modul Anda. Untuk informasi selengkapnya tentang pengaturan parameter pekerjaan, lihat [Menggunakan parameter pekerjaan di pekerjaan AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html).

 Anda dapat meneruskan opsi tambahan ke pip3 dengan parameter. `--python-modules-installer-option` Misalnya, Anda dapat meneruskan `--only-binary` untuk memaksa pip untuk menginstal hanya artefak pra-bangun untuk paket yang ditentukan oleh. `--additional-python-modules` Untuk contoh lainnya, lihat [Membangun modul Python dari roda untuk beban kerja Spark ETL menggunakan](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/) Glue 2.0. AWS 

### Praktik Terbaik untuk Manajemen Ketergantungan Python
<a name="glue-python-library-best-practices"></a>

Untuk beban kerja produksi, AWS Glue merekomendasikan untuk mengemas semua dependensi Python Anda sebagai file roda dalam satu artefak zip. Pendekatan ini menyediakan:
+ **Eksekusi deterministik**: Kontrol yang tepat atas versi paket mana yang diinstal
+ **Keandalan**: Tidak ada ketergantungan pada repositori paket eksternal selama eksekusi pekerjaan
+ **Kinerja**: Operasi unduhan tunggal alih-alih beberapa panggilan jaringan
+ **Instalasi offline**: Bekerja di lingkungan VPC pribadi tanpa akses internet

#### Pertimbangan Penting
<a name="glue-python-library-important-considerations"></a>

Di bawah [model tanggung jawab AWS bersama](https://aws.amazon.com/compliance/shared-responsibility-model/), Anda bertanggung jawab untuk mengelola modul Python tambahan, pustaka, dan dependensinya. Hal ini mencakup:
+ **Pembaruan keamanan**: Memperbarui paket secara teratur untuk mengatasi kerentanan keamanan
+ **Kompatibilitas versi**: Memastikan paket kompatibel dengan versi AWS Glue Anda
+ **Pengujian**: Memvalidasi bahwa dependensi paket Anda bekerja dengan benar di lingkungan Glue

Jika Anda memiliki dependensi minimal, Anda dapat mempertimbangkan untuk menggunakan file roda individual sebagai gantinya.

### (Disarankan) Memasang pustaka Python tambahan di AWS Glue 5.0 atau lebih tinggi menggunakan Zip of Wheels
<a name="glue-python-library-installing-zip-of-wheels"></a>

AWS Glue 5.0 dan di atasnya mendukung pengemasan beberapa file roda ke dalam artefak zip tunggal yang berisi roda Python yang dibundel untuk manajemen ketergantungan yang lebih andal dan deterministik. Untuk menggunakan pendekatan ini, buat file zip yang berisi semua dependensi roda Anda dan dependensi transitifnya dengan `.gluewheels.zip` akhiran, unggah ke Amazon S3, dan referensikan menggunakan parameter. `--additional-python-modules` Pastikan untuk menambahkan `--no-index` ke parameter `--python-modules-installer-option` pekerjaan. Dengan konfigurasi ini, file zip of wheels pada dasarnya bertindak sebagai indeks lokal untuk pip untuk menyelesaikan dependensi dari saat runtime. Ini menghilangkan dependensi pada repositori paket eksternal seperti PyPI selama pelaksanaan pekerjaan, memberikan stabilitas dan konsistensi yang lebih besar untuk beban kerja produksi. Contoh: 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/zip-of-wheels-1.0.0.gluewheels.zip
--python-modules-installer-option --no-index
```

Untuk Petunjuk tentang cara membuat file zip roda, lihat[Lampiran A: Membuat Artifak Zip Roda](#glue-python-library-zip-of-wheels-appendix).

### Menginstal pustaka Python tambahan menggunakan Wheel
<a name="glue-python-library-installing-wheel"></a>

AWS Glue mendukung penginstalan paket Python khusus menggunakan file wheel (.whl) yang disimpan di Amazon S3. Untuk menyertakan file roda dalam pekerjaan AWS Glue Anda, berikan daftar terpisah koma dari file roda Anda yang disimpan di s3 ke parameter pekerjaan. `--additional-python-modules` Contoh: 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl
```

Pendekatan ini juga mendukung ketika Anda memerlukan distribusi khusus, atau paket dengan dependensi asli yang telah dikompilasi sebelumnya untuk sistem operasi yang benar. Untuk contoh lainnya, lihat [Membangun modul Python dari roda untuk beban kerja Spark ETL menggunakan](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/) Glue 2.0. AWS 

### Menginstal pustaka Python tambahan di AWS Glue 5.0 atau lebih tinggi menggunakan requirements.txt
<a name="addl-python-modules-requirements-txt"></a>

Di AWS Glue 5.0\$1, Anda dapat memberikan standar defacto `requirements.txt` untuk mengelola dependensi pustaka Python. Untuk melakukan itu, berikan dua parameter pekerjaan berikut:
+ Kunci: `--python-modules-installer-option`

  Nilai: `-r`
+ Kunci: `--additional-python-modules`

  Nilai: `s3://path_to_requirements.txt`

AWS Glue 5.0 node awalnya memuat pustaka python yang ditentukan dalam. `requirements.txt`

Berikut contoh requirements.txt:

```
awswrangler==3.9.1
elasticsearch==8.15.1
PyAthena==3.9.0
PyMySQL==1.1.1
PyYAML==6.0.2
pyodbc==5.2.0
pyorc==0.9.0
redshift-connector==2.1.3
scipy==1.14.1
scikit-learn==1.5.2
SQLAlchemy==2.0.36
```

**penting**  
Gunakan opsi ini dengan hati-hati, terutama dalam beban kerja produksi. Menarik dependensi dari PyPI saat runtime sangat berisiko karena Anda tidak dapat memastikan artefak apa yang diselesaikan oleh pip artefak. Menggunakan versi pustaka yang tidak disematkan sangat berisiko karena menarik versi terbaru dari modul python, yang dapat memperkenalkan perubahan yang melanggar atau membawa modul python yang tidak kompatibel. Ini dapat mengakibatkan kegagalan pekerjaan karena kegagalan instalasi python di lingkungan kerja AWS Glue. Sementara menyematkan versi pustaka meningkatkan stabilitas, resolusi pip masih belum sepenuhnya deterministik, sehingga masalah serupa dapat muncul. Sebagai praktik terbaik, AWS Glue merekomendasikan penggunaan artefak beku seperti ritsleting roda atau file roda individu (lihat [(Disarankan) Memasang pustaka Python tambahan di AWS Glue 5.0 atau lebih tinggi menggunakan Zip of Wheels](#glue-python-library-installing-zip-of-wheels) untuk lebih jelasnya). 

**penting**  
Jika Anda tidak menyematkan versi dependensi transitif Anda, dependensi utama dapat menarik versi dependensi transitif yang tidak kompatibel. Sebagai praktik terbaik, semua versi pustaka harus disematkan untuk meningkatkan konsistensi dalam pekerjaan AWS Glue. Lebih baik lagi, AWS Glue merekomendasikan untuk mengemas dependensi Anda ke dalam file zip roda untuk memastikan konsistensi dan keandalan maksimum untuk beban kerja produksi Anda. 

### Menginstal pustaka Python tambahan yang secara langsung dikonfigurasi sebagai daftar dipisahkan koma
<a name="glue-python-library-installing-comma-separated-list"></a>

Untuk memperbarui atau menambahkan modul Python baru AWS Glue memungkinkan melewati `--additional-python-modules` parameter dengan daftar modul Python yang dipisahkan koma sebagai nilai. Misalnya untuk memperbarui/menambahkan modul scikit-learn gunakan kunci/nilai berikut:. `"--additional-python-modules", "scikit-learn==0.21.3"` Anda memiliki dua opsi untuk langsung mengkonfigurasi modul python.
+ **Modul Python yang disematkan**

  `"--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6"`
+ **Modul Python yang tidak disematkan: (Tidak disarankan untuk Beban Kerja Produksi)**

  `"--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"`

  ATAU

  `"--additional-python-modules", "scikit-learn,ephem"`

**penting**  
Gunakan opsi ini dengan hati-hati, terutama dalam beban kerja produksi. Menarik dependensi dari PyPI saat runtime sangat berisiko karena Anda tidak dapat memastikan artefak apa yang diselesaikan oleh pip artefak. Menggunakan versi pustaka yang tidak disematkan sangat berisiko karena menarik versi terbaru dari modul python, yang dapat memperkenalkan perubahan yang melanggar atau membawa modul python yang tidak kompatibel. Ini dapat mengakibatkan kegagalan pekerjaan karena kegagalan instalasi python di lingkungan kerja AWS Glue. Sementara menyematkan versi pustaka meningkatkan stabilitas, resolusi pip masih belum sepenuhnya deterministik, sehingga masalah serupa dapat muncul. Sebagai praktik terbaik, AWS Glue merekomendasikan penggunaan artefak beku seperti ritsleting roda atau file roda individu (lihat [(Disarankan) Memasang pustaka Python tambahan di AWS Glue 5.0 atau lebih tinggi menggunakan Zip of Wheels](#glue-python-library-installing-zip-of-wheels) untuk lebih jelasnya).

**penting**  
Jika Anda tidak menyematkan versi dependensi transitif Anda, dependensi utama dapat menarik versi dependensi transitif yang tidak kompatibel. Sebagai praktik terbaik, semua versi pustaka harus disematkan untuk meningkatkan konsistensi dalam pekerjaan AWS Glue. Lebih baik lagi, AWS Glue merekomendasikan untuk mengemas dependensi Anda ke dalam file zip roda untuk memastikan konsistensi dan keandalan maksimum untuk beban kerja produksi Anda. 

## Termasuk file Python dengan fitur asli PySpark
<a name="extra-py-files-support"></a>

AWS Glue menggunakan PySpark untuk menyertakan file Python dalam pekerjaan AWS Glue ETL. Anda akan ingin menggunakan `--additional-python-modules` untuk mengelola dependensi Anda bila tersedia. Anda dapat menggunakan parameter `--extra-py-files` pekerjaan untuk menyertakan file Python. Dependensi harus di-host di Amazon S3 dan nilai argumen harus berupa daftar jalur Amazon S3 yang dibatasi koma tanpa spasi. Fungsionalitas ini berperilaku seperti manajemen ketergantungan Python yang akan Anda gunakan dengan Spark. Untuk informasi selengkapnya tentang manajemen ketergantungan Python di Spark, lihat halaman [Menggunakan Fitur PySpark Asli](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-pyspark-native-features) di dokumentasi Apache Spark. `--extra-py-files`berguna dalam kasus di mana kode tambahan Anda tidak dikemas, atau saat Anda memigrasikan program Spark dengan rantai alat yang ada untuk mengelola dependensi. Agar alat ketergantungan Anda dapat dipertahankan, Anda harus menggabungkan dependensi Anda sebelum mengirimkan. 

## Skrip pemrograman yang menggunakan transformasi visual
<a name="aws-glue-programming-with-cvt"></a>

 Saat Anda membuat pekerjaan AWS Glue menggunakan antarmuka visual AWS Glue Studio, Anda dapat mengubah data Anda dengan node transformasi data terkelola dan transformasi visual khusus. Untuk informasi selengkapnya tentang node transformasi data terkelola, lihat[Transformasi data dengan transformasi AWS Glue terkelola](edit-jobs-transforms.md). Untuk informasi selengkapnya tentang transformasi visual kustom, lihat[Mengubah data dengan transformasi visual kustom](custom-visual-transform.md). Skrip yang menggunakan transformasi visual hanya dapat dihasilkan ketika **Bahasa** pekerjaan Anda diatur untuk menggunakan Python.

 Saat membuat pekerjaan AWS Glue menggunakan transformasi visual, AWS Glue Studio akan menyertakan transformasi ini di lingkungan runtime menggunakan `--extra-py-files` parameter dalam konfigurasi pekerjaan. Untuk informasi selengkapnya tentang parameter pekerjaan, lihat[Menggunakan parameter pekerjaan dalam pekerjaan AWS Glue](aws-glue-programming-etl-glue-arguments.md). Saat membuat perubahan pada skrip atau lingkungan runtime yang dihasilkan, Anda harus mempertahankan konfigurasi pekerjaan ini agar skrip Anda berhasil berjalan.

## Pustaka ritsleting untuk dimasukkan
<a name="aws-glue-programming-python-libraries-zipping"></a>

Kecuali sebuah perpustakaan terkandung dalam satu file `.py`, ia harus dikemas dalam sebuah arsip `.zip`. Direktori paket harus berada pada akar dari arsip, dan harus berisi file `__init__.py` untuk paket. Python kemudian akan dapat mengimpor paket tersebut dengan cara normal.

Jika perpustakaan anda hanya terdiri dari sebuah modul Python tunggal dalam satu file `.py`, Anda tidak perlu menempatkannya dalam sebuah file `.zip`.

## Memuat pustaka Python di notebook Glue Studio AWS
<a name="aws-glue-programming-python-libraries-notebooks"></a>

 Untuk menentukan library Python di notebook AWS Glue Studio, lihat Menginstal modul Python [tambahan](https://docs.aws.amazon.com/glue/latest/dg/manage-notebook-sessions.html#specify-default-modules). 

## Memuat pustaka Python di titik akhir pengembangan di Glue 0.9/1.0 AWS
<a name="aws-glue-programming-python-libraries-dev-endpoint"></a>

Jika Anda menggunakan set perpustakaan yang berbeda untuk skrip ETL yang berbeda, maka Anda dapat mengatur titik akhir pengembangan terpisah untuk setiap set, atau Anda dapat menimpa file `.zip` perpustakaan yang dimuat titik akhir pengembangan Anda setiap kali Anda beralih skrip.

Anda dapat menggunakan konsol untuk menentukan satu atau beberapa perpustakaan file .zip untuk sebuah titik akhir pengembangan ketika Anda membuatnya. Setelah menetapkan nama dan IAM role, pilih **Perpustakaan Skrip dan parameter tugas (opsional)** dan masukkan path Amazon S3 lengkap ke file `.zip` perpustakaan Anda dalam kotak **path perpustakaan Python**. Contoh:

```
s3://bucket/prefix/site-packages.zip
```

Jika Anda mau, Anda dapat menentukan beberapa path lengkap ke file, memisahkannya dengan koma tetapi tanpa spasi, seperti ini:

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Jika Anda kemudian memperbarui file `.zip`, Anda dapat menggunakan konsol untuk mengimpornya kembali ke titik akhir pengembangan Anda. Arahkan ke titik akhir developer yang dimaksud, centang kotak di sampingnya, dan pilih **Memperbarui perpustakaan ETL** dari menu **Tindakan**.

Dengan cara yang sama, Anda dapat menentukan file perpustakaan menggunakan AWS Glue APIs. Ketika Anda membuat sebuah titik akhir pengembangan dengan memanggil [CreateDevEndpoint tindakan (Python: create\$1dev\$1endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-CreateDevEndpoint), Anda dapat menentukan satu atau beberapa path lengkap ke perpustakaan di parameter `ExtraPythonLibsS3Path`, dalam panggilan yang terlihat seperti ini:

```
dep = glue.create_dev_endpoint(
             EndpointName="testDevEndpoint",
             RoleArn="arn:aws:iam::123456789012",
             SecurityGroupIds="sg-7f5ad1ff",
             SubnetId="subnet-c12fdba4",
             PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...",
             NumberOfNodes=3,
             ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")
```

Ketika Anda memperbarui titik akhir pengembangan, Anda juga dapat memperbarui perpustakaan yang dimuatnya menggunakan objek [DevEndpointCustomLibraries](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-DevEndpointCustomLibraries) dan pengaturan parameter `UpdateEtlLibraries ` untuk `True` ketika memanggil [UpdateDevEndpoint (update\$1dev\$1endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-UpdateDevEndpoint).

## Menggunakan pustaka Python dalam pekerjaan atau JobRun
<a name="aws-glue-programming-python-libraries-job"></a>

Ketika Anda membuat sebuah Tugas baru pada konsol, Anda dapat menentukan satu atau beberapa perperpustakaanan file .zip dengan memilih **Perpustakaan skrip dan parameter tugas (opsional)** dan memasukkan path perpustakaan Amazon S3 lengkap dengan cara yang sama saat membuat titik akhir pengembangan:

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Jika Anda memanggil [CreateJob (create\$1job)](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-CreateJob), Anda dapat menentukan satu atau beberapa path lengkap ke perpustakaan default menggunakan parameter `--extra-py-files` default, seperti ini:

```
job = glue.create_job(Name='sampleJob',
                      Role='Glue_DefaultRole',
                      Command={'Name': 'glueetl',
                               'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'},
                      DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})
```

Kemudian ketika Anda memulai JobRun, Anda dapat mengganti pengaturan pustaka default dengan yang berbeda:

```
runId = glue.start_job_run(JobName='sampleJob',
                           Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})
```

## Analisis dependensi Python secara proaktif
<a name="aws-glue-programming-analyzing-python-dependencies"></a>

 Untuk secara proaktif mengidentifikasi potensi masalah ketergantungan sebelum menerapkan ke AWS Glue, Anda dapat menggunakan alat analisis ketergantungan untuk memvalidasi paket Python Anda terhadap lingkungan Glue target Anda. AWS 

 AWS menyediakan alat analisa ketergantungan Python open-source yang dirancang khusus untuk lingkungan Glue. AWS Alat ini tersedia di repositori sampel AWS Glue dan dapat digunakan secara lokal untuk memvalidasi dependensi Anda sebelum penerapan. 

 Analisis ini membantu memastikan dependensi Anda mengikuti praktik yang disarankan untuk menyematkan semua versi pustaka untuk penerapan produksi yang konsisten. Untuk lebih jelasnya, silakan lihat [README](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/glue_python_dependency_analyzer) alat. 

### Menggunakan AWS Glue Dependency Analyzer
<a name="w2aac67c11c14c18c37c11b1"></a>

 AWS Glue Python Dependency Analyzer membantu mengidentifikasi dependensi yang tidak disematkan dan konflik versi dengan mensimulasikan instalasi pip dengan batasan khusus platform yang sesuai dengan lingkungan Glue target Anda. AWS 

```
# Analyze a single Glue job
python glue_dependency_analyzer.py -j my-glue-job

# Analyze multiple jobs with specific AWS configuration
python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2
```

 Alat ini akan menandai: 
+  Dependensi yang tidak disematkan yang dapat menginstal versi berbeda di seluruh proses pekerjaan 
+  Konflik versi antar paket 
+  Dependensi tidak tersedia untuk lingkungan Glue AWS target Anda 

## Menganalisis dan memperbaiki kegagalan pekerjaan karena dependensi Python dengan Pengembang Amazon Q
<a name="aws-glue-programming-analyze-job-failures-with-amazon-q"></a>

 Amazon Q Developer adalah asisten percakapan yang didukung kecerdasan buatan (AI) generatif yang dapat membantu Anda memahami, membangun, memperluas, dan mengoperasikan AWS aplikasi. Anda dapat mengunduhnya dengan mengikuti petunjuk di Panduan Memulai untuk Amazon Q. 

 Amazon Q Developer dapat digunakan untuk menganalisis dan memperbaiki kegagalan pekerjaan karena ketergantungan python. Kami menyarankan untuk menggunakan prompt berikut dengan mengganti <Job-Name>placeholder pekerjaan dengan nama pekerjaan lem Anda. 

```
I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available.

Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment.

Step 1: Root Cause Analysis
• Retrieve the most recent failed job run ID for the specified Glue job
• Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix
• Analyze the logs to identify:
  • The recently added or modified Python module that triggered the dependency conflict
  • The specific dependency chain causing the installation failure
  • Version compatibility conflicts between required and existing modules

Step 2: Baseline Configuration Identification
• Locate the last successful job run ID prior to the dependency failure
• Document the Python module versions that were functioning correctly in that baseline run
• Establish the compatible version constraints for conflicting dependencies

Step 3: Targeted Resolution Implementation
• Apply pinning by updating the job's additional_python_modules parameter
• Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary
• Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints
• Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions.

Implementation Example:
Scenario: Recently added pandas==2.0.0 to additional_python_modules
Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20)
Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5"
Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version

Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.
```

 Prompt menginstruksikan Q untuk: 

1. Ambil ID run pekerjaan gagal terbaru

1. Temukan log dan detail terkait

1. Temukan pekerjaan yang berhasil dijalankan untuk mendeteksi paket Python yang diubah

1. Buat perbaikan konfigurasi apa pun dan picu uji coba lain

## Modul Python sudah disediakan di Glue AWS
<a name="glue-modules-provided"></a>

Untuk mengubah versi modul yang disediakan ini, berikan versi baru dengan parameter `--additional-python-modules` pekerjaan.

------
#### [ AWS Glue version 5.1 ]

AWS Glue versi 5.1 menyertakan modul Python berikut di luar kotak:
+ aiobotocore==2.25.1
+ aiohappyeyeballs==2.6.1
+ aiohttp = 3.13.2
+ aioitertools==0.12.0
+ aiosignal== 1.4.0
+ appdirs==1.4.4
+ attrs==25.4.0
+ boto3 = 1.40.61
+ botocore==1.40.61
+ sertifikat = 2025.10.5
+ charset-normalizer = 3.4.4
+ koreografer==1.2.0
+ kontur = 1.3.3
+ pengendara sepeda = 0.12.1
+ distlib==0.4.0
+ Filelock==3.20.0
+ alat font==4.60.1
+ daftar beku==1.8.0
+ fsspec==2025.10.0
+ idna==3.11
+ iniconfig==2.3.0
+ jmespath==1.0.1
+ kaleido==1.2.0
+ kiwisolver==1.4.9
+ logistro==2.0.1
+ matplotlib==3.10.7
+ multidikt=6.7.0
+ narwhals==2.10.2
+ numpy = 2.3.4
+ orjson==3.11.4
+ pengepakan = 25.0
+ panda ==2.3.3
+ bantal==12.0.0
+ pip=24.0
+ platform==4.5.0
+ plot== 6.4.0
+ pluggy==1.6.0
+ propcache==0.4.1
+ pyarrow = 22.0.0
+ Kerdil ==2.19.2
+ pyparsing = 3.2.5
+ pytest-timeout = 2.4.0
+ pytest==8.4.2
+ python-dateutil==2.9.0.post0
+ pytz=2025.2
+ permintaan==2.32.5
+ s3fs==2025.10.0
+ s3transfer== 0.14.0
+ pelautan==0.13.2
+ setuptool== 79.0.1
+ simplejson==3.20.2
+ enam==1.17.0
+ keuletan==9.1.2
+ typing\$1extensions==4.15.0
+ tzdata ==2025.2
+ urllib3==2.5.0
+ uv = 0.9.7
+ virtualenv = 20.35.4
+ bungkus=1.17.3
+ yarl=1.22.0

------
#### [ AWS Glue version 5.0 ]

AWS Glue versi 5.0 menyertakan modul Python berikut di luar kotak:
+ aiobotocore==2.13.1
+ aiohappyeyeballs==2.3.5
+ aiohttp = 3.10.1
+ aioitertools==0.11.0
+ aiosignal== 1.3.1
+ appdirs==1.4.4
+ attrs==24.2.0
+ boto3 = 1.34.131
+ botocore==1.34.131
+ sertifikasi = 2024.7.4
+ charset-normalizer = 3.3.2
+ kontur ==1.2.1
+ pengendara sepeda = 0.12.1
+ alat font==4.53.1
+ daftar beku==1.4.1
+ fsspec==2024.6.1
+ idna==2.10
+ jmespath==0.10.0
+ kaleido==0.2.1
+ kiwisolver==1.4.5
+ matplotlib==3.9.0
+ multidikt = 6.0.5
+ numpy = 1.26.4
+ pengepakan== 24.1
+ panda ==2.2.2
+ bantal==10.4.0
+ pip=23.0.1
+ plot== 5.23.0
+ pyarrow = 17.0.0
+ pyparsing = 3.1.2
+ python-dateutil==2.9.0.post0
+ pytz==2024.1
+ permintaan==2.32.2
+ s3fs==2024.6.1
+ s3transfer = 0.10.2
+ pelautan==0.13.2
+ setuptool=59.6.0
+ enam==1.16.0
+ keuletan==9.0.0
+ tzdata ==2024.1
+ urllib3==1.25.10
+ virtualenv = 20.4.0
+ bungkus=1.16.0
+ yarl=1.9.4

------
#### [ AWS Glue version 4.0 ]

AWS Glue versi 4.0 menyertakan modul Python berikut di luar kotak:
+ aiobotocore==2.4.1
+ aiohttp = 3.8.3
+ aioitertools==0.11.0
+ aiosignal== 1.3.1
+ batas waktu asinkron = 4.0.2
+ asynctest = 0.13.0
+ attrs==22.2.0
+ avro-python3 = 1.10.2
+ boto3 = 1.24.70
+ botocore==1.27.59
+ sertifikasi = 2021.5.30
+ chardet==3.0.4
+ charset-normalizer = 2.1.1
+ klik==8.1.3
+ cycler==0.10.0
+ Cython==0.29.32
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata== 5.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kaleido==0.2.1
+ kiwisolver==1.4.4
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidikt = 6.0.4
+ nltk== 3.7
+ numpy = 1.23.5
+ pengepakan== 23.0
+ panda ==1.5.1
+ patsy==0.5.1
+ Bantal==9.4.0
+ pip=23.0.1
+ plot== 5.16.0
+ pmdarima==2.0.1
+ ptvsd==4.3.2
+ pyarrow = 10.0.0
+ pydevd=2.5.0
+ pyhocon==0.3.58
+ PyMySQL=1.0.2
+ pyparsing = 2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ Pyyaml==6.0.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2022.11.0
+ s3transfer==0.6.0
+ scikit-belajar==1.1.3
+ scipy==1.9.3
+ setuptool== 49.1.3
+ enam==1.16.0
+ statsmodels==0.13.5
+ subprocess32==3.5.4
+ simpati=1,8
+ tbats==1.1.0
+ threadpoolctl = 3.1.0
+ tqdm = 4.64.1
+ typing\$1extensions==4.4.0
+ urllib3==1.25.11
+ roda==0.37.0
+ bungkus=1.14.1
+ yarl=1.8.2
+ ritsleting = 3.10.0

------
#### [ AWS Glue version 3.0 ]

AWS Glue versi 3.0 menyertakan modul Python berikut di luar kotak:,
+ aiobotocore==1.4.2
+ aiohttp = 3.8.3
+ aioitertools==0.11.0
+ aiosignal== 1.3.1
+ batas waktu asinkron = 4.0.2
+ asynctest = 0.13.0
+ attrs==22.2.0
+ avro-python3 = 1.10.2
+ boto3 = 1.18.50
+ botocore==1.21.50
+ sertifikasi = 2021.5.30
+ chardet==3.0.4
+ charset-normalizer = 2.1.1
+ klik==8.1.3
+ cycler==0.10.0
+ Cython==0.29.4
+ dokumen==0.17.1
+ enum34==1.1.10
+ daftar beku==1.3.3
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata== 6.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kiwisolver==1.3.2
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidikt = 6.0.4
+ nltk = 3.6.3
+ numpy = 1.19.5
+ pengepakan== 23.0
+ panda ==1.3.2
+ patsy==0.5.1
+ Bantal==9.4.0
+ pip=23.0
+ pmdarima==1.8.2
+ ptvsd==4.3.2
+ pyarrow = 5.0.0
+ pydevd=2.5.0
+ pyhocon==0.3.58
+ PyMySQL=1.0.2
+ pyparsing = 2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ Pyyaml==5.4.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2021.8.1
+ s3transfer== 0.5.0
+ scikit-belajar==0.24.2
+ scipy==1.7.1
+ enam==1.16.0
+ Percikan = 1.0
+ statsmodels==0.12.2
+ subprocess32==3.5.4
+ simpati=1,8
+ tbats==1.1.0
+ threadpoolctl = 3.1.0
+ tqdm = 4.64.1
+ typing\$1extensions==4.4.0
+ urllib3==1.25.11
+ roda==0.37.0
+ bungkus=1.14.1
+ yarl=1.8.2
+ ritsleting = 3.12.0

------
#### [ AWS Glue version 2.0 ]

AWS Glue versi 2.0 menyertakan modul Python berikut di luar kotak:
+ avro-python3 = 1.10.0
+ awscli==1.27.60
+ boto3==1.12.4
+ botocore==1.15.4
+ certifi==2019.11.28
+ chardet==3.0.4
+ klik==8.1.3
+ colorama==0.4.4
+ cycler==0.10.0
+ Cython==0.29.15
+ docutils==0.15.2
+ enum34==1.1.9
+ fsspec==0.6.2
+ idna==2.9
+ importlib-metadata== 6.0.0
+ jmespath==0.9.4
+ joblib==0.14.1
+ kiwisolver==1.1.0
+ matplotlib==3.1.3
+ mpmath==1.1.0
+ nltk=3,5
+ numpy==1.18.1
+ pandas==1.0.1
+ patsy==0.5.1
+ pmdarima==1.5.3
+ ptvsd==4.3.2
+ pyarrow==0.16.0
+ pyasn1==0.4.8
+ pydevd==1.9.0
+ pyhocon==0.3.54
+ PyMySQL=0.9.3
+ pyparsing==2.4.6
+ python-dateutil==2.8.1
+ pytz==2019.3
+ Pyyaml = 5.3.1
+ regex==2022.10.31
+ requests==2.23.0
+ rsa = 4.7.2
+ s3fs==0.4.0
+ s3transfer==0.3.3
+ scikit-learn==0.22.1
+ scipy==1.4.1
+ setuptools==45.2.0
+ six==1.14.0
+ Percikan = 1.0
+ statsmodels==0.11.1
+ subprocess32==3.5.4
+ sympy==1.5.1
+ tbats==1.0.9
+ tqdm = 4.64.1
+ mengetik-ekstensi== 4.4.0
+ urllib3==1.25.8
+ roda==0.35.1
+ ritsleting = 3.12.0

------

## Lampiran A: Membuat Artifak Zip Roda
<a name="glue-python-library-zip-of-wheels-appendix"></a>

Kami mendemonstrasikan dengan contoh cara membuat ritsleting artefak roda. Contoh yang ditampilkan mengunduh paket `cryptography` dan `scipy` ke dalam ritsleting artefak roda dan menyalin ritsleting roda ke lokasi Amazon S3.

1. Anda harus menjalankan perintah untuk membuat ritsleting roda di lingkungan Amazon Linux yang mirip dengan lingkungan Glue. Lihat [Lampiran B: Detail lingkungan AWS Glue](#glue-python-libraries-environment-details). Glue 5.1 digunakan AL2023 dengan python versi 3.11. Buat Dockerfile yang akan membangun lingkungan ini:

   ```
   FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
   
   # Install Python 3.11, pip, and zip utility
   RUN dnf install -y python3.11 pip zip && \
       dnf clean all
   
   WORKDIR /build
   ```

1. Buat file requirements.txt

   ```
   cryptography
   scipy
   ```

1. Bangun dan putar wadah docker

   ```
   # Build docker image
   docker build --platform linux/amd64 -t glue-wheel-builder .
   
   # Spin up container
   docker run --platform linux/amd64 -v $(pwd)/requirements.txt:/input/requirements.txt:ro -v $(pwd):/output -it glue-wheel-builder bash
   ```

1. Jalankan perintah berikut di image docker

   ```
   # Create a directory for the wheels
   mkdir wheels
   
   # Copy requirements.txt into wheels directory
   cp /input/requirements.txt wheels/
   
   # Download the wheels with the correct platform and Python version
   pip3 download \
       -r wheels/requirements.txt \
       --dest wheels/ \
       --platform manylinux2014_x86_64 \
       --python-version 311 \
       --only-binary=:all:
   
   # Package the wheels into a zip archive with the .gluewheels.zip suffix
   zip -r mylibraries-1.0.0.gluewheels.zip wheels/
   
   # Copy zip to output
   cp mylibraries-1.0.0.gluewheels.zip /output/
   
   # Exit the container
   exit
   ```

1. Unggah ritsleting roda ke lokasi Amazon S3

   ```
   aws s3 cp mylibraries-1.0.0.gluewheels.zip s3://amzn-s3-demo-bucket/example-prefix/
   ```

1. Pembersihan opsional

   ```
   rm mylibraries-1.0.0.gluewheels.zip
   rm Dockerfile
   rm requirements.txt
   ```

1. Jalankan pekerjaan Glue dengan argumen pekerjaan berikut:

   ```
   --additional-python-modules s3://amzn-s3-demo-bucket/example-prefix/mylibraries-1.0.0.gluewheels.zip
   --python-modules-installer-option --no-index
   ```

## Lampiran B: Detail lingkungan AWS Glue
<a name="glue-python-libraries-environment-details"></a>


**Kompatibilitas Versi Glue dan Metode Instalasi**  

| AWS Versi Glue | Versi Python | Gambar dasar | versi glibc | Tag platform yang kompatibel | 
| --- | --- | --- | --- | --- | 
| 5.1 | 3.11 | [Amazon Linux 2023 () AL2023](https://aws.amazon.com/linux/amazon-linux-2023/) | 2.34 |  manylinux\$12\$134\$1x86\$164 manylinux\$12\$128\$1x86\$164 manylinux2014\$1x86\$164  | 
| 5.0 | 3.11 | [Amazon Linux 2023 () AL2023](https://aws.amazon.com/linux/amazon-linux-2023/) | 2.34 |  manylinux\$12\$134\$1x86\$164 manylinux\$12\$128\$1x86\$164 manylinux2014\$1x86\$164  | 
| 4.0 | 3.10 | [Amazon Linux 2 (AL2)](https://aws.amazon.com/amazon-linux-2/) | 2.26 | manylinux2014\$1x86\$164 | 
| 3.0 | 3.7 | [Amazon Linux 2 (AL2)](https://aws.amazon.com/amazon-linux-2/) | 2.26 | manylinux2014\$1x86\$164 | 
| 2.0 | 3.7 | [Amazon Linux AMI (AL1)](https://aws.amazon.com/amazon-linux-ami/) | 2.17 | manylinux2014\$1x86\$164 | 

 Di bawah [model tanggung jawab AWS bersama](https://aws.amazon.com/compliance/shared-responsibility-model/), Anda bertanggung jawab atas pengelolaan modul Python tambahan, pustaka, dan dependensinya yang Anda gunakan dengan pekerjaan Glue ETL Anda. AWS Ini termasuk menerapkan pembaruan dan patch keamanan. 

 AWS Glue tidak mendukung kompilasi kode asli di lingkungan kerja. Namun, pekerjaan AWS Glue berjalan dalam lingkungan Linux yang dikelola Amazon. Anda mungkin dapat memberikan dependensi asli Anda dalam bentuk yang dikompilasi melalui file roda Python. Silakan lihat tabel di atas untuk detail kompatibilitas versi AWS Glue. 

**penting**  
 Menggunakan dependensi yang tidak kompatibel dapat mengakibatkan masalah runtime, terutama untuk pustaka dengan ekstensi asli yang harus cocok dengan arsitektur lingkungan target dan pustaka sistem. Setiap versi AWS Glue berjalan pada versi Python tertentu dengan pustaka pra-instal dan konfigurasi sistem. 