로컬로 Cloud Run 서비스 테스트

개발 단계에서는 배포하기 전에 로컬에서 컨테이너 이미지를 실행하고 테스트할 수 있습니다. Cloud Code 또는 로컬에서 설치된 Docker를 사용하면 Google Cloud 서비스에 대한 액세스 권한으로 로컬 실행을 포함하여 로컬에서 실행하고 테스트할 수 있습니다.

Cloud Code 에뮬레이터

VS CodeJetBrains IDECloud Code 플러그인을 사용하면 IDE 내 Cloud Run 에뮬레이터에서 로컬에서 컨테이너 이미지를 실행하고 디버깅할 수 있습니다. 에뮬레이터를 사용하면 Cloud Run에서 실행 중인 서비스를 대표하는 환경을 구성할 수 있습니다.

CPU 및 메모리 할당과 같은 속성을 구성하고 환경 변수를 지정하고 Cloud SQL 데이터베이스 연결을 설정할 수 있습니다.

  1. VS Code 또는 JetBrains IDE용 Cloud Code를 설치합니다.
  2. IDE 내에서 로컬에서 개발 및 디버깅을 위한 안내를 따릅니다.
  3. VS Code: 로컬에서 개발디버깅
  4. IntelliJ: 로컬에서 개발디버깅

Cloud SDK

Cloud SDK에는 소스에서 컨테이너를 빌드하고 로컬 머신에서 컨테이너를 실행하고 소스 코드 변경에 따라 자동으로 컨테이너를 다시 빌드할 수 있는 Cloud Run을 에뮬레이션하기 위한 로컬 개발 환경이 포함되어 있습니다.

로컬 개발 환경을 시작하려면 다음 안내를 따르세요.

  1. 디렉터리를 Dockerfile이 포함된 디렉터리로 변경합니다.

  2. 명령어를 호출합니다.

    gcloud beta code dev

    또는 --dockerfile 플래그를 사용하여 Dockerfile 디렉터리를 지정하거나 컨테이너가 CNCF 호환 Buildpack으로 빌드되었으면 --builder 플래그를 사용할 수 있습니다.

실행 중인 서비스를 보려면 브라우저에서 http://localhost:8080/으로 이동합니다. --local-port 옵션으로 커스텀 포트를 지정한 경우 해당 포트로 브라우저를 열어야 합니다.

로컬 서버를 중지하려면 다음 안내를 따르세요.

  • Mac OS 및 Linux: Control-C
  • Windows: Control-Break

    사용자 인증 정보 사용

    Google Cloud 서비스 사용 권한을 컨테이너에 부여하려면 컨테이너에 액세스 사용자 인증 정보를 제공해야 합니다.

  • 고유 계정을 사용하여 사용자 인증 정보에 대해 액세스 권한을 컨테이너에 제공하려면 gcloud를 사용하여 로그인하고 --application-default-credential 플래그를 사용합니다.

    gcloud auth application-default login
    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --application-default-credential

  • 애플리케이션 사용자 인증 정보를 서비스 계정으로 제공하려면 --service-account 플래그를 사용합니다.

    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --service-account=SERVICE_ACCOUNT_EMAIL

    --service-account 플래그를 사용하면 서비스 계정 키가 로컬로 다운로드되어 캐시됩니다. 사용자는 키를 안전하게 유지하고 더 이상 필요하지 않을 때 삭제해야 합니다.

Docker

Docker를 사용해 로컬에서 컨테이너 이미지를 테스트하려면 다음 안내를 따르세요.

  1. Docker 명령어를 사용합니다.

    PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} IMAGE_URL

    IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다.

    PORT 환경 변수는 애플리케이션이 HTTP 또는 HTTPS 요청을 리슨하기 위해 사용할 포트를 지정합니다. 이는 컨테이너 런타임 계약의 요구사항입니다. 이 예시에서는 포트 8080을 사용합니다.

  2. 브라우저에서 http://localhost:9090을 엽니다.

컨테이너를 처음 사용하는 경우 Docker 시작하기 가이드를 먼저 검토하는 것이 좋습니다. Docker 명령어에 대한 자세한 내용은 Docker 문서를 참조하세요.

GCP 액세스 포함 Docker

Google Cloud 클라이언트 라이브러리를 사용하여 애플리케이션을 Google Cloud 서비스와 통합하고 외부 액세스를 제어하도록 해당 서비스를 아직 보호하지 않은 경우 애플리케이션 기본 사용자 인증 정보를 사용하여 로컬 컨테이너를 설정하고 Google Cloud 서비스를 인증할 수 있습니다.

로컬에서 실행하려면 다음 안내를 따르세요.

  1. 서비스 계정 사용자 인증 정보 생성, 검색, 구성에 대한 안내는 인증 시작하기를 참조하세요.

  2. 다음 Docker 실행 플래그는 로컬 시스템의 사용자 인증 정보 및 구성을 로컬 컨테이너에 삽입합니다.

    1. --volume(-v) 플래그를 사용하여 사용자 인증 정보 파일을 컨테이너에 삽입합니다. 이때 머신에 GOOGLE_APPLICATION_CREDENTIALS 환경 변수가 이미 설정되었다고 가정합니다.
      -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro
    2. --environment(-e) 플래그를 사용하여 컨테이너 내에 GOOGLE_APPLICATION_CREDENTIALS 변수를 설정합니다.
      -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
  3. 원할 경우 완전히 구성된 다음 Docker run 명령어를 사용합니다.

    PORT=8080 && docker run \
    -p 9090:${PORT} \
    -e PORT=${PORT} \
    -e K_SERVICE=dev \
    -e K_CONFIGURATION=dev \
    -e K_REVISION=dev-00001 \
    -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json \
    -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro \
    IMAGE_URL

    다음은 위의 예시에서 발췌한 경로입니다.

    /tmp/keys/FILE_NAME.json
    이 경로는 컨테이너 내에 사용자 인증 정보를 배치할 합리적인 위치입니다.

    하지만 다른 디렉터리 위치도 사용 가능합니다. 여기서 중요한 요구사항은 GOOGLE_APPLICATION_CREDENTIALS 환경 변수가 컨테이너 내의 바인딩 마운트 위치와 일치해야 한다는 것입니다.

    또한 일부 Google Cloud 서비스에서는 프로덕션 성능 및 데이터에서 로컬 문제 해결을 격리하기 위해 대체 구성을 사용할 수 있습니다.

다음 단계