Amazon EC2 Linux インスタンス用の EC2Rescue モジュールを開発する
モジュールは、データシリアル化スタンダードである YAML デ書き込まれます。モジュールの YAML ファイルは、モジュールとその属性を示す単一のドキュメントで構成されます。
モジュール属性の追加
次の表には、利用できるモジュールの属性が一覧表示されます。
属性 |
説明 |
---|---|
name |
モジュールの名前。この名前は、長さが 18 文字以下である必要があります。 |
version |
モジュールのバージョン番号。 |
タイトル |
モジュールの短い説明タイトルです。この値は、長さが 50 文字以下である必要があります。 |
helptext |
モジュールの拡張された説明。各列は、長さが 75 文字以下である必要があります。必須あるいはオプションでモジュールが引数を消費する場合、helptext 値にこの引数を含めます。 次に例を示します。
|
placement |
モジュールが実行されるべきステージ。サポートされる値。
|
language |
モジュールコードが書き込まれている言語。サポートされる値。
注記Python コードは、Python 2.7.9+ および Python 3.2+ の両方と互換性がある必要があります。 |
修復 |
モジュールが修復をサポートするかどうかを示します。サポートされている値は この値がない場合、モジュールのデフォルトは |
コンテンツ |
全スクリプトコード。 |
制約 |
制約値を含むオブジェクトの名前。 |
ドメイン |
モジュールがどのようにグループ化または分類されているかの説明。含まれているモジュール一連は次のドメインを使用します。
|
class |
モジュールによって実行されるタスクの種類の説明。含まれているモジュール一連は次のクラスを使用します。
|
distro |
このモジュールがサポートする Linux ディストリビューションの一覧。含まれているモジュール一連は次のディストリビューションを使用します。
|
必須 |
CLI オプションからモジュールが消費する必要な引数。 |
optional |
モジュールが使用できるオプションの引数。 |
ソフトウェア |
モジュールで使用される実行可能なソフトウェア。この属性は、デフォルトでインストールされないソフトウェアの特定を行います。Linux 用 EC2Rescue ロジックは、モジュールを実行する前に、このプログラムが存在し、実行可能であることを確認します。 |
package |
実行ファイル用のソースソフトウェアパッケージ。この属性は、ソフトウェアのパッケージにダウンロード用 URL やそのほかの詳細などの詳しい情報を提供するためのものです。 |
sudo |
ルートアクセスがモジュールの実行に必要であるかどうかを示します。 モジュールスクリプトで sudo チェックを行う必要はありません。値が true になると、Linux 用 EC2Rescue ロジックは実行しているユーザーがルートアクセスを所持している場合にのみモジュールを実行します。 |
perfimpact |
モジュールが実行している環境に重要な影響を及ぼす可能性があるかどうかを示します。値が true であり、 |
parallelexclusive |
相互占有を必要とするプログラムを特定します。たとえば、「bpf」を指定するすべてのモジュールはシリアル方法で実行します。 |
環境変数の追加
次の表には、利用できるモジュールの属性が一覧表示されます。
環境変数 | 説明 |
---|---|
|
ec2rl.py へのパス。このパスを使用すると、lib ディレクトリを見つけて、ベンダーの Python モジュールを使用できます。 |
|
診断ツールの主要な tmp ディレクトリ。 デフォルト値: |
|
すべての出力が保存されているディレクトリ。 デフォルト値: |
|
収集されたモジュールデータを配置するルートディレクトリ。 デフォルト値: |
|
初めて使用されるドライバーが、インスタンスの非仮想ネットワークインターフェースでアルファベット順に順序付けされます。 例:
|
|
Linux 用 EC2Rescue がルートとして実行されている場合には true、そうでない場合には false。 |
|
インスタンスメタデータから提供される仮想化タイプ。 例:
|
|
システム上のインターフェースの列挙一覧。この値は、 |
YAML 構文の使用
モジュール YAML ファイルを構築する際、以下に注意してください。
-
3 つのハイフン (
---
) は、ドキュメントの明示的な開始を示します。 -
!ec2rlcore.module.Module
タグは、データストリームからオブジェクトを作成する際にどのコンストラクタを呼び出すかを YAML パーサーに伝えます。module.py
ファイル内コンストラクタを検索できます。 -
!!str
タグは、データの種類を決定する試行を行なわず、代わりにコンテンツを文字列リテラルとして解釈するように YAML パーサーに伝えます。 -
パイプ文字 (
|
) は、値がリテラル形式のスカラーであることを YAML パーサーに伝えます。この場合、パーサーにはすべての空白が含まれます。インデントと改行文字が保持されるため、これはモジュールにとって重要です。 -
YAML スタンダードインデントは 2 つのスペースとなり、次の例で示されます。スクリプトでスタンダードインデント (たとえば、Python では 4 つの空白) を維持して、モジュールファイル内で全コンテンツを 2 つのスペースでインデントすることを確認します。
モジュールの例
例 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