

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

# Mengonfigurasi properti pekerjaan untuk pekerjaan shell Python di AWS Glue
<a name="add-job-python"></a>

 Anda dapat menggunakan tugas shell Python untuk menjalankan skrip Python sebagai shell di AWS Glue. Dengan pekerjaan shell Python, Anda dapat menjalankan skrip yang kompatibel dengan Python 3.6 atau Python 3.9. 

**catatan**  
 Support untuk Pyshell v3.6 akan berakhir pada 1 Maret 2026. Untuk memigrasikan beban kerja Anda, lihat [Memigrasi dari pekerjaan shell Python AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/pyshell-migration.html). Jika Anda ingin melanjutkan dengan Python shell v3.9 lihat. [Migrasi dari Python shell 3.6 ke Python shell 3.9](#migrating-version-pyshell36-to-pyshell39) 

**Topics**
+ [Batasan](#python-shell-limitations)
+ [Lingkungan eksekusi](#python-shell-execution-environment)
+ [Mendefinisikan properti pekerjaan untuk pekerjaan shell Python](#create-job-python-properties)
+ [Pustaka yang didukung untuk pekerjaan shell Python](#python-shell-supported-library)
+ [Menyediakan pustaka Python Anda sendiri](#create-python-extra-library)
+ [Gunakan AWS CloudFormation dengan pekerjaan shell Python di AWS Glue](#python-shell-jobs-cloudformation)
+ [Migrasi dari Python shell 3.6 ke Python shell 3.9](#migrating-version-pyshell36-to-pyshell39)
+ [Migrasi dari pekerjaan shell AWS Glue Python](pyshell-migration.md)

## Batasan
<a name="python-shell-limitations"></a>

Perhatikan batasan pekerjaan Python Shell berikut ini:
+  Anda tidak dapat menggunakan bookmark tugas dengan tugas shell Python tersebut. 
+ Anda tidak dapat mengemas pustaka Python apa pun sebagai file `.egg` di Python 3.9\$1. Sebaliknya, gunakan `.whl`.
+ `--extra-files`Opsi ini tidak dapat digunakan, karena pembatasan salinan sementara data S3.

## Lingkungan eksekusi
<a name="python-shell-execution-environment"></a>

Pekerjaan shell Python berjalan di lingkungan eksekusi terkelola yang menyediakan akses ke penyimpanan lokal untuk pemrosesan data sementara:

**Penyimpanan sementara lokal**  
`/tmp`Direktori tersedia untuk penyimpanan sementara selama eksekusi pekerjaan. Direktori ini menyediakan sekitar 14 GiB ruang kosong yang dapat Anda gunakan untuk:  
+ Pemrosesan file sementara
+ Penyimpanan data menengah
+ Caching kumpulan data kecil
`/tmp`Direktori bersifat sementara dan dibersihkan setelah pekerjaan selesai. Jangan menggunakannya untuk penyimpanan data penting yang persisten.

## Mendefinisikan properti pekerjaan untuk pekerjaan shell Python
<a name="create-job-python-properties"></a>

Bagian ini menjelaskan mendefinisikan properti pekerjaan diAWS Glue Studio, atau menggunakan AWS CLI.

### AWS Glue Studio
<a name="create-job-python-properties-studio"></a>

Saat Anda menentukan pekerjaan shell Python AndaAWS Glue Studio, Anda memberikan beberapa properti berikut: 

**IAM Role**  
Tentukan peran AWS Identity and Access Management (IAM) yang digunakan untuk otorisasi sumber daya yang digunakan untuk menjalankan pekerjaan dan mengakses penyimpanan data. Untuk informasi selengkapnya tentang izin menjalankan tugas di AWS Glue, lihat [Manajemen identitas dan akses untuk AWS Glue](security-iam.md).

**Tipe**  
Pilih **Python shell** untuk menjalankan skrip Python dengan perintah tugas bernama `pythonshell`.

**Versi Python**  
Pilih versi Python. Defaultnya adalah Python 3.9. Versi yang valid adalah Python 3.6 dan Python 3.9.

**Muat pustaka analitik umum (Disarankan)**  
Pilih opsi ini untuk menyertakan pustaka umum untuk Python 3.9 di shell Python.  
Jika pustaka Anda kustom atau bertentangan dengan yang sudah diinstal sebelumnya, Anda dapat memilih untuk tidak menginstal pustaka umum. Namun, Anda dapat menginstal pustaka tambahan selain pustaka umum.  
Ketika Anda memilih opsi ini, `library-set` opsi diatur ke`analytics`. Saat Anda membatalkan pilihan ini, `library-set` opsi diatur ke`none`. 

**Nama file skrip dan jalur Skrip**  
Kode dalam Skrip mendefinisikan logika prosedural tugas Anda. Anda menyediakan nama skrip dan lokasi di Amazon Simple Storage Service (Amazon S3). Konfirmasi bahwa tidak ada file dengan nama yang sama sebagai direktori skrip pada path. Untuk mem-pelajari selengkapnya tentang menggunakan skrip, lihat [AWS Glue panduan pemrograman](edit-script.md).

**Skrip**  
Kode dalam Skrip mendefinisikan logika prosedural tugas Anda. Anda dapat membuat kode skrip dengan Python 3.6 atau Python 3.9. Anda dapat mengedit skrip diAWS Glue Studio.

**Unit pengolahan data**  
Jumlah maksimum unit pemrosesan AWS Glue data (DPUs) yang dapat dialokasikan saat pekerjaan ini berjalan. DPU adalah ukuran relatif daya pemrosesan yang terdiri dari 4 v CPUs kapasitas komputasi dan memori 16 GB. Untuk informasi selengkapnya, lihat [harga AWS Glue](https://aws.amazon.com/glue/pricing/).   
Anda dapat mengatur nilai-nya ke 0,0625 atau 1. Default-nya adalah 0,0625. Dalam kedua kasus, disk lokal untuk contoh akan menjadi 20GB.

### CLI
<a name="create-job-python-properties-cli"></a>

 Anda juga dapat membuat pekerjaan **shell Python** menggunakan AWS CLI, seperti pada contoh berikut. 

```
 aws glue create-job --name python-job-cli --role Glue_DefaultRole 
     --command '{"Name" :  "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://amzn-s3-demo-bucket/scriptname.py"}'  
     --max-capacity 0.0625
```

**catatan**  
 Anda tidak perlu menentukan versi AWS Glue karena parameter `--glue-version` tidak berlaku untuk pekerjaan AWS Glue shell. Setiap versi yang ditentukan akan diabaikan. 

 Pekerjaan yang Anda buat dengan AWS CLI default ke Python 3. Versi Python yang valid adalah 3 (sesuai dengan 3.6), dan 3.9. Untuk menentukan Python 3.6, tambahkan tuple ini ke parameter: `--command` `"PythonVersion":"3"` 

 Untuk menentukan Python 3.9, tambahkan tuple ini ke parameter: `--command` `"PythonVersion":"3.9"` 

 Untuk mengatur kapasitas maksimal yang digunakan oleh tugas shell Python, berikan parameter `--max-capacity`. Untuk tugas shell Python, parameter `--allocated-capacity` tidak dapat digunakan. 

## Pustaka yang didukung untuk pekerjaan shell Python
<a name="python-shell-supported-library"></a>

 Dalam Python shell menggunakan Python 3.9, Anda dapat memilih set perpustakaan untuk menggunakan set perpustakaan pra-paket untuk kebutuhan Anda. Anda dapat menggunakan `library-set` opsi untuk memilih kumpulan perpustakaan. Nilai yang valid adalah`analytics`, dan`none`. 

Lingkungan untuk menjalankan tugas shell Python mendukung perpustakaan berikut: 


| Versi Python | Python 3.6 | Python 3.9 | 
| --- | --- | --- | 
| Set perpustakaan | N/A | analitik | tidak satupun | 
| avro |  | 1.11.0 |  | 
| awscli | 116.242 | 1.23.5 | 1.23.5 | 
| awswrangler |  | 2.15.1 |  | 
| botocore | 1.12.232 | 1.24.21 | 1.23.5 | 
| boto3 | 1.9.203 | 1.21.21 |  | 
| elasticsearch |  | 8.2.0 |  | 
| numpy | 1.16.2 | 1.22.3 |  | 
| panda | 0.24.2 | 1.4.2 |  | 
| psycopg2 |  | 2.9.3 |  | 
| pyathena |  | 2.5.3 |  | 
| PyGreSQL | 5.0.6 |  |  | 
| PyMySQL |  | 1.0.2 |  | 
| pyodbc |  | 4.0.32 |  | 
| pyorc |  | 0.6.0 |  | 
| konektor pergeseran merah |  | 2.0.907 |  | 
| permintaan | 2.22.0 | 2.27.1 |  | 
| scikit-belajar | 0.20.3 | 1.0.2 |  | 
| scipy | 1.2.1 | 1.8.0 |  | 
| SQLAlchemy |  | 1.4.36 |  | 
| s3fs |  | 2022.3.0 |  | 

Anda dapat menggunakan perpustakaan `NumPy` dalam sebuah tugas shell Python untuk komputasi ilmiah. Untuk informasi selengkapnya, lihat [NumPy](http://www.numpy.org). Contoh berikut menunjukkan NumPy skrip yang dapat digunakan dalam pekerjaan shell Python. Skrip mencetak "Hello world" dan hasil dari beberapa perhitungan matematis.

```
import numpy as np
print("Hello world")

a = np.array([20,30,40,50])
print(a)

b = np.arange( 4 )

print(b)

c = a-b

print(c)

d = b**2

print(d)
```

## Menyediakan pustaka Python Anda sendiri
<a name="create-python-extra-library"></a>

### Menggunakan PIP
<a name="create-python-extra-library-pip"></a>

Python shell menggunakan Python 3.9 memungkinkan Anda menyediakan modul Python tambahan atau versi yang berbeda di tingkat pekerjaan. Anda dapat menggunakan `--additional-python-modules` dengan daftar modul Python yang dipisahkan koma untuk menambahkan modul baru atau mengubah versi dari modul yang ada. Anda tidak dapat menyediakan modul Python khusus yang dihosting di Amazon S3 dengan parameter ini saat menggunakan pekerjaan shell Python.

Misalnya untuk memperbarui atau menambahkan `scikit-learn` modul baru gunakan kunci dan nilai berikut:`"--additional-python-modules", "scikit-learn==0.21.3"`.

AWS Glue menggunakan Python Package Installer (pip3) untuk menginstal modul tambahan. Anda dapat meneruskan opsi pip3 tambahan di dalam nilai. `--additional-python-modules` Misalnya, `"scikit-learn==0.21.3 -i https://pypi.python.org/simple/"`. Ketidakcocokan atau batasan apa pun dari pip3 berlaku.

**catatan**  
Untuk menghindari ketidakcocokan di masa mendatang, sebaiknya gunakan library yang dibuat untuk Python 3.9.

### Menggunakan file Egg atau Whl
<a name="create-python-extra-library-egg-whl"></a>

Anda mungkin sudah memiliki satu atau beberapa perpustakaan Python yang dikemas sebagai sebuah file `.egg` atau `.whl`. Jika demikian, Anda dapat menentukannya ke tugas Anda dengan menggunakan AWS Command Line Interface (AWS CLI) pada bendera "`--extra-py-files`", seperti dalam contoh berikut.

```
aws glue create-job --name python-redshift-test-cli --role role --command '{"Name" :  "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' 
     --connections Connections=connection-name --default-arguments '{"--extra-py-files" : ["s3://amzn-s3-demo-bucket/EGG-FILE", "s3://amzn-s3-demo-bucket/WHEEL-FILE"]}'
```

Jika Anda tidak benar-benar mengetahui cara membuat sebuah file `.egg` atau `.whl` dari perpustakaan Python, maka gunakan langkah-langkah berikut. Contoh ini berlaku di macOS, Linux, dan Windows Subsystem for Linux (WSL).

**Untuk membuat sebuah file .egg atau file .whl Python**

1. Buat klaster Amazon Redshift di sebuah virtual private cloud (VPC), dan tambahkan beberapa data ke tabel.

1. Buat AWS Glue koneksi untuk VPC-SecurityGroup-Subnet kombinasi yang Anda gunakan untuk membuat cluster. Menguji apakah koneksi berhasil.

1. Buatlah sebuah direktori bernama `redshift_example`, dan buatlah file bernama `setup.py`. Tempel kode berikut ke `setup.py`.

   ```
   from setuptools import setup
   
   setup(
       name="redshift_module",
       version="0.1",
       packages=['redshift_module']
   )
   ```

1. Pada direktori `redshift_example`, buat `redshift_module`. Pada direktori `redshift_module`, buat file `__init__.py` dan file `pygresql_redshift_common.py`.

1. Biarkan file `__init__.py` kosong. Di `pygresql_redshift_common.py`, tempel kode berikut. Ganti *port**db\$1name*,*user*,, dan *password\$1for\$1user* dengan detail khusus untuk cluster Amazon Redshift Anda. Ganti *table\$1name* dengan nama tabel di Amazon Redshift.

   ```
   import pg
   
   
   def get_connection(host):
       rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % (
           host, port, db_name, user, password_for_user)
   
       rs_conn = pg.connect(dbname=rs_conn_string)
       rs_conn.query("set statement_timeout = 1200000")
       return rs_conn
   
   
   def query(con):
       statement = "Select * from table_name;"
       res = con.query(statement)
       return res
   ```

1. Jika Anda belum sampai di langkah itu, ubah ke direktori `redshift_example`.

1. Lakukan salah satu tindakan berikut:
   + Untuk membuat sebuah file `.egg`, jalankan perintah berikut.

     ```
     python setup.py bdist_egg
     ```
   + Untuk membuat sebuah file `.whl`, jalankan perintah berikut.

     ```
     python setup.py bdist_wheel
     ```

1. Menginstal dependensi yang diperlukan untuk perintah sebelumnya.

1. Perintah tersebut membuat file di direktori `dist`:
   + Jika Anda membuat sebuah file egg, namanya adalah `redshift_module-0.1-py2.7.egg`.
   + Jika Anda membuat sebuah file roda, namanya adalah `redshift_module-0.1-py2.7-none-any.whl`.

   Unggah file ini ke Amazon S3.

   Dalam contoh ini, path file yang diunggah adalah *s3://amzn-s3-demo-bucket/EGG-FILE* atau *s3://amzn-s3-demo-bucket/WHEEL-FILE*. 

1. Buat sebuah file Python untuk digunakan sebagai skrip untuk tugas AWS Glue, dan tambahkan kode berikut ke file tersebut.

   ```
   from redshift_module import pygresql_redshift_common as rs_common
   
   con1 = rs_common.get_connection(redshift_endpoint)
   res = rs_common.query(con1)
   
   print "Rows in the table cities are: "
   
   print res
   ```

1. Unggah file sebelumnya ke Amazon S3. Dalam contoh ini, path file yang diunggah adalah *s3://amzn-s3-demo-bucket/scriptname.py*. 

1. Buat sebuah tugas shell Python menggunakan skrip ini. Pada konsol AWS Glue, pada halaman **Properti Tugas**, tentukan path ke file `.egg/.whl` pada kotak **Path perpustakaan Python**. Jika Anda memiliki beberapa file `.egg/.whl` dan file Python, berikan daftar dipisahkan koma dalam kotak ini. 

   Saat memodifikasi atau mengganti nama `.egg`, nama file harus menggunakan nama default yang dihasilkan oleh perintah "python setup.py bdist\$1egg" atau harus mematuhi konvensi penamaan modul Python. Untuk informasi selengkapnya, lihat bagian [Panduan Gaya untuk Kode Python](https://www.python.org/dev/peps/pep-0008/). 

   Menggunakan AWS CLI, membuat pekerjaan dengan perintah, seperti pada contoh berikut.

   ```
   aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" :  "pythonshell", "ScriptLocation" : "s3://amzn-s3-demo-bucket/scriptname.py"}' 
        --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://amzn-s3-demo-bucket/EGG-FILE", "s3://amzn-s3-demo-bucket/WHEEL-FILE"]}'
   ```

   Saat pekerjaan berjalan, skrip mencetak baris yang dibuat dalam *table\$1name* tabel di cluster Amazon Redshift.

## Gunakan AWS CloudFormation dengan pekerjaan shell Python di AWS Glue
<a name="python-shell-jobs-cloudformation"></a>

 Anda dapat menggunakan AWS CloudFormation dengan pekerjaan shell Python di. AWS Glue Berikut ini adalah contohnya: 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Python39Job:
    Type: 'AWS::Glue::Job'
    Properties:
      Command:
        Name: pythonshell
        PythonVersion: '3.9'
        ScriptLocation: 's3://bucket/location'
      MaxRetries: 0
      Name: python-39-job
      Role: RoleName
```

 Grup Amazon CloudWatch Logs untuk output pekerjaan shell Python adalah. `/aws-glue/python-jobs/output` Untuk kesalahan, lihat grup log `/aws-glue/python-jobs/error`. 

## Migrasi dari Python shell 3.6 ke Python shell 3.9
<a name="migrating-version-pyshell36-to-pyshell39"></a>

 Untuk memigrasikan pekerjaan shell Python Anda ke versi terbaru: AWS Glue 

1.  Di AWS Glue console ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), pilih pekerjaan shell Python yang ada. 

1.  **Di tab **Job** details, atur versi Python ke `Python 3.9` dan pilih Save.** 

1.  Pastikan skrip pekerjaan Anda kompatibel dengan Python 3.9 dan berjalan dengan sukses. 