

# Amazon EC2 Linux インスタンス用の EC2Rescue モジュールを開発する
<a name="ec2rl_moduledev"></a>

モジュールは、データシリアル化スタンダードである YAML デ書き込まれます。モジュールの YAML ファイルは、モジュールとその属性を示す単一のドキュメントで構成されます。

## モジュール属性の追加
<a name="ec2rl-adding-modules"></a>

次の表には、利用できるモジュールの属性が一覧表示されます。


| 属性 | 説明 | 
| --- | --- | 
| name | モジュールの名前。この名前は、長さが 18 文字以下である必要があります。 | 
| version | モジュールのバージョン番号。 | 
| タイトル | モジュールの短い説明タイトルです。この値は、長さが 50 文字以下である必要があります。 | 
| helptext |  モジュールの拡張された説明。各列は、長さが 75 文字以下である必要があります。必須あるいはオプションでモジュールが引数を消費する場合、helptext 値にこの引数を含めます。 次に例を示します。 <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 | モジュールが実行されるべきステージ。サポートされる値。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| language | モジュールコードが書き込まれている言語。サポートされる値。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Python コードは、Python 2.7.9\$1 および Python 3.2\$1 の両方と互換性がある必要があります。   | 
| 修復 |  モジュールが修復をサポートするかどうかを示します。サポートされている値は `True` または `False` です。 この値がない場合、モジュールのデフォルトは `False` です。修復をサポートしないそれらのモジュールのオプション属性となります。  | 
| コンテンツ | 全スクリプトコード。 | 
| 制約 | 制約値を含むオブジェクトの名前。 | 
| ドメイン | モジュールがどのようにグループ化または分類されているかの説明。含まれているモジュール一連は次のドメインを使用します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| class | モジュールによって実行されるタスクの種類の説明。含まれているモジュール一連は次のクラスを使用します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | このモジュールがサポートする Linux ディストリビューションの一覧。含まれているモジュール一連は次のディストリビューションを使用します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| 必須 | CLI オプションからモジュールが消費する必要な引数。 | 
| optional | モジュールが使用できるオプションの引数。 | 
| ソフトウェア | モジュールで使用される実行可能なソフトウェア。この属性は、デフォルトでインストールされないソフトウェアの特定を行います。Linux 用 EC2Rescue ロジックは、モジュールを実行する前に、このプログラムが存在し、実行可能であることを確認します。 | 
| package | 実行ファイル用のソースソフトウェアパッケージ。この属性は、ソフトウェアのパッケージにダウンロード用 URL やそのほかの詳細などの詳しい情報を提供するためのものです。 | 
| sudo | ルートアクセスがモジュールの実行に必要であるかどうかを示します。 モジュールスクリプトで sudo チェックを行う必要はありません。値が true になると、Linux 用 EC2Rescue ロジックは実行しているユーザーがルートアクセスを所持している場合にのみモジュールを実行します。 | 
| perfimpact | モジュールが実行している環境に重要な影響を及ぼす可能性があるかどうかを示します。値が true であり、`--perfimpact=true` 引数が存在しない場合、モジュールはスキップされます。 | 
| parallelexclusive | 相互占有を必要とするプログラムを特定します。例えば、「bpf」を指定するすべてのモジュールはシリアル方法で実行します。 | 

## 環境変数の追加
<a name="ec2rl_adding_envvars"></a>

次の表には、利用できるモジュールの属性が一覧表示されます。


| 環境変数 | 説明 | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | ec2rl.py へのパス。このパスを使用すると、lib ディレクトリを見つけて、ベンダーの Python モジュールを使用できます。 | 
|  `EC2RL_WORKDIR`  |  診断ツールの主要な tmp ディレクトリ。 デフォルト値: `/var/tmp/ec2rl`。 | 
|  `EC2RL_RUNDIR`  |  すべての出力が保存されているディレクトリ。 デフォルト値: `/var/tmp/ec2rl/<date&timestamp>`。  | 
|  `EC2RL_GATHEREDDIR`  |  収集されたモジュールデータを配置するルートディレクトリ。 デフォルト値:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`。  | 
|  `EC2RL_NET_DRIVER`  |  初めて使用されるドライバーが、インスタンスの非仮想ネットワークインターフェースでアルファベット順に順序付けされます。 例: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  Linux 用 EC2Rescue がルートとして実行されている場合には true、そうでない場合には false。  | 
|  `EC2RL_VIRT_TYPE`  |  インスタンスメタデータから提供される仮想化タイプ。 例: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  システム上のインターフェースの列挙一覧。この値は、`eth0` や `eth1` などの名前が含まれる文字列です。これは `functions.bash` を介して生成され、これをソースとするモジュールのみで利用できます。  | 

## YAML 構文の使用
<a name="ec2rl_yamlsyntax"></a>

モジュール YAML ファイルを構築する際、以下に注意してください。
+ 3 つのハイフン (`---`) は、ドキュメントの明示的な開始を示します。
+ `!ec2rlcore.module.Module` タグは、データストリームからオブジェクトを作成する際にどのコンストラクタを呼び出すかを YAML パーサーに伝えます。`module.py` ファイル内コンストラクタを検索できます。
+ `!!str` タグは、データの種類を決定する試行を行なわず、代わりにコンテンツを文字列リテラルとして解釈するように YAML パーサーに伝えます。
+ パイプ文字 (`|`) は、値がリテラル形式のスカラーであることを YAML パーサーに伝えます。この場合、パーサーにはすべての空白が含まれます。インデントと改行文字が保持されるため、これはモジュールにとって重要です。
+ YAML スタンダードインデントは 2 つのスペースとなり、次の例で示されます。スクリプトでスタンダードインデント (例えば、Python では 4 つの空白) を維持して、モジュールファイル内で全コンテンツを 2 つのスペースでインデントすることを確認します。

## モジュールの例
<a name="ec2rl_example"></a>

例 1 (`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
```