Mengkonfigurasi lingkungan Elastic Beanstalk Docker - AWS Elastic Beanstalk

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

Mengkonfigurasi lingkungan Elastic Beanstalk Docker

Bab ini menjelaskan informasi konfigurasi tambahan untuk semua cabang platform Docker yang didukung, termasuk cabang platform Docker yang ECS dikelola. Kecuali cabang platform tertentu atau komponen cabang platform diidentifikasi dalam suatu bagian, itu berlaku untuk semua lingkungan yang menjalankan platform Docker dan Docker ECS yang didukung.

catatan

Jika lingkungan Elastic Beanstalk Anda menggunakan versi platform AMI Amazon Linux Docker (sebelum Amazon Linux 2), pastikan untuk membaca informasi tambahan di. Konfigurasi Docker di Amazon Linux AMI (sebelumnya Amazon Linux 2)

Mengkonfigurasi perangkat lunak di lingkungan Docker

Anda dapat menggunakan konsol Elastic Beanstalk untuk mengkonfigurasi perangkat lunak yang berjalan pada contoh lingkungan Anda.

Untuk mengonfigurasi lingkungan Docker Anda di konsol Elastic Beanstalk
  1. Buka konsol Elastic Beanstalk, dan di daftar Wilayah, pilih konsol Elastic Beanstalk. Wilayah AWS

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

    catatan

    Jika Anda memiliki banyak lingkungan, gunakan bilah pencarian untuk memfilter daftar lingkungan.

  3. Di panel navigasi, pilih Konfigurasi.

  4. Dalam kategori konfigurasi Pembaruan, pemantauan, dan pencatatan, pilih Edit.

  5. Membuat perubahan konfigurasi yang diperlukan.

  6. Untuk menyimpan perubahan pilih Terapkan di bagian bawah halaman.

Untuk informasi tentang mengkonfigurasi pengaturan perangkat lunak di lingkungan apa pun, lihatProperti lingkungan dan pengaturan perangkat lunak lainnya. Bagian berikut mencakup informasi spesifik Docker.

Opsi kontainer

Opsi kontainerbagian memiliki pilihan platform-spesifik. Untuk lingkungan Docker, ini memungkinkan Anda memilih apakah lingkungan Anda menyertakan server NGINX proxy atau tidak.

Lingkungan dengan Docker Compose

Jika Anda mengelola lingkungan Docker dengan Docker Compose, Elastic Beanstalk mengasumsikan bahwa Anda menjalankan server proxy sebagai kontainer. Oleh karena itu default ke None untuk pengaturan server Proxy, dan Elastic Beanstalk tidak menyediakan konfigurasi. NGINX

catatan

Bahkan jika Anda memilih NGINXsebagai server proxy, pengaturan ini diabaikan di lingkungan dengan Docker Compose. Pengaturan Server proksi masih default pada Tidak ada.

Karena proxy server NGINX web dinonaktifkan untuk platform Docker di Amazon Linux 2 dengan Docker Compose, Anda harus mengikuti petunjuk untuk membuat log untuk pelaporan kesehatan yang ditingkatkan. Untuk informasi selengkapnya, lihat Membuat log untuk pelaporan kesehatan yang ditingkatkan dengan Docker Compose.

Properti lingkungan dan Variabel Lingkungan

Bagian properti Lingkungan memungkinkan Anda menentukan setelan konfigurasi lingkungan pada instans Amazon Elastic Compute Cloud (AmazonEC2) yang menjalankan aplikasi Anda. properti lingkungan diberikan sebagai pasangan nilai kunci untuk aplikasi. Dalam lingkungan Docker, Elastic Beanstalk memberikan properti lingkungan untuk kontainer sebagai variabel lingkungan.

Kode aplikasi Anda yang berjalan dalam kontainer dapat merujuk ke variabel lingkungan dengan nama dan membaca nilainya. Kode sumber yang membaca variabel lingkungan ini akan bervariasi menurut bahasa pemrograman. Anda dapat menemukan instruksi untuk membaca nilai variabel lingkungan dalam bahasa pemrograman yang didukung platform terkelola Elastic Beanstalk di topik platform masing-masing. Untuk daftar tautan ke topik ini, lihatProperti lingkungan dan pengaturan perangkat lunak lainnya.

Lingkungan dengan Docker Compose

Jika Anda mengelola lingkungan Docker Anda dengan Docker Compose, Anda harus membuat beberapa konfigurasi tambahan untuk mengambil variabel lingkungan dalam kontainer. Agar executable yang berjalan di container Anda untuk mengakses variabel lingkungan ini, Anda harus mereferensikannya di file. docker-compose.yml Untuk informasi selengkapnya, lihat Referensi variabel lingkungan dalam kontainer.

Referensi variabel lingkungan dalam kontainer

Jika Anda menggunakan alat Docker Compose pada platform Docker Amazon Linux 2, Elastic Beanstalk menghasilkan file lingkungan Docker Compose bernama .env di direktori root proyek aplikasi Anda. File ini menyimpan variabel lingkungan Anda dikonfigurasi untuk Elastic Beanstalk.

catatan

Jika Anda menyertakan file .env dalam bundel aplikasi Anda, Elastic Beanstalk tidak akan menghasilkan file .env.

Agar kontainer untuk referensi variabel lingkungan yang Anda tentukan di Elastic Beanstalk, Anda harus mengikuti salah satu atau kedua pendekatan konfigurasi ini.

  • Tambahkan file .env yang dihasilkan oleh Elastic Beanstalk ke opsi konfigurasi env_file di file docker-compose.yml.

  • Langsung menentukan variabel lingkungan di file docker-compose.yml.

Berikut ini adalah contoh file . Sampel file docker-compose.yml menunjukkan kedua pendekatan.

  • Jika anda menentukan properti lingkungan DEBUG_LEVEL=1 dan LOG_LEVEL=error, Elastic Beanstalk menghasilkan file .env berikut untuk Anda:

    DEBUG_LEVEL=1 LOG_LEVEL=error
  • Dalam file docker-compose.yml, opsi konfigurasi env_file menunjuk ke file .env, dan itu juga mendefinisikan variabel lingkungan DEBUG=1 secara langsung di file docker-compose.yml.

    services: web: build: . environment: - DEBUG=1 env_file: - .env
Catatan
  • Jika Anda menetapkan variabel lingkungan yang sama di kedua file, variabel didefinisikan dalam file docker-compose.yml memiliki keutamaan lebih tinggi dari variabel yang didefinisikan dalam file .env.

  • Hati-hati untuk tidak meninggalkan spasi antara tanda sama (=) dan nilai yang diberikan ke variabel Anda untuk mencegah spasi ditambahkan ke string.

Untuk mempelajari lebih lanjut tentang variabel lingkungan di Docker Compose, lihatVariabel lingkungan dalam Compose

Menggunakan fitur interpolasi untuk variabel lingkungan dengan Docker Compose

Dimulai dengan rilis platform 28 Juli 2023, cabang platform Docker Amazon Linux 2 menawarkan fitur interpolasi Docker Compose. Dengan fitur ini, nilai dalam file Compose dapat disetel oleh variabel dan diinterpolasi saat runtime. Untuk informasi selengkapnya tentang fitur ini, lihat Interpolasi di situs web dokumentasi Docker.

penting

Jika Anda ingin menggunakan fitur ini dengan aplikasi Anda, ketahuilah bahwa Anda harus menerapkan pendekatan yang menggunakan kait platform.

Ini diperlukan karena mitigasi yang kami terapkan di mesin platform. Mitigasi ini memastikan kompatibilitas mundur untuk pelanggan yang tidak mengetahui fitur interpolasi baru dan memiliki aplikasi yang ada yang menggunakan variabel lingkungan dengan karakter tersebut. $ Mesin platform yang diperbarui lolos dari interpolasi secara default dengan mengganti karakter dengan $ karakter. $$

Berikut ini adalah contoh skrip hook platform yang dapat Anda atur untuk memungkinkan penggunaan fitur interpolasi.

#!/bin/bash : ' example data format in .env file key1=value1 key2=value2 ' envfile="/var/app/staging/.env" tempfile=$(mktemp) while IFS= read -r line; do # split each env var string at '=' split_str=(${line//=/ }) if [ ${#split_str[@]} -eq 2 ]; then # replace '$$' with '$' replaced_str=${split_str[1]//\$\$/\$} # update the value of env var using ${replaced_str} line="${split_str[0]}=${replaced_str}" fi # append the updated env var to the tempfile echo "${line}" ≫"${tempfile}" done < "${envfile}" # replace the original .env file with the tempfile mv "${tempfile}" "${envfile}"

Tempatkan kait platform di bawah kedua direktori ini:

  • .platform/confighooks/predeploy/

  • .platform/hooks/predeploy/

Untuk informasi selengkapnya, lihat Hook platform di topik Memperluas platform Linux dari panduan ini.

Membuat log untuk pelaporan kesehatan yang ditingkatkan dengan Docker Compose

Agen health Elastic Beanstalk menyediakan sistem operasi dan metrik kesehatan aplikasi untuk lingkungan Elastic Beanstalk. Hal ini bergantung pada web server format log yang relay informasi dalam format tertentu.

Elastic Beanstalk mengasumsikan bahwa Anda menjalankan proxy server web sebagai kontainer. Akibatnya proxy server NGINX web dinonaktifkan untuk lingkungan Docker yang menjalankan Docker Compose. Anda harus mengkonfigurasi server Anda untuk menulis log di lokasi dan format yang menggunakan agen kesehatan Elastic Beanstalk. Dengan demikian, Anda dapat memanfaatkan sepenuhnya pelaporan kesehatan yang disempurnakan, meskipun proxy server web dinonaktifkan.

Untuk petunjuk tentang cara melakukannya, lihat Konfigurasi log server web

Pencatatan khusus wadah Docker dengan Docker Compose

Untuk memecahkan masalah secara efisien dan memantau layanan kontainer Anda, Anda dapat meminta log instans dari Elastic Beanstalk melalui konsol manajemen lingkungan atau EB. CLI Log instans terdiri dari log bundel dan log ekor, digabungkan dan dikemas untuk memungkinkan Anda melihat log dan peristiwa terbaru dengan cara yang efisien dan mudah.

Elastic Beanstalk menciptakan direktori log pada contoh kontainer, satu untuk setiap layanan didefinisikan dalam file docker-compose.yml, di /var/log/eb-docker/containers/<service name>. Jika Anda menggunakan fitur Docker Compose pada platform Docker Amazon Linux 2, Anda dapat memasang direktori ini ke lokasi dalam struktur file penampung tempat log ditulis. Ketika Anda memasang direktori log untuk menulis data log, Elastic Beanstalk dapat mengumpulkan data log dari direktori ini.

Jika aplikasi Anda berada di platform Docker yang tidak menggunakan Docker Compose, Anda dapat mengikuti prosedur standar yang dijelaskan di Pencatatan khusus wadah Docker dengan Docker Compose.

Untuk mengonfigurasi file log layanan Anda menjadi file ekor dan log bundel yang dapat diambil
  1. Mengedit file docker-compose.yml.

  2. Di bawah kunci volumes untuk layanan Anda, tambahkan bind mount menjadi seperti ini:

    "${EB_LOG_BASE_DIR}/<service name>:<log directory inside container>

    Dalam sampel file docker-compose.yml di bawah ini:

    • nginx-proxyadalah <service name>

    • /var/log/nginxadalah <log directory inside container>

    services: nginx-proxy: image: "nginx" volumes: - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx"

  • Direktori var/log/nginx berisi log untuk layanan proksi-nginx dalam kontainer, dan akan dipetakan ke direktori /var/log/eb-docker/containers/nginx-proxy pada host.

  • Semua log di direktori ini sekarang dapat diambil sebagai log bundel dan log ekor melalui Elastic Beanstalk'sPermintaan log instancefungsional.

Catatan
  • $ {EB_ _ LOG BASE _DIR} adalah variabel lingkungan yang ditetapkan oleh Elastic Beanstalk dengan nilainya. /var/log/eb-docker/containers

  • Elastic Beanstalk secara otomatis menciptakan direktori /var/log/eb-docker/containers/<service name> untuk setiap layanan di file docker-compose.yml.

Gambar Docker

Cabang platform Docker dan Docker ECS terkelola untuk Elastic Beanstalk mendukung penggunaan gambar Docker yang disimpan dalam repositori gambar online publik atau pribadi.

Menentukan gambar berdasarkan nama di Dockerrun.aws.json. Perhatikan konvensi ini:

  • Gambar di repositori resmi di Docker Hub menggunakan satu nama (misalnya,ubuntuataumongo).

  • Gambar di repositori lain di Docker Hub memenuhi syarat dengan nama organisasi (misalnya,amazon/amazon-ecs-agent).

  • Gambar di repositori online lainnya memenuhi syarat lebih lanjut dengan nama domain (misalnya,quay.io/assemblyline/ubuntuatauaccount-id.dkr.ecr.us-east-2.amazonaws.com/ubuntu:trusty).

Untuk lingkungan yang menggunakan platform Docker saja, Anda juga dapat membuat gambar Anda sendiri selama pembuatan lingkungan dengan Dockerfile. Lihat Membangun gambar kustom dengan Dockerfile. Untuk rincian selengkapnya, Platform Docker ECS terkelola tidak mendukung fungsi ini.

Mengkonfigurasi pembaruan terkelola untuk lingkungan Docker

DenganPembaruan platform terkelola, Anda dapat mengkonfigurasi lingkungan Anda untuk secara otomatis memperbarui ke versi terbaru dari platform pada jadwal.

Dalam kasus lingkungan Docker, Anda mungkin ingin memutuskan apakah pembaruan platform otomatis harus terjadi di seluruh versi Docker — ketika versi platform baru menyertakan versi Docker baru. Elastic Beanstalk mendukung pembaruan platform terkelola di seluruh versi Docker saat memperbarui dari lingkungan yang menjalankan versi platform Docker yang lebih baru dari 2.9.0. Saat versi platform baru menyertakan versi baru Docker, Elastic Beanstalk menambah nomor versi pembaruan minor. Oleh karena itu, untuk mengizinkan pembaruan platform terkelola di seluruh versi Docker, aktifkan pembaruan platform terkelola untuk pembaruan versi minor dan patch. Untuk mencegah pembaruan platform terkelola di seluruh versi Docker, aktifkan pembaruan platform terkelola untuk menerapkan pembaruan versi patch saja.

Misalnya, file konfigurasi berikut memungkinkan pembaruan platform terkelola pada pukul 9:00 pagi UTC setiap hari Selasa untuk pembaruan versi minor dan patch, sehingga memungkinkan pembaruan terkelola di seluruh versi Docker:

contoh .ebextensions/ .config managed-platform-update
option_settings: aws:elasticbeanstalk:managedactions: ManagedActionsEnabled: true PreferredStartTime: "Tue:09:00" aws:elasticbeanstalk:managedactions:platformupdate: UpdateLevel: minor

Untuk lingkungan yang menjalankan Docker platform versi 2.9.0 atau sebelumnya, Elastic Beanstalk tidak pernah melakukan pembaruan platform terkelola jika versi platform baru mencakup versi Docker baru.

Ruang nama konfigurasi Docker

Anda dapat menggunakan file konfigurasi untuk mengatur pilihan konfigurasi dan melakukan tugas-tugas konfigurasi contoh lain selama penyebaran. Opsi konfigurasi dapat berupa platform khusus atau berlaku untuk semua platform di layanan Elastic Beanstalk secara keseluruhan. Opsi konfigurasi diatur ke dalam ruang nama.

catatan

Informasi ini hanya berlaku untuk lingkungan Docker yang tidak menjalankan Docker Compose. Opsi ini memiliki perilaku yang berbeda dengan lingkungan Docker yang menjalankan Docker Compose. Untuk informasi lebih lanjut tentang layanan proxy dengan Docker Compose lihat Opsi kontainer.

Platform Docker mendukung opsi di ruang nama berikut, selain opsi yang didukung untuk semua lingkungan Elastic Beanstalk:

  • aws:elasticbeanstalk:environment:proxy— Pilih server proxy untuk lingkungan Anda. Docker mendukung baik menjalankan Nginx atau tidak ada server proxy.

File konfigurasi contoh berikut mengkonfigurasi lingkungan Docker untuk menjalankan tidak ada server proxy.

contoh .ebextensions/docker-settings.config
option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: none

Konfigurasi Docker di Amazon Linux AMI (sebelumnya Amazon Linux 2)

Jika lingkungan Elastic Beanstalk Docker Anda menggunakan versi platform Amazon AMI Linux (sebelum Amazon Linux 2), baca informasi tambahan di bagian ini.

Informasi ini relevan bagi Anda jika Anda menggunakan gambar dari repositori pribadi. Dimulai dengan Docker versi 1.7, perintah docker login mengubah nama file autentikasi, dan format file. Versi platform Amazon Linux AMI Docker (sebelumnya Amazon Linux 2) memerlukan file konfigurasi format yang ~/.dockercfg lebih lama.

Dengan Docker versi 1.7 dan setelahnya, perintah docker login untuk membuat file otentikasi di ~/.docker/config.json dengan format berikut.

{ "auths":{ "server":{ "auth":"key" } } }

Dengan Docker versi 1.6.2 dan sebelumnya, perintah docker login untuk membuat file autentikasi di ~/.dockercfg dalam format berikut.

{ "server" : { "auth" : "auth_token", "email" : "email" } }

Untuk mengonversi config.json file, hapus auths kunci luar, tambahkan email kunci, dan ratakan JSON dokumen agar sesuai dengan format lama.

Pada versi platform Amazon Linux 2 Docker, Elastic Beanstalk menggunakan nama dan format file otentikasi yang lebih baru. Jika Anda menggunakan versi platform Amazon Linux 2 Docker, Anda dapat menggunakan file otentikasi yang dibuat perintah docker login tanpa konversi apapun.

Untuk meningkatkan kinerja di Amazon LinuxAMI, Elastic Beanstalk mengonfigurasi EBS dua volume penyimpanan Amazon untuk instans Amazon lingkungan Docker Anda. EC2 Selain volume akar yang disiapkan untuk semua lingkungan Elastic Beanstalk, volume 12GB kedua bernama xvdcz disiapkan untuk penyimpanan gambar pada lingkungan Docker.

Jika Anda membutuhkan lebih banyak ruang penyimpanan atau peningkatan IOPS untuk gambar Docker, Anda dapat menyesuaikan volume penyimpanan gambar dengan menggunakan opsi BlockDeviceMapping konfigurasi di ruang nama aws:autoscaling:launchconfiguration.

Misalnya, file konfigurasi berikut meningkatkan ukuran volume penyimpanan menjadi 100 GB dengan 500 yang disediakanIOPS:

contoh .ebextensions/blockdevice-xvdcz.config
option_settings: aws:autoscaling:launchconfiguration: BlockDeviceMappings: /dev/xvdcz=:100::io1:500

Jika Anda menggunakan pilihan BlockDeviceMappings untuk mengkonfigurasi volume tambahan untuk aplikasi Anda, Anda harus menyertakan pemetaan untuk xvdcz guna memastikan bahwa aplikasi itu dibuat. Contoh berikut mengkonfigurasi dua volume, volume penyimpanan gambar xvdcz dengan pengaturan default dan volume aplikasi 24 GB tambahan bernama sdh:

contoh .ebextensions/blockdevice-sdh.config
option_settings: aws:autoscaling:launchconfiguration: BlockDeviceMappings: /dev/xvdcz=:12:true:gp2,/dev/sdh=:24
catatan

Ketika Anda mengubah pengaturan dalam namespace ini, Elastic Beanstalk menggantikan semua contoh di lingkungan Anda dengan contoh menjalankan konfigurasi baru. Lihat Perubahan konfigurasi untuk rincian selengkapnya.