

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

# Contoh 8: Mengelola Layanan
<a name="cookbooks-101-basics-services"></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.

Paket seperti server aplikasi biasanya memiliki layanan terkait yang harus dimulai, dihentikan, dimulai ulang, dan sebagainya. Misalnya, Anda perlu memulai layanan Tomcat setelah menginstal paket atau setelah instance selesai booting, dan restart layanan setiap kali Anda memodifikasi file konfigurasi. Topik ini membahas dasar-dasar bagaimana mengelola layanan pada instance Linux, menggunakan server aplikasi Tomcat sebagai contoh. Sumber daya layanan bekerja dengan cara yang sama pada instance Windows, meskipun ada beberapa perbedaan secara detail. Untuk informasi selengkapnya, lihat [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service).

**catatan**  
Contohnya melakukan instalasi Tomcat yang sangat minim, cukup untuk menunjukkan dasar-dasar cara menggunakan `service` sumber daya. Untuk contoh bagaimana menerapkan resep untuk server Tomcat yang lebih fungsional, lihat[Membuat Layer Server Tomcat Kustom](create-custom.md).

**Topics**
+ [Mendefinisikan dan Memulai Layanan](#cookbooks-101-basics-services-service)
+ [Menggunakan pemberitahuan untuk Memulai atau Memulai Ulang Layanan](#cookbooks-101-basics-services-notifies)

## Mendefinisikan dan Memulai Layanan
<a name="cookbooks-101-basics-services-service"></a>

Bagian ini menunjukkan dasar-dasar cara mendefinisikan dan memulai layanan.

**Untuk memulai**

1. Di `opsworks_cookbooks` direktori, buat direktori bernama `tomcat` dan navigasikan ke sana.

1. Tambahkan `metadata.rb` file `tomcat` dengan konten berikut.

   ```
   name "tomcat"
   version "0.1.0"
   ```

1. Inisialisasi dan konfigurasikan Test Kitchen, seperti yang dijelaskan dalam[Contoh 1: Menginstal Paket](cookbooks-101-basics-packages.md), dan hapus CentOS dari `platforms` daftar.

1. Tambahkan `recipes` subdirektori ke`tomcat`.

Anda menggunakan [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service)sumber daya untuk mengelola layanan. Resep default berikut menginstal Tomcat dan memulai layanan.

```
execute "install_updates" do
  command "apt-get update"
end

package "tomcat7" do
    action :install
end

include_recipe 'tomcat::service'

service 'tomcat' do
  action :start
end
```

Resepnya melakukan hal berikut:
+ Sumber `execute` daya berjalan `apt-get update` untuk menginstal pembaruan sistem saat ini.

  Untuk contoh Ubuntu yang digunakan dalam contoh ini, Anda harus menginstal pembaruan sebelum menginstal Tomcat. Sistem lain mungkin memiliki persyaratan yang berbeda.
+ Sumber `package` daya menginstal Tomcat 7.
+ `tomcat::service`Resep yang disertakan mendefinisikan layanan dan dibahas nanti.
+ Sumber `service` daya memulai layanan Tomcat.

  Anda juga dapat menggunakan sumber daya ini untuk mengeluarkan perintah lain, seperti menghentikan dan memulai ulang layanan.

Contoh berikut menunjukkan `tomcat::service` resepnya.

```
service 'tomcat' do
  service_name "tomcat7"
  supports :restart => true, :reload => false, :status => true
  action :nothing
end
```

Resep ini menciptakan definisi layanan Tomcat sebagai berikut: 
+ Nama sumber daya`tomcat`,, digunakan oleh resep lain untuk referensi layanan.

  Misalnya, `default.rb` referensi `tomcat` untuk memulai layanan.
+ Sumber `service_name` daya menentukan nama layanan. 

  Saat Anda mencantumkan layanan pada instance, layanan Tomcat akan diberi nama tomcat7.
+ `supports`menentukan bagaimana Chef mengelola layanan`restart`,`reload`, dan `status` perintah.
  + `true`menunjukkan bahwa Chef dapat menggunakan skrip init atau penyedia layanan lain untuk menjalankan perintah.
  + `false`menunjukkan bahwa Chef harus mencoba menjalankan perintah dengan cara lain.

Perhatikan bahwa `action` diatur ke`:nothing`, yang mengarahkan sumber daya untuk tidak mengambil tindakan. Sumber daya layanan mendukung tindakan seperti `start` dan`restart`. Namun, buku masak ini mengikuti praktik standar menggunakan definisi layanan yang tidak mengambil tindakan dan memulai atau memulai kembali layanan di tempat lain. Setiap resep yang memulai atau memulai ulang layanan harus terlebih dahulu mendefinisikannya, jadi pendekatan paling sederhana adalah menempatkan definisi layanan dalam resep terpisah dan memasukkannya ke dalam resep lain sesuai kebutuhan.

**catatan**  
Untuk mempermudah, resep default untuk contoh ini menggunakan `service` sumber daya untuk memulai layanan setelah menjalankan definisi layanan. Implementasi produksi biasanya memulai atau memulai ulang layanan dengan menggunakan`notifies`, seperti yang dibahas nanti.

**Untuk menjalankan resep**

1. Buat `default.rb` file yang berisi contoh resep default dan simpan ke`recipes`.

1. Buat `service.rb` file yang berisi contoh definisi layanan dan simpan ke`recipes`.

1. Jalankan`kitchen converge`, lalu masuk ke instance dan jalankan perintah berikut untuk memverifikasi bahwa layanan sedang berjalan.

   ```
   sudo service tomcat7 status
   ```

**catatan**  
Jika Anda menjalankan secara `service.rb` terpisah dari`default.rb`, Anda harus mengedit `.kitchen.yml` untuk menambahkan `tomcat::service` ke daftar run. Namun, ketika Anda memasukkan resep, kodenya dimasukkan ke dalam resep induk sebelum resep dijalankan. `service.rb`Oleh karena itu pada dasarnya merupakan bagian dari `default.rb` dan tidak memerlukan entri daftar lari terpisah.

## Menggunakan pemberitahuan untuk Memulai atau Memulai Ulang Layanan
<a name="cookbooks-101-basics-services-notifies"></a>

Implementasi produksi biasanya tidak digunakan `service` untuk memulai atau memulai ulang layanan. Sebaliknya, mereka `notifies` menambah salah satu dari beberapa sumber daya. Misalnya, jika Anda ingin memulai ulang layanan setelah memodifikasi file konfigurasi, Anda menyertakan `notifies` `template` sumber daya terkait. Menggunakan `notifies` memiliki keuntungan sebagai berikut dibandingkan menggunakan `service` sumber daya untuk memulai ulang layanan secara eksplisit. 
+ `notifies`Elemen memulai ulang layanan hanya jika file konfigurasi terkait telah berubah, sehingga tidak ada risiko menyebabkan restart layanan yang tidak perlu. 
+ Chef memulai ulang layanan paling banyak sekali di akhir setiap proses, terlepas dari berapa banyak `notifies` run yang dikandungnya.

  Misalnya, Chef run mungkin menyertakan beberapa sumber template, yang masing-masing memodifikasi file konfigurasi yang berbeda dan memerlukan layanan restart jika file telah berubah. Namun, Anda biasanya ingin memulai ulang layanan hanya sekali, di akhir menjalankan Chef. Jika tidak, Anda mungkin mencoba memulai ulang layanan yang belum sepenuhnya beroperasi dari restart sebelumnya, yang dapat menyebabkan kesalahan.

Contoh ini memodifikasi `tomcat::default` untuk menyertakan `template` sumber daya yang digunakan `notifies` untuk memulai ulang layanan. Contoh realistis akan menggunakan sumber daya template yang membuat versi khusus dari salah satu file konfigurasi Tomcat, tetapi itu agak panjang dan kompleks. Untuk kesederhanaan, contoh hanya menggunakan sumber daya template dari[Membuat File dari Template](cookbooks-101-basics-files.md#cookbooks-101-basics-files-template). Ini tidak ada hubungannya dengan Tomcat, tetapi menyediakan cara sederhana untuk menunjukkan cara menggunakannya`notifies`. Untuk contoh cara menggunakan templat untuk membuat file konfigurasi Tomcat, lihat[Resep Pengaturan](create-custom-setup.md).

**Untuk mengatur buku masak**

1. Tambahkan `templates` subdirektori ke `tomcat` dan `default` subdirektori ke. `templates`

1. Salin `example_data.json.erb` template dari `createfile` buku masak ke `templates/default` direktori.

1. Tambahkan `attributes` subdirektori ke`tomcat`.

1. Salin file `default.rb` atribut dari `createfile` buku masak ke `attributes` direktori.

Resep berikut digunakan `notifies` untuk memulai kembali layanan Tomcat.

```
execute "install_updates" do
  command "apt-get update"
end

package "tomcat7" do
    action :install
end

include_recipe 'tomcat::service'

service 'tomcat' do
  action :enable
end

directory "/srv/www/shared" do
  mode 0755
  owner 'root'
  group 'root'
  recursive true
  action :create
end

template "/srv/www/shared/example_data.json" do
  source "example_data.json.erb"
  mode 0644
  variables(
    :a_boolean_var => true,
    :a_string_var => "some string"
  )
  only_if {node['createfile']['install_file']}
  notifies :restart, resources(:service => 'tomcat')
end
```

Contoh menggabungkan resep dari [Membuat File dari Template](cookbooks-101-basics-files.md#cookbooks-101-basics-files-template) ke dalam resep dari bagian sebelumnya, dengan dua perubahan signifikan:
+ `service`Sumber daya masih ada, tetapi sekarang melayani tujuan yang agak berbeda.

  `:enable`Tindakan ini memungkinkan layanan Tomcat saat boot.
+ Sumber daya template sekarang termasuk`notifies`, yang memulai ulang layanan Tomcat jika `example_data.json` telah berubah.

  Ini memastikan bahwa layanan dimulai ketika Tomcat pertama kali diinstal dan dimulai ulang setelah setiap perubahan konfigurasi.

**Untuk menjalankan resep**

1. Jalankan `kitchen destroy` untuk memulai dengan instance bersih.

1. Ganti kode `default.rb` dengan contoh sebelumnya.

1. Jalankan`kitchen converge`, lalu masuk ke instance dan verifikasi bahwa layanan sedang berjalan.

**catatan**  
Jika Anda ingin memulai ulang layanan tetapi resepnya tidak menyertakan sumber daya seperti `template` yang mendukung`notifies`, Anda dapat menggunakan `execute` sumber daya tiruan. Sebagai contoh  

```
execute 'trigger tomcat service restart' do
  command 'bin/true'
  notifies :restart, resources(:service => 'tomcat')
end
```
`execute`Sumber daya harus memiliki `command` atribut, bahkan jika Anda menggunakan sumber daya hanya sebagai cara untuk menjalankannya`notifies`. Contoh ini mengatasi persyaratan itu dengan menjalankan`/bin/true`, yang merupakan perintah shell yang hanya mengembalikan kode sukses.