로컬에서 Cloud Run 서비스 테스트

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

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)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.

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

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

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

Google Cloud 액세스 권한이 있는 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 서비스에서는 프로덕션 성능 및 데이터에서 로컬 문제 해결을 격리하기 위해 대체 구성을 사용할 수 있습니다.

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: 로컬에서 개발디버깅

gcloud CLI

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

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

  1. 디렉터리를 서비스의 소스 코드가 포함된 디렉터리로 변경합니다.

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

    gcloud beta code dev

Dockerfile이 로컬 디렉터리에 있으면 컨테이너를 빌드하는 데 이 Dockerfile이 사용됩니다. Dockerfile이 없으면 Google Cloud 빌드팩을 사용해 컨테이너가 빌드됩니다.

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

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

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

서비스 구성 맞춤설정

YAML 파일을 사용하여 로컬에서 실행되는 서비스의 Cloud Run 구성을 맞춤설정할 수 있습니다. YAML 형식은 Cloud Run 서비스를 배포하는 데 사용할 수 있는 형식과 동일하지만 Cloud Run 서비스 설정의 하위 집합만 지원합니다. gcloud beta code dev는 현재 디렉터리에서 *.service.dev.yaml으로 끝나는 모든 파일을 찾아 사용합니다. 아무것도 찾을 수 없으면 *.service.yaml로 끝나는 파일을 사용합니다.

로컬 개발의 설정은 다음과 같이 구성할 수 있습니다.

명령어가 실행될 때 이미지가 빌드되어 서비스에 제공되므로 로컬 개발에는 컨테이너 image 필드가 필요하지 않습니다.

로컬 개발에 service.dev.yaml 예시 파일을 사용할 수 있습니다.

  apiVersion: serving.knative.dev/v1
  kind: Service
  metadata:
    name: my-service-name
  spec:
    template:
      spec:
        containers:
        - env:
          - name: FOO
            value: bar

사용자 인증 정보를 사용하여 테스트

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

코드가 로컬에서 실행 중인지 확인

Cloud Run에서 로컬로 테스트할 때는 Cloud Run이 모든 컨테이너에 제공하는 K_REVISION 환경 변수를 확인하여 컨테이너가 로컬에서 실행되고 있는지 코드에서 확인할 수 있습니다.

Docker

Google Cloud CLI에서 로컬로 코드를 실행 중인지 확인하기 위해 K_REVISION 환경 변수를 쿼리할 수 있지만 설정되지 않았기 때문에 값이 표시되지 않습니다.

Google Cloud 액세스 권한이 있는 Docker

3단계에서 위 섹션의 정확한 값을 사용하여 Google Cloud CLI에서 로컬로 코드를 실행 중인지 확인한 경우 K_REVISION 환경 변수를 쿼리하고 dev-00001 값을 찾아 로컬에서 실행되고 있는지 확인할 수 있습니다.

Cloud Code 에뮬레이터

Cloud Code에서 코드를 로컬에서 실행 중인지 확인하려면 K_REVISION 환경 변수를 쿼리하고 local 값을 찾아 로컬에서 실행 중인지 확인합니다.

gcloud CLI

Google Cloud CLI에서 로컬로 코드를 실행 중인지 확인하려면 K_REVISION 환경 변수를 쿼리하고 dev-로 시작하는 값을 찾아 로컬에서 실행 중인지 확인합니다.

다음 단계