EC2 Image Builder에서 빌드 파이프라인 시간 초과 오류를 해결하려면 어떻게 해야 합니까?
EC2 Image Builder에서 빌드 파이프라인 시간 초과 오류를 해결하고 싶습니다.
간략한 설명
LaunchBuildInstance, BootstrapBuildInstance 또는 ApplyBuildComponent 워크플로 단계에서 단계 시간 초과 오류가 발생하여 Image Builder 빌드 파이프라인이 실패할 수 있는 일반적인 이유는 다음과 같습니다.
- 빌드 인스턴스가 AWS Systems Manager에 연결할 수 없습니다.
- AWS Identity and Access Management(IAM) 역할에 잘못된 권한이 있습니다.
- 프라이빗 서브넷이 인터넷에 액세스할 수 없습니다.
- 중복된 루트 디바이스 이름이 있습니다.
해결 방법
빌드 파이프라인 시간 초과 오류를 해결하려면 다음 시나리오를 참조하십시오.
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
빌드가 빌드 인스턴스에서 SSM Agent 가용성을 확인할 때 시간 초과 발생
빌드에서 빌드 인스턴스의 AWS Systems Manager Agent를 확인할 때 빌드 파이프라인 시간 초과가 일어나면 다음과 같은 오류가 발생할 수 있습니다.
"Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:*CommandInvocations returned terminal state Failed in workflow step LaunchBuildInstance."
"Workflow Execution ID: failed with reason: An error occurred (InvalidInstanceId) when calling the SendCommand operation: Instances [[i-1a1b1c1d1e1f1g1h1]] not in a valid state for account in workflow step LaunchBuildInstance."
"Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts. Reason: Timeout. in workflow step LaunchBuildInstance."
이러한 빌드 파이프라인 시간 초과 오류는 인스턴스에 파이프라인 인프라 역할에 필요한 IAM 권한이 없을 때 발생합니다. 이러한 오류는 SSM 에이전트가 엔드포인트에 도달할 수 있는 경우에도 발생합니다.
인스턴스에 필요한 IAM 권한이 없음
빌드 인스턴스에 필요한 IAM 권한이 없는 경우 AmazonSSMManagedInstanceCore 관리형 정책을 IAM 역할에 추가하십시오. IAM 역할은 Image Builder 인프라 구성에 지정되어 있습니다. 또한 AWSServiceRoleForImageBuilder 역할이 AWS Key Management Service(AWS KMS) 키를 사용할 수 있도록 허용되어 있는지 확인하십시오. 이 역할에는 이미지 레시피 블록 디바이스에 지정된 AWS KMS 키에 대한 액세스가 필요합니다. 자세한 내용은 키 사용자에게 KMS 키 사용 허용을 참조하십시오.
SSM 에이전트가 엔드포인트에 연결할 수 없음
SSM 에이전트가 엔드포인트에 연결할 수 없는 경우 다음 조치를 취하십시오.
- 인터넷 게이트웨이를 사용하여 퍼블릭 서브넷을 구축하는 경우, 자동으로 퍼블릭 IPv4 주소를 할당하도록 서브넷을 구성하십시오.
- NAT로 프라이빗 서브넷을 구축하는 경우 퍼블릭 서브넷을 사용하도록 NAT를 구성하십시오.
- Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트를 사용하여 프라이빗 서브넷에 구축하는 경우 시스템 관리자용 AWS PrivateLink 엔드포인트를 설정하십시오. 자세한 내용을 보려면 인터넷에 액세스하지 않고도 Systems Manager를 사용하여 프라이빗 EC2 인스턴스를 관리할 수 있도록 VPC 엔드포인트를 만들려면 어떻게 합니까?를 참조하십시오.
- 보안 그룹과 네트워크 액세스 제어 목록(네트워크 ACL)이 임시 포트(1024~65535)에 대한 인바운드 연결을 허용하는지 확인합니다. 또한 포트 443에서 아웃바운드 연결을 허용해야 합니다. PrivateLink 엔드포인트가 있는 프라이빗 서브넷의 경우 Amazon VPC 엔드포인트에 연결된 보안 그룹이 포트 443에서 인바운드 연결을 허용해야 합니다. 이러한 인바운드 연결은 서브넷 또는 Amazon VPC CIDR 주소로부터 허용되어야 합니다.
빌드가 AWS CLI를 다운로드할 때 시간 초과 발생
프라이빗 서브넷에서 빌드하고 aws-cli-version-2-linux 또는 aws-cli-version-2-windows 구성 요소가 있는 경우, ApplyBuildComponents 단계에서 빌드 시간 초과가 발생할 수 있습니다.
컨테이너 빌드의 경우 BootstrapBuildInstance 단계에서 빌드 시간 초과가 발생할 수 있습니다. 인스턴스의 AMI에 AWS CLI가 존재하지 않고 부트스트랩 스크립트가 인터넷을 통해 AWS CLI를 설치하려고 할 때 시간 초과가 발생합니다.
이 시간 초과 문제를 해결하려면 다음 조치를 취하십시오.
- NAT 게이트웨이 또는 인터넷 게이트웨이를 통해 서브넷의 인터넷 연결을 허용합니다.
- AWS CLI가 설치된 사용자 지정 AMI를 사용합니다.
루트 디바이스 이름이 중복되면 시간 초과가 발생합니다.
CreateImageRecipe API를 사용하여 레시피를 생성할 때 루트 디바이스의 이름을 /dev/xvda 또는 /dev/sda1로 지정하면 오류가 발생할 수 있습니다. 빌드 인스턴스에서 루트 디바이스 이름이 중복되는 문제를 방지하려면 소스 AMI에서 루트 디바이스 매핑을 확인하십시오. 중복된 루트 디바이스 이름이 존재하면 시간 초과가 발생하고 다음 오류가 발생합니다.
"Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts. Reason: Timeout. in workflow step LaunchBuildInstance."
참고: AWS Management Console의 레시피 이미지를 사용할 때 중복된 디바이스 이름을 생성할 수 없습니다. 또한 AWS Nitro System 인스턴스 유형(또는 Xen 인스턴스 유형) 은 중복된 디바이스 이름으로 인해 장애가 발생하지 않는 유일한 인스턴스 유형입니다.
AMI에 있는 루트 디바이스의 경우 describe-images 명령을 실행하여 소스 AMI의 디바이스 이름을 확인합니다. 이미지 레시피에 있는 것과 동일한 기기 이름을 사용하십시오.
빌드에서 Image Builder 구성 요소를 가져올 때 시간 초과 발생
프라이빗 서브넷에서 빌드하고 구성 요소를 다운로드했을 때 Image Builder에 오류가 발생하면 다음 오류가 표시됩니다.
"failed with reason: failed to download the EC2 Image Builder Component, operation error imagebuilder: GetComponent, exceeded maximum number of attempts, 3, dial tcp i/o timeout."
위 오류를 해결하려면 구성을 확인하십시오. 또는 Image Builder 인프라 구성에 사용된 것과 동일한 VPC 및 서브넷에 Amazon VPC 엔드포인트가 존재하지 않는 경우 Amazon VPC 엔드포인트를 생성하십시오.
빌드가 미러 목록을 검색할 때 타임아웃 발생
Amazon Linux 기반 AMI를 사용하여 프라이빗 서브넷에 구축하는 경우 다음과 같은 시간 초과 오류가 발생할 수 있습니다.
"Could not retrieve mirrorlist; error was 12: Timeout was reached."
Amazon Linux mirrorlist는 Amazon Simple Storage Service(Amazon S3)에 저장됩니다. Amazon S3에 Amazon VPC 게이트웨이 엔드포인트가 있는지 확인합니다. 또는 Amazon VPC 게이트웨이 엔드포인트를 생성합니다. Amazon S3 접두사 목록은 엔드포인트를 생성할 때 라우팅 테이블에 자동으로 추가됩니다. 하지만 가장 좋은 방법은 접두사 목록이 추가되었는지 확인하는 것입니다.
Amazon Linux AMI가 아닌 다른 곳에 빌드하는 경우, mirrorlist는 Amazon S3에 저장되지 않습니다. 또한 빌드가 repository/mirrorlist를 가져올 때 빌드 시간 초과가 발생할 수 있습니다. 네트워크 방화벽이나 프록시에 대한 리포지토리 주소 또는 URL을 허용해야 합니다. repository/mirrolist에 인터넷이 필요한 경우, NAT 게이트웨이를 통해 서브넷에 대한 인터넷 연결을 허용하십시오.
ApplyBuildComponents 단계에서 시간 초과 발생
ApplyBuildComponents 단계에서 빌드 시간 초과가 발생하면 다음 오류가 표시됩니다.
"Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:ListCommandInvocations did not meet terminal states: [['Success']] after 1440 attempts. Reason: Timeout. in workflow step ApplyBuildComponents."
이 오류를 해결하려면 다음 작업을 수행하십시오.
- 인프라의 Amazon S3 버킷으로 전송되는 로그를 분석합니다. 파이프라인 빌드 문제 해결의 워크플로 런타임 로그 검토 섹션에서 **Amazon Simple Storage Service(Amazon S3)**의 글머리 기호 항목을 참조하십시오.
- 새 이미지를 빌드하거나 테스트하는 데 사용하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 있는 구성 요소 로그를 분석합니다. 로그를 확인하기 전에 인프라 구성의 문제 해결 세션에서 실패 시 인스턴스 종료 기능을 비활성화하십시오.
참고: detailedoutput.json 로그 파일에는 구성 요소가 실패했거나 제한 시간이 초과된 이유에 관한 설명이 있습니다. application.log 파일에서는 디버그 수준의 문제 해결 정보를 제공합니다. - 문서의 YAML 스키마에 지정된 timeoutSeconds 파라미터 값을 확인하십시오. 기본값은 7200입니다. 필요에 따라 구성 요소의 각 단계에 대해 이 값을 업데이트합니다. -1의 값은 무한합니다.
관련 정보
관련 콘텐츠
- 질문됨 2달 전lg...
- 질문됨 2달 전lg...
- 질문됨 일 년 전lg...
- 질문됨 일 년 전lg...
- 질문됨 6달 전lg...
- AWS 공식업데이트됨 3달 전