보고서 생성 및 읽기

Google Cloud지출의 App Optimize API 보고서를 만들고, 보고서 생성을 모니터링하고, 보고서가 준비되면 결과를 읽는 방법을 알아보세요. 이 빠른 시작 가이드에서는 REST API 또는 Python 클라이언트 라이브러리를 사용할 수 있습니다.

시작하기 전에

  • 이 가이드의 예시에는 분석할 활성 리소스가 있는 Google Cloud 프로젝트가 필요합니다. App Optimize API는 의미 있는 결과를 생성하기 위해 청구 및 사용 데이터가 필요합니다. 새 프로젝트나 빈 프로젝트에 대해 실행되는 보고서는 비어 있습니다.

    이 가이드에서 PROJECT_ID로 식별된 프로젝트는 데이터 범위를 제공하고 보고서 리소스를 호스팅합니다.

    App Optimize API는 한 프로젝트에서 다른 프로젝트 또는 단일 프로젝트 또는 폴더 수준 경계의 애플리케이션 데이터를 분석하는 보고서를 만드는 것을 지원합니다. 여러 프로젝트로 구성될 수 있는 App Hub 애플리케이션에 관한 보고서를 생성하려면 보고서를 생성할 수 있도록 애플리케이션과 연결된 모든 프로젝트에 필요한 모니터링 및 결제 권한이 있어야 합니다.

  • 보고서 리소스를 만들고 관리하는 데 사용할 프로젝트에 앱 최적화 API가 사용 설정되어 있는지 확인합니다.

gcloud

Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

Cloud Shell 활성화

Google Cloud 콘솔 하단에 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

프로덕션 환경의 인증 설정에 대한 자세한 내용은 Google Cloud 인증 문서의 Google Cloud에서 실행되는 코드의 애플리케이션 기본 사용자 인증 정보 설정 을 참고하세요.

Python

  1. App Optimize API용 Python 클라이언트 라이브러리를 설치합니다.
  2. 로컬 개발 환경에서 이 페이지의 Python 샘플을 사용하려면 gcloud CLI를 설치하고 초기화한 후 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정합니다.

    1. Google Cloud CLI를 설치합니다.

    2. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

    3. 로컬 셸을 사용하는 경우 사용자 계정에 대한 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

      Cloud Shell을 사용하는 경우 이 작업을 수행할 필요는 없습니다.

      인증 오류가 반환되고 외부 ID 공급업체(IdP)를 사용하는 경우 제휴 ID로 gcloud CLI에 로그인했는지 확인합니다.

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경의 ADC 설정을 참고하세요.

    프로덕션 환경의 인증 설정에 대한 자세한 내용은 Google Cloud 인증 문서의 Google Cloud에서 실행되는 코드의 애플리케이션 기본 사용자 인증 정보 설정 을 참고하세요.

REST

로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

    Google Cloud CLI를 설치합니다.

    외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참조하세요.

프로덕션 환경의 인증 설정에 대한 자세한 내용은 Google Cloud 인증 문서의 Google Cloud에서 실행되는 코드의 애플리케이션 기본 사용자 인증 정보 설정 을 참고하세요.

필요한 역할

이 빠른 시작을 사용하여 보고서를 만들고 읽는 데 필요한 권한을 얻으려면 관리자에게 활성 리소스가 있는 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

  • App Optimize 관리자 (roles/appoptimize.admin)
  • 뷰어 (roles/viewer) (또는 billing.resourceCosts.get 권한을 부여하는 다른 역할)

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

App Optimize API에 필요한 권한 및 역할에 대한 자세한 내용은 IAM으로 액세스 제어를 참고하세요.

보고서 생성

이 예시에서는 선택한 PROJECT_ID 내의 총 지출 보고서를 만듭니다. 이 보고서는 Compute Engine, Cloud Storage와 같은 사용된 각Google Cloud 제품별, 특정 SKU 및 위치별로 비용을 분류합니다. 보고서에는 지난 3일 동안의 데이터가 포함됩니다.

보고서 리소스를 만들려면 선호하는 방법에 대한 안내를 따르세요.

gcloud

gcloud beta app-optimize reports create 명령어를 사용하여 보고서를 만듭니다.

gcloud beta app-optimize reports create REPORT_ID \
  --project=PROJECT_ID \
  --location=global \
  --dimensions=location,product_display_name,project,sku \
  --metrics=cost \
  --report-filter='hour >= now - duration("72h")' \
  --scopes=project=projects/PROJECT_ID

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REPORT_ID: 새 보고서의 고유 ID입니다(예: my-first-report).

이 명령어는 보고서 생성 작업이 완료될 때까지 기다린 후 생성된 보고서 리소스를 반환합니다.

Python

다음 Python 코드는 AppOptimizeClient.create_report()를 사용하여 보고서를 만듭니다.

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

# Create the App Optimize client and prepare a request for a new report
client = appoptimize_v1beta.AppOptimizeClient()
report = appoptimize_v1beta.Report(
    dimensions=['location', 'product_display_name', 'project', 'sku'],
    metrics=['cost'],
    filter='hour >= now - duration("72h")',
    scopes=[
        appoptimize_v1beta.Scope(project=f"projects/{project_id}"),
    ],
)
request = appoptimize_v1beta.CreateReportRequest(
    parent=f"projects/{project_id}/locations/global",
    report=report,
    report_id=report_id,
)

# Request the creation of the report and wait until the process is done
operation = client.create_report(request=request)
print("Waiting for report creation operation to complete...")
response = operation.result()
print(response)

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REPORT_ID: 새 보고서의 고유 ID입니다(예: my-first-report).

operation.result() 메서드는 보고서 생성 작업이 완료될 때까지 기다립니다.

REST

REST API의 projects.locations.reports 리소스 경로에 HTTP POST 요청을 보냅니다.

  1. 요청을 보내려면 다음 curl 명령어를 사용합니다.

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{
        "scopes": [
          {
            "project": "projects/PROJECT_ID"
          }
        ],
        "dimensions": [
          "location",
          "product_display_name",
          "project",
          "sku"
        ],
        "metrics": [
          "cost"
        ],
        "filter": "hour >= now - duration(\"72h\")"
      }' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports?report_id=REPORT_ID"
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • REPORT_ID: 새 보고서의 고유 ID입니다(예: my-first-report).

    API는 보고서 생성 프로세스를 나타내는 장기 실행 작업 (LRO) 객체를 반환합니다. 응답 예시는 다음과 같습니다.

    {
      "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
      },
      "done": false
    }
    

    "done": false 상태는 보고서가 아직 생성 중임을 나타냅니다. 다음 단계에서 사용할 OPERATION_ID를 기록합니다.

  2. 보고서 생성에는 시간이 걸릴 수 있으므로 생성 프로세스가 완료되고 보고서의 데이터를 다운로드할 준비가 되었다고 표시될 때까지 LRO를 폴링해야 합니다.

    생성 프로세스의 상태를 확인하려면 작업의 리소스 이름에 HTTP GET 요청을 보냅니다.

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/operations/OPERATION_ID"
    

    대답을 검토합니다. "done"false이면 5~15초 동안 기다린 후 이 단계를 반복합니다. "done"true이면 보고서가 준비된 것입니다.

    다음은 작업이 완료되었을 때의 응답 예시입니다.

    {
      "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.Report",
        "name": "projects/PROJECT_ID/locations/global/reports/REPORT_ID",
        "scopes": [
          {
            "project": "projects/PROJECT_ID"
          }
        ],
        "dimensions": [
          "location",
          "product_display_name",
          "project",
          "sku"
        ],
        "metrics": [
          "cost"
        ],
        "filter": "hour >= now - duration(\"72h\")",
        "expireTime": "2026-02-04T22:05:05Z"
      }
    }
    

보고서 데이터 읽기

보고서 데이터를 가져오려면 선호하는 방법에 대한 안내를 따르세요.

gcloud

다음 gcloud beta app-optimize reports read 명령어를 사용하여 보고서의 데이터를 가져옵니다.

gcloud beta app-optimize reports read REPORT_ID \
  --project=PROJECT_ID \
  --location=global

Python

다음 Python 코드는 AppOptimizeClient.read_report()를 사용하여 보고서의 데이터를 가져옵니다.

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"
name = f"projects/{project_id}/locations/global/reports/{report_id}"

# Create the App Optimize client and read your report's data
client = appoptimize_v1beta.AppOptimizeClient()
request = appoptimize_v1beta.ReadReportRequest(
        name=name,
)
result = client.read_report(request=request)

# Display the report's data
print(result)

REST

LRO가 완료되면 REST API의 :read 맞춤 메서드를 사용합니다.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID:read"

API의 응답에는 보고서 데이터 행과 열 정의가 포함됩니다. 다음은 성공적인 응답의 예입니다.

{
  "rows": [
    [
      "us-central1",
      "Compute Engine",
      "projects/PROJECT_ID",
      "6EC2-384A-47D9",
      {
        "currency_code": "USD",
        "units": "25",
        "nanos": 750000000
      }
    ],
    [
      "us-central1",
      "Cloud Storage",
      "projects/PROJECT_ID",
      "9ADA-9ADC-2FBE",
      {
        "currency_code": "USD",
        "units": "5",
        "nanos": 100000000
      }
    ],
    [
      "europe-west1",
      "Compute Engine",
      "projects/PROJECT_ID",
      "6EC2-384A-47D9",
      {
        "currency_code": "USD",
        "units": "18",
        "nanos": 500000000
      }
    ],
    [
      "us-central1",
      "Compute Engine",
      "projects/PROJECT_ID",
      "F61D-4D51-AAFC",
      {
        "currency_code": "USD",
        "units": "12",
        "nanos": 200000000
      }
    ]
  ],
  "columns": [
    {
      "name": "location",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "product_display_name",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "project",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "sku",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "cost",
      "type": "RECORD",
      "mode": "NULLABLE",
      "columns": [
        {
          "name": "currency_code",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "units",
          "type": "INT64",
          "mode": "NULLABLE"
        },
        {
          "name": "nanos",
          "type": "INT64",
          "mode": "NULLABLE"
        }
      ]
    }
  ],
  "next_page_token": ""
}

행이 많은 보고서는 페이지로 나뉩니다. 여러 페이지를 처리하려면 보고서 데이터 읽기를 참고하세요.

cost 필드의 값을 이해하려면 비용 측정항목 해석을 참고하세요. 데이터에 대한 자세한 내용과 제한사항을 알아보려면 데이터 이해하기를 참고하세요.

삭제

App Optimize API는 보고서가 생성된 후 24시간이 지나면 자동으로 삭제합니다. 보고서를 더 빨리 삭제하려면 선호하는 방법에 대한 안내를 따르세요.

gcloud

gcloud beta app-optimize reports delete 명령어를 사용하여 보고서를 삭제합니다.

gcloud beta app-optimize reports delete REPORT_ID \
  --project=PROJECT_ID \
  --location=global

Python

다음 코드는 AppOptimizeClient.delete_report()를 사용하여 신고를 삭제합니다.

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

name = f"projects/{project_id}/locations/global/reports/{report_id}"
client = appoptimize_v1beta.AppOptimizeClient()
request = appoptimize_v1beta.DeleteReportRequest(name=name)
client.delete_report(request=request)
print(f"Deleted report: {name}")

REST

HTTP DELETE 요청을 보고서의 리소스 엔드포인트로 보냅니다.

curl -X DELETE \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID"

다음 단계