Menyesuaikan perangkat lunak pada server Linux - AWS Elastic Beanstalk

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

Menyesuaikan perangkat lunak pada server Linux

Anda mungkin ingin menyesuaikan dan mengonfigurasi perangkat lunak yang diandalkan oleh aplikasi Anda. Anda dapat menambahkan perintah yang akan dieksekusi selama penyediaan instans; menentukan pengguna dan grup Linux; dan mengunduh atau langsung membuat file pada instans lingkungan Anda. File ini mungkin berupa dependensi yang diperlukan oleh aplikasi—misalnya, paket tambahan dari repositori yum—atau mungkin file konfigurasi seperti pengganti file konfigurasi proksi untuk menimpa pengaturan tertentu yang ditetapkan oleh Elastic Beanstalk.

Bagian ini menjelaskan jenis informasi yang dapat Anda masukkan ke dalam file konfigurasi untuk menyesuaikan perangkat lunak pada instans EC2 Anda yang menjalankan Linux. Untuk informasi umum tentang menyesuaikan dan mengonfigurasi lingkungan Elastic Beanstalk Anda, lihat Mengonfigurasi lingkungan Elastic Beanstalk. Untuk informasi tentang menyesuaikan perangkat lunak pada instans EC2 yang menjalankan Windows, lihat Menyesuaikan perangkat lunak pada server Windows.

Catatan
  • Pada platform Amazon Linux 2, alih-alih menyediakan file dan perintah dalam file konfigurasi.ebextensions, kami sangat menyarankan agar Anda menggunakan Buildfile. Procfile, dan hook platform bila memungkinkan untuk mengonfigurasi dan menjalankan kode khusus pada instans lingkungan Anda selama penyediaan instans. Untuk detail tentang mekanisme ini, lihat Memperluas platform Linux Elastic Beanstalk.

  • YAML bergantung pada indentasi yang konsisten. Cocokkan tingkat indentasi saat mengganti konten dalam file konfigurasi contoh dan pastikan bahwa editor teks Anda menggunakan spasi, bukan karakter tab, untuk indentasi.

File konfigurasi mendukung kunci berikut yang mempengaruhi server Linux tampat aplikasi Anda berjalan.

Kunci diproses dalam urutan yang tercantum di sini.

Perhatikan peristiwa lingkungan Anda saat mengembangkan dan menguji file konfigurasi. Elastic Beanstalk mengabaikan file konfigurasi yang berisi kesalahan validasi, seperti kunci yang tidak valid, dan tidak memproses kunci lain dalam file yang sama. Ketika ini terjadi, Elastic Beanstalk menambahkan peristiwa peringatan log peristiwa.

Paket

Anda dapat menggunakan kunci packages untuk mengunduh dan memasang aplikasi dan komponen yang telah dikemas sebelumnya.

Sintaksis

packages: name of package manager: package name: version ... name of package manager: package name: version ... ...

Anda dapat menentukan beberapa paket di bawah kunci setiap manajer paket.

Format paket yang didukung

Elastic Beanstalk saat ini mendukung manajer paket berikut: yum, rubygems, python, dan rpm. Paket diproses dengan urutan sebagai berikut: rpm, yum, dan kemudian rubygems dan python. Tidak ada pengurutan antara rubygems dan python. Dalam setiap manajer paket, pesanan instalasi paket tidak dijamin. Gunakan manajer paket yang didukung oleh sistem operasi Anda.

catatan

Elastic Beanstalk mendukung dua manajer paket yang mendasari untuk Python, pip dan easy_install. Namun, dalam sintaks file konfigurasi, Anda harus menentukan nama manajer paket sebagai python. Bila Anda menggunakan file konfigurasi untuk menentukan manajer paket Python, Elastic Beanstalk menggunakan Python 2.7. Jika aplikasi Anda bergantung pada versi Python yang berbeda, Anda dapat menentukan paket yang akan dipasang di file requirements.txt. Untuk informasi selengkapnya, lihat Menentukan dependensi menggunakan file persyaratan.

Menentukan versi

Dalam setiap manajer paket, setiap paket ditetapkan sebagai nama paket dan daftar versi. Versi ini bisa berupa string, daftar versi, atau string atau daftar kosong. String atau daftar kosong menunjukkan bahwa Anda menginginkan versi terbaru. Untuk manajer rpm, versi ditentukan sebagai jalur menuju file pada disk atau URL. Jalur relatif tidak didukung.

Jika Anda menentukan versi paket, Elastic Beanstalk mencoba untuk memasang versi tersebut meskipun versi paket yang lebih baru sudah dipasang pada instans. Jika versi yang lebih baru sudah dipasang, deployment gagal. Beberapa manajer paket mendukung beberapa versi, tetapi yang lain mungkin tidak. Periksa dokumentasi manajer paket Anda untuk informasi lebih lanjut. Jika Anda tidak menentukan versi dan versi paket sudah terinstal, Elastic Beanstalk tidak menginstal versi baru—ini mengasumsikan bahwa Anda ingin menyimpan dan menggunakan versi yang ada.

Contoh snippet

Potongan berikut menentukan URL versi untuk rpm, meminta versi terbaru dari yum, dan versi 0.10.2 chef dari rubygems.

packages: yum: libmemcached: [] ruby-devel: [] gcc: [] rpm: epel: http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm rubygems: chef: '0.10.2'

Grup

Anda dapat menggunakan kunci groups untuk membuat grup Linux/UNIX dan untuk menetapkan ID grup. Untuk membuat grup, tambahkan pasangan kunci-nilai baru yang memetakan nama grup baru untuk ID grup opsional. Kunci grup dapat berisi satu nama grup atau beberapa. Tabel berikut menjelaskan kunci yang tersedia.

Sintaksis

groups: name of group: {} name of group: gid: "group id"

Opsi

gid

Nomor ID grup.

Jika ID grup ditentukan, dan grup sudah ada berdasarkan nama, pembuatan grup akan gagal. Jika grup lain memiliki ID grup tertentu, sistem operasi dapat menolak pembuatan grup.

Contoh snippet

Potongan berikut menentukan grup bernama groupOne tanpa menetapkan ID grup dan grup bernama groupTwo yang menentukan nilai ID grup 45.

groups: groupOne: {} groupTwo: gid: "45"

Pengguna

Anda dapat menggunakan kunci users untuk membuat pengguna Linux/UNIX pada instans EC2.

Sintaksis

users: name of user: groups: - name of group uid: "id of the user" homeDir: "user's home directory"

Opsi

uid

ID pengguna. Proses pembuatan gagal jika nama pengguna ada dengan ID pengguna yang berbeda. Jika ID pengguna sudah ditetapkan untuk pengguna yang sudah ada, sistem operasi dapat menolak permintaan pembuatan.

groups

Daftar nama grup. Pengguna ditambahkan ke setiap grup dalam daftar.

homeDir

Direktori beranda pengguna.

Pengguna dibuat sebagai pengguna sistem noninteraktif dengan shell /sbin/nologin. Ini adalah disengaja dan tidak dapat dimodifikasi.

Contoh potongan

users: myuser: groups: - group1 - group2 uid: "50" homeDir: "/tmp"

Sumber

Anda dapat menggunakan kunci sources untuk mengunduh file arsip dari URL publik dan membukanya di direktori target pada instans EC2.

Sintaksis

sources: target directory: location of archive file

Format yang didukung

Format yang didukung adalah tar, tar+gzip, tar+bz2, dan zip. Anda dapat mereferensi lokasi eksternal seperti Amazon Simple Storage Service (Amazon S3) (misalnya, https://mybucket.s3.amazonaws.com/myobject) selama URL dapat diakses publik.

Contoh snippet

Contoh berikut mengunduh file .zip publik dari bucket Amazon S3 dan membukanya ke dalam /etc/myapp:

sources: /etc/myapp: https://mybucket.s3.amazonaws.com/myobject
catatan

Beberapa ekstraksi tidak boleh menggunakan kembali jalur target yang sama. Mengekstrak sumber lain ke jalur target yang sama akan mengganti alih-alih menambah konten.

Berkas

Anda dapat menggunakan kunci files untuk membuat file di instans EC2. Konten dapat berupa inline dalam file konfigurasi, atau konten dapat ditarik dari URL. File ditulis ke disk dalam urutan leksikografis.

Anda dapat menggunakan kunci files untuk mengunduh file pribadi dari Amazon S3 dengan menyediakan profil instans untuk otorisasi.

Jika jalur file yang Anda tentukan sudah ada di instans, file yang ada dipertahankan dengan ekstensi .bak yang ditambahkan ke namanya.

Sintaksis

files: "target file location on disk": mode: "six-digit octal value" owner: name of owning user for file group: name of owning group for file source: URL authentication: authentication name: "target file location on disk": mode: "six-digit octal value" owner: name of owning user for file group: name of owning group for file content: | # this is my # file content encoding: encoding format authentication: authentication name:

Opsi

content

Konten string untuk ditambahkan ke file. Tentukan salah satu content atau source, tidak keduanya.

source

URL file yang akan diunduh. Tentukan salah satu content atau source, tidak keduanya.

encoding

Format pengodean dari string yang ditentukan dengan opsi content.

Nilai yang valid: plain | base64

group

Grup Linux yang memiliki file.

owner

Pengguna Linux yang memiliki file.

mode

Nilai oktal enam digit yang mewakili mode untuk file ini. Tidak mendukung sistem Windows. Gunakan tiga digit pertama untuk symlink dan tiga digit terakhir untuk pengaturan izin. Untuk membuat symlink, tentukan 120xxx, tempat xxx mendefinisikan izin file target. Untuk menentukan izin file, gunakan tiga digit terakhir, seperti 000644.

authentication

Nama AWS CloudFormation metode autentikasi yang akan digunakan. Anda dapat menambahkan metode autentikasi ke metadata grup Auto Scaling dengan kunci Sumber Daya. Lihat di bawah untuk contoh.

Contoh snippet

files: "/home/ec2-user/myfile" : mode: "000755" owner: root group: root source: http://foo.bar/myfile "/home/ec2-user/myfile2" : mode: "000755" owner: root group: root content: | this is my file content

Contoh penggunaan symlink. Hal ini membuat tautan /tmp/myfile2.txt yang mengarah ke file yang ada /tmp/myfile1.txt.

files: "/tmp/myfile2.txt" : mode: "120400" content: "/tmp/myfile1.txt"

Contoh berikut menggunakan kunci Sumber daya untuk menambahkan metode autentikasi bernama S3Auth dan menggunakannya untuk mengunduh file pribadi dari bucket Amazon S3:

Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["elasticbeanstalk-us-west-2-123456789012"] roleName: "Fn::GetOptionSetting": Namespace: "aws:autoscaling:launchconfiguration" OptionName: "IamInstanceProfile" DefaultValue: "aws-elasticbeanstalk-ec2-role" files: "/tmp/data.json" : mode: "000755" owner: root group: root authentication: "S3Auth" source: https://elasticbeanstalk-us-west-2-123456789012.s3-us-west-2.amazonaws.com/data.json

Perintah

Anda dapat menggunakan kunci commands untuk menjalankan perintah pada instans EC2. Perintah berjalan sebelum server aplikasi dan web diatur dan file versi aplikasi diekstrak.

Perintah yang ditentukan dijalankan sebagai pengguna root, dan diproses dalam urutan abjad berdasarkan nama. Secara default, perintah berjalan di direktori root. Untuk menjalankan perintah dari direktori lain, gunakan opsi cwd tersebut.

Untuk memecahkan masalah dengan perintah Anda, Anda dapat menemukan outputnya di log instans.

Sintaksis

commands: command name: command: command to run cwd: working directory env: variable name: variable value test: conditions for command ignoreErrors: true

Opsi

command

Array (koleksi urutan blok dalam sintaks YAML) atau string akan menentukan perintah untuk dijalankan. Beberapa catatan penting:

  • Jika Anda menggunakan string, Anda tidak perlu menyertakan seluruh string dalam tanda kutip. Jika Anda menggunakan tanda kutip, hindari kejadian literal dari jenis kutipan yang sama.

  • Jika Anda menggunakan array, Anda tidak perlu menghindari karakter spasi atau melampirkan parameter perintah pada kutipan. Setiap elemen array adalah argumen perintah tunggal. Jangan gunakan array untuk menentukan beberapa perintah.

Contoh berikut semuanya setara:

commands: command1: command: git commit -m "This is a comment." command2: command: "git commit -m \"This is a comment.\"" command3: command: 'git commit -m "This is a comment."' command4: command: - git - commit - -m - This is a comment.

Untuk menentukan beberapa perintah, gunakan skalar blok literal, seperti yang ditunjukkan pada contoh berikut.

commands: command block: command: | git commit -m "This is a comment." git push
env

(Opsional) Atur variabel lingkungan untuk perintah. Properti ini menimpa, bukan menambahkan, lingkungan yang ada.

cwd

(Opsional) Direktori kerja. Jika tidak ditentukan, perintah dijalankan dari direktori root (/).

test

(Opsional) Perintah yang harus mengembalikan nilai true (kode keluar 0) agar Elastic Beanstalk memproses perintah, seperti skrip shell, yang terdapat dalam kunci command.

ignoreErrors

(Opsional) Nilai boolean yang menentukan apakah perintah lain harus dijalankan jika perintah yang terdapat dalam kunci command gagal (mengembalikan nilai bukan nol). Tetapkan nilai ini ke true jika Anda ingin terus menjalankan perintah meskipun perintah gagal. Atur nilai ke false jika Anda ingin berhenti menjalankan perintah jika perintah gagal. Nilai default-nya adalah false.

Contoh snippet

Contoh potongan berikut menjalankan skrip Python.

commands: python_install: command: myscript.py cwd: /home/ec2-user env: myvarname: myvarvalue test: "[ -x /usr/bin/python ]"

Layanan

Anda dapat menggunakan kunci services untuk menentukan layanan yang harus dimulai atau berhenti ketika instans diluncurkan. Kunci services tersebut juga mengizinkan Anda untuk menentukan dependensi pada sumber, paket, dan file sehingga jika mulai ulang diperlukan karena file yang diinstal, Elastic Beanstalk mengurus layanan mulai ulang.

Sintaksis

services: sysvinit: name of service: enabled: "true" ensureRunning: "true" files: - "file name" sources: - "directory" packages: name of package manager: "package name[: version]" commands: - "name of command"

Opsi

ensureRunning

Atur ke true untuk memastikan layanan berjalan setelah Elastic Beanstalk selesai.

Atur ke false untuk memastikan layanan tidak berjalan setelah Elastic Beanstalk selesai.

Abaikan kunci ini untuk tidak membuat perubahan pada status layanan.

enabled

Atur ke true untuk memastikan layanan dimulai secara otomatis setelah boot.

Atur ke false untuk memastikan layanan tidak dimulai secara otomatis setelah boot.

Abaikan kunci ini untuk tidak membuat perubahan pada properti ini.

files

Daftar file. Jika Elastic Beanstalk mengubah file secara langsung melalui blok file, layanan dimulai ulang.

sources

Daftar direktori. Jika Elastic Beanstalk memperluas arsip ke salah satu direktori ini, layanan akan dimulai ulang.

packages

Peta manajer paket ke daftar nama paket. Jika Elastic Beanstalk menginstal atau memperbarui salah satu paket ini, layanan akan dimulai ulang.

commands

Daftar nama perintah. Jika Elastic Beanstalk menjalankan perintah yang ditentukan, layanan akan dimulai ulang.

Contoh snippet

Berikut ini adalah contoh snippet:

services: sysvinit: myservice: enabled: true ensureRunning: true

Perintah kontainer

Anda dapat menggunakan kunci container_commands untuk menjalankan perintah yang mempengaruhi kode sumber aplikasi Anda. Perintah kontainer berjalan setelah aplikasi dan server web diatur dan arsip versi aplikasi telah diekstraksi, tetapi sebelum versi aplikasi di-deploy. Perintah non-kontainer dan operasi penyesuaian lainnya dilakukan sebelum kode sumber aplikasi diekstraksi.

Perintah yang ditentukan dijalankan sebagai pengguna root, dan diproses dalam urutan abjad berdasarkan nama. Perintah kontainer dijalankan dari direktori pementasan, di mana kode sumber Anda diekstrak sebelum di-deploy ke server aplikasi. Setiap perubahan yang Anda buat untuk kode sumber Anda di direktori pementasan dengan perintah kontainer akan disertakan ketika sumber di-deploy ke lokasi akhir.

catatan

Output dari perintah kontainer Anda dicatat dalam logcfn-init-cmd.log instance. Untuk informasi selengkapnya tentang mengambil dan melihat log instans, lihat Melihat log dari instans Amazon EC2.

Anda dapat menggunakan leader_only hanya untuk menjalankan perintah pada satu instans, atau mengonfigurasi test hanya untuk menjalankan perintah ketika perintah pengujian dievaluasi true. Perintah kontainer khusus pemimpin hanya dijalankan selama pembuatan dan penerapan lingkungan, sedangkan perintah dan operasi penyesuaian server lain dilakukan setiap kali sebuah instans ditetapkan atau diperbarui. Perintah kontainer khusus pemimpin tidak dijalankan untuk memulai perubahan konfigurasi, seperti perubahan pada Id AMI atau jenis instans.

Sintaksis

container_commands: name of container_command: command: "command to run" leader_only: true name of container_command: command: "command to run"

Opsi

command

Sebuah string atau array string yang akan dijalankan.

env

(Opsional) Atur variabel lingkungan sebelum menjalankan perintah, menimpa nilai yang ada.

cwd

(Opsional) Direktori kerja. Secara default, ini adalah direktori persiapan aplikasi unzip.

leader_only

(Opsional) Hanya jalankan perintah pada satu instans yang dipilih oleh Elastic Beanstalk. Perintah kontainer khusus pemimpin dijalankan sebelum perintah kontainer lainnya. Sebuah perintah bisa ditujukan khusus untuk pemimpin atau memiliki test, tetapi tidak keduanya (leader_only diutamakan).

test

(Opsional) Jalankan perintah pengujian yang harus mengembalikan true untuk menjalankan perintah kontainer. Sebuah perintah bisa ditujukan khusus untuk pemimpin atau memiliki test, tetapi tidak keduanya (leader_only diutamakan).

ignoreErrors

(Opsional) Jangan gagalkan penerapan jika perintah kontainer mengembalikan nilai selain 0 (sukses). Atur ke true untuk mengaktifkan.

Contoh snippet

Berikut adalah contoh snippet.

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 99customize: command: "scripts/customize.sh"