

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

# Menggunakan platform Python Elastic Beanstalk
<a name="create-deploy-python-container"></a>

Topik ini menjelaskan cara mengonfigurasi, membangun, dan menjalankan aplikasi Python Anda di Elastic Beanstalk.

AWS Elastic Beanstalk mendukung sejumlah cabang platform untuk berbagai versi bahasa pemrograman Python. Lihat [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) di dokumen *AWS Elastic Beanstalk Platform* untuk daftar lengkapnya.

Aplikasi web Python dapat berjalan di belakang server proxy dengan WSGI. Elastic [Beanstalk](https://gunicorn.org/) menyediakan Gunicorn sebagai server WSGI default. 

Anda dapat menambahkan `Procfile` ke paket sumber untuk menentukan dan mengonfigurasi server WSGI bagi aplikasi Anda. Untuk detail selengkapnya, lihat [Mengkonfigurasi server WSGI dengan Procfile pada Elastic Beanstalk](python-configuration-procfile.md).

Anda dapat menggunakan file `Pipfile` dan `Pipfile.lock` yang dibuat oleh Pipenv untuk menentukan dependensi paket Python dan persyaratan lainnya. Untuk detail tentang menentukan dependensi, lihat [Menentukan dependensi menggunakan file persyaratan pada Elastic Beanstalk](python-configuration-requirements.md).

Elastic [Beanstalk menyediakan](command-options.md) opsi konfigurasi yang dapat Anda gunakan untuk menyesuaikan perangkat lunak yang berjalan EC2 pada instance di lingkungan Elastic Beanstalk Anda. Anda dapat mengonfigurasi variabel lingkungan yang diperlukan aplikasi Anda, mengaktifkan rotasi log ke Amazon S3, dan memetakan folder dalam sumber aplikasi Anda yang berisi file statis ke jalur yang disajikan server proksi.

Opsi konfigurasi tersedia di konsol Elastic Beanstalk untuk [memodifikasi konfigurasi dari lingkungan yang sedang berjalan](environment-configuration-methods-after.md). Agar Anda tidak kehilangan konfigurasi lingkungan ketika mengakhirinya, Anda dapat menggunakan [konfigurasi tersimpan](environment-configuration-savedconfig.md) untuk menyimpan pengaturan dan kemudian menerapkannya ke lingkungan lain.

Untuk menyimpan pengaturan di kode sumber, Anda dapat menyertakan [file konfigurasi](ebextensions.md). Pengaturan di file konfigurasi diterapkan setiap kali Anda membuat lingkungan atau men-deploy aplikasi Anda. Anda juga dapat menggunakan file konfigurasi untuk menginstal paket, menjalankan penulisan, dan melakukan operasi penyesuaian instans lainnya selama deployment.

Pengaturan yang diterapkan di konsol Elastic Beanstalk mengganti pengaturan yang sama di file konfigurasi, jika ada. Hal tersebut memungkinkan Anda memiliki pengaturan default di file konfigurasi, dan mengganti keduanya dengan pengaturan khusus lingkungan di konsol tersebut. Untuk informasi lebih lanjut tentang yang diutamakan, dan metode lain untuk mengubah pengaturan, lihat [Opsi konfigurasi](command-options.md).

Untuk paket Python tersedia dari `pip`, Anda dapat menyertakan file persyaratan di akar kode sumber aplikasi Anda. Elastic Beanstalk menginstal paket dependensi yang ditentukan dalam file persyaratan selama deployment. Untuk detail selengkapnya, lihat [Menentukan dependensi menggunakan file persyaratan pada Elastic Beanstalk](python-configuration-requirements.md).

Untuk detail tentang berbagai cara memperluas platform berbasis Linux Elastic Beanstalk, lihat [Memperluas platform Linux Elastic Beanstalk](platforms-linux-extend.md).

## Mengonfigurasi lingkungan Python Anda
<a name="create-deploy-python-container-console"></a>

Pengaturan platform Python memungkinkan Anda menyempurnakan perilaku instans Amazon Anda. EC2 Anda dapat mengedit konfigurasi instans Amazon lingkungan Elastic Beanstalk menggunakan konsol EC2 Elastic Beanstalk.

Gunakan konsol Elastic Beanstalk untuk mengonfigurasi AWS X-Ray pengaturan proses Python, mengaktifkan, mengaktifkan rotasi log ke Amazon S3, dan mengonfigurasi variabel yang dapat dibaca aplikasi Anda dari lingkungan.

**Untuk mengonfigurasi lingkungan Python Anda di konsol Elastic Beanstalk**

1. **Buka konsol [Elastic Beanstalk, dan di daftar Wilayah, pilih konsol Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk.** Wilayah AWS

1. Di panel navigasi, pilih **Lingkungan**, dan kemudian pilih nama lingkungan Anda dari daftar.

1. Pada panel navigasi, pilih **Konfigurasi**.

1. Dalam kategori konfigurasi **Pembaruan, pemantauan, dan pencatatan**, pilih **Edit**.

### Pengaturan Python
<a name="python-console-settings"></a>
+ **Server proksi** – Server proksi yang akan digunakan pada instans lingkungan Anda. Secara default, nginx digunakan.
+ **Jalur WSGI** – Nama atau jalur ke file aplikasi utama Anda. Misalnya, `application.py`, atau `django/wsgi.py`.
+ **NumProcesses**— Jumlah proses yang dijalankan pada setiap instance aplikasi.
+ **NumThreads**— Jumlah thread yang akan dijalankan di setiap proses.

### AWS X-Ray pengaturan
<a name="python-console-xray"></a>
+ **Daemon X-Ray** - Jalankan AWS X-Ray daemon untuk memproses data jejak dari. [AWS X-Ray SDK for Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)

### Opsi log
<a name="create-deploy-python-container.console.logoptions"></a>

Bagian Opsi Log memiliki dua pengaturan:
+ **Profil instans**– Menentukan profil instans yang memiliki izin untuk mengakses bucket Amazon S3 yang terkait dengan aplikasi Anda.
+ **Aktifkan rotasi file log ke Amazon S3** — Menentukan apakah file log untuk EC2 instans Amazon aplikasi Anda disalin ke bucket Amazon S3 yang terkait dengan aplikasi Anda.

### File statis
<a name="python-platform-staticfiles"></a>

Untuk meningkatkan kinerja, Anda dapat menggunakan bagian **File statis** untuk mengkonfigurasi server proxy untuk melayani file statis (misalnya, HTML atau gambar) dari satu set direktori di dalam aplikasi web Anda. Untuk setiap direktori, Anda mengatur jalur virtual ke pemetaan direktori. Saat server proksi menerima permintaan untuk file di jalur yang ditentukan, server langsung menyajikan file daripada merutekan permintaan ke aplikasi Anda.

Untuk detail tentang mengonfigurasi file statis menggunakan file konfigurasi atau konsol Elastic Beanstalk, lihat. [Menyajikan file statis](environment-cfg-staticfiles.md)

Secara default, server proksi di lingkungan Python menyajikan file apa pun dalam folder bernama `static` di jalur `/static`. Misalnya, jika sumber aplikasi Anda berisi file bernama `logo.png` dalam folder bernama `static`, server proksi menyajikannya untuk pengguna di `subdomain.elasticbeanstalk.com/static/logo.png`. Anda dapat mengonfigurasi pemetaan tambahan seperti yang dijelaskan di bagian ini.

### Properti lingkungan
<a name="create-deploy-python-custom-container-envprop"></a>

Anda dapat menggunakan properti lingkungan untuk memberikan informasi ke aplikasi Anda dan mengonfigurasi variabel lingkungan. Misalnya, Anda dapat membuat properti lingkungan bernama `CONNECTION_STRING` yang menentukan string koneksi yang dapat digunakan aplikasi Anda agar terhubung ke basis data.

Di dalam lingkungan Python yang berjalan di Elastic Beanstalk, nilai-nilai ini dapat diakses menggunakan kamus `os.environ` Python. Untuk informasi lebih lanjut, lihat [http://docs.python. org/library/os.html](http://docs.python.org/library/os.html).

Anda dapat menggunakan kode yang terlihat mirip dengan yang berikut untuk mengakses kunci dan parameter:

```
import os
endpoint = os.environ['API_ENDPOINT']
```

Properti lingkungan juga dapat memberikan informasi ke kerangka kerja. Misalnya, Anda dapat membuat properti bernama `DJANGO_SETTINGS_MODULE` untuk mengonfigurasi Django agar menggunakan modul pengaturan khusus. Bergantung pada lingkungan, nilai bisa saja `development.settings`, `production.settings`, dll.

Lihat [Variabel lingkungan dan pengaturan perangkat lunak lainnya](environments-cfg-softwaresettings.md) untuk informasi selengkapnya.

## Namespace konfigurasi Python
<a name="python-namespaces"></a>

Anda dapat menggunakan [file konfigurasi](ebextensions.md) untuk mengatur opsi konfigurasi dan melakukan tugas-tugas konfigurasi instans lain selama deployment. Opsi konfigurasi dapat berupa [platform khusus](command-options-specific.md) atau berlaku untuk [semua platform di layanan](command-options-general.md) Elastic Beanstalk secara keseluruhan. Opsi konfigurasi diatur ke dalam *ruang nama*.

Platform Python mendefinisikan opsi dalam namespace `aws:elasticbeanstalk:environment:proxy`, `aws:elasticbeanstalk:environment:proxy:staticfiles`, dan `aws:elasticbeanstalk:container:python`.

File konfigurasi contoh berikut menentukan pengaturan opsi konfigurasi untuk membuat properti lingkungan bernama `DJANGO_SETTINGS_MODULE`, memilih server proksi Apache, menentukan dua opsi file statis yang memetakan direktori bernama `statichtml` ke jalur `/html` dan sebuah direktori bernama `staticimages` ke jalur `/images`, dan menentukan pengaturan tambahan di namespace `[aws:elasticbeanstalk:container:python](command-options-specific.md#command-options-python)`. Namespace ini berisi opsi yang memungkinkan Anda menentukan lokasi skrip WSGI dalam kode sumber Anda, dan jumlah utas serta proses untuk berjalan di WSGI.

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: production.settings
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /html: statichtml
    /images: staticimages
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi:application
    NumProcesses: 3
    NumThreads: 20
```

**Catatan**  
Jika Anda menggunakan versi platform Python Amazon Linux AMI (Amazon Linux 2 yang terdahulu), ganti nilai `WSGIPath` dengan `ebdjango/wsgi.py`. Nilai dalam contoh berfungsi dengan menggunakan server Gunicorn WSGI, yang tidak didukung pada versi platform Amazon Linux AMI.
Selain itu, versi platform yang lebih lama ini menggunakan namespace yang berbeda dalam mengonfigurasi file statis—`aws:elasticbeanstalk:container:python:staticfiles`. Platform tersebut memiliki nama opsi dan makna yang sama dengan namespace file statis standar.

File konfigurasi juga mendukung beberapa kunci untuk [memodifikasi perangkat lunak lebih lanjut pada instans lingkungan Anda](customize-containers-ec2.md). Contoh ini menggunakan kunci [paket](customize-containers-ec2.md#linux-packages) untuk menginstal Memcached dengan `yum` dan [perintah kontainer](customize-containers-ec2.md#linux-container-commands) untuk menjalankan perintah yang mengonfigurasi server selama deployment:

```
packages:
  yum:
    libmemcached-devel: '0.31'

container_commands:
  collectstatic:
    command: "django-admin.py collectstatic --noinput"
  01syncdb:
    command: "django-admin.py syncdb --noinput"
    leader_only: true
  02migrate:
    command: "django-admin.py migrate"
    leader_only: true
  03wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
  99customize:
    command: "scripts/customize.sh"
```

Elastic Beanstalk memberikan banyak opsi konfigurasi untuk menyesuaikan lingkungan Anda. Selain file konfigurasi, Anda juga dapat mengatur opsi konfigurasi menggunakan konsol tersebut, konfigurasi tersimpan, EB CLI, atau AWS CLI. Untuk informasi selengkapnya, lihat [Opsi konfigurasi](command-options.md).

## Yang dapat `python3` dieksekusi
<a name="python3-executable"></a>

Versi `python3` executable yang tersedia pada EC2 instance di lingkungan Elastic Beanstalk Python tidak akan selalu sesuai dengan versi Python yang sama yang digunakan oleh platform. Misalnya, pada platform Python 3.12 AL2 023, menunjuk `/usr/bin/python3` ke Python 3.9. Ini karena Python 3.9 adalah sistem *Python* pada 023. AL2 Untuk informasi selengkapnya, lihat [Python di AL2 023 di Panduan](https://docs.aws.amazon.com/linux/al2023/ug/python.html) Pengguna *Amazon Linux 2023*. Anda dapat mengakses executable yang sesuai dengan versi Python yang digunakan oleh platform di lokasi berversi (misalnya`/usr/bin/python3.12`) atau di direktori lingkungan virtual aplikasi (misalnya). `bin` `/var/app/venv/staging-LQM1lest/bin/python3` Platform menggunakan executable Python yang benar yang sesuai dengan cabang platform. 

# Mengkonfigurasi server WSGI dengan Procfile pada Elastic Beanstalk
<a name="python-configuration-procfile"></a>

Anda dapat menambahkan [`Procfile`](platforms-linux-extend.build-proc.md#platforms-linux-extend.proc) ke paket sumber untuk menentukan dan mengonfigurasi server WSGI bagi aplikasi Anda. Anda dapat menentukan perintah mulai dan menjalankan kustom di`Procfile`.

Anda menggunakan `Procfile`, maka akan mengganti opsi namespace `aws:elasticbeanstalk:container:python` yang ditetapkan menggunakan file konfigurasi.

Contoh berikut menggunakan `Procfile` untuk menentukan uWSGI sebagai server dan mengonfigurasinya.

**Example Procfile**  

```
web: uwsgi --http :8000 --wsgi-file application.py --master --processes 4 --threads 2
```

Contoh berikut menggunakan `Procfile` untuk mengonfigurasi Gunicorn, server WSGI default.

**Example Procfile**  

```
web: gunicorn --bind :8000 --workers 3 --threads 2 project.wsgi:application
```

**Catatan**  
Jika Anda mengonfigurasi server WSGI selain Gunicorn, pastikan untuk menentukannya juga sebagai dependensi aplikasi Anda, sehingga terinstal pada instans lingkungan Anda. Untuk detail tentang spesifikasi dependensi, lihat [Menentukan dependensi menggunakan file persyaratan pada Elastic Beanstalk](python-configuration-requirements.md).
Port default untuk server WSGI adalah 8000. Jika Anda menentukan nomor port yang berbeda di perintah `Procfile` Anda, mengatur [properti lingkungan](environments-cfg-softwaresettings.md) `PORT` ke nomor port ini juga.

# Menentukan dependensi menggunakan file persyaratan pada Elastic Beanstalk
<a name="python-configuration-requirements"></a>

Topik ini menjelaskan cara mengkonfigurasi aplikasi Anda untuk menginstal paket Python lain yang diperlukan. Aplikasi Python tipikal memiliki dependensi pada paket Python pihak ketiga lainnya. Dengan platform Elastic Beanstalk Python, Anda memiliki beberapa cara untuk menentukan paket Python yang bergantung pada aplikasi Anda.

## Gunakan `pip` dan `requirements.txt`
<a name="python-configuration-requirements.txt"></a>

Alat standar untuk memasang paket Python adalah `pip`. Alat ini memiliki fitur yang memungkinkan Anda untuk menentukan semua paket yang Anda butuhkan (dan juga versinya) dalam satu file persyaratan. Untuk informasi selengkapnya tentang file persyaratan, lihat [Format File Persyaratan](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format) di situs web dokumentasi pip.

Buat file bernama `requirements.txt` dan letakkan di direktori tingkat atas dari paket sumber Anda. Berikut ini adalah contoh file `requirements.txt` untuk Django.

```
Django==2.2
mysqlclient==2.0.3
```

Di lingkungan pengembangan, Anda dapat menggunakan perintah `pip freeze` untuk menghasilkan file persyaratan Anda.

```
~/my-app$ pip freeze > requirements.txt
```

Untuk memastikan bahwa file persyaratan Anda hanya berisi paket yang benar-benar digunakan oleh aplikasi Anda, gunakan [lingkungan virtual](python-development-environment.md#python-common-setup-venv) yang hanya menginstal paket tersebut. Di luar lingkungan virtual, output dari `pip freeze` akan menyertakan semua paket `pip` yang diinstal pada mesin pengembangan Anda, termasuk yang disertakan pada sistem operasi Anda.

**catatan**  
Pada versi platform Python Amazon Linux AMI, Elastic Beanstalk aslinya tidak mendukung Pipenv atau Pipfiles. Jika Anda menggunakan Pipenv untuk mengelola dependensi aplikasi Anda, jalankan perintah berikut untuk menghasilkan file `requirements.txt`.  

```
~/my-app$ pipenv lock -r > requirements.txt
```
Untuk mempelajari selengkapnya, lihat [Menghasilkan requirements.txt](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt) dalam dokumentasi Pipenv.

## Gunakan Pipenv dan `Pipfile`
<a name="python-configuration-requirements.pipenv"></a>

Pipenv adalah alat pengemasan Python modern. Alat tersebut mengombinasikan instalasi paket dengan pembuatan dan pengelolaan file dependensi dan virtualenv untuk aplikasi Anda. Untuk informasi lebih lanjut, lihat [Pipenv: Alur Kerja Python Dev untuk Manusia](https://pipenv.readthedocs.io/en/latest/).

Pipenv memelihara dua file: 
+ `Pipfile`— File ini berisi berbagai jenis dependensi dan persyaratan.
+ `Pipfile.lock`— File ini berisi snapshot versi yang memungkinkan build deterministik.

Anda dapat membuat file-file ini di lingkungan pengembangan Anda dan memasukkannya ke dalam direktori tingkat atas bundel sumber yang Anda gunakan ke Elastic Beanstalk. Untuk informasi selengkapnya tentang dua file ini, lihat [Contoh Pipfile dan Pipfile.lock](https://pipenv.pypa.io/en/latest/basics/#).



Contoh berikut menggunakan Pipenv untuk menginstal Django dan kerangka kerja REST Django. Perintah ini membuat file `Pipfile` dan `Pipfile.lock`.

```
~/my-app$ pipenv install django
~/my-app$ pipenv install djangorestframework
```

 

## Precedence
<a name="python-configuration-requirements.precedence"></a>

Jika Anda menyertakan lebih dari satu file persyaratan yang dijelaskan dalam topik ini, Elastic Beanstalk hanya menggunakan salah satunya. Daftar berikut menunjukkan yang diutamakan, dalam urutan menurun.

1. `requirements.txt`

1. `Pipfile.lock`

1. `Pipfile`

**catatan**  
Dimulai dengan rilis platform Amazon Linux 2 7 Maret 2023, jika Anda menyediakan lebih dari satu file ini, Elastic Beanstalk akan mengeluarkan pesan konsol yang menyatakan salah satu file dependensi mana yang digunakan selama penerapan.

Langkah-langkah berikut menjelaskan logika yang diikuti Elastic Beanstalk untuk menginstal dependensi saat menerapkan instance.
+ Jika ada `requirements.txt` file, kami menggunakan perintah`pip install -r requirements.txt`.
+ Dimulai dengan rilis platform Amazon Linux 2 7 Maret 2023, jika tidak ada `requirements.txt` file, tetapi ada`Pipfile.lock`, kami menggunakan perintah`pipenv sync`. Sebelum rilis itu, kami menggunakan`pipenv install --ignore-pipfile`.
+ Jika tidak ada `requirements.txt` file atau a`Pipfile.lock`, tetapi ada`Pipfile`, kami menggunakan perintah`pipenv install --skip-lock`.
+ Jika tidak satu pun dari tiga file persyaratan ditemukan, kami tidak menginstal dependensi aplikasi apa pun.