

# Amazon EC2 Linux 인스턴스용 EC2Rescue 모듈 개발
<a name="ec2rl_moduledev"></a>

모듈은 데이터 직렬화 표준인 YAML로 작성됩니다. 모듈의 YAML 파일은 모듈과 모듈의 속성을 나타내는 단일 문서로 구성됩니다.

## 모듈 속성 추가
<a name="ec2rl-adding-modules"></a>

다음 표에는 사용 가능한 모듈 속성이 나열되어 있습니다.


| 속성 | 설명 | 
| --- | --- | 
| 이름 | 모듈의 이름입니다. 이름 길이는 18자보다 작거나 같아야 합니다. | 
| 버전 | 모듈의 버전 번호입니다. | 
| 제목 | 모듈에 대해 간단하게 설명하는 제목입니다. 이 값의 길이는 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> | 
| 배치 | 모듈을 실행해야 하는 단계입니다. 지원되는 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| language | 모듈 코드가 작성된 언어입니다. 지원되는 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Python 코드는 Python 2.7.9\$1 및 Python 3.2\$1와 모두 호환되어야 합니다.   | 
| remediation |  모듈에서 문제 해결을 지원하는지 여부를 나타냅니다. 지원되는 값은 `True` 또는 `False`입니다. 없는 경우에는 모듈의 기본값은 `False`이며, 문제 해결을 지원하지 않는 모듈에 대해 선택 가능한 속성이 됩니다.  | 
| 콘텐츠 | 전체 스크립트 코드입니다. | 
| constraint | 제약 값을 포함하는 객체의 이름입니다. | 
| 도메인 | 모듈을 그룹화하거나 분류하는 방법에 대한 서술자입니다. 포함된 모듈의 집합은 다음 도메인을 사용합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| class | 모듈이 수행하는 작업 유형에 대한 서술자입니다. 포함된 모듈의 집합은 다음 클래스를 사용합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | 이 모듈이 지원하는 Linux 배포판의 목록입니다. 포함된 모듈의 집합은 다음 배포판을 사용합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| 필수 | CLI 옵션에서 모듈이 사용하는 필수 인수입니다. | 
| 선택 사항 | 모듈이 사용할 수 있는 선택적 인수입니다. | 
| software | 모듈에서 사용되는 소프트웨어 실행 파일입니다. 이 속성은 기본적으로 설치되지 않은 소프트웨어를 지정하기 위한 용도입니다. Linux용 EC2Rescue 로직은 모듈을 실행하기 전에 이러한 프로그램의 존재 여부와 실행 가능 여부를 확인합니다. | 
| 패키지 | 실행 파일을 위한 소스 소프트웨어 패키지입니다. 이 속성은 추가 정보를 가져오거나 다운로드하기 위한 URL을 비롯하여 소프트웨어가 포함된 패키지에 대해 확장된 세부 정보를 제공하기 위한 용도입니다. | 
| sudo | 모듈을 실행하는 데 루트 액세스가 필요한지 여부를 나타냅니다. 모듈 스크립트에서 sudo 확인을 구현할 필요가 없습니다. 이 값이 true이면 Linux용 EC2Rescue 로직은 실행 사용자에게 루트 액세스가 있는 경우에만 모듈을 실행합니다. | 
| perfimpact | 모듈이 실행되는 환경에 중요한 성능 영향을 줄 수 있는지 여부를 나타냅니다. 이 값이 true이고 `--perfimpact=true` 인수가 없으면 모듈을 건너뜁니다. | 
| parallelexclusive | 상호 배타성이 필요한 프로그램을 지정합니다. 예를 들어, "bpf"를 지정하는 모든 모듈은 직렬 방식으로 실행됩니다. | 

## 환경 변수 추가
<a name="ec2rl_adding_envvars"></a>

다음 표에는 사용 가능한 환경 변수가 나열되어 있습니다.


| 환경 변수 | 설명 | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | ec2rl.py의 경로입니다. 이 경로는 라이브러리 디렉터리를 찾고, 공급된 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/ko_kr/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/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  시스템에서 인터페이스의 열거 목록입니다. 이 값은 `eth0`, `eth1` 등 이름을 포함하는 문자열입니다. 이 환경 변수는 `functions.bash`를 통해 생성되며 해당 변수를 제공한 모듈에 대해서만 사용할 수 있습니다.  | 

## YAML 구문 사용
<a name="ec2rl_yamlsyntax"></a>

모듈 YAML 파일을 생성할 때 다음 사항을 고려해야 합니다.
+ 삼중 하이픈(`---`)은 문서의 명시적 시작을 나타냅니다.
+ `!ec2rlcore.module.Module` 태그는 데이터 스트림에서 객체를 생성할 때 호출할 생성자를 YAML 구문 분석기에 알려줍니다. `module.py` 파일 내부에서 생성자를 찾을 수 있습니다.
+ `!!str` 태그는 데이터 유형을 확인하지 않고 대신 콘텐츠를 문자열 리터럴로 해석하도록 YAML 구문 분석기에 지시합니다.
+ 파이프 문자(`|`)는 값이 리터럴 방식의 스칼라임을 YAML 구문 분석기에 알려줍니다. 이 경우 구문 분석기에는 모든 공백이 포함됩니다. 이는 들여쓰기 및 줄 바꿈 문자가 유지되므로 모듈에 중요합니다.
+ YAML 표준 들여쓰기는 공백 2개이며, 다음 예에서 확인할 수 있습니다. 스크립트에 대해 표준 들여쓰기(Python의 경우 공백 4개)를 유지한 다음, 모듈 파일 내에서 전체 콘텐츠를 공백 2개로 들여쓰기해야 합니다.

## 예제 모듈
<a name="ec2rl_example"></a>

예제(`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
```