배포

이 페이지에서는 측정항목 구성 생성기 (MCG)를 배포하는 방법을 설명합니다. 개발 및 테스트를 위해 MCG를 로컬로 실행하거나 팀 액세스를 위해 클라우드 환경에 배포할 수 있습니다.

소스 코드 가져오기

MCG의 소스 코드는 sdv.googlesource.com에 호스팅되며, 액세스 도구 저장소에 설명된 대로 인증이 필요합니다.

소스 코드에 액세스하려면 MCG 저장소를 클론합니다.

git clone https://sdv.googlesource.com/external/mcg-external

로컬에서 실행

로컬 개발 및 테스트를 위해 소스 디렉터리에서 MCG를 실행하려면 Bazel을 사용합니다. Bazel이 설치되어 있어야 합니다. 로컬에서 실행할 때 MCG_LOCALCACHE=true를 설정하여 인메모리 캐싱을 사용 설정해야 합니다. 이렇게 하면 차량 신호 카탈로그를 저장할 수 있습니다. 로컬에서 서비스를 빌드하고 실행하려면 소스 디렉터리에서 다음 명령어를 사용합니다.

# Build and run on default port 8005
MCG_LOCALCACHE=true bazel run //:mcg

# Or, to change the port, use:
MCG_LOCALCACHE=true bazel run //:mcg -- --listen :9000

Google Cloud에 배포

MCG 코드베이스에는 MCG를 Google Cloud Run 서비스로 Google Cloud에 배포하기 위한 Terraform 및 Google Cloud Build 파일이 포함되어 있습니다. 다음 섹션에서는 변수 파일 만들기, 인프라 배포, 애플리케이션 빌드 및 배포, 액세스 권한 부여 및 배포 확인을 포함한 배포 프로세스를 안내합니다.

Cloud Run은 서버리스 플랫폼이므로 서버를 24시간 내내 활성 상태로 유지하는 대신 요청을 처리할 때만 컨테이너를 실행하여 리소스를 절약합니다. 즉, 요청 간에 컨테이너 인스턴스가 종료되면 인메모리 데이터가 손실됩니다. 따라서 서비스 호출 전반에서 카탈로그 데이터에 영구 스토리지를 제공하려면 Redis가 필요합니다. 이 접근 방식은 팀 또는 프로덕션 사용에 적합한 확장 가능한 배포를 제공합니다.

기본 요건

Google Cloud에 배포를 시작하기 전에 다음 기본 요건이 있는지 확인하세요.

파일 구조

Google Cloud에 배포하려면 infrastructure/ 하위 디렉터리에서 Terraform 명령어를 실행하고 저장소 루트에서 Cloud Build 명령어를 실행해야 합니다. 상호작용하는 주요 파일 및 디렉터리는 다음과 같습니다.

repository-root/
├── cloudbuild.yaml
└── infrastructure/
    └── terraform.tfvars  <-- you create this file

Terraform 변수 파일 만들기

infrastructure/ 디렉터리에서 terraform.tfvars라는 파일을 만들어 변수 값을 제공하고 배포를 맞춤설정합니다.variables.tf 이 파일에서 project_idregion의 값을 정의해야 합니다. 다른 모든 변수는 선택사항입니다. terraform.tfvars에 다음을 추가합니다.

project_id        = "<var label="Google Cloud project ID">your-gcp-project-id</var>"
region            = "<var label="Google Cloud region">your-gcp-region</var>" # For example, us-central1 or europe-west1

사용 가능한 모든 변수와 기본값은 variables.tf를 참고하세요. terraform.tfvars에서 기본값을 설정하여 재정의할 수 있습니다.

인프라 배포하기

terraform.tfvars를 만든 후 Terraform 구성을 초기화하고 적용할 수 있습니다. 이 단계에서는 Artifact Registry, Redis, Cloud Run을 비롯한 모든 필수 Google Cloud 리소스를 프로비저닝합니다. 완료되면 Terraform은 자리표시자 컨테이너 이미지를 실행하는 Google Cloud Run 서비스를 만듭니다. 이 단계는 몇 분 정도 걸릴 수 있습니다.

# Run from the infrastructure/ directory
terraform init
terraform apply

terraform apply에서 메시지가 표시되면 계획을 검토하고 yes를 입력하여 확인합니다.

MCG 애플리케이션 빌드 및 배포

인프라가 프로비저닝된 후 다음 단계는 MCG 소스 코드를 빌드하고 Google Cloud Run에 배포하는 것입니다. 이는 소스 코드를 Google Cloud Build에 제출하여 수행됩니다. Google Cloud Build는 Docker 이미지를 빌드하고 Artifact Registry에 푸시하며 새 이미지를 사용하도록 Google Cloud Run 서비스를 업데이트합니다.

Google Cloud Build는 COMMIT_SHA 대체 변수를 사용하여 빌드된 이미지에 태그를 지정합니다. 버전 번호 (예: v1.0.0) 또는 저장소의 커밋 SHA를 사용할 수 있습니다. 태그 지정을 사용하면 Artifact Registry에서 버전을 구분하고, 배포를 관리하고, 필요한 경우 이전 버전으로 롤백할 수 있습니다.

다음 gcloud 명령어를 실행하여 빌드 및 배포를 트리거합니다.

# Run from the repository root
#
# The command tags the image with the Git commit SHA.
# To tag with a version number, replace '$(git rev-parse --short HEAD)' with the version number.
gcloud builds submit . \
  --config=cloudbuild.yaml \
  --substitutions=COMMIT_SHA=$(git rev-parse --short HEAD)

이 명령어는 애플리케이션 코드의 초기 배포를 실행합니다. MCG 소스 코드에 업데이트를 배포하려면 이 명령어를 다시 실행합니다.

액세스 권한 부여 및 배포 확인

사용자 또는 서비스 계정이 MCG API를 호출하도록 하려면 Cloud Run 호출자 (roles/run.invoker) IAM 역할을 부여해야 합니다.

gcloud run services add-iam-policy-binding mcg-service \
  --member=<var label="member type, e.g. user or serviceAccount">MEMBER_TYPE</var>:<var label="email address of member">EMAIL_ADDRESS</var> \
  --role=roles/run.invoker \
  --region=<var label="Google Cloud region">your-gcp-region</var>

다음 명령어를 실행하여 서비스 URL을 가져올 수 있습니다. URL은 배포 전반에서 안정적으로 유지됩니다.

SERVICE_URL=$(gcloud run services describe mcg-service \
  --region <var label="Google Cloud region">your-gcp-region</var> \
  --format='value(status.url)')

권한을 부여한 후 /health 엔드포인트를 호출하여 서비스가 실행 중이고 액세스 가능한지 확인합니다. Google Cloud Run 서비스에는 인증이 필요하므로 엔드포인트를 호출할 때 요청 헤더에 gcloud의 승인 토큰을 포함해야 합니다.

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  $SERVICE_URL/health

서비스가 실행 중이면 이 명령어는 OK를 반환하며 이제 API 호출에 설명된 대로 API 엔드포인트를 호출할 수 있습니다.