제공된 웹 데모를 사용하거나 REST API를 직접 호출하여 시뮬레이션을 실행할 수 있습니다.
입력 및 출력
입력 및 출력 파일은 Terraform 설정의 Cloud Storage 버킷을 사용합니다.
입력 디렉터리에는 metrics_config.zip 및 publisher_config.zip 파일이 포함되어야 합니다. 필요에 따라 경로를 정의할 수 있습니다.
출력 버킷에는 ID별로 각 시뮬레이션을 저장하는 simulations 디렉터리가 포함되어 있습니다. 각 시뮬레이션 디렉터리에는 복사된 입력 파일이 있는 입력 폴더와 출력 폴더가 포함되어 있습니다. 출력 폴더에는 버그 신고, Logcat 파일, 생성된 시뮬레이터 파일이 포함되어 있습니다.
웹 데모 사용
이 플랫폼에는 시뮬레이션을 보고, 만들고, 관리할 수 있는 데모용 Flutter 기반 웹 애플리케이션 이 포함되어 있습니다. 필요에 맞게 사용자 인터페이스를 직접 빌드하는 것이 좋습니다.
데모 앱은 App Engine 에 배포되며 사용자가 Google 계정으로 로그인해야 합니다. 이는 Google Cloud 프로젝트에서 구성된 OAuth 2.0 클라이언트 ID 를 사용하여 보호됩니다. 로그인한 계정에는 배포된 Cloud Functions를 호출할 수 있는 IAM 권한이 있어야 합니다. **Cloud Functions 호출자** 역할 (roles/cloudfunctions.invoker)과 같은 사용자 계정에 필요한 권한을 부여하는 방법은 Cloud Functions 액세스 관리를 참고하세요.
사용자 워크플로
- 로그인: OAuth 2.0 프로세스를 사용하여 인증된 Google 계정으로 로그인합니다.
- 시뮬레이션 보기: 기본 페이지에는 모든 실행 정보가 포함된 Firestore 데이터베이스를 쿼리하여 과거 및 현재 시뮬레이션이 모두 나열됩니다.
- 시뮬레이션 만들기: 오른쪽 하단의
+작업 버튼을 클릭하여 새 시뮬레이션을 예약할 수 있는 양식으로 이동합니다. 입력 경로, 빌드 ID, 인스턴스 유형을 비롯한 여러 매개변수를 제공합니다. 자세한 내용은 시뮬레이션 만들기를 참고하세요. - 상태 모니터링: 시뮬레이션 목록이 업데이트되어
새 시뮬레이션의 상태 (
PENDING,RUNNING,COMPLETED, 등)가 표시됩니다. - 결과 보기: 시뮬레이션이 완료되면 생성된 보고서와 아티팩트를 볼 수 있습니다. 입력 파일, 출력 보고서, 로그, Logcat, 버그 신고 는 Cloud Storage 에 저장됩니다.
- 시뮬레이션 삭제: 예약된 시뮬레이션 또는 실행 중인 시뮬레이션을 취소할 수 있습니다.
API 사용량
자동화 및 다른 시스템과의 통합을 위해 REST API 를 사용할 수 있습니다.
인증 섹션 및 엔드포인트 정의에 사용되는 자리표시자 CLOUD_FUNCTION_URL
은 호출되는 Cloud 함수의
기본 URL을 나타냅니다. Google Cloud 콘솔의 Cloud Functions 페이지에서 함수 URL을 찾을 수 있습니다. 각 함수의 URL은 함수 세부정보 페이지의 트리거 탭에 표시됩니다. 또는 apply 명령어를 실행한 후 출력되는 Terraform 출력에서 이러한 URL을 찾을 수 있습니다.
인증
모든 API 요청은 호출자의 ID를 증명하는 ID 토큰 으로 인증되어야 합니다. ID (사용자 또는 서비스 계정)에는 대상 함수에 대한 Cloud Functions 호출자 권한이 있어야 합니다.
1. 사용자 호출 (로컬 및 CLI) 로컬 머신 또는 Google Cloud 이외의 환경에서 API를 호출할 때는 사용자 계정에 대해 획득한 Google에서 발급한 ID 토큰 을 사용해야 합니다.
TOKEN=$(gcloud auth print-identity-token)2. 서비스 계정 호출 (Google Cloud 내) Google Cloud 리소스 (예: Compute Engine VM, 다른 Cloud 함수 또는 Kubernetes 클러스터)에서 API를 호출할 때는 리소스에 연결된 서비스 계정 의 ID를 사용해야 합니다. 토큰은 리소스의 메타데이터 서버에서 가져와야 합니다.
TOKEN=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=CLOUD_FUNCTION_URL" -H "Metadata-Flavor: Google")
검색된 토큰을 요청의 Authorization 헤더에 Bearer 토큰으로 포함합니다.
엔드포인트
Cloud Telemetry Simulation 스택의 사용자 대상 엔드포인트를 사용하면 시뮬레이션을 만들고 삭제하거나 데이터베이스에서 시뮬레이션 정보를 읽을 수 있습니다.
시뮬레이션 만들기
이 엔드포인트는 새 시뮬레이션 요청을 만들고 실행하도록 예약합니다.
- 엔드포인트:
POST https://CLOUD_FUNCTION_URL/simulation-orchestrator-receive-request 요청 본문:
{ "build_id": "latest", "file_path": "inputs/my-test-case/", "instance_type": "n1-standard-8", "owner": "user@example.com", "max_simulation_time": 300, "max_report_count": 5 }build_id(문자열): 사용할 에이전트 Docker 이미지의 태그 (예: 'latest'). 중요: 인프라의 허용된 이미지 맵에 정의된 태그 (예: 'latest', 'stable')와 일치해야 합니다. Terraform에 SHA256 맵이 정의되어 있으면 시스템에서 알 수 없는 태그를 거부합니다.file_path(문자열):metrics_config.zip및publisher_config.zip이 포함된 폴더의 GCS 버킷 내 경로입니다.instance_type(문자열): Compute Engine 머신 유형입니다. 이 유형은n1,n2또는t2d시리즈와 같은 중첩된 가상화를 지원해야 합니다. 자세한 내용은 중첩된 가상화 개요를 참고하세요.owner(문자열): 시뮬레이션을 시작하는 사용자의 이메일입니다.max_simulation_time(정수): 시뮬레이션이 실행되는 최대 시간(초).max_report_count(정수): 시뮬레이션이 완료된 후의 원격 분석 보고서 수입니다.
성공 응답 (200 OK):
{ "id": "sim-a1b2c3d4e5f6" }
시뮬레이션 삭제
이 엔드포인트는 대기 중이거나 실행 중인 시뮬레이션을 취소하고 연결된 리소스를 삭제합니다.
- 엔드포인트:
POST https://CLOUD_FUNCTION_URL/simulation-orchestrator-delete-simulation - 헤더:
Content-Type: application/json
요청 본문:
{ "id": "sim-a1b2c3d4e5f6" }성공 응답 (200 OK): 빈 JSON 객체
{}.
시뮬레이션 데이터 읽기
시뮬레이션 데이터를 읽으려면 simulation-reader 함수와 상호작용하면 됩니다.
이러한 엔드포인트는 GET 메서드를 사용하여 기록, 상태, 시스템 구성을 가져옵니다.
1. 시뮬레이션 나열
필터링 및 정렬을 지원하는 시뮬레이션의 페이지 나누기된 목록을 가져옵니다.
- 엔드포인트:
GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations 쿼리 매개변수 (모두 선택사항):
status(문자열): 시뮬레이션 상태 (running,Simulation request received,cancelled또는completed)로 필터링합니다.owner(문자열): 소유자의 이메일로 필터링합니다.sort_by(문자열): 정렬할 필드 (received_at,status_updated_at,started_at). 기본값은received_at입니다.sort_order(문자열): 정렬 방향(asc또는desc). 기본값은desc입니다.page_size(정수): 페이지당 결과 수입니다. 기본값은 20입니다.page_token(문자열): 결과의 다음 페이지를 가져오는 토큰입니다.
샘플 요청:
curl -H "Authorization: Bearer $TOKEN" "https://CLOUD_FUNCTION_URL/simulation-reader/simulations?status=completed&owner=user@example.com&sort_by=status_updated_at"성공 응답 (200 OK):
- 시뮬레이션 배열과 선택적
next_page_token이 포함된 JSON 객체를 반환합니다.
{ "simulations": [ { "id": "1234-abcd", "owner": "some@email.com", "status": "completed", "status_updated_at": "2025-12-05T14:50:00.952Z", "received_at": "2025-12-05T14:46:43.106Z", "started_at": "2025-12-05T14:47:05.848Z", "ended_at": "0001-01-01T00:00:00Z", "instance_id": "sim-1234-abcd", "ip": "10.156.15.230", "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest", "instance_type": "n1-standard-8", "file_path": "gs://your-project-simulation_files/path/", "max_simulation_time": 60, "max_report_count": 1 }, { "id": "5678-efgh", "owner": "some@email.com", "status": "completed", "status_updated_at": "2025-11-07T14:49:54.25Z", "received_at": "2025-11-07T14:46:54.959Z", "started_at": "2025-11-07T14:47:13.714Z", "ended_at": "0001-01-01T00:00:00Z", "instance_id": "sim-5678-efgh", "ip": "10.156.15.221", "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest", "instance_type": "n1-standard-8", "file_path": "gs://your-project-simulation_files/path/", "max_simulation_time": 60, "max_report_count": 1 } ], "next_page_token": "M7bydGsAptLncj8SOCb1" }- 시뮬레이션 배열과 선택적
2. 특정 시뮬레이션 가져오기
ID별로 특정 시뮬레이션의 전체 세부정보를 가져옵니다.
엔드포인트:
GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/[SIMULATION_ID]성공 응답 (200 OK): 요청된 시뮬레이션의 세부정보가 포함된 JSON 객체를 반환합니다.
{ "id": "1234-abcd", "owner": "some@email.com", "status": "completed", "status_updated_at": "2025-12-05T14:50:00.952Z", "received_at": "2025-12-05T14:46:43.106Z", "started_at": "2025-12-05T14:47:05.848Z", "ended_at": "0001-01-01T00:00:00Z", "instance_id": "sim-1234-abcd", "ip": "10.156.15.230", "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest", "instance_type": "n1-standard-8", "file_path": "gs://your-project-simulation_files/path/", "max_simulation_time": 60, "max_report_count": 1 }
3. 시스템 측정항목 및 구성 가져오기
이러한 엔드포인트는 시뮬레이션 인프라의 현재 부하 및 구성에 대한 통계를 제공합니다.
실행 수 가져오기: 실행 중인 시뮬레이션 수를 반환합니다.
엔드포인트:
GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/running/count성공 응답 (200 OK):
{ "count": 0 }
최대 동시 VM 가져오기: 구성된 최대 동시 실행 VM 수를 반환합니다.
엔드포인트:
GET https://CLOUD_FUNCTION_URL/simulation-reader/config/max-running-vms성공 응답 (200 OK):
{ "max_running_vms": 5 }