

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

# Memperluas platform Linux Elastic Beanstalk
<a name="platforms-linux-extend"></a>

Topik ini menjelaskan cara memperluas platform Linux Anda dengan perintah, skrip, perangkat lunak, dan konfigurasi Anda sendiri. Anda mungkin perlu memperluas platform Anda untuk mengubah server dan konfigurasi proxy default. Atau Anda mungkin perlu menyesuaikan cara platform membangun atau memulai aplikasi Anda.

**Topics**
+ [Buildfile dan Procfile](platforms-linux-extend.build-proc.md)
+ [Hook platform](platforms-linux-extend.hooks.md)
+ [File konfigurasi](platforms-linux-extend.config-files.md)
+ [Konfigurasi proksi terbalik](platforms-linux-extend.proxy.md)
+ [Contoh aplikasi dengan ekstensi](platforms-linux-extend.example.md)

# Buildfile dan Procfile
<a name="platforms-linux-extend.build-proc"></a>

Beberapa platform memungkinkan Anda untuk menyesuaikan bagaimana Anda membangun atau mempersiapkan aplikasi Anda, dan untuk menentukan proses yang menjalankan aplikasi Anda. Setiap topik platform individu secara khusus menyebutkan *Buildfile and/or *Procfile** jika platform mendukungnya. Cari platform spesifik Anda di bawah [Platform Elastic Beanstalk](concepts-all-platforms.md).

Untuk semua platform pendukung, sintaks dan semantik identik, dan seperti yang dijelaskan pada halaman ini. Topik platform individu menyebutkan penggunaan spesifik file-file ini untuk membangun dan menjalankan aplikasi dalam bahasa masing-masing.

## Buildfile
<a name="platforms-linux-extend.build"></a>

Untuk menentukan perintah kustom build dan konfigurasi untuk aplikasi Anda, menempatkan file yang bernama `Buildfile` di direktori root dari sumber aplikasi Anda. Nama file peka huruf besar/kecil. Gunakan sintaks berikut untuk `Buildfile` Anda.

```
<process_name>: <command>
```

Perintah di `Buildfile` Anda harus sesuai dengan ekspresi reguler berikut: `^[A-Za-z0-9_-]+:\s*[^\s].*$`

Elastic Beanstalk tidak memantau aplikasi yang dijalankan dengan `Buildfile`. Gunakan `Buildfile` untuk perintah yang berjalan dalam waktu singkat dan berakhir setelah menyelesaikan tugas mereka. Untuk proses aplikasi yang berjalan lama yang seharusnya tidak keluar, gunakan [Procfile](#platforms-linux-extend.proc).

Semua jalur di `Buildfile` adalah relatif terhadap akar dari paket sumber. Dalam contoh berikut `Buildfile`, `build.sh` adalah script shell yang terletak di akar paket sumber.

**Example Buildfile**  

```
make: ./build.sh
```

Jika Anda ingin memberikan langkah-langkah pembuatan kustom, kami sarankan Anda menggunakan hook platform `predeploy` untuk apa pun kecuali perintah yang paling sederhana, bukan `Buildfile`. Hook platform memungkinkan skrip yang lebih kaya dan penanganan kesalahan yang lebih baik. Hook platform dijelaskan di bagian selanjutnya.

## Procfile
<a name="platforms-linux-extend.proc"></a>

Untuk menentukan perintah kustom untuk memulai dan menjalankan aplikasi Anda, menempatkan file yang bernama `Procfile` di direktori root dari sumber aplikasi Anda. Nama file peka huruf besar/kecil. Gunakan sintaks berikut untuk `Procfile` Anda. Anda dapat menentukan satu atau lebih perintah.

```
<process_name1>: <command1>
<process_name2>: <command2>
...
```

Setiap baris di `Procfile` harus sesuai dengan ekspresi reguler berikut: `^[A-Za-z0-9_-]+:\s*[^\s].*$`

Menggunakan `Procfile` untuk proses aplikasi yang berjalan lama yang seharusnya tidak keluar. Elastic Beanstalk mengharapkan proses berjalan dari `Procfile` untuk berjalan terus menerus. Elastic Beanstalk memonitor proses ini dan memulai ulang setiap proses yang berakhir. Untuk proses berjalan pendek, gunakan [Buildfile](#platforms-linux-extend.build).

Semua jalur di `Procfile` adalah relatif terhadap akar dari paket sumber. Contoh berikut `Procfile` mendefinisikan tiga proses. Yang pertama, disebut `web` dalam contoh, adalah *aplikasi web utama*.

**Example Procfile**  

```
web: bin/myserver
cache: bin/mycache
foo: bin/fooapp
```

Elastic Beanstalk mengonfigurasi server proksi untuk meneruskan permintaan ke aplikasi web utama Anda pada port 5000, dan Anda dapat mengonfigurasi nomor port ini. Sebuah penggunaan umum untuk `Procfile` adalah untuk lulus nomor port ini untuk aplikasi Anda sebagai argumen perintah. Untuk detail tentang konfigurasi proxy, lihat[Konfigurasi proksi terbalik](platforms-linux-extend.proxy.md).

Elastic Beanstalk menangkap output standar dan kesalahan aliran dari proses `Procfile` dalam berkas log. Elastic Beanstalk menamakan berkas log setelah proses dan menyimpannya di `/var/log`. Misalnya, proses `web` dalam contoh sebelumnya menghasilkan log bernama `web-1.log` dan `web-1.error.log` untuk `stdout` dan `stderr`, masing-masing.

# Hook platform
<a name="platforms-linux-extend.hooks"></a>

Hook platform dirancang khusus untuk memperluas platform lingkungan Anda. Ini adalah skrip kustom dan file eksekusi lainnya yang Anda men-deploy sebagai bagian dari kode sumber aplikasi Anda, dan Elastic Beanstalk berjalan selama berbagai tahap penyediaan instans.

**catatan**  
Hook platform tidak didukung pada versi platform Amazon Linux AMI (sebelumnya Amazon Linux 2).

## Hook platform deployment aplikasi
<a name="platforms-linux-extend.hooks.appdeploy"></a>

*Deployment aplikasi* terjadi ketika Anda menyediakan paket sumber baru untuk deployment, atau ketika Anda membuat perubahan konfigurasi yang memerlukan penghentian dan rekreasi semua instans lingkungan.

Untuk menyediakan platform hook yang berjalan selama deployment aplikasi, menempatkan file di bawah direktori `.platform/hooks` di paket sumber Anda, di salah satu subdirektori berikut.
+ `prebuild` – File di sini berjalan setelah platform mesin Elastic Beanstalk mengunggah dan mengekstrak paket sumber aplikasi, dan sebelum menyiapkan dan mengonfigurasi aplikasi dan server web.

  File `prebuild` berjalan setelah menjalankan perintah yang ditemukan di bagian [perintah](customize-containers-ec2.md#linux-commands) dari setiap file konfigurasi dan sebelum menjalankan perintah `Buildfile`.
+ `predeploy` – File di sini berjalan setelah mesin platform Elastic Beanstalk mengatur dan mengonfigurasi aplikasi dan server web, dan sebelum men-deploy mereka ke lokasi waktu aktif akhir mereka.

  File `predeploy` berjalan setelah menjalankan perintah yang ditemukan di bagian [container\$1commands](customize-containers-ec2.md#linux-container-commands) dari setiap file konfigurasi dan sebelum menjalankan perintah `Procfile`.
+ `postdeploy` – File di sini berjalan setelah mesin platform Elastic Beanstalk men-deploy aplikasi dan server proksi.

  Ini adalah langkah alur kerja deployment terakhir.

## Hook platform deployment konfigurasi
<a name="platforms-linux-extend.hooks.configdeploy"></a>

*Deployment konfigurasi* terjadi ketika Anda membuat perubahan konfigurasi yang hanya memperbarui instans lingkungan tanpa menciptakan mereka. Pembaharuan pilihan berikut ini menyebabkan pembaruan konfigurasi.
+ [Properti lingkungan dan pengaturan khusus platform](environments-cfg-softwaresettings.md)
+ [File statis](environment-cfg-staticfiles.md)
+ [AWS X-Ray daemon](environment-configuration-debugging.md)
+ [Penyimpanan log dan streaming](environments-cfg-logging.md)
+ Port aplikasi (untuk detailnya lihat[Konfigurasi proksi terbalik](platforms-linux-extend.proxy.md))

Untuk menyediakan hook yang berjalan selama deployment konfigurasi, menempatkan mereka di bawah direktori `.platform/confighooks` dalam paket sumber Anda. Tiga subdirektori yang sama seperti untuk aplikasi deployment hook berlaku.

## Selengkapnya tentang hook platform
<a name="platforms-linux-extend.hooks.more"></a>

File hook dapat berupa file biner, atau berkas skrip yang dimulai dengan baris `#!` yang berisi jalur penerjemah mereka, seperti `#!/bin/bash`. Semua file harus memiliki izin eksekusi. Gunakan `chmod +x` untuk mengatur izin eksekusi pada file hook Anda. Untuk semua versi platform berbasis Amazon Linux 2023 dan Amazon Linux 2 yang dirilis pada atau setelah 29 April 2022, Elastic Beanstalk secara otomatis memberikan izin eksekusi ke semua skrip kait platform. Dalam hal ini Anda tidak perlu memberikan izin eksekusi secara manual. Untuk daftar versi platform ini, lihat catatan rilis Linux [29 April 2022](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-04-29-linux.html#release-2022-04-29-linux.platforms) di *Panduan Catatan AWS Elastic Beanstalk Rilis*.

Elastic Beanstalk menjalankan file di masing-masing direktori ini dalam urutan leksikografis nama file. Semua file berjalan sebagai pengguna `root`. Direktori kerja saat ini (cwd) untuk hook platform adalah direktori root aplikasi. Untuk file `prebuild` dan `predeploy` itu adalah direktori pementasan aplikasi, dan untuk file `postdeploy` itu adalah direktori aplikasi saat ini. Jika salah satu file gagal (keluar dengan kode keluar non-nol), deployment dibatalkan dan gagal.

Skrip teks kait platform mungkin gagal jika berisi karakter pemisah baris Windows *Carriage Return /Line Feed* (CRLF). Jika file disimpan di host Windows, kemudian ditransfer ke server Linux, itu mungkin berisi jeda baris Windows CRLF. Untuk platform yang dirilis pada atau setelah [29 Desember 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-12-29-linux.html) Elastic Beanstalk secara otomatis mengonversi karakter Windows CRLF menjadi karakter pemutus baris *Linux* Line Feed (LF) di file teks kait platform. Jika aplikasi Anda berjalan pada platform Amazon Linux 2 yang dirilis sebelum tanggal ini, Anda harus mengonversi karakter Windows CRLF ke karakter LF Linux. Salah satu cara untuk mencapai ini adalah dengan membuat dan menyimpan file skrip pada host Linux. Alat yang mengonversi karakter ini juga tersedia di internet.

File hook memiliki akses ke semua properti lingkungan yang telah Anda tetapkan dalam opsi aplikasi, dan variabel lingkungan sistem `HOME`, `PATH`, dan `PORT`. 

Untuk mendapatkan nilai variabel lingkungan dan opsi konfigurasi lainnya ke skrip kait platform Anda, Anda dapat menggunakan utilitas `get-config` yang Elastic Beanstalk sediakan dalam instans lingkungan. Untuk rincian selengkapnya, lihat [Alat skrip platform untuk lingkungan Elastic Beanstalk Anda](custom-platforms-scripts.md).

# File konfigurasi
<a name="platforms-linux-extend.config-files"></a>

Anda dapat menambahkan direktori [file konfigurasi](ebextensions.md) ke direktori `.ebextensions` dari kode sumber aplikasi Anda untuk mengonfigurasi berbagai aspek lingkungan Elastic Beanstalk Anda. Antara lain, file konfigurasi memungkinkan Anda menyesuaikan perangkat lunak dan file lain pada instans lingkungan Anda dan menjalankan perintah inisialisasi pada instans. Untuk informasi selengkapnya, lihat [Menyesuaikan perangkat lunak pada server Linux](customize-containers-ec2.md).

Anda juga dapat mengatur [opsi konfigurasi](command-options.md) menggunakan file konfigurasi. Banyak opsi mengontrol perilaku platform, dan beberapa opsi ini adalah [spesifik platform](command-options-specific.md).

Untuk platform berbasis Amazon Linux 2 dan Amazon Linux 2023, sebaiknya gunakan *Buildfile, *Procfile**, dan *hook platform* untuk mengonfigurasi dan menjalankan kode khusus pada instans lingkungan Anda selama penyediaan instans. Mekanisme ini dijelaskan di bagian sebelumnya di halaman ini. Anda masih dapat menggunakan perintah dan perintah kontainer di file konfigurasi `.ebextensions`, tetapi tidak mudah untuk digunakan. Misalnya, menulis skrip perintah di dalam file YAML dapat menantang dari sudut pandang sintaks. Anda masih perlu menggunakan file `.ebextensions` konfigurasi untuk skrip apa pun yang membutuhkan referensi ke AWS CloudFormation sumber daya.

# Konfigurasi proksi terbalik
<a name="platforms-linux-extend.proxy"></a>

Semua versi platform Amazon Linux 2 dan Amazon Linux 2023 menggunakan nginx sebagai server proxy terbalik default mereka. Platform Tomcat, Node.js, PHP, dan Python juga mendukung Apache HTTPD sebagai alternatif. Untuk memilih Apache pada platform ini, mengatur pilihan `ProxyServer` di namespace `aws:elasticbeanstalk:environment:proxy` ke `apache`. Semua platform mengaktifkan konfigurasi server proksi dengan cara yang seragam, seperti yang dijelaskan di bagian ini.

**catatan**  
Pada Amazon Linux AMI versi platform (sebelumnya Amazon Linux 2) Anda mungkin harus mengonfigurasi server proksi secara berbeda. Anda dapat menemukan rincian warisan ini di bawah [topik platform masing-masing](concepts-all-platforms.md) dalam panduan ini.

Elastic Beanstalk mengonfigurasi server proksi pada instans lingkungan Anda untuk meneruskan lalu lintas web ke aplikasi web utama pada URL akar lingkungan; misalnya, `http://my-env.elasticbeanstalk.com`.

Secara default, Elastic Beanstalk mengonfigurasi proksi untuk meneruskan permintaan masuk pada port 80 untuk aplikasi web utama Anda pada port 5000. Anda dapat mengonfigurasi nomor port ini dengan menetapkan properti lingkungan `PORT` menggunakan namespace [aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment) dalam file konfigurasi, seperti yang ditunjukkan dalam contoh berikut.

```
option_settings:
  - namespace:  aws:elasticbeanstalk:application:environment
    option_name:  PORT
    value:  <main_port_number>
```

Untuk informasi selengkapnya tentang pengaturan variabel lingkungan untuk aplikasi Anda, lihat [Pengaturan opsi](ebextensions-optionsettings.md).

Aplikasi Anda harus mendengarkan pada port yang dikonfigurasi untuk itu di proksi. Jika Anda mengubah port default menggunakan properti lingkungan `PORT`, kode Anda dapat mengaksesnya dengan membaca nilai variabel lingkungan `PORT`. Sebagai contoh, panggilan `os.Getenv("PORT")` di Go, atau `System.getenv("PORT")` di Java. Jika Anda mengonfigurasi proksi Anda untuk mengirim lalu lintas ke beberapa proses aplikasi, Anda dapat mengonfigurasi beberapa properti lingkungan, dan menggunakan nilai-nilai mereka di kedua konfigurasi proksi dan kode aplikasi Anda. Pilihan lain adalah untuk lulus nilai port untuk proses sebagai argumen perintah dalam `Procfile`. Untuk mengetahui informasi selengkapnya, lihat [Buildfile dan Procfile](platforms-linux-extend.build-proc.md).

## Mengonfigurasi nginx
<a name="platforms-linux-extend.proxy.nginx"></a>

Elastic Beanstalk menggunakan nginx sebagai proksi terbalik default untuk memetakan aplikasi Anda ke penyeimbangan beban Elastic Load Balancing Anda. Elastic Beanstalk menyediakan konfigurasi nginx default yang dapat Anda perpanjang atau timpa sepenuhnya dengan konfigurasi Anda sendiri.

**catatan**  
Saat Anda menambahkan atau mengedit file konfigurasi `.conf` nginx, pastikan untuk menyandikannya sebagai UTF-8.

Untuk memperpanjang konfigurasi nginx default Elastic Beanstalk, tambahkan file konfigurasi `.conf` ke folder yang bernama `.platform/nginx/conf.d/` dalam paket sumber aplikasi Anda. Konfigurasi nginx Elastic Beanstalk mencakup file `.conf` dalam folder ini secara automatik.

```
~/workspace/my-app/
|-- .platform
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf
`-- other source files
```

File konfigurasi termasuk dalam `http` blok konfigurasi nginx. `.platform/nginx/conf.d/` Gunakan lokasi ini untuk konfigurasi yang berlaku secara global.

Untuk memperluas konfigurasi blok `server` nginx default, `.conf` tambahkan file konfigurasi ke folder `.platform/nginx/conf.d/elasticbeanstalk/` bernama dalam bundel sumber aplikasi Anda. Konfigurasi nginx Elastic Beanstalk menyertakan file dalam folder ini di dalam blok`.conf`. `server`

```
~/workspace/my-app/
|-- .platform
|   `-- nginx
|       `-- conf.d
|           `-- elasticbeanstalk
|               `-- server.conf
`-- other source files
```

Gunakan lokasi ini untuk menambahkan konfigurasi khusus server, seperti blok lokasi tambahan, halaman kesalahan kustom, atau arahan tingkat server. Contoh berikut menambahkan blok lokasi kustom.

**Example . platform/nginx/conf.d/elasticbeanstalk/server.conf**  

```
location /test {
    return 200 "Hello World!";
    add_header Content-Type text/plain;
}
```

Untuk mengesampingkan konfigurasi nginx default Elastic Beanstalk sepenuhnya, sertakan konfigurasi di paket sumber Anda di `.platform/nginx/nginx.conf`:

```
~/workspace/my-app/
|-- .platform
|   `-- nginx
|       `-- nginx.conf
`-- other source files
```

Jika Anda menimpa konfigurasi nginx Elastic Beanstalk, tambahkan baris berikut ke `nginx.conf` untuk menarik dalam konfigurasi Elastic Beanstalk untuk [Peningkatan pelaporan dan pemantauan kesehatan di Elastic Beanstalk](health-enhanced.md), pemetaan aplikasi otomatis, dan file statis.

```
 include conf.d/elasticbeanstalk/*.conf;
```

## Mengonfigurasi Apache HTTPD
<a name="platforms-linux-extend.proxy.httpd"></a>

Platform Tomcat, Node.js, PHP, dan Python memungkinkan Anda memilih server proksi Apache HTTPD sebagai alternatif untuk nginx. Ini bukan default. Contoh berikut mengonfigurasi Elastic Beanstalk untuk menggunakan Apache HTTPD.

**Example .ebextensions/httpd-proxy.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```
Anda dapat memperpanjang Elastic Beanstalk konfigurasi Apache default dengan file konfigurasi tambahan Anda. Atau, Anda dapat sepenuhnya mengganti konfigurasi Apache default Elastic Beanstalk.  
Untuk memperpanjang konfigurasi Apache default Elastic Beanstalk, tambahkan file konfigurasi `.conf` ke folder bernama `.platform/httpd/conf.d` di paket sumber aplikasi Anda. Konfigurasi Apache Elastic Beanstalk mencakup file `.conf` di folder ini secara otomatis.  

```
~/workspace/my-app/
|-- .ebextensions
|   -- httpd-proxy.config
|-- .platform
|   -- httpd
|      -- conf.d
|         -- port5000.conf
|         -- ssl.conf
-- index.jsp
```
Sebagai contoh, konfigurasi Apache 2.4 berikut menambahkan listener di port 5000.  

**Example . platform/httpd/conf.d/port5000.conf**  

```
listen 5000
<VirtualHost *:5000>
  <Proxy *>
    Require all granted
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>
```
Untuk mengesampingkan konfigurasi Apache default Elastic Beanstalk sepenuhnya, sertakan konfigurasi dalam paket sumber Anda di `.platform/httpd/conf/httpd.conf`.  

```
~/workspace/my-app/
|-- .ebextensions
|   -- httpd-proxy.config
|-- .platform
|   `-- httpd
|       `-- conf
|           `-- httpd.conf
`-- index.jsp
```
Jika Anda mengganti konfigurasi Apache Elastic Beanstalk, tambahkan baris berikut ke `httpd.conf` Anda untuk menarik dalam konfigurasi Elastic Beanstalk untuk [Peningkatan pelaporan dan pemantauan kesehatan di Elastic Beanstalk](health-enhanced.md), pemetaan aplikasi otomatis, dan file statis.  

```
IncludeOptional conf.d/elasticbeanstalk/*.conf
```

# Contoh aplikasi dengan ekstensi
<a name="platforms-linux-extend.example"></a>

Contoh berikut menunjukkan bundel sumber aplikasi dengan beberapa fitur ekstensibilitas yang `Procfile` didukung platform Elastic Beanstalk Amazon Linux 2 dan Amazon Linux 2023`.ebextensions`: a, file konfigurasi, kait khusus, dan file konfigurasi proxy.

```
~/my-app/
|-- web.jar
|-- Procfile
|-- readme.md
|-- .ebextensions/
|   |-- options.config        # Option settings
|   `-- cloudwatch.config     # Other .ebextensions sections, for example files and container commands
`-- .platform/
    |-- nginx/                # Proxy configuration
    |   |-- nginx.conf
    |   `-- conf.d/
    |       |-- custom.conf
    |       `-- elasticbeanstalk/
    |           `-- server.conf
    |-- hooks/                # Application deployment hooks
    |   |-- prebuild/
    |   |   |-- 01_set_secrets.sh
    |   |   `-- 12_update_permissions.sh
    |   |-- predeploy/
    |   |   `-- 01_some_service_stop.sh
    |   `-- postdeploy/
    |       |-- 01_set_tmp_file_permissions.sh
    |       |-- 50_run_something_after_app_deployment.sh
    |       `-- 99_some_service_start.sh
    `-- confighooks/          # Configuration deployment hooks
        |-- prebuild/
        |   `-- 01_set_secrets.sh
        |-- predeploy/
        |   `-- 01_some_service_stop.sh
        `-- postdeploy/
            |-- 01_run_something_after_config_deployment.sh
            `-- 99_some_service_start.sh
```

**catatan**  
Beberapa ekstensi ini tidak didukung di Amazon Linux AMI platform versi (sebelumnya Amazon Linux 2).