EC2Rescue 모듈 개발 - Amazon Elastic Compute Cloud

EC2Rescue 모듈 개발

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

모듈 속성 추가

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

속성

Description

이름

모듈의 이름입니다. 이름 길이는 18자보다 작거나 같아야 합니다.

version

모듈의 버전 번호입니다.

title

모듈에 대해 간단하게 설명하는 제목입니다. 이 값의 길이는 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

배치

모듈을 실행해야 하는 단계입니다. 지원되는 값:

  • prediagnostic

  • run

  • postdiagnostic

language

모듈 코드가 작성된 언어입니다. 지원되는 값:

  • bash

  • python

참고

Python 코드는 Python 2.7.9+ 및 Python 3.2+와 모두 호환되어야 합니다.

remediation

모듈에서 문제 해결을 지원하는지 여부를 나타냅니다. 지원되는 값은 True 또는 False입니다.

없는 경우에는 모듈의 기본값은 False이며, 문제 해결을 지원하지 않는 모듈에 대해 선택 가능한 속성이 됩니다.

content

전체 스크립트 코드입니다.

constraint

제약 값을 포함하는 객체의 이름입니다.

도메인

모듈을 그룹화하거나 분류하는 방법에 대한 서술자입니다. 포함된 모듈의 집합은 다음 도메인을 사용합니다.

  • 애플리케이션입니다

  • net

  • os

  • performance

class

모듈이 수행하는 작업 유형에 대한 서술자입니다. 포함된 모듈의 집합은 다음 클래스를 사용합니다.

  • 수집(프로그램에서 출력 수집)

  • 진단(일련의 기준에 따른 통과/실패)

  • 모음(파일 복사 및 특정 파일에 기록)

distro

이 모듈이 지원하는 Linux 배포판의 목록입니다. 포함된 모듈의 집합은 다음 배포판을 사용합니다.

  • alami(Amazon Linux)

  • rhel

  • ubuntu

  • suse

필수

CLI 옵션에서 모듈이 사용하는 필수 인수입니다.

선택 사항

모듈이 사용할 수 있는 선택적 인수입니다.

software

모듈에서 사용되는 소프트웨어 실행 파일입니다. 이 속성은 기본적으로 설치되지 않은 소프트웨어를 지정하기 위한 용도입니다. Linux용 EC2Rescue 로직은 모듈을 실행하기 전에 이러한 프로그램의 존재 여부와 실행 가능 여부를 확인합니다.

package

실행 파일을 위한 소스 소프트웨어 패키지입니다. 이 속성은 추가 정보를 가져오거나 다운로드하기 위한 URL을 비롯하여 소프트웨어가 포함된 패키지에 대해 확장된 세부 정보를 제공하기 위한 용도입니다.

sudo

모듈을 실행하는 데 루트 액세스가 필요한지 여부를 나타냅니다.

모듈 스크립트에서 sudo 확인을 구현할 필요가 없습니다. 이 값이 true이면 Linux용 EC2Rescue 로직은 실행 사용자에게 루트 액세스가 있는 경우에만 모듈을 실행합니다.

perfimpact

모듈이 실행되는 환경에 중요한 성능 영향을 줄 수 있는지 여부를 나타냅니다. 이 값이 true이고 --perfimpact=true 인수가 없으면 모듈을 건너뜁니다.

parallelexclusive

상호 배타성이 필요한 프로그램을 지정합니다. 예를 들어, "bpf"를 지정하는 모든 모듈은 직렬 방식으로 실행됩니다.

환경 변수 추가

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

환경 변수 Description

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

인스턴스에서 알파벳 순서 중 첫 번째 비 가상 네트워크 인터페이스에 사용하는 드라이버입니다.

예시:

  • xen_netfront

  • ixgbevf

  • ena

EC2RL_SUDO

Linux용 EC2Rescue가 루트로 실행되면 true이고, 그렇지 않으면 false입니다.

EC2RL_VIRT_TYPE

인스턴스 메타데이터에 의해 제공된 가상화 유형입니다.

예시:

  • default-hvm

  • default-paravirtual

EC2RL_INTERFACES

시스템에서 인터페이스의 열거 목록입니다. 이 값은 eth0, eth1 등 이름을 포함하는 문자열입니다. 이 환경 변수는 functions.bash를 통해 생성되며 해당 변수를 제공한 모듈에 대해서만 사용할 수 있습니다.

YAML 구문 사용

모듈 YAML 파일을 생성할 때 다음 사항을 고려해야 합니다.

  • 삼중 하이픈(---)은 문서의 명시적 시작을 나타냅니다.

  • !ec2rlcore.module.Module 태그는 데이터 스트림에서 객체를 생성할 때 호출할 생성자를 YAML 구문 분석기에 알려줍니다. module.py 파일 내부에서 생성자를 찾을 수 있습니다.

  • !!str 태그는 데이터 유형을 확인하지 않고 대신 콘텐츠를 문자열 리터럴로 해석하도록 YAML 구문 분석기에 지시합니다.

  • 파이프 문자(|)는 값이 리터럴 방식의 스칼라임을 YAML 구문 분석기에 알려줍니다. 이 경우 구문 분석기에는 모든 공백이 포함됩니다. 이는 들여쓰기 및 줄 바꿈 문자가 유지되므로 모듈에 중요합니다.

  • YAML 표준 들여쓰기는 공백 2개이며, 다음 예에서 확인할 수 있습니다. 스크립트에 대해 표준 들여쓰기(Python의 경우 공백 4개)를 유지한 다음, 모듈 파일 내에서 전체 콘텐츠를 공백 2개로 들여쓰기해야 합니다.

예제 모듈

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