

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

# Langkah 3: Membuat dan Menyebarkan Buku Masak Kustom
<a name="other-services-redis-cookbook"></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.

Saat ini, tumpukan belum cukup fungsional; Anda perlu mengaktifkan aplikasi Anda untuk mengakses server Redis. Pendekatan yang paling fleksibel adalah menempatkan file YAMM dengan informasi akses di `config` subfolder aplikasi. Aplikasi kemudian dapat memperoleh informasi dari file. Dengan menggunakan pendekatan ini, Anda dapat mengubah informasi koneksi tanpa menulis ulang dan memindahkan aplikasi. Untuk contoh ini, file harus diberi nama `redis.yml` dan berisi nama host ElastiCache cluster dan port, sebagai berikut:

```
host: cache-cluster-hostname
port: cache-cluster-port
```

Anda dapat menyalin file ini secara manual ke server Anda, tetapi pendekatan yang lebih baik adalah menerapkan *resep* Chef untuk menghasilkan file, dan meminta OpsWorks Stacks menjalankan resep di setiap server. Resep koki adalah aplikasi Ruby khusus yang digunakan OpsWorks Stacks untuk melakukan tugas pada instance seperti menginstal paket atau membuat file konfigurasi. Resep dikemas dalam *buku masak*, yang dapat berisi beberapa resep dan file terkait seperti templat untuk file konfigurasi. Buku masak ditempatkan di repositori, seperti GitHub, dan harus memiliki struktur direktori standar. Jika Anda belum memiliki repositori buku masak khusus, lihat [Repositori Buku Masak](workingcookbook-installingcustom-repo.md) untuk informasi tentang cara mengaturnya.

Untuk contoh ini, tambahkan buku masak bernama `redis-config` ke repositori buku masak Anda dengan konten berikut:

```
my_cookbook_repository
  redis-config
    recipes
      generate.rb
    templates
      default
        redis.yml.erb
```

`recipes`Folder berisi resep bernama`generate.rb`, yang menghasilkan file konfigurasi aplikasi dari`redis.yml.erb`, sebagai berikut:

```
node[:deploy].each do |app_name, deploy_config|
  # determine root folder of new app deployment
  app_root = "#{deploy_config[:deploy_to]}/current"

  # use template 'redis.yml.erb' to generate 'config/redis.yml'
  template "#{app_root}/config/redis.yml" do
    source "redis.yml.erb"
    cookbook "redis-config"

    # set mode, group and owner of generated file
    mode "0660"
    group deploy_config[:group]
    owner deploy_config[:user]

    # define variable “@redis” to be used in the ERB template
    variables(
      :redis => deploy_config[:redis] || {}
    )

    # only generate a file if there is Redis configuration
    not_if do
      deploy_config[:redis].blank?
    end
  end
end
```

Resepnya bergantung pada data dari [konfigurasi tumpukan OpsWorks Stacks dan objek JSON penerapan](workingcookbook-json.md), yang diinstal pada setiap instance dan berisi informasi terperinci tentang tumpukan dan aplikasi apa pun yang diterapkan. `deploy`Node objek memiliki struktur sebagai berikut:

```
{
   ...
  "deploy": {
    "app1": {
      "application" : "short_name",
      ...
    }
    "app2": {
      ...
    }
    ...
  }
}
```

Node deploy berisi satu set objek JSON yang disematkan, satu untuk setiap aplikasi yang di-deploy, yang diberi nama dengan nama pendek aplikasi. Setiap objek aplikasi berisi sekumpulan atribut yang menentukan konfigurasi aplikasi, seperti root dokumen dan jenis aplikasi. Untuk daftar atribut penerapan, lihat[menyebarkan Atribut](attributes-json-deploy.md). Resep dapat menggunakan sintaks atribut Chef untuk mewakili konfigurasi tumpukan dan penerapan nilai JSON. Misalnya, `[:deploy][:app1][:application]` mewakili nama pendek aplikasi app1. 

Untuk setiap aplikasi di`[:deploy]`, resep mengeksekusi blok kode terkait, yang `deploy_config` mewakili atribut app. Resep pertama disetel `app_root` ke direktori root aplikasi,`[:deploy][:app_name][:deploy_to]/current`. Kemudian menggunakan [sumber daya template](https://docs.chef.io/chef/resources.html#template) Chef untuk menghasilkan file konfigurasi dari `redis.yml.erb` dan menempatkannya di file`app_root/config`.

 File konfigurasi biasanya dibuat dari templat, dengan banyak jika tidak sebagian besar pengaturan ditentukan oleh *atribut* Chef. Dengan atribut Anda dapat mengubah pengaturan menggunakan JSON kustom, seperti yang dijelaskan nanti, alih-alih menulis ulang file template.Template berisi yang berikut`redis.yml.erb`:

```
host: <%= @redis[:host] %>
port: <%= @redis[:port] || 6379 %>
```

Elemen <%... %> adalah placeholder yang mewakili nilai atribut.
+ `<%= @redis[:host] %>`mewakili nilai`redis[:host]`, yang merupakan nama host cluster cache.
+ `<%= @redis[:port] || 6379 %>`mewakili nilai `redis[:port]` atau, jika atribut itu tidak didefinisikan, nilai port default, 6379.

Sumber `template` daya berfungsi sebagai berikut:
+ `source`dan `cookbook` tentukan nama template dan buku masak, masing-masing.
+ `mode`,`group`, dan `owner` berikan file konfigurasi hak akses yang sama dengan aplikasi.
+ `variables`Bagian ini menetapkan `@redis` variabel yang digunakan dalam template, ke nilai `[:redis]` atribut aplikasi.

  Nilai `[:redis]` atribut ditetapkan dengan menggunakan JSON kustom, seperti yang dijelaskan nanti; ini bukan salah satu atribut aplikasi standar.
+ `not_if`Arahan memastikan bahwa resep tidak menghasilkan file konfigurasi jika sudah ada.

Setelah Anda menulis buku masak, Anda harus menerapkannya ke cache buku masak masing-masing instance. Operasi ini tidak menjalankan resep; itu hanya menginstal buku masak baru pada instance tumpukan. Anda biasanya menjalankan resep dengan menetapkannya ke peristiwa siklus hidup lapisan, seperti yang dijelaskan nanti.

**Untuk menyebarkan buku masak kustom Anda**

1. Pada halaman OpsWorks Stacks **Stack**, klik **Stack Settings** dan kemudian **Edit**.

1. Di bagian **Manajemen Konfigurasi**, atur **Gunakan buku masak Chef kustom** ke **Ya**, masukkan informasi repositori buku masak, dan klik **Simpan** untuk memperbarui konfigurasi tumpukan.  
![\[Configuration form for custom Chef cookbooks with repository details and options.\]](http://docs.aws.amazon.com/id_id/opsworks/latest/userguide/images/redis_walkthrough_cookbook.png)

1. Pada halaman **Stack**, klik **Run Command, pilih perintah** **Update Custom Cookbooks** stack, dan klik **Update Custom Cookbooks** untuk menginstal buku masak baru di cache buku masak instance.   
![\[Run Command interface showing Update Custom Cookbooks option and instance selection for Rails App Server.\]](http://docs.aws.amazon.com/id_id/opsworks/latest/userguide/images/redis_walkthrough_command.png)

Jika Anda memodifikasi buku masak Anda, jalankan **Perbarui Buku Masak Kustom** lagi untuk menginstal versi yang diperbarui. Untuk informasi lebih lanjut tentang prosedur ini, lihat[Memasang Buku Masak Kustom](workingcookbook-installingcustom-enable.md).