

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

# Memperluas Layer
<a name="workingcookbook-extend"></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.

Terkadang, Anda perlu menyesuaikan lapisan bawaan di luar apa yang dapat ditangani dengan memodifikasi atribut OpsWorks Stacks atau menyesuaikan templat. Misalnya, Anda perlu membuat symlink, mengatur mode file atau folder, menginstal paket tambahan, dan sebagainya. Anda harus memperluas lapisan khusus untuk menyediakan lebih dari fungsionalitas minimal. Dalam hal ini, Anda perlu menerapkan satu atau lebih buku masak khusus dengan resep untuk menangani tugas penyesuaian. Topik ini memberikan beberapa contoh cara menggunakan resep untuk memperluas lapisan.

Jika Anda baru mengenal Chef, Anda harus membaca terlebih dahulu[Buku masak 101](cookbooks-101.md), yang merupakan tutorial yang memperkenalkan dasar-dasar bagaimana menerapkan buku masak untuk melakukan berbagai tugas umum. Untuk contoh rinci tentang cara menerapkan lapisan kustom, lihat[Membuat Layer Server Tomcat Kustom](create-custom.md). 

**Topics**
+ [Menggunakan Resep untuk Menjalankan Skrip](workingcookbook-extend-scripts.md)
+ [Menggunakan Chef Deployment Hooks](workingcookbook-extend-hooks.md)
+ [Menjalankan Cron Jobs di Instans Linux](workingcookbook-extend-cron.md)
+ [Menginstal dan Mengkonfigurasi Paket di Instans Linux](workingcookbook-extend-package.md)

# Menggunakan Resep untuk Menjalankan Skrip
<a name="workingcookbook-extend-scripts"></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.

Jika Anda sudah memiliki skrip yang melakukan tugas kustomisasi yang diperlukan, pendekatan paling sederhana untuk memperluas lapisan sering kali menerapkan resep sederhana untuk menjalankan skrip. Anda kemudian dapat menetapkan resep ke peristiwa siklus hidup yang sesuai, biasanya Setup atau Deploy, atau menggunakan perintah `execute_recipes` stack untuk menjalankan resep secara manual.

Contoh berikut menjalankan skrip shell pada instance Linux, tetapi Anda dapat menggunakan pendekatan yang sama untuk jenis skrip lainnya, termasuk PowerShell skrip Windows.

```
cookbook_file "/tmp/lib-installer.sh" do
  source "lib-installer.sh"
  mode 0755
end

execute "install my lib" do
  command "sh /tmp/lib-installer.sh"
end
```

`cookbook_file`Sumber daya mewakili file yang disimpan dalam subdirektori direktori buku masak, dan mentransfer file ke lokasi tertentu pada instance. `files` Contoh ini mentransfer skrip shell`lib-installer.sh`,, ke `/tmp` direktori instance dan menetapkan mode file ke`0755`. Untuk informasi selengkapnya, lihat [cookbook\$1file](https://docs.chef.io/chef/resources.html#cookbook-file).

`execute`Sumber daya mewakili perintah, seperti perintah shell. Contoh ini berjalan`lib-installer.sh`. Untuk informasi selengkapnya, lihat [mengeksekusi](https://docs.chef.io/chef/resources.html#execute).

Anda juga dapat menjalankan skrip dengan memasukkannya ke dalam resep. Contoh berikut menjalankan skrip bash, tetapi Chef juga mendukung Csh, Perl, Python, dan Ruby.

```
script "install_something" do
  interpreter "bash"
  user "root"
  cwd "/tmp"
  code <<-EOH
    #insert bash script
  EOH
end
```

Sumber `script` daya mewakili skrip. Contoh menentukan interpreter bash, menyetel pengguna ke`"root"`, dan menetapkan direktori kerja ke. `/tmp` Kemudian menjalankan skrip bash di `code` blok, yang dapat mencakup baris sebanyak yang diperlukan. Untuk informasi lebih lanjut, lihat [skrip](https://docs.chef.io/chef/resources.html#script).

Untuk informasi selengkapnya tentang cara menggunakan resep untuk menjalankan skrip, lihat[Contoh 7: Menjalankan Perintah dan Skrip](cookbooks-101-basics-commands.md). Untuk contoh cara menjalankan PowerShell skrip pada instance Windows, lihat[Menjalankan PowerShell Skrip Windows](cookbooks-101-opsworks-opsworks-powershell.md).

# Menggunakan Chef Deployment Hooks
<a name="workingcookbook-extend-hooks"></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.

Anda dapat menyesuaikan penerapan dengan menerapkan resep khusus untuk melakukan tugas yang diperlukan dan menetapkannya ke acara Deploy layer yang sesuai. Pendekatan alternatif dan terkadang lebih sederhana—terutama jika Anda tidak perlu mengimplementasikan buku masak untuk tujuan lain—adalah dengan menggunakan kait penerapan Chef untuk menjalankan kode kustomisasi Anda. Selain itu, resep Deploy khusus dijalankan setelah penerapan dilakukan oleh resep bawaan. Deployment hook memungkinkan Anda untuk berinteraksi selama penerapan, misalnya, setelah kode aplikasi diperiksa keluar dari repositori tetapi sebelum Apache dimulai ulang.

Chef menyebarkan aplikasi dalam empat tahap:
+ **Checkout** —Mengunduh file dari repositori
+ **Migrasi** —Menjalankan migrasi, seperti yang diperlukan
+ **Symlink —Membuat symlink**
+ **Mulai ulang** —Mulai ulang aplikasi

Kait penyebaran koki menyediakan cara sederhana untuk menyesuaikan penerapan dengan menjalankan aplikasi Ruby yang disediakan pengguna secara opsional setelah setiap tahap selesai. Untuk menggunakan kait penerapan, terapkan satu atau beberapa aplikasi Ruby dan letakkan di direktori aplikasi Anda. `/deploy` (Jika aplikasi Anda tidak memiliki `/deploy` direktori, buat direktori di `APP_ROOT` level tersebut.) Aplikasi harus memiliki salah satu nama berikut, yang menentukan kapan dijalankan.
+ `before_migrate.rb`berjalan setelah tahap Checkout selesai tetapi sebelum Migrasi.
+ `before_symlink.rb`berjalan setelah tahap Migrasi selesai tetapi sebelum Symlink.
+ `before_restart.rb`berjalan setelah tahap Symlink selesai tetapi sebelum Restart.
+ `after_restart.rb`berjalan setelah tahap Restart selesai.

Chef deployment hooks dapat mengakses objek node dengan menggunakan sintaks node standar, seperti resep. Deployment hooks juga dapat mengakses nilai [variabel lingkungan aplikasi](workingapps-creating.md#workingapps-creating-environment) apa pun yang telah Anda tentukan. Namun, Anda harus menggunakan `new_resource.environment["VARIABLE_NAME"] ` untuk mengakses nilai variabel alih-alih`ENV["VARIABLE_NAME"]`.

# Menjalankan Cron Jobs di Instans Linux
<a name="workingcookbook-extend-cron"></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.

Pekerjaan cron Linux mengarahkan daemon cron untuk menjalankan satu atau lebih perintah pada jadwal yang ditentukan. Misalnya, tumpukan Anda mendukung aplikasi e-commerce PHP. Anda dapat mengatur pekerjaan cron agar server mengirimi Anda laporan penjualan pada waktu yang ditentukan setiap minggu. Untuk informasi lebih lanjut tentang cron, lihat [cron di](http://en.wikipedia.org/wiki/Cron) Wikipedia. Untuk informasi lebih lanjut tentang cara menjalankan cron job langsung di komputer atau instance berbasis Linux, lihat [Apa itu cron dan crontab, dan](https://kb.iu.edu/d/afiz) bagaimana cara menggunakannya? di situs web basis pengetahuan Universitas Indiana.

Meskipun Anda dapat secara manual mengatur `cron` pekerjaan pada instance berbasis Linux individu dengan menghubungkannya dengan SSH, dan mengedit `crontab` entri mereka, keuntungan utama dari OpsWorks Stacks adalah Anda dapat mengarahkannya untuk menjalankan tugas di seluruh lapisan instance. Prosedur berikut menjelaskan cara mengatur `cron` pekerjaan pada instance lapisan PHP App Server, tetapi Anda dapat menggunakan pendekatan yang sama dengan lapisan apa pun.

**Untuk menyiapkan `cron` pekerjaan pada instance layer**

1. Terapkan buku masak dengan resep dengan `cron` sumber daya yang mengatur pekerjaan. Contoh mengasumsikan bahwa resep diberi nama`cronjob.rb`; rincian implementasi dijelaskan nanti. Untuk informasi lebih lanjut tentang buku masak dan resep, lihat[Buku Masak dan Resep](workingcookbook.md).

1. Instal buku masak di tumpukan Anda. Untuk informasi selengkapnya, lihat [Memasang Buku Masak Kustom](workingcookbook-installingcustom-enable.md).

1. Minta OpsWorks Stacks menjalankan resep secara otomatis pada instance layer dengan menetapkannya ke peristiwa siklus hidup berikut. Untuk informasi selengkapnya, lihat [Resep Menjalankan Secara Otomatis](workingcookbook-assigningcustom.md).
   + **Pengaturan** - Menetapkan `cronjob.rb` ke acara ini mengarahkan OpsWorks Stacks untuk menjalankan resep pada semua instance baru.
   + **Deploy** — Menetapkan `cronjob.rb` ke acara ini mengarahkan OpsWorks Stacks untuk menjalankan resep di semua instance online saat Anda menerapkan atau menerapkan ulang aplikasi ke layer.

   Anda juga dapat menjalankan resep secara manual pada instance online dengan menggunakan perintah `Execute Recipes` stack. Untuk informasi selengkapnya, lihat [Jalankan Perintah Stack](workingstacks-commands.md).

Berikut ini adalah `cronjob.rb` contoh, yang menyiapkan pekerjaan cron untuk menjalankan aplikasi PHP yang diimplementasikan pengguna seminggu sekali yang mengumpulkan data penjualan dari server dan mengirimkan laporan. Untuk contoh lebih lanjut tentang cara menggunakan sumber daya cron, lihat [cron](https://docs.chef.io/chef/resources.html#cron). 

```
cron "job_name" do
  hour "1"
  minute "10"
  weekday "6"
  command "cd /srv/www/myapp/current && php .lib/mailing.php"
end
```

`cron`adalah sumber daya Chef yang mewakili `cron` pekerjaan. Saat OpsWorks Stacks menjalankan resep pada sebuah instance, penyedia terkait menangani detail pengaturan pekerjaan.
+ `job_name`adalah nama yang ditentukan pengguna untuk `cron` pekerjaan itu, seperti. `weekly report`
+ `hour`/`minute`/`weekday`tentukan kapan perintah harus dijalankan. Contoh ini menjalankan perintah setiap hari Sabtu pukul 1:10 pagi.
+ `command`menentukan perintah yang akan dijalankan.

  Contoh ini menjalankan dua perintah. Yang pertama menavigasi ke `/srv/www/myapp/current` direktori. Yang kedua menjalankan `mailing.php` aplikasi yang diterapkan pengguna, yang mengumpulkan data penjualan dan mengirimkan laporan.

**catatan**  
`bundle`Perintah tidak bekerja dengan `cron` pekerjaan secara default. Alasannya adalah bahwa OpsWorks Stacks menginstal bundler di direktori. `/usr/local/bin` Untuk digunakan `bundle` dengan `cron` pekerjaan, Anda harus secara eksplisit menambahkan jalur `/usr/local/bin` ke pekerjaan cron. Juga, karena variabel lingkungan \$1PATH mungkin tidak berkembang dalam `cron` pekerjaan, praktik terbaik adalah secara eksplisit menambahkan informasi jalur yang diperlukan ke pekerjaan tanpa bergantung pada perluasan variabel \$1PATH. Contoh berikut menunjukkan dua cara untuk digunakan `bundle` dalam suatu `cron` pekerjaan.  

```
cron "my first task" do
  path "/usr/local/bin"
  minute "*/10"
  command "cd /srv/www/myapp/current && bundle exec my_command"
end
```

```
cron_env = {"PATH" => "/usr/local/bin"}
cron "my second task" do
  environment cron_env
  minute "*/10"
  command "cd /srv/www/myapp/current && /usr/local/bin/bundle exec my_command"
end
```

Jika tumpukan Anda memiliki beberapa server aplikasi, menetapkan `cronjob.rb` ke peristiwa siklus hidup lapisan PHP App Server mungkin bukan pendekatan yang ideal. Misalnya, resep berjalan pada semua instance layer, sehingga Anda akan menerima beberapa laporan. Pendekatan yang lebih baik adalah menggunakan lapisan khusus untuk memastikan bahwa hanya satu server yang mengirim laporan.

**Untuk menjalankan resep hanya pada salah satu instance layer**

1. Buat layer khusus yang disebut, misalnya, PHPAdmin dan tetapkan `cronjob.rb` ke acara Setup dan Deploy. Lapisan khusus tidak harus melakukan banyak hal. Dalam hal ini, jalankan PHPAdmin saja satu resep khusus pada instance-nya.

1. Tetapkan salah satu instance PHP App Server ke. AdminLayer Jika sebuah instance milik lebih dari satu lapisan, OpsWorks Stacks menjalankan resep bawaan dan kustom setiap lapisan.

Karena hanya satu instance milik PHP App Server dan PHPAdmin layer, `cronjob.rb` berjalan hanya pada instance itu dan Anda hanya menerima satu laporan.

# Menginstal dan Mengkonfigurasi Paket di Instans Linux
<a name="workingcookbook-extend-package"></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.

Lapisan bawaan hanya mendukung paket tertentu. Untuk informasi selengkapnya, lihat [Lapisan](workinglayers.md). Anda dapat menginstal paket lain, seperti server Redis, dengan menerapkan resep khusus untuk menangani tugas penyiapan, konfigurasi, dan penerapan terkait. Dalam beberapa kasus, pendekatan terbaik adalah memperluas lapisan bawaan agar menginstal paket pada instance-nya di samping paket standar layer. Misalnya, jika Anda memiliki tumpukan yang mendukung aplikasi PHP, dan Anda ingin menyertakan server Redis, Anda dapat memperluas lapisan PHP App Server untuk menginstal dan mengkonfigurasi server Redis pada instance lapisan selain server aplikasi PHP.

Resep instalasi paket biasanya perlu melakukan tugas-tugas seperti ini:
+ Buat satu atau lebih direktori dan atur modenya.
+ Buat file konfigurasi dari template.
+ Jalankan installer untuk menginstal paket pada instance.
+ Mulai satu atau lebih layanan.

Untuk contoh cara menginstal server Tomcat, lihat[Membuat Layer Server Tomcat Kustom](create-custom.md). Topik menjelaskan cara mengatur lapisan Redis kustom, tetapi Anda dapat menggunakan banyak kode yang sama untuk menginstal dan mengkonfigurasi Redis pada lapisan bawaan. Untuk contoh cara menginstal paket lain, lihat buku masak bawaan, di [https://github.com/aws/opsworks-cookbooks](https://github.com/aws/opsworks-cookbooks).