

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

# QuickStart: Menerapkan aplikasi Docker Compose ke Elastic Beanstalk
<a name="docker-compose-quickstart"></a>

 QuickStart Tutorial ini memandu Anda melalui proses pembuatan aplikasi Docker Compose multi-container dan menerapkannya ke lingkungan. AWS Elastic Beanstalk Anda akan membuat aplikasi web Flask dengan proxy nginx reverse untuk menunjukkan bagaimana Docker Compose menyederhanakan orkestrasi beberapa container.

**Bukan untuk penggunaan produksi**  
Contoh dimaksudkan untuk demonstrasi saja. Jangan gunakan contoh aplikasi dalam produksi.

**Topics**
+ [AWS Akun Anda](#docker-compose-quickstart-aws-account)
+ [Prasyarat](#docker-compose-quickstart-prereq)
+ [Langkah 1: Buat aplikasi Docker Compose](#docker-compose-quickstart-create-app)
+ [Langkah 2: Jalankan aplikasi Anda secara lokal](#docker-compose-quickstart-run-local)
+ [Langkah 3: Terapkan aplikasi Docker Compose Anda dengan EB CLI](#docker-compose-quickstart-deploy)
+ [Langkah 4: Uji aplikasi Anda pada Elastic Beanstalk](#docker-compose-quickstart-run-eb-ap)
+ [Langkah 5: Bersihkan](#docker-compose-quickstart-cleanup)
+ [AWS sumber daya untuk aplikasi Anda](#docker-compose-quickstart-eb-resources)
+ [Langkah selanjutnya](#docker-compose-quickstart-next-steps)
+ [Terapkan dengan konsol Elastic Beanstalk](#docker-compose-quickstart-console)

## AWS Akun Anda
<a name="docker-compose-quickstart-aws-account"></a>

Jika Anda belum menjadi AWS pelanggan, Anda perlu membuat AWS akun. Mendaftar memungkinkan Anda mengakses Elastic Beanstalk AWS dan layanan lain yang Anda butuhkan.

Jika Anda sudah memiliki AWS akun, Anda dapat melanjutkan ke[Prasyarat](#docker-compose-quickstart-prereq).

### Buat AWS akun
<a name="docker-compose-quickstart-aws-account-procedure"></a>

#### Mendaftar untuk Akun AWS
<a name="sign-up-for-aws"></a>

Jika Anda tidak memiliki Akun AWS, selesaikan langkah-langkah berikut untuk membuatnya.

**Untuk mendaftar untuk Akun AWS**

1. Buka [https://portal.aws.amazon.com/billing/pendaftaran.](https://portal.aws.amazon.com/billing/signup)

1. Ikuti petunjuk online.

   Bagian dari prosedur pendaftaran melibatkan menerima panggilan telepon atau pesan teks dan memasukkan kode verifikasi pada keypad telepon.

   Saat Anda mendaftar untuk sebuah Akun AWS, sebuah *Pengguna root akun AWS*dibuat. Pengguna root memiliki akses ke semua Layanan AWS dan sumber daya di akun. Sebagai praktik keamanan terbaik, tetapkan akses administratif ke pengguna, dan gunakan hanya pengguna root untuk melakukan [tugas yang memerlukan akses pengguna root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS mengirimi Anda email konfirmasi setelah proses pendaftaran selesai. Kapan saja, Anda dapat melihat aktivitas akun Anda saat ini dan mengelola akun Anda dengan masuk [https://aws.amazon.com.rproxy.govskope.cake/](https://aws.amazon.com/) dan memilih **Akun Saya**.

#### Buat pengguna dengan akses administratif
<a name="create-an-admin"></a>

Setelah Anda mendaftar Akun AWS, amankan Pengguna root akun AWS, aktifkan AWS IAM Identity Center, dan buat pengguna administratif sehingga Anda tidak menggunakan pengguna root untuk tugas sehari-hari.

**Amankan Anda Pengguna root akun AWS**

1.  Masuk ke [Konsol Manajemen AWS](https://console.aws.amazon.com/)sebagai pemilik akun dengan memilih **pengguna Root** dan memasukkan alamat Akun AWS email Anda. Di laman berikutnya, masukkan kata sandi.

   Untuk bantuan masuk dengan menggunakan pengguna root, lihat [Masuk sebagai pengguna root](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) di *AWS Sign-In Panduan Pengguna*.

1. Mengaktifkan autentikasi multi-faktor (MFA) untuk pengguna root Anda.

   Untuk petunjuk, lihat [Mengaktifkan perangkat MFA virtual untuk pengguna Akun AWS root (konsol) Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) di Panduan Pengguna *IAM*.

**Buat pengguna dengan akses administratif**

1. Aktifkan Pusat Identitas IAM.

   Untuk mendapatkan petunjuk, silakan lihat [Mengaktifkan AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) di *Panduan Pengguna AWS IAM Identity Center *.

1. Di Pusat Identitas IAM, berikan akses administratif ke pengguna.

   Untuk tutorial tentang menggunakan Direktori Pusat Identitas IAM sebagai sumber identitas Anda, lihat [Mengkonfigurasi akses pengguna dengan default Direktori Pusat Identitas IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) di *Panduan AWS IAM Identity Center Pengguna*.

**Masuk sebagai pengguna dengan akses administratif**
+ Untuk masuk dengan pengguna Pusat Identitas IAM, gunakan URL masuk yang dikirim ke alamat email saat Anda membuat pengguna Pusat Identitas IAM.

  Untuk bantuan masuk menggunakan pengguna Pusat Identitas IAM, lihat [Masuk ke portal AWS akses](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) di *Panduan AWS Sign-In Pengguna*.

**Tetapkan akses ke pengguna tambahan**

1. Di Pusat Identitas IAM, buat set izin yang mengikuti praktik terbaik menerapkan izin hak istimewa paling sedikit.

   Untuk petunjuknya, lihat [Membuat set izin](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) di *Panduan AWS IAM Identity Center Pengguna*.

1. Tetapkan pengguna ke grup, lalu tetapkan akses masuk tunggal ke grup.

   Untuk petunjuk, lihat [Menambahkan grup](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) di *Panduan AWS IAM Identity Center Pengguna*.

## Prasyarat
<a name="docker-compose-quickstart-prereq"></a>

Untuk mengikuti prosedur di panduan ini, Anda memerlukan terminal atau shell baris perintah untuk menjalankan perintah. Perintah ditampilkan dalam daftar yang diawali dengan simbol prompt ($) dan nama direktori saat ini, bila perlu.

```
~/eb-project$ this is a command
this is output
```

Di Linux dan macOS, Anda dapat menggunakan shell dan manajer paket pilihan Anda. Pada Windows Anda dapat [menginstal Windows Subsystem untuk Linux untuk](https://docs.microsoft.com/en-us/windows/wsl/install-win10) mendapatkan versi Windows terintegrasi dari Ubuntu dan Bash.

### EB CLI
<a name="docker-compose-quickstart-prereq.ebcli"></a>

Tutorial ini menggunakan Elastic Beanstalk Command Line Interface (EB CLI). Untuk detail tentang pemasangan dan konfigurasi EB CLI, lihat [Instal EB CLI dengan skrip pengaturan (disarankan)](eb-cli3.md#eb-cli3-install) dan [Mengonfigurasi EB CLI](eb-cli3-configuration.md).

### Docker dan Docker Compose
<a name="docker-compose-quickstart-prereq.runtime"></a>

Untuk mengikuti tutorial ini, Anda memerlukan instalasi lokal Docker dan Docker Compose yang berfungsi. Untuk informasi selengkapnya, lihat [Mendapatkan Docker](https://docs.docker.com/get-docker/) dan [Instal Docker Compose](https://docs.docker.com/compose/install/) di situs web dokumentasi Docker.

Verifikasi bahwa Docker dan Docker Compose diinstal dan dijalankan dengan menjalankan perintah berikut.

```
~$ docker info
~$ docker compose version
```

## Langkah 1: Buat aplikasi Docker Compose
<a name="docker-compose-quickstart-create-app"></a>

Untuk contoh ini, kita membuat aplikasi multi-container menggunakan Docker Compose yang terdiri dari aplikasi web Flask dan nginx reverse proxy. Ini menunjukkan bagaimana Docker Compose menyederhanakan orkestrasi beberapa kontainer yang bekerja bersama.

Aplikasi ini mencakup konfigurasi pemantauan kesehatan yang memungkinkan Elastic Beanstalk mengumpulkan metrik aplikasi terperinci dari proxy nginx Anda.

Aplikasi ini terdiri dari struktur berikut:

```
~/eb-docker-compose-flask/
|-- docker-compose.yml
|-- web/
|   |-- Dockerfile
|   |-- app.py
|   `-- requirements.txt
|-- proxy/
|   |-- Dockerfile
|   `-- nginx.conf
`-- .platform/
    `-- hooks/
        `-- postdeploy/
            `-- 01_setup_healthd_permissions.sh
```

Buat struktur direktori dan tambahkan file-file berikut:

Pertama, buat `docker-compose.yml` file utama yang mendefinisikan layanan dan hubungannya.

**Example `~/eb-docker-compose-flask/docker-compose.yml`**  

```
services:
  web:
    build: ./web
    expose:
      - "5000"

  nginx-proxy:
    build: ./proxy
    ports:
      - "80:80"
    volumes:
      - "/var/log/nginx:/var/log/nginx"
    depends_on:
      - web
```

Buat aplikasi web Flask di `web` direktori. Tambahkan konten berikut ke `app.py` file Anda.

**Example `~/eb-docker-compose-flask/web/app.py`**  

```
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello Elastic Beanstalk! This is a Docker Compose application'
```

Tambahkan konten berikut ke layanan web Anda`Dockerfile`.

**Example `~/eb-docker-compose-flask/web/Dockerfile`**  

```
FROM public.ecr.aws/docker/library/python:3.12
COPY . /app
WORKDIR /app
RUN pip install Flask==3.1.1
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
```

Buat proxy terbalik nginx di direktori. `proxy` Tambahkan konten berikut ke `nginx.conf` file Anda.

Konfigurasi ini mencakup pengaturan pemantauan kesehatan yang memungkinkan Elastic Beanstalk mengumpulkan metrik aplikasi terperinci. Untuk informasi selengkapnya tentang menyesuaikan format log pemantauan kesehatan, lihat[Format log kondisi yang ditingkatkan](health-enhanced-serverlogs.md).

**Example `~/eb-docker-compose-flask/proxy/nginx.conf`**  

```
events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    map $http_upgrade $connection_upgrade {
        default       "upgrade";
    }

    # Health monitoring log format for Elastic Beanstalk
    log_format healthd '$msec"$uri"$status"$request_time"$upstream_response_time"$http_x_forwarded_for';
    
    upstream flask_app {
        server web:5000;
    }

    server {
        listen 80 default_server;
        root /usr/share/nginx/html;

        # Standard access log
        access_log /var/log/nginx/access.log;
        
        # Health monitoring log for Elastic Beanstalk
        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        
        location / {
            proxy_pass http://flask_app;
            proxy_http_version    1.1;

            proxy_set_header    Connection             $connection_upgrade;
            proxy_set_header    Upgrade                $http_upgrade;
            proxy_set_header    Host                   $host;
            proxy_set_header    X-Real-IP              $remote_addr;
            proxy_set_header    X-Forwarded-For        $proxy_add_x_forwarded_for;
        }
    }
}
```

Tambahkan konten berikut ke layanan proxy Anda`Dockerfile`.

**Example `~/eb-docker-compose-flask/proxy/Dockerfile`**  

```
FROM public.ecr.aws/nginx/nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
```

Terakhir, buat skrip hook platform untuk mengatur direktori log yang diperlukan dan izin untuk pemantauan kesehatan. Kait platform memungkinkan Anda menjalankan skrip khusus selama proses penerapan. Untuk informasi selengkapnya tentang kait platform, lihat[Hook platform](platforms-linux-extend.hooks.md).

**Example `~/eb-docker-compose-flask/.platform/hooks/postdeploy/01_setup_healthd_permissions.sh`**  

```
#!/bin/bash
set -ex

NGINX_CONTAINER=$(docker ps --filter "name=nginx-proxy" -q)

if [ -z "$NGINX_CONTAINER" ]; then
    echo "Error: No nginx-proxy container found running"
    exit 1
fi

NGINX_UID=$(docker exec ${NGINX_CONTAINER} id -u nginx)
NGINX_GID=$(docker exec ${NGINX_CONTAINER} id -g nginx)

mkdir -p /var/log/nginx/healthd
chown -R ${NGINX_UID}:${NGINX_GID} /var/log/nginx
```

## Langkah 2: Jalankan aplikasi Anda secara lokal
<a name="docker-compose-quickstart-run-local"></a>

Gunakan perintah [docker compose up](https://docs.docker.com/compose/reference/up/) untuk membangun dan menjalankan aplikasi multi-container Anda secara lokal. Docker Compose akan membangun kedua image kontainer dan memulai layanan yang ditentukan dalam file Anda`docker-compose.yml`.

```
~/eb-docker-compose-flask$ docker compose up --build
```

**--build**Opsi ini memastikan bahwa Docker Compose membangun image container sebelum memulai layanan. Anda akan melihat output yang menunjukkan layanan web dan layanan nginx-proxy dimulai.

Arahkan ke `http://localhost` di browser Anda. Anda akan melihat teks “Halo Elastic Beanstalk\! Ini adalah aplikasi Docker Compose”. Proxy nginx menerima permintaan Anda pada port 80 dan meneruskannya ke aplikasi Flask yang berjalan pada port 5000.

Setelah selesai menguji, hentikan aplikasi dengan menekan **Ctrl\+C** terminal, atau jalankan perintah berikut di terminal terpisah:

```
~/eb-docker-compose-flask$ docker compose down
```

## Langkah 3: Terapkan aplikasi Docker Compose Anda dengan EB CLI
<a name="docker-compose-quickstart-deploy"></a>

Jalankan perintah berikut untuk membuat lingkungan Elastic Beanstalk untuk aplikasi ini.

 

**Untuk membuat lingkungan dan menerapkan aplikasi Docker Compose**

1. Inisialisasi repositori EB CLI Anda dengan perintah **eb init**.

   ```
   ~/eb-docker-compose-flask$ eb init -p docker docker-compose-tutorial --region {{us-east-2}}
   Application docker-compose-tutorial has been created.
   ```

   Perintah ini membuat aplikasi bernama `docker-compose-tutorial` dan mengkonfigurasi repositori lokal Anda untuk membuat lingkungan dengan versi platform Docker terbaru.

1. (Opsional) Jalankan **eb init** lagi untuk mengonfigurasi pasangan kunci default, sehingga Anda dapat menggunakan SSH untuk terhubung ke instans EC2 yang menjalankan aplikasi Anda.

   ```
   ~/eb-docker-compose-flask$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   Pilih pasangan kunci jika Anda sudah memilikinya, atau ikuti prompt untuk membuatnya. Jika Anda tidak melihat prompt atau perlu mengubah pengaturan Anda nanti, jalankan **eb init -i**.

1. Buat lingkungan baru dan deploy aplikasi Anda dengan **eb create**. Elastic Beanstalk secara otomatis `docker-compose.yml` mendeteksi file Anda dan menyebarkan aplikasi multi-kontainer Anda.

   ```
   ~/eb-docker-compose-flask$ eb create docker-compose-tutorial
   ```

   Dibutuhkan sekitar lima menit untuk Elastic Beanstalk untuk menciptakan lingkungan Anda dan menerapkan aplikasi multi-kontainer Anda.

## Langkah 4: Uji aplikasi Anda pada Elastic Beanstalk
<a name="docker-compose-quickstart-run-eb-ap"></a>

Ketika proses untuk membuat lingkungan Anda selesai, buka situs web Anda dengan**eb open**.

```
~/eb-docker-compose-flask$ eb open
```

Bagus\! Anda telah menerapkan aplikasi Docker Compose multi-kontainer dengan Elastic Beanstalk\! Ini akan membuka jendela peramban menggunakan nama domain yang dibuat untuk aplikasi Anda. Anda akan melihat pesan dari aplikasi Flask Anda, disajikan melalui proxy terbalik nginx.

## Langkah 5: Bersihkan
<a name="docker-compose-quickstart-cleanup"></a>

Anda dapat menghentikan lingkungan Anda ketika Anda selesai bekerja dengan aplikasi Anda. Elastic Beanstalk AWS mengakhiri semua sumber daya yang terkait dengan lingkungan Anda.

Untuk mengakhiri lingkungan Elastic Beanstalk Anda dengan EB CLI jalankan perintah berikut.

```
~/eb-docker-compose-flask$ eb terminate
```

## AWS sumber daya untuk aplikasi Anda
<a name="docker-compose-quickstart-eb-resources"></a>

Anda baru saja membuat aplikasi instance tunggal yang menjalankan beberapa kontainer. Ini berfungsi sebagai aplikasi sampel langsung dengan satu instans EC2, sehingga tidak memerlukan penyeimbangan beban atau penskalaan otomatis. Untuk aplikasi contoh tunggal Elastic Beanstalk menciptakan sumber daya berikut: AWS 
+ **Instans EC2** – Mesin virtual Amazon EC2 yang dikonfigurasi untuk menjalankan aplikasi web di platform yang Anda pilih.

  Setiap platform menjalankan satu set perangkat lunak, file konfigurasi, dan penulisan yang berbeda untuk mendukung versi bahasa, kerangka kerja, kontainer web tertentu, atau kombinasi dari semua ini. Sebagian besar platform menggunakan Apache atau nginx sebagai proksi terbalik yang memproses lalu lintas web di depan aplikasi web Anda, meneruskan permintaan ke aplikasi web, menyajikan aset statis, dan menghasilkan log akses dan kesalahan.
+ **Grup keamanan instans** – Grup keamanan Amazon EC2 yang dikonfigurasi untuk mengizinkan lalu lintas masuk di port 80. Sumber daya ini memungkinkan lalu lintas HTTP dari penyeimbang beban mencapai instans EC2 yang menjalankan aplikasi web Anda. Secara default, lalu lintas tidak diizinkan di port lain.
+ **Bucket Amazon S3** – Lokasi penyimpanan untuk kode sumber, log, dan artifact lainnya yang dibuat saat Anda menggunakan Elastic Beanstalk.
+ ** CloudWatch Alarm Amazon** — Dua CloudWatch alarm yang memantau beban pada instans di lingkungan Anda dan dipicu jika beban terlalu tinggi atau terlalu rendah. Saat alarm terpicu, grup Auto Scaling Anda akan menaikkan atau menurunkan skala sebagai respons.
+ **CloudFormation stack** - Elastic CloudFormation Beanstalk digunakan untuk meluncurkan sumber daya di lingkungan Anda dan menyebarkan perubahan konfigurasi. Sumber daya ditentukan di sebuah templat yang dapat Anda lihat di [Konsol CloudFormation](https://console.aws.amazon.com/cloudformation).
+  **Nama domain — Nama** domain yang merutekan ke aplikasi web Anda dalam formulir *{{subdomain}}. {{region}}.elasticbeanstalk.com*. 

Elastic Beanstalk mengelola semua sumber daya tersebut. Ketika Anda mengakhiri lingkungan, Elastic Beanstalk mengakhiri semua sumber daya yang dimuatnya. Aplikasi Docker Compose Anda menjalankan beberapa kontainer pada instans EC2 tunggal, dengan Elastic Beanstalk menangani orkestrasi secara otomatis.

## Langkah selanjutnya
<a name="docker-compose-quickstart-next-steps"></a>

Setelah lingkungan Anda menjalankan aplikasi, Anda dapat men-deploy versi baru aplikasi atau aplikasi yang berbeda kapan saja. Men-deploy versi aplikasi baru itu sangat cepat karena tidak memerlukan persediaan atau memulai ulang instans EC2. Anda juga dapat menjelajahi lingkungan baru Anda menggunakan konsol Elastic Beanstalk. Untuk langkah-langkah mendetail, lihat [Menjelajahi lingkungan Anda](GettingStarted.md#GettingStarted.Explore) di bagian *Memulai* panduan ini.

Setelah Anda menerapkan satu atau dua contoh aplikasi dan siap untuk mulai mengembangkan dan menjalankan aplikasi Docker Compose secara lokal, lihat. [Mempersiapkan image Docker Anda untuk penyebaran ke Elastic Beanstalk](single-container-docker-configuration.md) 

## Terapkan dengan konsol Elastic Beanstalk
<a name="docker-compose-quickstart-console"></a>

Anda juga dapat menggunakan konsol Elastic Beanstalk untuk meluncurkan aplikasi Docker Compose. Buat file ZIP yang berisi `docker-compose.yml` file Anda dan semua direktori dan file terkait, lalu unggah saat membuat aplikasi baru. Untuk langkah-langkah rinci, lihat [Membuat aplikasi contoh](GettingStarted.md#GettingStarted.CreateApp) di Bab *Memulai* panduan ini.