Cloud Run(완전 관리형) 문제해결

이 페이지에서는 몇 가지 일반적인 문제의 해결 방법과 문제해결 전략을 제공합니다.

새 버전을 배포할 때 '컨테이너를 시작할 수 없습니다. PORT 환경 변수로 정의한 포트에서 시작하고 리슨할 수 없습니다'라는 오류 메시지가 표시되면 다음 단계에 따라 문제를 해결하세요.

컨테이너가 로컬에서 실행되나요?

Cloud Run 문제를 해결할 때는 항상 먼저 컨테이너 이미지를 로컬에서 실행할 수 있는지 확인해야 합니다. 컨테이너 이미지가 로컬에서 실행되고 있지 않으면 문제의 근본 원인이 Cloud Run에서 발생한 것이 아닙니다. 먼저 로컬에서 문제를 진단하고 수정해야 합니다.

컨테이너가 예상 포트에서 요청을 리슨하고 있나요?

일반적인 문제는 수신 요청을 리슨하지 못했거나 잘못된 포트에서 수신 요청을 리슨하는 것입니다.

컨테이너 런타임 계약에 설명된 대로 컨테이너는 Cloud Run에서 정의하고 PORT 환경 변수로 제공된 포트에서 수신되는 요청을 리슨해야 합니다.

컨테이너가 예상 포트에서 리슨하지 못하면 버전 상태 확인에 실패하고 버전이 오류 상태가 되고 트래픽이 컨테이너로 라우팅되지 않습니다.

컨테이너가 모든 네트워크 인터페이스에서 리슨하고 있나요?

Cloud Run 서비스가 시작되지 않는 일반적인 이유는 컨테이너 내부의 서버 프로세스가 localhost(127.0.0.1) 주소에서 리슨하도록 구성되어 있기 때문입니다. 이는 컨테이너 외부에서 액세스할 수 없는 루프백 네트워크 인터페이스를 나타내므로 Cloud Run 상태 확인을 수행할 수 없어 서비스 배포가 실패합니다.

이 문제를 해결하려면 일반적으로 0.0.0.0으로 표시된 모든 네트워크 인터페이스에서 리슨하도록 HTTP 서버를 시작하도록 애플리케이션을 구성합니다.

로그에 오류가 표시되나요?

Cloud Run 로깅 페이지에 설명된 대로 Cloud Logging을 사용하여 stdout 또는 stderr 로그에서 애플리케이션 오류를 찾습니다. 또한 Cloud Run Error Reporting 페이지에 설명된 대로 Error Reporting에 캡처된 장애도 찾을 수 있습니다. 문제해결 가이드도 참조하세요.

이러한 오류나 장애를 수정하려면 코드 또는 버전 설정을 업데이트해야 합니다.

컨테이너 인스턴스가 메모리를 초과하나요?

컨테이너 인스턴스는 사용 가능한 메모리를 초과할 수 있습니다. 이러한 경우에 해당되는지 확인해 보려면 varlog/system 로그에서 이러한 오류를 찾아보세요. 인스턴스가 사용 가능한 메모리를 초과하는 경우에는 메모리 한도 증가를 고려해 보세요.

Cloud Run 컨테이너 인스턴스는 로컬 파일 시스템에 기록된 파일이 사용 가능한 메모리 계산에 반영되는 환경에서 실행됩니다. 여기에는 /var/log/* 또는 /dev/log에 기록되지 않은 로그 파일도 포함됩니다.

서비스 URL을 열거나 호출할 때 403 Error: Forbidden

Cloud Run(완전 관리형) 서비스에 액세스할 때 403 '오류: 사용할 수 없음' 오류 메시지가 표시되면 클라이언트가 이 서비스를 호출할 권한이 없음을 의미합니다. 다음 작업 중 하나를 수행하여 이 문제를 해결할 수 있습니다.

ID 토큰 사용시 SIGNATURE_REMOVED_BY_GOOGLE 오류 발생

이 오류는 개발 및 테스트 중에 다음과 같은 상황에서 나타날 수 있습니다.

  1. 사용자가 gcloud 명령줄 또는 Cloud Shell에서 사용자 계정으로 로그인합니다.
  2. 사용자가 gcloud 명령줄을 통해 ID 토큰을 생성합니다.
  3. 그런 다음 사용자가 ID 토큰을 사용하여 비공개 Cloud Run 서비스를 호출합니다.

기본 설정입니다. 보안상의 이유로 토큰 서명은 위의 설명대로 생성된 ID 토큰을 재생하는 모든 비공개 Cloud Run(완전 관리형) 서비스를 차단하기 위해 삭제됩니다. 대신 새 ID 토큰으로 비공개 서비스를 호출하려면 서비스에서 인증 테스트를 참조하세요.

장기 실행 요청에 대해 오류 코드 203이 표시되나요?

서비스에서 긴 요청을 처리하는 경우 요청 시간 제한을 늘리면 오류 코드 203과 함께 이전에 종료된 요청이 표시될 수 있습니다. 문제의 원인은 언어 프레임워크의 요청 시간 제한 설정일 수 있으며 이 설정을 업데이트해야 합니다. 예를 들어 Node.js 개발자는 server.timeout 속성을 업데이트해야 합니다.

과부하일 때 503 오류가 표시되나요?

Cloud Run(완전 관리형) 부하 분산기는 수신 요청을 컨테이너 인스턴스의 요구량에 맞게 분산하고자 합니다. 그러나 컨테이너 인스턴스가 요청을 처리하기 위해 많은 CPU를 사용하게 되면 일부 요청은 처리되지 않고 503 오류 코드를 반환합니다.

이 문제를 완화하기 위해 동시 실행을 줄여보세요. concurrency = 1부터 시작하여 허용되는 값을 찾을 때까지 점진적으로 늘려보세요. 자세한 내용은 동시 실행 설정을 참조하세요.

429 오류가 표시되나요?

서비스가 최대 컨테이너 인스턴스 수에 도달하면 429 오류 코드와 함께 요청이 반환됩니다. '최대 인스턴스'설정을 조정하여 이 한도를 늘려보거나 1,000개를 초과하는 인스턴스가 필요한 경우 할당량 증가를 요청해보세요.

사용 가능한 인스턴스가 없어 요청이 중단되나요?

Cloud Run(완전 관리형) 인프라가 트래픽 급증을 따라잡을 만큼 빠르게 확장되지 않은 경우 다음 오류가 발생할 수 있습니다.

The request was aborted because there was no available instance

이 문제의 원인은 다음 중 하나일 수 있습니다.

오류: 선언된 출시 단계에서 지원되지 않는 기능입니다.

Cloud Run Admin API를 직접 호출할 때 출시 단계 주석을 지정하지 않고 베타 기능을 사용하면 다음 오류가 발생할 수 있습니다.

The feature is not supported in the declared launch stage

Direct Cloud Run Admin API 사용자는 베타 기능 사용 시 요청에 run.googleapis.com/launch-stage 주석으로 BETA를 사용하여 리소스에 주석을 달아야 합니다.

다음은 서비스 요청에 출시 단계 주석을 추가하는 예시입니다.

kind: Service
metadata:
  annotations:
    run.googleapis.com/launch-stage: BETA

컨테이너 샌드박스의 제한사항으로 인해 문제가 발생하나요?

컨테이너가 로컬에서 실행되지만 Cloud Run(완전 관리형)에서는 실패하는 경우 Cloud Run 컨테이너 샌드박스가 컨테이너 오류의 원인일 수 있습니다.

Cloud Run 섹션의 '로그' 탭이 아닌 GCP Console의 Cloud Logging 섹션에서 심각도가 '디버그'인 '컨테이너 샌드박스'varlog/system 로그에서 찾을 수 있습니다.

varlog

예를 들면 다음과 같습니다.

Container Sandbox: Unsupported syscall setsockopt(0x3,0x1,0x6,0xc0000753d0,0x4,0x0)

이러한 샌드박스가 컨테이너 오류의 원인으로 의심되는 경우 지원팀에 문의하고 지원 티켓에 로그 메시지를 추가하세요. Google Cloud 지원팀은 Cloud Logging 로그에 표시되지 않는 하위 수준의 시스템 호출을 진단하기 위해 서비스에서 수행한 시스템 호출을 추적하도록 요청할 수 있습니다.