

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

# Mengembangkan modul EC2Rescue untuk instans Amazon EC2 Linux
<a name="ec2rl_moduledev"></a>

Modul ditulis dalam YAML, yaitu standar serialisasi data. File YAML pada sebuah modul terdiri atas satu dokumen yang mewakili modul dan atributnya.

## Menambahkan atribut modul
<a name="ec2rl-adding-modules"></a>

Tabel berikut menjelaskan atribut modul yang tersedia.


| Atribut | Deskripsi | 
| --- | --- | 
| nama | Nama modul. Nama harus berisi 18 karakter atau kurang. | 
| version | Nomor versi modul. | 
| title | Judul singkat dan deskriptif untuk modul. Panjang judul harus berisi 50 karakter atau kurang. | 
| helptext |  Deskripsi modul yang lebih panjang. Setiap baris harus berisi 75 karakter atau kurang. Jika modul menggunakan argumen, yang bersifat wajib atau opsional, sertakan argumen tersebut dalam nilai teks bantuan. Misalnya: <pre>helptext: !!str |<br />  Collect output from ps for system analysis<br />  Consumes --times= for number of times to repeat<br />  Consumes --period= for time period between repetition</pre> | 
| placement | Tahap ketika modul harus dijalankan. Nilai yang didukung: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| language | Bahasa yang digunakan untuk menuliskan kode modul. Nilai yang didukung: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Kode Python harus kompatibel dengan Python 2.7.9\$1 maupun Python 3.2\$1.   | 
| remediation |  Menunjukkan apakah modul mendukung remediasi. Nilai yang didukung adalah `True` atau `False`. Secara default, modul menjadi `False` jika hal ini tidak ada, sehingga membuatnya menjadi atribut opsional untuk modul yang tidak mendukung remediasi.  | 
| content | Keseluruhan kode skrip. | 
| constraint | Nama objek yang berisi nilai kendala. | 
| domain | Penjelasan tentang cara modul dikelompokkan atau diklasifikasikan. Rangkaian modul yang disertakan menggunakan domain berikut:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| class | Penjelasan tentang tipe tugas yang dilakukan oleh modul. Rangkaian modul yang disertakan menggunakan domain berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | Daftar distribusi Linux yang didukung oleh modul ini. Rangkaian modul yang disertakan menggunakan distribusi berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| diperlukan | Argumen wajib yang digunakan oleh modul dari opsi CLI. | 
| optional | Argumen opsional yang dapat digunakan oleh modul. | 
| software | Perangkat lunak yang dapat dieksekusi yang digunakan di dalam modul. Atribut ini ditujukan untuk menentukan perangkat lunak yang tidak terinstal secara default. Logika EC2 Rescue for Linux memastikan bahwa program-program ini hadir dan dapat dieksekusi sebelum menjalankan modul. | 
| package | Paket perangkat lunak sumber untuk file yang dapat dieksekusi. Atribut ini ditujukan untuk memberikan detail tambahan pada paket dengan perangkat lunak, termasuk URL untuk mengunduh atau mendapatkan informasi lebih lanjut. | 
| sudo | Mengindikasikan apakah akses root diperlukan untuk menjalankan modul.  Anda tidak perlu menerapkan pengecekan sudo dalam skrip modul. Jika nilainya benar, maka logika EC2 Rescue for Linux hanya menjalankan modul ketika pengguna yang mengeksekusi memiliki akses root. | 
| perfimpact | Mengindikasikan apakah modul dapat menimbulkan dampak performa yang signifikan terhadap lingkungan tempat modul dijalankan. Jika nilainya benar dan argumen `--perfimpact=true` tidak ada, modul akan dilewati. | 
| parallelexclusive | Menentukan program yang membutuhkan eksklusivitas bersama. Misalnya, semua modul yang menentukan proses "bpf" dijalankan secara bersambung. | 

## Menambahkan variabel lingkungan
<a name="ec2rl_adding_envvars"></a>

Tabel berikut menjelaskan variabel lingkungan yang tersedia.


| Variabel Lingkungan | Deskripsi | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | Path ke ec2rl.py. Path ini dapat digunakan untuk menemukan direktori lib dan menggunakan modul Python yang bervendor. | 
|  `EC2RL_WORKDIR`  |  Direktori tmp utama untuk alat diagnostik. Nilai default: `/var/tmp/ec2rl`. | 
|  `EC2RL_RUNDIR`  |  Direktori tempat semua output disimpan. Nilai default: `/var/tmp/ec2rl/<date&timestamp>`.  | 
|  `EC2RL_GATHEREDDIR`  |  Direktori root untuk menempatkan data modul yang dikumpulkan. Nilai default:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`.  | 
|  `EC2RL_NET_DRIVER`  |  Driver yang digunakan untuk antarmuka jaringan non-virtual pertama yang diurutkan menurut abjad pada instans. Contoh: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  Benar jika EC2 Rescue untuk Linux berjalan sebagai root; jika tidak, false.  | 
|  `EC2RL_VIRT_TYPE`  |  Tipe virtualisasi seperti yang disediakan oleh metadata instans. Contoh: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  Daftar antarmuka yang disebutkan pada sistem. Nilai tersebut adalah string yang berisi nama, seperti `eth0`, `eth1`, dan lain-lain. Ini dibuat melalui `functions.bash` dan hanya tersedia untuk modul yang bersumber darinya.  | 

## Menggunakan sintaks YAML
<a name="ec2rl_yamlsyntax"></a>

Hal-hal berikut ini harus diperhatikan saat menyusun file YAML modul Anda:
+ Tiga tanda hubung (`---`) menunjukkan awal yang jelas dari suatu dokumen.
+ Tanda `!ec2rlcore.module.Module` memberi tahu pengurai YAML konstruktor mana yang akan dipanggil saat membuat objek dari aliran data. Anda dapat menemukan konstruktor di dalam file `module.py`.
+ Tanda `!!str` memberi tahu pengurai YAML untuk tidak mencoba menentukan tipe data, dan sebagai gantinya menginterpretasikan konten sebagai literal string.
+ Simbol garis lurus (`|`) memberi tahu pengurai YAML bahwa nilainya adalah skalar gaya literal. Dalam hal ini, pengurai menyertakan semua spasi. Ini penting untuk modul karena indentasi dan karakter baris baru disimpan.
+ Indentasi standar YAML adalah dua spasi, yang dapat dilihat pada contoh berikut. Pastikan Anda mempertahankan indentasi standar (misalnya, empat spasi untuk Python) untuk skrip Anda dan kemudian menunjukkan seluruh konten dua spasi di dalam file modul.

## Contoh modul
<a name="ec2rl_example"></a>

Contoh satu (`mod.d/ps.yaml`):

```
--- !ec2rlcore.module.Module
# Module document. Translates directly into an almost-complete Module object
name: !!str ps
path: !!str
version: !!str 1.0
title: !!str Collect output from ps for system analysis
helptext: !!str |
  Collect output from ps for system analysis
  Requires --times= for number of times to repeat
  Requires --period= for time period between repetition
placement: !!str run
package: 
  - !!str
language: !!str bash
content: !!str |
  #!/bin/bash
  error_trap()
  {
      printf "%0.s=" {1..80}
      echo -e "\nERROR:	"$BASH_COMMAND" exited with an error on line ${BASH_LINENO[0]}"
      exit 0
  }
  trap error_trap ERR

  # read-in shared function
  source functions.bash
  echo "I will collect ps output from this $EC2RL_DISTRO box for $times times every $period seconds."
  for i in $(seq 1 $times); do
      ps auxww
      sleep $period
  done
constraint:
  requires_ec2: !!str False
  domain: !!str performance
  class: !!str collect
  distro: !!str alami ubuntu rhel suse
  required: !!str period times
  optional: !!str
  software: !!str
  sudo: !!str False
  perfimpact: !!str False
  parallelexclusive: !!str
```