

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

# Komponen Buku Masak
<a name="workingcookbook-installingcustom-components"></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 biasanya mencakup komponen dasar berikut:
+ File **atribut** berisi satu set atribut yang mewakili nilai yang akan digunakan oleh resep dan template.
+ File **template** adalah template yang digunakan resep untuk membuat file lain, seperti file konfigurasi.

  File template biasanya memungkinkan Anda memodifikasi file konfigurasi dengan mengesampingkan atribut—yang dapat dilakukan tanpa menyentuh buku masak—alih-alih menulis ulang file konfigurasi. Praktek standar adalah bahwa setiap kali Anda berharap untuk mengubah file konfigurasi pada sebuah instance bahkan sedikit, Anda harus menggunakan file template. 
+ File **resep** adalah aplikasi Ruby yang mendefinisikan semua yang diperlukan untuk mengkonfigurasi sistem, termasuk membuat dan mengonfigurasi folder, menginstal dan mengonfigurasi paket, memulai layanan, dan sebagainya.

Buku masak tidak harus memiliki ketiga komponen. Pendekatan yang lebih sederhana untuk kustomisasi hanya memerlukan atribut atau file template. Selain itu, buku masak secara opsional dapat menyertakan jenis file lain, seperti definisi atau spesifikasi. 

Bagian ini menjelaskan tiga komponen buku masak standar. Untuk informasi selengkapnya, terutama tentang cara menerapkan resep, lihat [Opscode](http://www.opscode.com/chef/).

**Topics**
+ [Atribut](workingcookbook-installingcustom-components-attributes.md)
+ [Template](workingcookbook-installingcustom-components-templates.md)
+ [Resep](workingcookbook-installingcustom-components-recipes.md)

# Atribut
<a name="workingcookbook-installingcustom-components-attributes"></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 dan template bergantung pada berbagai nilai, seperti pengaturan konfigurasi. Daripada hardcode nilai-nilai tersebut secara langsung dalam resep atau template, Anda dapat membuat file atribut dengan atribut yang mewakili setiap nilai. Anda kemudian menggunakan atribut dalam resep atau templat Anda alih-alih nilai eksplisit. Keuntungan menggunakan atribut adalah Anda dapat mengganti nilainya tanpa menyentuh buku masak. Untuk alasan ini, Anda harus selalu menggunakan atribut untuk menentukan jenis nilai berikut:
+ Nilai yang mungkin bervariasi dari tumpukan ke tumpukan atau dengan waktu, seperti nama pengguna.

  Jika Anda hardcode nilai-nilai tersebut, Anda harus mengubah resep atau template setiap kali Anda perlu mengubah nilai. Dengan menggunakan atribut untuk menentukan nilai-nilai ini, Anda dapat menggunakan buku masak yang sama untuk setiap tumpukan dan hanya mengganti atribut yang sesuai.
+ Nilai sensitif, seperti kata sandi atau kunci rahasia.

  Menempatkan nilai sensitif eksplisit dalam buku masak Anda dapat meningkatkan risiko paparan. Sebagai gantinya, tentukan atribut dengan nilai dummy dan timpa untuk menetapkan nilai sebenarnya. Cara terbaik untuk mengganti atribut tersebut adalah dengan JSON khusus. Untuk informasi selengkapnya, lihat [Menggunakan JSON Kustom](workingcookbook-json-override.md).

Untuk informasi selengkapnya tentang atribut dan cara menggantinya, lihat[Mengesampingkan Atribut](workingcookbook-attributes.md). 

Contoh berikut adalah bagian dari file atribut contoh.

```
...
default["apache"]["listen_ports"] = [ '80','443' ]
default["apache"]["contact"] = 'ops@example.com'
default["apache"]["timeout"] = 120
default["apache"]["keepalive"] = 'Off'
default["apache"]["keepaliverequests"] = 100
default["apache"]["keepalivetimeout"] = 3
default["apache"]["prefork"]["startservers"] = 16
default["apache"]["prefork"]["minspareservers"] = 16
default["apache"]["prefork"]["maxspareservers"] = 32
default["apache"]["prefork"]["serverlimit"] = 400
default["apache"]["prefork"]["maxclients"] = 400
default["apache"]["prefork"]["maxrequestsperchild"] = 10000
...
```

 OpsWorks Stacks mendefinisikan atribut dengan menggunakan sintaks berikut:

```
node.type["attribute"]["subattribute"]["..."]=value
```

Anda juga dapat menggunakan titik dua (:), sebagai berikut:

```
node.type[:attribute][:subattribute][:...]=value
```

Definisi atribut memiliki komponen-komponen berikut:

## `node.`
<a name="node"></a>

`node.`Awalan adalah opsional dan biasanya dihilangkan, seperti yang ditunjukkan pada contoh.

## `type`
<a name="type"></a>

Tipe mengatur apakah atribut dapat diganti. OpsWorks Atribut tumpukan biasanya menggunakan salah satu dari jenis berikut:
+ `default`adalah tipe yang paling umum digunakan, karena memungkinkan atribut untuk diganti.
+ `normal`mendefinisikan atribut yang menggantikan salah satu nilai atribut OpsWorks Stacks standar.

**catatan**  
Chef mendukung jenis tambahan, yang tidak diperlukan untuk OpsWorks Stacks tetapi mungkin berguna untuk proyek Anda. Untuk informasi selengkapnya, lihat [Tentang Atribut](http://docs.chef.io/attributes.html).

## `attribute name`
<a name="attribute-name"></a>

Nama atribut menggunakan sintaks simpul Chef standar,`[:attribute][:subattribute][...]`. Anda dapat menggunakan nama apa pun yang Anda suka untuk atribut Anda. [Namun, seperti yang dibahas dalam[Mengesampingkan Atribut](workingcookbook-attributes.md), atribut buku masak khusus digabungkan ke dalam objek node instance, bersama dengan atribut dari konfigurasi tumpukan dan atribut penerapan, dan alat Ohai Chef.](https://docs.chef.io/ohai.html) Nama konfigurasi yang umum digunakan seperti *port* atau *pengguna* mungkin muncul di berbagai buku masak.

Untuk menghindari tabrakan nama, konvensi adalah membuat nama atribut yang memenuhi syarat dengan setidaknya dua elemen, seperti yang ditunjukkan pada contoh. Elemen pertama harus unik dan biasanya didasarkan pada nama produk seperti *Apache*. Ini diikuti oleh satu atau lebih subattribut yang mengidentifikasi nilai tertentu, seperti atau. `[:user]` `[:port]` Anda dapat menggunakan subattribut sebanyak yang sesuai untuk proyek Anda.

## `value`
<a name="value"></a>

Atribut dapat diatur ke jenis nilai berikut:
+ Sebuah string, seperti`default[:apache][:keepalive] = 'Off'`.
+ Angka (tanpa tanda kutip) seperti`default[:apache][:timeout] = 120`.
+ Nilai Boolean, yang bisa berupa `true` atau `false` (tidak ada tanda kutip).
+ Daftar nilai, seperti `default[:apache][:listen_ports] = [ '80','443' ]`

File atribut adalah aplikasi Ruby, sehingga Anda juga dapat menggunakan sintaks node dan operator logis untuk menetapkan nilai berdasarkan atribut lainnya. Untuk informasi selengkapnya tentang cara mendefinisikan atribut, lihat [Tentang Atribut s](https://docs.chef.io/chef_overview_attributes.html). [Untuk contoh file atribut yang berfungsi, lihat buku masak bawaan OpsWorks Stacks di opsworks-cookbooks. https://github.com/aws/](https://github.com/aws/opsworks-cookbooks)

# Template
<a name="workingcookbook-installingcustom-components-templates"></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 mengkonfigurasi banyak paket dengan membuat file konfigurasi dan menempatkannya di direktori yang sesuai. Anda dapat menyertakan file konfigurasi di buku masak Anda dan menyalinnya ke direktori yang sesuai, tetapi pendekatan yang lebih fleksibel adalah meminta resep Anda membuat file konfigurasi dari templat. Salah satu keuntungan dari template adalah Anda dapat menggunakan atribut untuk menentukan nilai template. Ini memungkinkan Anda, misalnya, untuk memodifikasi file konfigurasi tanpa menyentuh buku masak dengan menggunakan JSON khusus untuk mengganti nilai atribut yang sesuai.

Template pada dasarnya memiliki konten dan struktur yang sama dengan file terkait. Berikut adalah contoh file,`httpd.conf`.

```
ServerRoot "<%= node[:apache][:dir] %>"
<% if node[:platform] == "debian" || node[:platform] == "ubuntu" -%>
  LockFile /var/lock/apache2/accept.lock
<% else -%>
   LockFile logs/accept.lock
<% end -%>
PidFile <%= node[:apache][:pid_file] %>
Timeout <%= node[:apache][:timeout] %>
KeepAlive <%= node[:apache][:keepalive] %>
MaxKeepAliveRequests <%= node[:apache][:keepaliverequests] %>
KeepAliveTimeout <%= node[:apache][:keepalivetimeout] %>
<IfModule mpm_prefork_module>
    StartServers          <%= node[:apache][:prefork][:startservers] %>
    MinSpareServers       <%= node[:apache][:prefork][:minspareservers] %>
    MaxSpareServers       <%= node[:apache][:prefork][:maxspareservers] %>
    ServerLimit           <%= node[:apache][:prefork][:serverlimit] %>
    MaxClients            <%= node[:apache][:prefork][:maxclients] %>
    MaxRequestsPerChild   <%= node[:apache][:prefork][:maxrequestsperchild] %>
</IfModule>
...
```

Contoh berikut adalah `httpd.conf` file yang dihasilkan untuk instance Ubuntu:

```
ServerRoot "/etc/httpd"
LockFile logs/accept.lock
PidFile /var/run/httpd/httpd.pid
Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 3
<IfModule mpm_prefork_module>
    StartServers          16
    MinSpareServers       16
    MaxSpareServers       32
    ServerLimit           400
    MaxClients            400
    MaxRequestsPerChild   10000
</IfModule>
...
```

Sebagian besar teks template hanya disalin dari template ke `httpd.conf` file. Namun, `<%= ... %>` konten ditangani sebagai berikut:
+ Chef menggantikan `<%= node[:attribute][:sub_attribute][:...]%>` dengan nilai atribut.

  Misalnya, `StartServers <%= node[:apache][:prefork][:startservers] %>` menjadi `StartServers 16` di`httpd.conf`.
+ Anda dapat menggunakan `<%if-%>, <%else-%>, and <%end-%>` untuk memilih nilai secara kondisional.

  Contoh menetapkan jalur file yang berbeda untuk `accept.lock` tergantung pada platform.

**catatan**  
Anda tidak terbatas pada atribut dalam file atribut buku masak Anda. Anda dapat menggunakan atribut apapun dalam objek node instance ini. Misalnya, dihasilkan oleh alat Chef yang disebut [Ohai](https://docs.chef.io/ohai.html) dan juga dimasukkan ke dalam objek node. Untuk informasi lebih lanjut tentang atribut, lihat[Mengesampingkan Atribut](workingcookbook-attributes.md).

Untuk informasi selengkapnya tentang template, termasuk cara menggabungkan kode Ruby, lihat [Tentang Template](http://docs.chef.io/templates.html).

# Resep
<a name="workingcookbook-installingcustom-components-recipes"></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 adalah aplikasi Ruby yang mendefinisikan konfigurasi sistem. Mereka menginstal paket, membuat file konfigurasi dari template, menjalankan perintah shell, membuat file dan direktori, dan sebagainya. [Anda biasanya memiliki OpsWorks Stacks mengeksekusi resep secara otomatis ketika [peristiwa siklus hidup](workingcookbook-events.md) terjadi pada instance tetapi Anda juga dapat menjalankannya secara eksplisit kapan saja dengan menggunakan perintah stack Execute Recipes.](workingcookbook-executing.md) Untuk informasi lebih lanjut, lihat [Tentang Resep](http://docs.chef.io/recipes.html).

Resep biasanya sebagian besar terdiri dari serangkaian *sumber daya*, yang masing-masing mewakili keadaan yang diinginkan dari suatu aspek sistem. Setiap sumber daya mencakup seperangkat atribut yang menentukan keadaan yang diinginkan dan menentukan tindakan apa yang harus diambil. Chef mengasosiasikan setiap sumber daya dengan *penyedia* yang sesuai yang melakukan tindakan. Untuk informasi selengkapnya, lihat [Referensi Sumber Daya dan Penyedia](https://docs.chef.io/resource.html).

`package`Sumber daya membantu Anda mengelola paket perangkat lunak pada instance Linux. Contoh berikut menginstal paket Apache.

```
...
package 'apache2' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    package_name 'httpd'
  when 'debian','ubuntu'
    package_name 'apache2'
  end
  action :install
end
...
```

Chef menggunakan penyedia paket yang sesuai untuk platform. Atribut sumber daya seringkali hanya diberi nilai, tetapi Anda dapat menggunakan operasi logis Ruby untuk melakukan tugas bersyarat. Contoh menggunakan `case` operator, yang digunakan `node[:platform]` untuk mengidentifikasi sistem operasi instance dan menetapkan `package_name` atribut yang sesuai. Anda dapat menyisipkan atribut ke dalam resep dengan menggunakan sintaks simpul Chef standar dan Chef menggantinya dengan nilai terkait. Anda dapat menggunakan atribut apa pun di objek node, bukan hanya atribut buku masak Anda.

Setelah menentukan nama paket yang sesuai, segmen kode diakhiri dengan `install` tindakan, yang menginstal paket. Tindakan lain untuk sumber daya ini termasuk `upgrade` dan`remove`. Untuk informasi lebih lanjut, lihat [paket](https://docs.chef.io/chef/resources.html#id150).

Seringkali berguna untuk memecah tugas instalasi dan konfigurasi yang kompleks menjadi satu atau lebih subtugas, masing-masing diimplementasikan sebagai resep terpisah, dan meminta resep utama Anda menjalankannya pada waktu yang tepat. Contoh berikut menunjukkan baris kode yang mengikuti contoh sebelumnya:

```
include_recipe 'apache2::service'
```

Untuk memiliki resep mengeksekusi resep anak, gunakan `include_recipe` kata kunci, diikuti dengan nama resep. Resep diidentifikasi dengan menggunakan `CookbookName::RecipeName` sintaks Chef standar, di mana `RecipeName` menghilangkan ekstensi. `.rb`

**catatan**  
Sebuah `include_recipe` pernyataan secara efektif mengeksekusi resep pada saat itu dalam resep utama. Namun, yang sebenarnya terjadi adalah Chef mengganti setiap `include_recipe` pernyataan dengan kode resep yang ditentukan sebelum mengeksekusi resep utama.

`directory`Sumber daya mewakili direktori, seperti direktori yang berisi file paket. `default.rb`Sumber daya berikut membuat direktori log Linux.

```
directory node[:apache][:log_dir] do
    mode 0755
    action :create
end
```

Direktori log didefinisikan dalam salah satu file atribut buku masak. Sumber daya menentukan mode direktori sebagai 0755, dan menggunakan `create` tindakan untuk membuat direktori. Untuk informasi selengkapnya, lihat [direktori](https://docs.chef.io/chef/resources.html#directory). Anda juga dapat menggunakan sumber daya ini dengan instance Windows.

Sumber `execute` daya mewakili perintah, seperti perintah shell atau skrip. Contoh berikut menghasilkan file module.load.

```
execute 'generate-module-list' do
  if node[:kernel][:machine] == 'x86_64'
    libdir = 'lib64'
  else
    libdir = 'lib'
  end
  command "/usr/local/bin/apache2_module_conf_generate.pl /usr/#{libdir}/httpd/modules /etc/httpd/mods-available"
  action :run
end
```

Sumber daya pertama-tama menentukan jenis CPU. `[:kernel][:machine]`adalah salah satu atribut otomatis yang dihasilkan Chef untuk mewakili berbagai properti sistem, tipe CPU dalam kasus ini. Kemudian menentukan perintah, skrip Perl dan menggunakan `run` tindakan untuk menjalankan skrip, yang menghasilkan file.load modul. Untuk informasi selengkapnya, lihat [mengeksekusi](https://docs.chef.io/chef/resources.html#execute).

`template`Sumber daya mewakili file — biasanya file konfigurasi — yang akan dihasilkan dari salah satu file template buku masak. Contoh berikut membuat file `httpd.conf` konfigurasi dari `apache2.conf.erb` template yang dibahas di[Template](workingcookbook-installingcustom-components-templates.md).

```
template 'apache2.conf' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    path "#{node[:apache][:dir]}/conf/httpd.conf"
  when 'debian','ubuntu'
    path "#{node[:apache][:dir]}/apache2.conf"
  end
  source 'apache2.conf.erb'
  owner 'root'
  group 'root'
  mode 0644
  notifies :restart, resources(:service => 'apache2')
end
```

Sumber daya menentukan nama dan lokasi file yang dihasilkan berdasarkan sistem operasi instance. Kemudian menentukan `apache2.conf.erb` sebagai template yang akan digunakan untuk menghasilkan file dan menetapkan pemilik, grup, dan mode file. Ini menjalankan `notify` tindakan untuk memberi tahu `service` sumber daya yang mewakili server Apache untuk me-restart server. Untuk informasi selengkapnya, lihat [template](https://docs.chef.io/chef/resources.html#template).