

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

# Struktur Resep
<a name="cookbooks-101-basics-structure"></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.

Buku masak pada dasarnya adalah seperangkat *resep*, yang dapat melakukan berbagai macam tugas pada sebuah instance. Untuk memperjelas cara menerapkan resep, ada baiknya melihat contoh sederhana. Berikut ini adalah resep pengaturan untuk [HAProxylapisan](layers-haproxy.md) bawaan. Fokus saja pada struktur keseluruhan pada saat ini dan jangan terlalu khawatir tentang detailnya; mereka akan dibahas dalam contoh berikutnya.

```
package 'haproxy' do
  action :install
end

if platform?('debian','ubuntu')
  template '/etc/default/haproxy' do
    source 'haproxy-default.erb'
    owner 'root'
    group 'root'
    mode 0644
  end
end

include_recipe 'haproxy::service'

service 'haproxy' do
  action [:enable, :start]
end

template '/etc/haproxy/haproxy.cfg' do
  source 'haproxy.cfg.erb'
  owner 'root'
  group 'root'
  mode 0644
  notifies :restart, "service[haproxy]"
end
```

**catatan**  
Untuk ini dan contoh lain dari resep kerja dan file terkait, lihat [resep bawaan OpsWorks Tumpukan](https://github.com/aws/opsworks-cookbooks).

Contoh ini menyoroti elemen resep utama, yang dijelaskan di bagian berikut.

**Topics**
+ [Sumber daya](#cookbooks-101-basics-structure-resources)
+ [Kontrol Aliran](#cookbooks-101-basics-structure-ruby)
+ [Termasuk Resep](#cookbooks-101-basics-structure-include)

## Sumber daya
<a name="cookbooks-101-basics-structure-resources"></a>

Resep sebagian besar terdiri dari satu set sumber *daya* Chef. Masing-masing menentukan aspek tertentu dari status akhir instance, seperti paket yang akan diinstal atau layanan yang akan dimulai. Contohnya memiliki empat sumber daya:
+ `package`Sumber daya, yang mewakili paket yang diinstal, [HAProxy server](http://haproxy.1wt.eu/) untuk contoh ini.
+ `service`Sumber daya, yang mewakili layanan, HAProxy layanan untuk contoh ini.
+ Dua `template` sumber daya, yang mewakili file yang akan dibuat dari template tertentu, dua file HAProxy konfigurasi untuk contoh ini.

Sumber daya menyediakan cara deklaratif untuk menentukan status instance. Di belakang layar, setiap sumber daya memiliki *penyedia* terkait yang melakukan tugas yang diperlukan, seperti menginstal paket, membuat dan mengonfigurasi direktori, memulai layanan, dan sebagainya. Jika detail tugas bergantung pada sistem operasi tertentu, sumber daya memiliki banyak penyedia dan menggunakan yang sesuai untuk sistem. Misalnya, pada sistem Red Hat Linux yang digunakan `package` penyedia `yum` untuk menginstal paket. Pada sistem Ubuntu Linux, `package` penyedia menggunakan`apt-get`.

Anda menerapkan sumber daya sebagai blok kode Ruby dengan format umum berikut.

```
resource_type "resource_name" do
  attribute1 'value1'
  attribute2 'value2'
  ...
  action :action_name
  notifies : action 'resource'
end
```

Elemen-elemennya adalah:

**Tipe sumber daya**  
(Wajib) Contoh ini mencakup tiga jenis sumber daya`package`,`service`,, dan`template`.

**Nama sumber daya**  
(Wajib) Nama mengidentifikasi sumber daya tertentu dan kadang-kadang digunakan sebagai nilai default untuk salah satu atribut. Dalam contoh, `package` merupakan sumber daya paket bernama `haproxy` dan `template` sumber daya pertama mewakili file konfigurasi bernama`/etc/default/haproxy`.

**Atribut**  
(Opsional) Atribut menentukan konfigurasi sumber daya dan bervariasi tergantung pada jenis sumber daya dan bagaimana Anda ingin mengonfigurasi sumber daya.  
+ `template`Sumber daya contoh secara eksplisit mendefinisikan sekumpulan atribut yang menentukan sumber, pemilik, grup, dan mode file yang dibuat. 
+ Contoh `package` dan `service` sumber daya tidak secara eksplisit mendefinisikan atribut apa pun.

  Nama sumber daya biasanya merupakan nilai default untuk atribut yang diperlukan dan terkadang semua yang diperlukan. Misalnya, nama sumber daya adalah nilai default untuk `package_name` atribut `package` sumber daya, yang merupakan satu-satunya atribut yang diperlukan.
Ada juga beberapa atribut khusus yang disebut atribut penjaga, yang menentukan kapan penyedia sumber daya akan mengambil tindakan. Misalnya, `only_if` atribut mengarahkan penyedia sumber daya untuk mengambil tindakan hanya jika kondisi tertentu terpenuhi. HAProxy Resepnya tidak menggunakan atribut penjaga, tetapi digunakan oleh beberapa contoh berikut.

**Tindakan dan Pemberitahuan**  
(Opsional) Tindakan dan pemberitahuan menentukan tugas apa yang harus dilakukan penyedia.  
+ `action`mengarahkan penyedia untuk mengambil tindakan tertentu, seperti menginstal atau membuat.

  Setiap sumber daya memiliki serangkaian tindakan yang bergantung pada sumber daya tertentu, salah satunya adalah tindakan default. Dalam contoh, tindakan `package` sumber daya adalah`install`, yang mengarahkan penyedia untuk menginstal paket. `template`Sumber daya pertama tidak memiliki `action` elemen, sehingga penyedia mengambil `create` tindakan default.
+ `notifies`mengarahkan penyedia sumber daya lain untuk melakukan tindakan, tetapi hanya jika status sumber daya telah berubah.

  `notifies`biasanya digunakan dengan sumber daya seperti `template` dan `file` untuk melakukan tugas-tugas seperti memulai kembali layanan setelah memodifikasi file konfigurasi. Sumber daya tidak memiliki pemberitahuan default. Jika Anda menginginkan notifikasi, sumber daya harus memiliki `notifies` elemen eksplisit. Dalam HAProxy resep, `template` sumber daya kedua memberi tahu sumber daya haproxy `service` untuk memulai ulang HAProxy layanan jika file konfigurasi terkait telah berubah. 

Sumber daya terkadang bergantung pada sistem operasi.
+ Beberapa sumber daya hanya dapat digunakan pada sistem Linux atau Windows.

  Misalnya, [paket menginstal paket](https://docs.chef.io/chef/resources.html#package) pada sistem Linux dan [windows\$1package menginstal paket](https://docs.chef.io/chef/resources.html#windows-package) pada sistem Windows.
+ Beberapa sumber daya dapat digunakan dengan sistem operasi apa pun, tetapi memiliki atribut yang spesifik untuk sistem tertentu.

  Misalnya, sumber daya [file](https://docs.chef.io/chef/resources.html#file) dapat digunakan pada sistem Linux atau Windows, tetapi memiliki set atribut terpisah untuk mengonfigurasi izin.

Untuk deskripsi sumber daya standar, termasuk atribut, tindakan, dan pemberitahuan yang tersedia untuk setiap sumber daya, lihat [Tentang Sumber Daya dan Penyedia](https://docs.chef.io/resource.html). 

## Kontrol Aliran
<a name="cookbooks-101-basics-structure-ruby"></a>

Karena resep adalah aplikasi Ruby, Anda dapat menggunakan struktur kontrol Ruby untuk memasukkan kontrol aliran ke dalam resep. Misalnya, Anda dapat menggunakan logika bersyarat Ruby agar resep berperilaku berbeda pada sistem yang berbeda. HAProxy Resep termasuk `if` blok yang menggunakan `template` sumber daya untuk membuat file konfigurasi, tetapi hanya jika resep berjalan pada sistem Debian atau Ubuntu. 

Skenario umum lainnya adalah menggunakan loop untuk mengeksekusi sumber daya beberapa kali dengan pengaturan atribut yang berbeda. Misalnya, Anda dapat membuat satu set direktori dengan menggunakan loop untuk mengeksekusi `directory` sumber daya beberapa kali dengan nama direktori yang berbeda.

**catatan**  
Jika Anda tidak terbiasa dengan Ruby, lihat [Just Enough Ruby for Chef](https://docs.chef.io/just_enough_ruby_for_chef.html), yang mencakup apa yang perlu Anda ketahui untuk sebagian besar resep.

## Termasuk Resep
<a name="cookbooks-101-basics-structure-include"></a>

`include_recipe`termasuk resep lain dalam kode Anda, yang memungkinkan Anda untuk memodulasi resep Anda dan menggunakan kembali kode yang sama dalam beberapa resep. Saat Anda menjalankan resep host, Chef mengganti setiap `include_recipe` elemen dengan kode resep yang ditentukan sebelum mengeksekusi resep host. Anda mengidentifikasi resep yang disertakan dengan menggunakan `cookbook_name::recipe_name` sintaks Chef standar, di mana `recipe_name` menghilangkan ekstensi. `.rb` Contohnya termasuk satu resep,`haproxy::service`, yang mewakili HAProxy layanan. 

**catatan**  
Jika Anda menggunakan `include_recipe` resep yang berjalan pada Chef 11.10 dan yang lebih baru untuk menyertakan resep dari buku masak lain, Anda harus menggunakan `depends` pernyataan untuk mendeklarasikan ketergantungan dalam file buku masak. `metadata.rb` Untuk informasi selengkapnya, lihat [Resep Penerapan: Chef 11.10](workingcookbook-chef11-10.md).