cfn-hup - AWS CloudFormation

cfn-hup

설명

cfn-hup 헬퍼는 리소스 메타데이터의 변경 사항을 감지하고 변경 사항이 감지되면 사용자 지정 작업을 실행하는 데몬입니다. 따라서 UpdateStack API 작업을 통해 실행 중인 Amazon EC2 인스턴스에 대한 구성 업데이트를 수행할 수 있습니다.

명령문

cfn-hup --config|-c config.dir \ --no-daemon \ --verbose|-v

옵션

명칭 설명 필수

--config|-c config.dir

cfn-hup 스크립트가 cfn-hup.confhooks.d 디렉터리를 찾는 경로를 지정합니다. Windows에서 기본 경로는 system_drive\cfn입니다. Linux에서 기본 경로는 /etc/cfn입니다.

아니요

--no-daemon

이 옵션을 지정하면 cfn-hup 스크립트를 한 번 실행한 다음 종료합니다.

아니요

-v, --verbose

이 옵션을 지정하면 상세 정보 표시 모드를 사용합니다.

아니요

cfn-hup.conf 구성 파일

cfn-hup.conf 파일은 cfn-hup 데몬이 대상으로 지정한 스택의 이름과 AWS 자격 증명을 저장합니다.

cfn-hup.conf 파일은 다음 형식을 사용합니다.

[main] stack=<stack-name-or-id>
명칭 설명 필수

stack

스택 이름 또는 ID입니다.

유형: 문자열

credential-file

명령줄 도구에서 사용하는 것과 동일한 형식의 소유자 전용 자격 증명 파일입니다.

유형: 문자열

조건: role 파라미터가 이 파라미터를 대신합니다.

아니요

role

인스턴스와 연결되는 IAM 역할의 이름입니다.

유형: 문자열

아니요

region

스택이 포함된 AWS 리전의 이름입니다.

: us-east-2

아니요

umask

cfn-hup 데몬에 사용되는 umask입니다.

앞에 0을 사용하거나 사용하지 않고 이 값을 지정할 수 있습니다. 두 경우 모두 Linux umask 명령과 유사하게 8진수로 해석됩니다. 이 파라미터는 Windows에 영향을 미치지 않습니다.

유형: 0~0777 사이의 8진수

기본값: 022, 버전 1.4–22 이상 022의 기본값은 그룹 및 세계 쓰기 권한을 마스킹하므로 cfn-hup 대몬(daemon)으로 생성한 파일은 기본적으로 그룹 또는 세계 쓰기가 가능하지 않습니다. 버전 1.4 –21 이전의 기본값은 아무것도 마스킹하지 않는 0입니다.

아니요

interval

리소스 메타데이터에 대한 변경 사항이 있는지 확인하는 데 사용되는 간격(분)입니다.

유형: 정수

기본값: 15

아니요

verbose

상세 정보 로깅을 사용할지 여부를 지정합니다.

유형: 부울

기본값: false

아니요

hooks.conf 구성 파일

cfn-hup 데몬이 정기적으로 호출하는 사용자 작업은 hooks.conf 구성 파일에서 정의됩니다. hooks.conf 파일은 다음 형식을 사용합니다.

[hookname] triggers=post.add or post.update or post.remove path=Resources.<logicalResourceId> (.Metadata or .PhysicalResourceId)(.<optionalMetadatapath>) action=<arbitrary shell command> runas=<runas user>

이 작업이 실행될 때는 현재 환경(cfn-hup가 있는)의 사본에서 실행되며 CFN_OLD_METADATA는 path로 지정된 이전 메타데이터 값으로, CFN_NEW_METADATA는 현재 메타데이터 값으로 설정됩니다.

후크 구성 파일은 cfn-hup 대몬(daemon)이 시작될 때만 로드되므로 새 후크를 사용하려면 대몬(daemon)을 다시 시작해야 합니다. 이전 메타데이터 값의 캐시는 /var/lib/cfn-hup/data/metadata_db에 저장됩니다. 이 캐시를 삭제하여 cfn-hup가 모든 post.add 작업을 다시 강제로 실행하도록 할 수 있습니다.

명칭 설명 필수

hookname

이 후크의 고유 이름입니다.

유형: 문자열

triggers

감지할 조건의 쉼표로 구분된 목록입니다.

유효한 값: post.add, post.update 또는 post.remove

: post.add, post.update

path

메타데이터 객체의 경로입니다. 메타데이터 블록 내에서 임의 깊이의 경로를 지원합니다.

경로 형식 옵션
  • Resources.<LogicalResourceId> — 리소스가 마지막으로 업데이트된 시간을 모니터링하고, 리소스가 변경되면 트리거됩니다.

  • Resources.<LogicalResourceId>PhysicalResourceId — 리소스의 물리적 ID를 모니터링하고 연결된 리소스 자격 증명이 변경되는 경우에만(예: 새 EC2 인스턴스) 트리거됩니다.

  • Resources.<LogicalResourceId>Metadata(.optional path) — 리소스의 메타데이터에 변경 사항이 있는지 모니터링합니다(특정 값을 모니터링하기 위해 메타데이터 하위 경로를 임의 깊이 수준으로 지정할 수 있음).

action

그대로 실행되는 임의 셸 명령입니다.

runas

명령을 실행하는 사용자입니다. Cfn-hup에서는 su 명령을 사용하여 이 사용자로 전환합니다.

hooks.d 디렉터리

변경 알림 후크를 배포하는 여러 애플리케이션의 구성을 지원하기 위해 cfn-hup에서는 후크 구성 디렉터리에 있는 hooks.d 디렉터리를 지원합니다. hooks.d 디렉터리에는 후크 구성 파일을 하나 이상 추가로 저장할 수 있습니다. 추가 후크 파일은 hooks.conf 파일과 동일한 레이아웃을 사용해야 합니다.

cfn-hup 데몬은 이 디렉터리의 각 파일을 구문 분석하고 로드합니다. hooks.d 디렉터리에 있는 임의 후크가 hooks.conf의 후크와 이름이 같으면 후크가 병합됩니다(즉, hooks.d와 hooks.conf 파일 둘 다에서 지정하는 모든 값에 대해 hooks.d가 hooks.conf를 덮어 씀).

LaunchConfig 리소스와 연결된 AWS::CloudFormation::Init 리소스를 변경하면 다음 템플릿 조각에서 CloudFormation이 cfn-auto-reloader.conf 후크 파일을 트리거합니다.

JSON

... "LaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "QBVersion": {"Ref": "paramQBVersion"}, "AWS::CloudFormation::Init" : { ... "/etc/cfn/hooks.d/cfn-auto-reloader.conf": { "content": { "Fn::Join": [ "", [ "[cfn-auto-reloader-hook]\n", "triggers=post.update\n", "path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init\n", "action=/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource LaunchConfig ", " --configsets wordpress_install ", " --region ", { "Ref" : "AWS::Region" }, "\n", "runas=root\n" ]]}, "mode" : "000400", "owner" : "root", "group" : "root" } ...

YAML

... LaunchConfig: Type: "AWS::AutoScaling::LaunchConfiguration" Metadata: QBVersion: !Ref paramQBVersion AWS::CloudFormation::Init: ... /etc/cfn/hooks.d/cfn-auto-reloader.conf: content: !Sub | [cfn-auto-reloader-hook] triggers=post.update path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init action=/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region} runas=root mode: "000400" owner: "root" group: "root" ...

추가 예

샘플 템플릿은 AWS CloudFormation을 사용하여 Amazon EC2에서 애플리케이션 배포 단원을 참조하십시오.