배포 가이드

Cloud Telemetry Simulation 플랫폼을 사용하려면 Google Cloud 프로젝트에 인프라를 배포해야 합니다.

소스 코드 액세스

Cloud Telemetry Simulation 플랫폼의 소스 코드는 GitHub의 aaos-sdv-telemetry-simulator에 호스팅됩니다.

기본 요건

플랫폼을 배포하려면 다음 기본 요건을 충족해야 합니다.

  • 결제가 사용 설정된 Google Cloud 프로젝트
  • 웹 데모 보안: 웹 데모를 배포하는 경우 Google Cloud API 및 서비스 > 사용자 인증 정보에서 OAuth 2.0 클라이언트 ID를 구성하여 App Engine 애플리케이션을 보호하고 승인된 Google 계정으로 액세스를 제한해야 합니다.
  • 소프트웨어 정의 차량 (SDV) 빌드 아티팩트: 자체 컴파일된 SDV 이미지 아티팩트가 있어야 합니다. 이 저장소에는 제공되지 않습니다.
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • 권한: Terraform을 실행하는 사용자 또는 서비스 계정에는 구성에 정의된 리소스를 만들 수 있는 충분한 권한이 있어야 합니다(예: 프로젝트 편집자 또는 Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage, 기타 필요한 서비스에 대한 권한이 있는 커스텀 역할).
  • 도구:
    • Google Cloud CLI (gcloud CLI)
    • Terraform (저장소에서 사용되는 버전)
    • Docker
    • Go (저장소의 조정자 함수에 사용되는 버전)

Google Cloud 인프라 배포

시뮬레이션 플랫폼을 배포하려면 Terraform을 사용하여 핵심 인프라를 Google Cloud에 배포하고 시뮬레이션 에이전트 Docker 이미지를 빌드하여 Artifact Registry에 푸시하는 두 가지 주요 단계를 거쳐야 합니다. 이 섹션에서는 인프라 배포 과정을 안내합니다.

다음 변수의 값을 입력하여 이 페이지의 코드 스니펫을 업데이트합니다.

  1. Terraform 백엔드 구성: Terraform이 Cloud Storage에 상태 파일을 저장하는 위치를 지정하는 파일을 만듭니다. 다음 문법을 사용하여 파일 이름을 지정합니다.

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. 프로젝트 변수 구성: 프로젝트 세부정보로 이름이 지정된 파일을 만듭니다. 다음 문법을 사용하여 파일 이름을 지정합니다.

    environments/ENVIRONMENT/variables.tfvars
    
    # environments/ENVIRONMENT/variables.tfvars
    project_id       = "PROJECT_ID"
    default_region   = "REGION"
    default_zone     = "ZONE"
    agent_docker_image = "REGION-docker.pkg.dev/PROJECT_ID/sim-agents/simulation-agent"
        # Security: Map logical tags to SHA256 digests
    
    # Security: Map logical tags to SHA256 digests (optional)
    supported_agent_builds = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_vm_count = 5
    
  3. Terraform 구성 적용: infrastructure 디렉터리로 이동한 후 구성을 초기화하고 적용합니다.

    # Initialize Terraform with your backend configuration
    terraform init -backend-config=environments/ENVIRONMENT/backend.hcl
    
    # (Optional) Preview the changes
    terraform plan --var-file=environments/ENVIRONMENT/variables.tfvars
    
    # Apply the changes to deploy the infrastructure
    terraform apply --var-file=environments/ENVIRONMENT/variables.tfvars
    

시뮬레이션 에이전트 이미지 빌드 및 푸시

시뮬레이션 에이전트는 Compute Engine 가상 머신(VM)에서 시뮬레이션을 실행합니다. SDV 아티팩트로 빌드하고 Artifact Registry에 푸시합니다.

시뮬레이션 에이전트 이미지를 빌드하고 푸시하려면 다음 안내를 따르세요.

  1. 아티팩트 배치: cvd-host_package.tar.gz 및 sdv_core_cf-img-<version>.zip 파일을 simulation-agent/sdv-image-resources/ 디렉터리에 복사합니다.

  2. 빌드 및 푸시: simulation-agent 디렉터리로 이동한 후 이미지를 빌드하고 푸시합니다. I이미지 경로를 variables.tfvars 파일에서 구성한 경로로 바꿉니다.

    # Example using the path from the .tfvars example above
    export AGENT_IMAGE="REGION-docker.pkg.dev/PROJECT_ID/sim-agents/simulation-agent:latest"
    
    # Build the image
    docker build -t $AGENT_IMAGE .
    
    # Push the image to Artifact Registry
    docker push $AGENT_IMAGE
    
  3. 디지털 지문 업데이트: 새 이미지를 푸시한 후 SHA256 다이제스트를 가져와 variables.tfvars 파일의 supported_agent_builds 맵을 업데이트한 후 terraform apply를 다시 실행해야 할 수 있습니다.

    # Get the digest using gcloud
    gcloud artifacts docker images describe $AGENT_IMAGE --format="value(image_summary.digest)"
    

    Cloud Telemetry Simulation 플랫폼이 배포되었으며 시뮬레이션 요청을 수락할 준비가 되었습니다.

운영 및 문제 해결

이 솔루션을 사용하면 Google Cloud에 기본 제공되는 모니터링 가능성 도구를 사용할 수 있습니다. 요청당 및 시뮬레이션 실행 중에만 컴퓨팅 리소스를 사용합니다.

비용 관리

이 아키텍처는 서버리스 및 임시 리소스를 사용하여 비용 효율적으로 설계되었습니다. 비용은 주로 다음 요소에 의해 결정됩니다.

  • Compute Engine: 시뮬레이션 VM이 실행되는 시간에 대해 청구됩니다. 스팟 VM을 사용하면 이 비용을 크게 줄일 수 있습니다.
  • Cloud Functions: 호출당 청구됩니다.
  • Cloud Storage: 입력 및 출력 파일과 로그를 저장하는 데 요금이 청구됩니다.
  • Firestore: 읽기, 쓰기, 데이터 스토리지에 대한 요금이 청구됩니다.

관측 가능성

모든 구성요소는 Google Cloud 운영 제품군과 통합됩니다.

  • 로그 탐색기: 문제 해결을 위한 기본 도구입니다. 리소스별로 로그를 필터링할 수 있습니다.
    • Cloud Functions: receive-request 또는 schedule-simulation 함수의 로그를 확인하여 조정 문제를 디버깅합니다.
    • Compute Engine: VM 인스턴스 로그에서 시작 또는 종료 문제를 확인합니다.
    • 시뮬레이션 에이전트: Docker 컨테이너 내에서 실행되는 에이전트가 로그를 로그 탐색기로 전달합니다. VM 인스턴스 이름으로 필터링하여 자세한 시뮬레이션 진행 상황을 확인합니다.
  • Cloud Storage: 완료된 시뮬레이션의 경우 Cuttlefish 기기의 logcat 및 bugreport 파일이 Cloud Storage 버킷의 시뮬레이션 출력 디렉터리에 업로드되어 Android 환경의 동작에 관한 심층적인 정보를 제공합니다.

서비스 계정

Terraform은 안전한 최소 권한 환경을 사용 설정하기 위해 여러 서비스 계정을 만듭니다. 주요 서비스 계정은 다음과 같습니다.

  1. 실행 ID (VM):

    • simulation-agent:
      • 연결 대상: 시뮬레이션을 실행하는 Compute Engine VM입니다.
      • 역할: VM이 결과를 업로드하고 완료를 알릴 수 있도록 허용합니다.
      • 권한:
        • roles/storage.objectUser: 입력을 읽고 아티팩트 (로그, 보고서)를 Cloud Storage에 업로드합니다.
        • roles/run.invoker: finish-simulation 함수를 인증하고 호출합니다.
  2. 조정 ID (함수):

    • read-simulations-function:
      • 연결 대상: read-simulation Cloud 함수
      • 권한:
        • roles/datastore.user: Firestore에서 시뮬레이션 및 실행 중인 VM 레코드를 읽습니다.
    • receive-request-function:

      • 연결 대상: receive-request Cloud 함수
      • 권한:
        • roles/datastore.user: Firestore에 새 PENDING 시뮬레이션 레코드를 만듭니다.
        • roles/storage.objectUser: Cloud Storage에 입력 파일이 있는지 확인합니다.
    • scheduler-function:

      • 연결 대상: schedule-simulation Cloud 함수
      • 권한:
        • roles/pubsub.subscriber: 시뮬레이션 큐에서 메시지를 가져옵니다.
        • roles/datastore.user: running-vms 카운터에 원자적 읽기 및 쓰기를 수행합니다.
        • roles/compute.instanceAdmin.v1: Compute Engine VM을 만들고 시작합니다.
        • roles/iam.serviceAccountUser: 이 함수가 생성하는 VM에 simulation-agent 서비스 계정을 할당할 수 있습니다.
    • simulation-finisher-function:

      • 연결 대상: finish-simulation Cloud 함수
      • 권한:
        • roles/compute.instanceAdmin.v1: 실행이 완료된 후 VM을 삭제합니다.
        • roles/datastore.user: 시뮬레이션 상태를 COMPLETED 또는 FAILED로 업데이트합니다.
    • delete-simulation-function:

      • 연결 대상: delete-simulation Cloud 함수
      • 권한:
        • roles/compute.instanceAdmin.v1: 취소 중에 가상 머신을 강제 삭제합니다.
        • roles/datastore.user: 취소된 작업의 상태를 업데이트합니다.
  3. 트리거 ID:

    • scheduler-trigger:

      • 사용 대상: Eventarc (이벤트) 및 Cloud Scheduler 트리거
      • 권한: 조정자 함수를 트리거하는 roles/eventarc.eventReceiver 및 roles/run.invoker
    • cleanup-scheduler:

      • 사용: 정리를 위한 Cloud Scheduler 크론 작업
      • 권한: 삭제 로직을 트리거하는 roles/run.invoker

이러한 서비스 계정의 Identity and Access Management 정책을 관리하는 것은 시스템 내에서 액세스 및 권한을 제어하는 기본 방법입니다.