

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

# Contoh 6: Membuat File
<a name="cookbooks-101-basics-files"></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.

Setelah Anda membuat direktori, Anda sering perlu mengisinya dengan file konfigurasi, file data, dan sebagainya. Topik ini menunjukkan dua cara untuk menginstal file pada sebuah instance.

**Topics**
+ [Menginstal File dari Cookbook](#cookbooks-101-basics-files-cookbook_file)
+ [Membuat File dari Template](#cookbooks-101-basics-files-template)

## Menginstal File dari Cookbook
<a name="cookbooks-101-basics-files-cookbook_file"></a>

Cara termudah untuk menginstal file pada instance adalah dengan menggunakan [https://docs.chef.io/chef/resources.html#cookbook-file](https://docs.chef.io/chef/resources.html#cookbook-file)sumber daya, yang menyalin file dari buku masak ke lokasi tertentu pada instance untuk sistem Linux dan Windows. Contoh ini memperluas resep dari [Contoh 3: Membuat Direktori](cookbooks-101-basics-directories.md) untuk menambahkan file data `/srv/www/shared` setelah direktori dibuat. Sebagai referensi, berikut resep aslinya.

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

**Untuk mengatur buku masak**

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

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

   ```
   name "createfile"
   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`createfile`.

File yang akan diinstal berisi data JSON berikut.

```
{
  "my_name" : "myname",
  "your_name" : "yourname",
  "a_number" : 42,
  "a_boolean" : true
}
```

**Untuk mengatur file data**

1. Tambahkan `files` subdirektori ke `createfile` dan `default` subdirektori ke. `files` Setiap file yang Anda instal dengan `cookbook_file` harus dalam subdirektori`files`, seperti `files/default` dalam contoh ini. 
**catatan**  
Jika Anda ingin menentukan file yang berbeda untuk sistem yang berbeda, Anda dapat menempatkan setiap file khusus sistem dalam subfolder yang diberi nama untuk sistem, seperti. `files/ubuntu` `cookbook_file`Sumber daya menyalin file khusus sistem yang sesuai, jika ada, dan sebaliknya menggunakan file tersebut. `default` Untuk informasi selengkapnya, lihat [cookbook\$1file](https://docs.chef.io/chef/resources.html#cookbook-file).

1. Buat file bernama `example_data.json` dengan JSON dari contoh sebelumnya dan tambahkan ke. `files/default`

Resep berikut menyalin `example_data.json` ke lokasi tertentu. 

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

cookbook_file "/srv/www/shared/example_data.json" do
  source "example_data.json"
  mode 0644
  action :create_if_missing
end
```

Setelah sumber daya direktori dibuat`/srv/www/shared`, `cookbook_file` sumber daya menyalin `example_data.json` ke direktori itu dan juga menetapkan pengguna, grup, dan mode file. 

**catatan**  
Sumber `cookbook_file` daya memperkenalkan tindakan baru:`create_if_missing`. Anda juga dapat menggunakan `create` tindakan, tetapi itu menimpa file yang ada. Jika Anda tidak ingin menimpa apa pun, gunakan`create_if_missing`, yang menginstal `example_data.json` hanya jika belum ada.

**Untuk menjalankan resep**

1. Jalankan `kitchen destroy` untuk memulai dengan contoh baru.

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

1. Jalankan`kitchen converge`, lalu masuk ke instance untuk memverifikasi yang `/srv/www/shared` berisi`example_data.json`.

## Membuat File dari Template
<a name="cookbooks-101-basics-files-template"></a>

`cookbook_file`Sumber daya ini berguna untuk beberapa tujuan, tetapi hanya menginstal file apa pun yang Anda miliki di buku masak. [https://docs.chef.io/chef/resources.html#template](https://docs.chef.io/chef/resources.html#template)Sumber daya menyediakan cara yang lebih fleksibel untuk menginstal file pada instance Windows atau Linux dengan membuatnya secara dinamis dari template. Anda kemudian dapat menentukan detail konten file saat runtime dan mengubahnya sesuai kebutuhan. Misalnya, Anda mungkin ingin file konfigurasi memiliki pengaturan tertentu ketika Anda memulai instance dan memodifikasi pengaturan nanti ketika Anda menambahkan lebih banyak instance ke tumpukan.

Contoh ini memodifikasi `createfile` buku masak untuk menggunakan `template` sumber daya untuk menginstal versi yang sedikit dimodifikasi. `example_data.json`

Inilah yang akan terlihat seperti file yang diinstal.

```
{
  "my_name" : "myname",
  "your_name" : "yourname",
  "a_number" : 42,
  "a_boolean" : true,
  "a_string" : "some string",
  "platform" : "ubuntu"
}
```

Sumber daya template biasanya digunakan bersama dengan file atribut, jadi contoh menggunakan satu untuk menentukan nilai-nilai berikut.

```
default['createfile']['my_name'] = 'myname'
default['createfile']['your_name'] = 'yourname'
default['createfile']['install_file'] = true
```

**Untuk mengatur buku masak**

1. Hapus `files` direktori `createfile` buku masak dan isinya.

1. Tambahkan `attributes` subdirektori ke `createfile` dan tambahkan `default.rb` file `attributes` yang berisi definisi atribut sebelumnya.

Template adalah `.erb` file yang pada dasarnya adalah salinan dari file akhir, dengan beberapa konten diwakili oleh placeholder. Saat `template` sumber daya membuat file, ia menyalin konten template ke file yang ditentukan, dan menimpa placeholder dengan nilai yang ditetapkan. Berikut template untuk`example_data.json`.

```
{
  "my_name" : "<%= node['createfile']['my_name'] %>",
  "your_name" : "<%= node['createfile']['your_name'] %>",
  "a_number" : 42,
  "a_boolean" : <%= @a_boolean_var %>,
  "a_string" : "<%= @a_string_var %>",
  "platform" : "<%= node['platform'] %>"
}
```

`<%=...%>`Nilainya adalah placeholder.
+ `<%=node[...]%>`merupakan nilai atribut node.

  Untuk contoh ini, nilai “your\$1name” adalah placeholder yang mewakili salah satu nilai atribut dari file atribut buku masak.
+ `<%=@...%>`mewakili nilai variabel yang didefinisikan dalam sumber daya template, seperti yang dibahas segera.

**Untuk membuat file template**

1. Tambahkan `templates` subdirektori ke `createfile` buku masak dan `default` subdirektori ke. `templates`
**catatan**  
`templates`Direktori bekerja seperti `files` direktori. Anda dapat menempatkan template khusus sistem dalam subdirektori seperti `ubuntu` yang dinamai untuk sistem. `template`Sumber daya menggunakan templat khusus sistem yang sesuai jika ada dan menggunakan templat. `default`

1. Buat file bernama `example_data.json.erb` dan masukkan ke dalam `templates/default` direktori. Nama template bersifat arbitrer, tetapi Anda biasanya membuatnya dengan menambahkan `.erb` ke nama file, termasuk ekstensi apa pun. 

Resep berikut menggunakan sumber `template` daya untuk membuat`/srv/www/shared/example_data.json`. 

```
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']}
end
```

Sumber `template` daya dibuat `example_data.json` dari template dan menginstalnya di`/srv/www/shared`.
+ Nama template,`/srv/www/shared/example_data.json`, menentukan jalur dan nama file yang diinstal.
+ `source`Atribut menentukan template yang digunakan untuk membuat file.
+ `mode`Atribut menentukan mode file yang diinstal.
+ Sumber daya mendefinisikan dua variabel, `a_boolean_var` dan`a_string_var`. 

  Ketika sumber daya dibuat`example_data.json`, ia menimpa placeholder variabel dalam template dengan nilai yang sesuai dari sumber daya. 
+ Atribut `only_if` *guard* mengarahkan sumber daya untuk membuat file hanya jika `['createfile']['install_file']` diatur ke`true`.

**Untuk menjalankan resep**

1. Jalankan `kitchen destroy` untuk memulai dengan contoh baru.

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

1. Jalankan`kitchen converge`, lalu masuk ke instance untuk memverifikasi bahwa file tersebut masuk `/srv/www/shared` dan memiliki konten yang benar.

Setelah selesai, jalankan `kitchen destroy` untuk mematikan instance. Bagian selanjutnya menggunakan buku masak baru.