Menyebarkan Resep - AWS OpsWorks

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

Menyebarkan Resep

penting

AWS OpsWorks Stacks Layanan ini mencapai akhir masa pakai pada 26 Mei 2024 dan telah dinonaktifkan untuk pelanggan baru dan yang sudah ada. Kami sangat menyarankan pelanggan untuk memindahkan beban kerja mereka ke solusi lain sesegera mungkin. Jika Anda memiliki pertanyaan tentang migrasi, hubungi AWS Support Tim di AWS re:Post atau melalui AWS Dukungan Premium.

Resep deploy ditetapkan ke acara siklus hidup Deploy layer. Ini biasanya terjadi pada semua instance tumpukan setiap kali Anda menerapkan aplikasi, meskipun Anda secara opsional dapat membatasi acara hanya untuk instance tertentu. AWS OpsWorks Stacks juga menjalankan resep Deploy pada instance baru, setelah resep Setup selesai. Tujuan utama dari resep Deploy adalah untuk menyebarkan kode dan file terkait dari repositori ke instance lapisan server aplikasi. Namun, Anda sering menjalankan resep Deploy di lapisan lain juga. Hal ini memungkinkan instance lapisan tersebut, misalnya, memperbarui konfigurasi mereka untuk mengakomodasi aplikasi yang baru diterapkan. Saat Anda menerapkan resep Deploy, ingatlah bahwa peristiwa Deploy tidak selalu berarti bahwa aplikasi sedang di-deploy ke instance. Ini bisa berupa pemberitahuan bahwa aplikasi sedang digunakan ke instance lain di tumpukan, untuk memungkinkan instance melakukan pembaruan yang diperlukan. Resepnya harus dapat merespons dengan tepat, yang mungkin berarti tidak melakukan apa-apa.

AWS OpsWorks Stacks secara otomatis menyebarkan aplikasi dari jenis aplikasi standar ke lapisan server aplikasi bawaan yang sesuai. Untuk menerapkan aplikasi ke lapisan kustom, Anda harus menerapkan resep Deploy kustom yang mengunduh file aplikasi dari repositori ke lokasi yang sesuai pada instance. Namun, Anda sering dapat membatasi jumlah kode yang harus Anda tulis dengan menggunakan buku masak deploy bawaan untuk menangani beberapa aspek penerapan. Misalnya, jika Anda menyimpan file Anda di salah satu repositori yang didukung, buku masak bawaan dapat menangani detail pengunduhan file dari repositori ke instance lapisan.

tomcat::deployResep ini dimaksudkan untuk ditetapkan ke peristiwa siklus hidup Deploy.

include_recipe 'deploy' node[:deploy].each do |application, deploy| opsworks_deploy_dir do user deploy[:user] group deploy[:group] path deploy[:deploy_to] end opsworks_deploy do deploy_data deploy app application end ...

tomcat::deployResepnya menggunakan buku masak penerapan bawaan untuk aspek penerapan yang tidak spesifik untuk aplikasi. deployResep (yang merupakan singkatan dari deploy::default resep bawaan) adalah resep bawaan yang menangani detail pengaturan pengguna, grup, dan sebagainya, berdasarkan data dari atribut. deploy

Resepnya menggunakan dua definisi Chef bawaan, opsworks_deploy_dir dan opworks_deploy untuk menginstal aplikasi.

opsworks_deploy_dirDefinisi ini mengatur struktur direktori, berdasarkan data dari JSON penerapan aplikasi. Definisi pada dasarnya adalah cara yang nyaman untuk mengemas definisi sumber daya, dan terletak di definitions direktori buku masak. Resep dapat menggunakan definisi seperti sumber daya, tetapi definisi itu sendiri tidak memiliki penyedia terkait, hanya sumber daya yang termasuk dalam definisi. Anda dapat menentukan variabel dalam resep, yang diteruskan ke definisi sumber daya yang mendasarinya. Set tomcat::deploy resepuser,group, dan path variabel berdasarkan data dari penyebaran JSON. Mereka diteruskan ke sumber daya direktori definisi, yang mengelola direktori.

catatan

Pengguna dan grup aplikasi yang Anda gunakan ditentukan oleh [:opsworks][:deploy_user][:group] atribut [:opsworks][:deploy_user][:user] dan, yang ditentukan dalam file atribut buku masak penerapan bawaan. deploy.rb Nilai default [:opsworks][:deploy_user][:user] adalah deploy. Nilai default [:opsworks][:deploy_user][:group] tergantung pada sistem operasi instans:

  • Untuk instance Ubuntu, grup defaultnya adalahwww-data.

  • Untuk instance Amazon Linux yang merupakan anggota lapisan Rails App Server yang menggunakan Nginx dan Unicorn, grup defaultnya adalah. nginx

  • Untuk semua instance Amazon Linux lainnya, grup defaultnya adalahapache.

Anda dapat mengubah pengaturan dengan menggunakan JSON kustom atau file atribut kustom untuk mengganti atribut yang sesuai. Untuk informasi selengkapnya, lihat Mengesampingkan Atribut.

Definisi lain,opsworks_deploy, menangani detail memeriksa kode aplikasi dan file terkait dari repositori dan menerapkannya ke instance, berdasarkan data dari atribut. deploy Anda dapat menggunakan definisi ini untuk semua jenis aplikasi; detail penerapan seperti nama direktori ditentukan di konsol atau melalui API dan dimasukkan ke dalam deploy atribut. Namun, hanya opsworks_deploy berfungsi untuk empat jenis repositori yang didukung: Git, Subversion, S3, dan HTTP. Anda harus menerapkan kode ini sendiri jika Anda ingin menggunakan jenis repositori yang berbeda.

Anda menginstal file aplikasi di webapps direktori Tomcat. Praktik yang umum adalah menyalin file langsung kewebapps. Namun, penerapan AWS OpsWorks Stacks dirancang untuk mempertahankan hingga lima versi aplikasi pada sebuah instans, sehingga Anda dapat memutar kembali ke versi sebelumnya jika perlu. AWS OpsWorks Oleh karena itu, tumpukan melakukan hal berikut:

  1. Menyebarkan aplikasi ke direktori berbeda yang namanya berisi cap waktu, seperti. /srv/www/my_1st_jsp/releases/20130731141527

  2. Membuat symlink bernamacurrent, seperti/srv/www/my_1st_jsp/current, ke direktori unik ini.

  3. Jika belum ada, buat symlink dari webapps direktori ke current symlink yang dibuat di Langkah 2.

Jika Anda perlu memutar kembali ke versi sebelumnya, ubah current symlink untuk menunjuk ke direktori berbeda yang berisi stempel waktu yang sesuai, misalnya, dengan mengubah target tautan. /srv/www/my_1st_jsp/current

Bagian tengah tomcat::deploy mengatur symlink.

... current_dir = ::File.join(deploy[:deploy_to], 'current') webapp_dir = ::File.join(node['tomcat']['webapps_base_dir'], deploy[:document_root].blank? ? application : deploy[:document_root]) # opsworks_deploy creates some stub dirs, which are not needed for typical webapps ruby_block "remove unnecessary directory entries in #{current_dir}" do block do node['tomcat']['webapps_dir_entries_to_delete'].each do |dir_entry| ::FileUtils.rm_rf(::File.join(current_dir, dir_entry), :secure => true) end end end link webapp_dir do to current_dir action :create end ...

Resep pertama menciptakan dua variabel, current_dir dan webapp_dir untuk mewakili current dan webapp direktori, masing-masing. Kemudian menggunakan link sumber daya untuk webapp_dir ditautkancurrent_dir. deploy::defaultResep AWS OpsWorks Stacks membuat beberapa direktori rintisan yang tidak diperlukan untuk contoh ini, sehingga bagian tengah kutipan menghapusnya.

Bagian terakhir dari tomcat::deploy restart layanan Tomcat, jika perlu.

... include_recipe 'tomcat::service' execute 'trigger tomcat service restart' do command '/bin/true' not_if { node['tomcat']['auto_deploy'].to_s == 'true' } notifies :restart, resources(:service => 'tomcat') end end include_recipe 'tomcat::context'

Resep pertama berjalantomcat::service, untuk memastikan bahwa layanan ditentukan untuk menjalankan Chef ini. Kemudian menggunakan sumber daya eksekusi untuk memberi tahu layanan untuk memulai ulang, tetapi hanya jika ['tomcat']['auto_deploy'] diatur ke'true'. Jika tidak, Tomcat mendengarkan perubahan dalam webapps direktorinya, yang membuat restart layanan Tomcat eksplisit tidak perlu.

catatan

executeSumber daya tidak benar-benar mengeksekusi sesuatu yang substantif; /bin/true adalah skrip shell dummy yang hanya mengembalikan kode sukses. Ini digunakan di sini hanya sebagai cara mudah untuk menghasilkan pemberitahuan restart. Seperti disebutkan sebelumnya, menggunakan notifikasi memastikan bahwa layanan tidak dimulai ulang terlalu sering.

Terakhir, tomcat::deploy runtomcat::context, yang memperbarui file konfigurasi konteks aplikasi web jika Anda telah mengubah database back end.