CloudFormation에서 EC2 인스턴스에 메타데이터를 포함할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 4월 12일

AWS::CloudFormation::Init를 사용하여 Amazon Elastic Cloud Compute(Amazon EC2) 인스턴스에 메타데이터를 포함했지만 인스턴스에 변경 사항이 표시되지 않습니다.

간략한 설명

AWS CloudFormation 스택의 EC2 인스턴스 메타데이터와 관련된 문제는 다음과 같은 이유로 발생할 수 있습니다.

  • 하나 이상의 CloudFormation 스택 인스턴스에 cfn-init 헬퍼 스크립트가 설치되어 있지 않습니다. 이 문제를 해결하려면 cfn-init 헬퍼 스크립트가 설치되어 있는지 확인 섹션의 단계를 완료합니다.
  • 인스턴스가 인터넷에 연결되어 있지 않습니다. 이 문제를 해결하려면 인스턴스가 인터넷에 연결되어 있는지 확인 섹션의 단계를 완료합니다.
  • CloudFormation 템플릿에 구문 오류나 잘못된 값이 포함되어 있습니다. 이 문제를 해결하려면 cloud-init 또는 cfn-init 로그에서 오류 검색 섹션의 단계를 완료합니다.

중요: 다음 해결 방법을 완료하기 전에 CloudFormation 스택에 대한 실패 시 롤백 옵션을 아니요로 설정합니다.

참고: 다음 해결 방법은 Linux 인스턴스로 생성된 CloudFormation 스택에만 해당됩니다.

해결 방법

cfn-init 헬퍼 스크립트가 설치되어 있는지 확인

CloudFormation 리소스로 신호를 전송하도록 구성된 인스턴스에 cfn-init가 설치되어 있는지 확인하려면 다음을 수행합니다.

1.    SSH를 사용하여 인스턴스에 연결합니다.

2.    다음 명령 중 하나를 실행하여 cfn-init 또는 aws-cfn-bootstrap 패키지가 디렉터리에 설치되어 있는지 확인합니다.

cfn-init:

$ sudo find / -name cfn-init
/opt/aws/bin/cfn-init
/opt/aws/apitools/cfn-init
/opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
/var/lib/cfn-init

-또는-

aws-cfn-bootstrap 패키지:

$ sudo rpm -q aws-cfn-bootstrap
aws-cfn-bootstrap-1.4-34.24.amzn1.noarch

중요: 앞의 명령은 RPM 패키지 관리자를 사용하는 배포에서만 작동합니다.

참고: 기본적으로 CloudFormation 헬퍼 스크립트는 Amazon Linux Amazon Machine Image(AMI)에 설치됩니다. CloudFormation 헬퍼 스크립트가 설치되어 있지 않은 경우 설치하는 방법에 대한 지침은 CloudFormation 헬퍼 스크립트 레퍼런스를 참조하세요.

인스턴스가 인터넷에 연결되어 있는지 확인

인스턴스가 Amazon Virtual Private Cloud(Amazon VPC)에 있는 경우 다음을 통해 인터넷에 연결할 수 있습니다.

  • 프라이빗 서브넷의 NAT 디바이스
  • 퍼블릭 서브넷의 인터넷 게이트웨이

인스턴스의 인터넷 연결을 테스트하려면 AWS와 같은 공개 웹 페이지에 액세스하고 인스턴스에서 curl 명령을 실행합니다. 예:

curl -I https://aws.amazon.com

참고: 인스턴스가 인터넷에 연결된 경우 이 명령은 HTTP 200 상태 코드를 반환합니다.

인터페이스 VPC 엔드포인트를 사용하는 경우 엔드포인트는 인스턴스와 동일한 AWS 리전에 위치해야 합니다. 또한 인터페이스 엔드포인트에 연결된 보안 그룹은 Amazon VPC의 프라이빗 서브넷에서 포트 443으로 들어오는 연결을 허용해야 합니다.

cloud-init 또는 cfn-init 로그에서 오류 검색

cloud-init 로그 또는 cfn-init 로그에서 오류를 검색하려면 다음을 수행합니다.

1.    SSH를 사용하여 인스턴스에 연결합니다.

2.    다음 로그에서 키워드 "error" 또는 "failure"를 검색하여 자세한 오류 또는 실패 메시지를 찾습니다.

  • /var/log/cloud-init-output.log
  • /var/log/cloud-init.log
  • /var/log/cfn-init.log
  • /var/log/cfn-init-cmd.log

/var/log/cfn 또는 /var/log/cloud-init 파일에서 "error" 또는 "failure"라는 단어의 모든 인스턴스를 구문 분석하려면 다음 명령을 실행합니다.

grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)

참고: 앞의 명령은 파일 이름, 행 번호 및 오류 메시지를 반환합니다.

cfn-init.log를 찾습니다. 찾을 수 없다면 cfn-init이 실행되지 않은 것입니다. 또한 cloud-init-output.logcloud-init.log를 확인하여 사용자 데이터를 실행할 때 실패했는지 확인해야 합니다. 오류를 식별한 후 오류 메시지를 기준으로 오류를 수정한 다음 스택을 다시 생성합니다.

cfn-init.log가 있으면 cfn-init가 실행되었지만 오류가 발생한 것입니다. cfn-init.log를 확인하여 무엇이 잘못되었는지 확인하고 오류 메시지에 따라 수정합니다.

UserData 속성이 cfn-init를 실행하도록 구성되었는지 확인하려면 다음 단계를 완료합니다.

  1. 코드 편집기에서 스택에 대한 AWS CloudFormation 템플릿을 연 다음, UserData 속성 섹션을 찾습니다.
  2. 구문 오류, 공백 누락, 철자 오류 및 기타 오타 등의 오류를 확인합니다.
  3. 스택, 리소스 및 리전 속성이 올바른지 확인합니다.
  4. UserData 속성의 Fn::Join 내장 함수의 경우 -v 옵션을 사용하여 cfn-init를 세부 정보 표시 모드로 실행합니다. JSON 및 YAML 예시 템플릿을 참조하세요.