EC2Rescue モジュールの開発 - Amazon Elastic Compute Cloud

EC2Rescue モジュールの開発

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

モジュール属性の追加

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

属性

説明

name

モジュールの名前。この名前は、長さが 18 文字以下である必要があります。

version

モジュールのバージョン番号。

タイトル

モジュールの短い説明タイトルです。この値は、長さが 50 文字以下である必要があります。

helptext

モジュールの拡張された説明。各列は、長さが 75 文字以下である必要があります。必須あるいはオプションでモジュールが引数を消費する場合、helptext 値にこの引数を含めます。

次に例を示します。

helptext: !!str | Collect output from ps for system analysis Consumes --times= for number of times to repeat Consumes --period= for time period between repetition

placement

モジュールが実行されるべきステージ。サポートされる値。

  • prediagnostic

  • run

  • postdiagnostic

language

モジュールコードが書き込まれている言語。サポートされる値。

  • bash

  • python

注記

Python コードは、Python 2.7.9+ および Python 3.2+ の両方と互換性がある必要があります。

修復

モジュールが修復をサポートするかどうかを示します。サポートされている値は True または False です。

この値がない場合、モジュールのデフォルトは False です。修復をサポートしないそれらのモジュールのオプション属性となります。

コンテンツ

全スクリプトコード。

制約

制約値を含むオブジェクトの名前。

ドメイン

モジュールがどのようにグループ化または分類されているかの説明。含まれているモジュール一連は次のドメインを使用します。

  • 同時接続の

  • net

  • os

  • パフォーマンス

class

モジュールによって実行されるタスクの種類の説明。含まれているモジュール一連は次のクラスを使用します。

  • 回収 (プログラムからの出力を回収します)

  • 診断 (一連の基準の達成/未達成)

  • 収集 (ファイルのコピーと特定のファイルへの書き込み)

distro

このモジュールがサポートする Linux ディストリビューションの一覧。含まれているモジュール一連は次のディストリビューションを使用します。

  • alami (Amazon Linux)

  • rhel

  • Ubuntu

  • suse

必須

CLI オプションからモジュールが消費する必要な引数。

optional

モジュールが使用できるオプションの引数。

ソフトウェア

モジュールで使用される実行可能なソフトウェア。この属性は、デフォルトでインストールされないソフトウェアの特定を行います。Linux 用 EC2Rescue ロジックは、モジュールを実行する前に、このプログラムが存在し、実行可能であることを確認します。

package

実行ファイル用のソースソフトウェアパッケージ。この属性は、ソフトウェアのパッケージにダウンロード用 URL やそのほかの詳細などの詳しい情報を提供するためのものです。

sudo

ルートアクセスがモジュールの実行に必要であるかどうかを示します。

モジュールスクリプトで sudo チェックを行う必要はありません。値が true になると、Linux 用 EC2Rescue ロジックは実行しているユーザーがルートアクセスを所持している場合にのみモジュールを実行します。

perfimpact

モジュールが実行している環境に重要な影響を及ぼす可能性があるかどうかを示します。値が true であり、--perfimpact=true 引数が存在しない場合、モジュールはスキップされます。

parallelexclusive

相互占有を必要とするプログラムを特定します。たとえば、「bpf」を指定するすべてのモジュールはシリアル方法で実行します。

環境変数の追加

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

環境変数 説明

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

初めて使用されるドライバーが、インスタンスの非仮想ネットワークインターフェースでアルファベット順に順序付けされます。

例:

  • xen_netfront

  • ixgbevf

  • ena

EC2RL_SUDO

Linux 用 EC2Rescue がルートとして実行されている場合には true、そうでない場合には false。

EC2RL_VIRT_TYPE

インスタンスメタデータから提供される仮想化タイプ。

例:

  • default-hvm

  • default-paravirtual

EC2RL_INTERFACES

システム上のインターフェースの列挙一覧。この値は、eth0eth1 などの名前が含まれる文字列です。これは functions.bash を介して生成され、これをソースとするモジュールのみで利用できます。

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