

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

# Menyebarkan Resep
<a name="create-custom-deploy"></a>

**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 Dukungan Tim di [AWS re:Post](https://repost.aws/) atau melalui [AWS Dukungan](https://aws.amazon.com/support) Premium.

Resep deploy ditetapkan ke acara siklus [hidup](workingcookbook-events.md) 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. 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.

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](https://github.com/aws/opsworks-cookbooks/tree/release-chef-11.4/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::deploy`Resep 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::deploy`Resepnya menggunakan buku masak penerapan bawaan untuk aspek penerapan yang tidak spesifik untuk aplikasi. `deploy`Resep (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_dir`Definisi 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` resep`user`,`group`, dan `path` variabel berdasarkan data dari penyebaran JSON. Mereka diteruskan ke [sumber daya direktori](https://docs.chef.io/chef/resources.html#directory) 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](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.4/deploy/attributes/deploy.rb). `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 adalah`www-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 adalah`apache`.
Anda dapat mengubah pengaturan dengan menggunakan JSON kustom atau file atribut kustom untuk mengganti atribut yang sesuai. Untuk informasi selengkapnya, lihat [Mengesampingkan Atribut](workingcookbook-attributes.md).

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](workingcookbook-installingcustom-repo.md): 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 secara langsung ke`webapps`. Namun, penerapan OpsWorks Stacks dirancang untuk mempertahankan hingga lima versi aplikasi pada sebuah instans, sehingga Anda dapat memutar kembali ke versi sebelumnya jika perlu. 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`

1. Membuat symlink bernama`current`, seperti`/srv/www/my_1st_jsp/current`, ke direktori unik ini.

1. 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` ditautkan`current_dir`. `deploy::default`Resep 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 berjalan`tomcat::service`, untuk memastikan bahwa layanan ditentukan untuk menjalankan Chef ini. Kemudian menggunakan [sumber daya eksekusi](https://docs.chef.io/chef/resources.html#execute) 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**  
`execute`Sumber 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` run`tomcat::context`, yang memperbarui file konfigurasi konteks aplikasi web jika Anda telah mengubah database back end. 