Image Builder에서 "TOE를 부트스트랩할 수 없음" 이미지 빌드 파이프라인 실행 오류를 해결하려면 어떻게 해야 합니까?

4분 분량
0

이미지 빌드 파이프라인 실행이 실패하고 EC2 Image Builder에서 "TOE를 부트스트랩할 수 없음" 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

이미지 빌드 파이프라인의 빌드 단계에서 Amazon Elastic Compute Cloud(Amazon EC2) 빌드 인스턴스는 AWS Task Orchestrator and Executor(AWS TOE) 부트스트랩 스크립트 bootstrap.sh를 설치하고 실행합니다. Amazon EC2 빌드 인스턴스가 부트스트랩 스크립트를 설치하거나 실행할 수 없는 경우 EC2 Image Builder 콘솔에 오류가 표시됩니다.

오류 메시지 예:

SSM execution '7729e837-22d4-49dd-bb60-cc2c835a2625' failed for image arn: 'arn:aws:imagebuilder:us-west-2:account-ID:image/test/1.0.0/1' with 
status= 'Failed' in state = 'BUILDING' and failure message = 'Unable to bootstrap TOE'

Image Builder는 AWS Systems Manager Automation을 사용하여 사용자 지정 이미지를 빌드합니다. 자동화는 일반적으로 RunBuildScriptsWithLogging 또는 RunBuildScriptsWithoutLogging 단계에서 실패합니다.

부트스트랩 스크립트가 실패하는 일반적인 원인은 다음과 같습니다.

  • EC2 빌드 인스턴스가 Amazon Simple Storage Service(S3)에 액세스할 수 없습니다.
  • 기본 Amazon Machine Image(AMI)가 CIS 강화되었으며 기본 /tmp 디렉터리가 noexec를 사용하여 마운트됩니다.

해결 방법

문제를 해결하려면 오류 메시지의 SSM 자동화 실행 ID를 사용합니다.

  1. EC2 Image Builder 콘솔을 엽니다.
  2. 실패한 빌드 파이프라인을 선택합니다.
  3. 오류 메시지의 SSM 자동화 실행 ID를 기록해 둡니다. 앞의 오류 메시지 예의 ID는 7729e837-22d4-49dd-bb60-cc2c835a2625입니다.
  4. AWS Systems Manager 콘솔을 엽니다.
  5. 탐색 창에서 [자동화(Automation)]를 선택합니다.
  6. SSM 자동화 실행 ID와 연결된 자동화를 선택합니다.
  7. 부트스트랩 스크립트 실패에 대한 자세한 내용을 보려면 RunBuildScriptsWithoutLogging 단계의 ID를 선택합니다.

빌드 인스턴스가 Amazon S3에 액세스할 수 없는 경우

RunBuildScriptsWithoutLogging 단계에서 해당 파일 또는 디렉터리 없음 오류 메시지가 표시됩니다.

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
Cloud-init fails to initialize ... waiting another 5 minutes for the instance to stabilize
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/bb0d8b53-994f-4c47-8297-e852a484501d/awsrunShellScript/0.awsrunShellScript/_script.sh: 
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: No such file or directory
{\"failureMessage\":\"Unable to bootstrap TOE\"}

위의 오류는 bootstrap.sh 파일이 빌드 인스턴스에 존재하지 않음을 의미합니다. 이 오류는 빌드 인스턴스가 프라이빗 서브넷에 있으며 AWS TOE 부트스트랩 스크립트를 다운로드할 수 없는 경우에 발생합니다.

이 문제를 해결하려면 Amazon S3 게이트웨이 엔드포인트 com.amazonaws.region.s3가 파이프라인의 인프라 구성과 동일한 Amazon Virtual Private Cloud(VPC)에 있는지 확인합니다. 엔드포인트가 동일한 Amazon VPC에 있는 경우 올바른 라우팅 테이블과 연결되어 있는지 확인합니다. 엔드포인트는 인프라 구성에 지정된 서브넷에서 사용하는 라우팅 테이블과 연결되어야 합니다.

또한 빌드 인스턴스에 연결된 보안 그룹이 S3 퍼블릭 IP 주소에 대한 아웃바운드 HTTPS(포트 443) 연결을 허용하는지 확인합니다. 빌드 인스턴스는 아웃바운드 HTTPS 연결이 Image Builder S3 버킷에서 부트스트랩 스크립트를 다운로드할 수 있도록 허용해야 합니다. 파이프라인의 AWS 리전에 해당하는 S3 퍼블릭 IP 주소 범위를 확인합니다.

참고: Amazon S3 인터페이스 엔드포인트는 프라이빗 DNS 기능을 지원하지 않습니다. 자세한 내용은 인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스에 액세스를 참조하세요.

또한 엔드포인트의 정책이 Image Builder S3 버킷 ec2imagebuilder-toe-REGION-prod에서 GetObjects 작업을 허용하는지 확인합니다. 정책에는 기본적으로 전체 액세스 권한이 있습니다.

/tmp 디렉터리가 noexec을 사용하여 마운트되는 경우(Linux AMI 빌드에만 적용 가능)

RunBuildScriptsWithoutLogging 단계에서 권한이 거부됨 오류 메시지가 표시됩니다.

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/634699d5-3b04-4152-aab3-33d6981524cd/awsrunShellScript/0.awsrunShellScript/_script.sh:
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: Permission denied
{\"failureMessage\":\"Unable to bootstrap TOE\"}

위의 오류는 운영 체제 권한 문제로 인해 빌드 인스턴스가 bootstrap.sh 스크립트를 실행할 수 없음을 의미합니다. 이 오류는 noexec 옵션을 사용하여 기본 /tmp 디렉터리를 마운트할 때 발생합니다. noexec 마운트 옵션은 마운트된 파일 시스템에서 바이너리가 실행되지 않도록 합니다.

/tmp 디렉터리가 noexec로 마운트되었는지 확인하려면 이미지 레시피에 지정된 기본 AMI에서 테스트 인스턴스를 시작합니다.

다음 명령을 실행합니다.

sudo mount | grep -E '/tmp.*noexec'

출력:

dev/xvdf on /tmp type ext4 (rw,noexec,relatime,data=ordered)

위의 출력은 /tmp 디렉터리가 noexec로 마운트되었음을 확인합니다. 이 문제를 해결하려면 이미지 레시피에서 작업 디렉터리를 변경하거나 기본 AMI의 디렉터리에서 noexec 옵션을 제거합니다.

이미지 레시피에서 작업 디렉터리 파라미터를 수정하려면 새 이미지 레시피 버전을 생성합니다. 그런 다음 새 버전을 사용하도록 파이프라인을 편집합니다. 새 디렉터리가 이미 AMI에 있고 noexec 옵션을 사용하여 마운트하도록 구성되지 않았는지 확인합니다.

/tmp 디렉터리에서 noexec 옵션을 제거하려면 다음을 수행합니다.

  1. 이미지 레시피에 지정된 기본 AMI에서 인스턴스를 수동으로 시작합니다.
  2. /etc/fstab 파일에서 /tmp 또는 작업 디렉터리와 연결된 항목에서 noexec 옵션을 제거합니다.
  3. 인스턴스에서 새 AMI를 생성하여 이미지 레시피의 기본 AMI로 사용합니다.

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠