앱의 백엔드 통합

이 섹션에서는 앱의 백엔드를 Cloud Marketplace와 통합하는 단계를 설명합니다. 이 통합을 통해 사용자가 Cloud Marketplace에서 제품을 구매했음을 나타내는 사용자 계정과 사용 권한을 관리할 수 있습니다. 사용량 기준 가격 책정 모델을 선택한 경우 백엔드를 통합하여 사용량을 Google에 보고합니다.

기본 앱을 Cloud Marketplace와 통합하는 예시와 샘플 코드를 보려면 관리형 서비스를 통합하는 Codelab을 참조하세요.

Codelab에 사용된 샘플 코드는 GitHub 저장소를 참조하세요.

시작하기 전에

  • 앱 통합: 설정에 설명된 대로 Cloud Commerce Partner Procurement API에 대한 액세스를 설정합니다.
  • 사용량 기준 가격 책정 방식을 선택한 경우, 사용량을 보고할 수 있는 서비스를 파트너 엔지니어가 만들었는지 확인합니다. 이 서비스는 Producer Portal의 결제 통합 섹션에 있는 서비스 도메인 필드에 표시됩니다.

서비스 계정 만들기

Google Cloud와 제품을 통합하려면 제품에 사용할 프로젝트에서 서비스 계정을 만들어야 합니다. 앱에서 이 서비스 계정을 사용하여 Cloud Marketplace Partner API와 상호작용하고 사용자 구매 정보를 가져옵니다.

Producer Portal을 사용하여 서비스 계정을 만들고 연결합니다. 서비스 계정을 만드는 자세한 단계는 서비스 계정 만들기 및 관리를 참조하세요.

Producer Portal을 사용하여 앱의 백엔드 통합

한 곳에서 서비스 계정 및 요금제 수준 식별자 등 앱의 백엔드를 Cloud Marketplace와 통합하는 데 필요한 모든 정보에 액세스하려면 Producer Portal의 결제 통합 섹션을 사용하면 됩니다

Producer Portal에 바로 연결되는 링크는 다음과 같습니다.

https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID

결제 통합 섹션에 액세스하려면 다음 안내를 따르세요.

  1. 제품 목록에서 제품 이름을 클릭합니다.

  2. 제품의 개요 페이지에서 기술 통합 섹션으로 이동하여 결제 통합을 클릭합니다.

Producer Portal에서 서비스 계정 만들기 및 연결

Producer Portal의 결제 통합 섹션을 사용하여 Partner API와 상호작용하는 데 사용할 서비스 계정을 만들고 연결하며 사용자의 구매 정보를 가져올 수 있습니다.

Producer Portal에 바로 연결되는 링크는 다음과 같습니다.

https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID

다음 단계에서는 기존 서비스 계정을 사용하거나 새 서비스 계정을 만들 수 있습니다. 새 서비스 계정을 만드는 경우 서비스 계정 이름 필드에 서비스 계정 이름을, 서비스 계정 ID 필드에 서비스 계정 ID를 지정한 후 만들기 및 링크를 클릭합니다.

서비스 계정을 연결하려면 다음 단계를 따르세요.

  1. 제품 목록에서 제품 이름을 클릭합니다.

  2. 제품의 개요 페이지에서 기술 통합 섹션으로 이동하여 결제 통합을 클릭합니다.

  3. Partner Procurement API와 통합하려면 서비스 계정을 연결하여 Procurement API를 호출 아래에서 서비스 계정 추가를 클릭합니다. 필드에 기존 서비스 계정을 입력하거나 새 서비스 계정을 만들 수 있습니다.

  4. Pub/Sub와 통합하려면 서비스 계정을 연결하여 Pub/Sub 주제 구독에서 서비스 계정 추가를 클릭합니다. 필드에 기존 서비스 계정을 입력하거나 새 서비스 계정을 만들 수 있습니다.

  5. Service Control API와 통합하려면 서비스 계정에 roles/servicemanagement.serviceController 추가에서 서비스 계정 추가를 클릭합니다. 필드에 기존 서비스 계정을 입력하거나 새 서비스 계정을 만들 수 있습니다.

사용자 계정 작업

앱에서 대략적으로 다음과 같은 시나리오를 처리해야 합니다.

  1. 사용자가 Cloud Marketplace에서 제품 등록과 같은 요청 또는 변경을 수행합니다.

  2. Cloud Marketplace는 Pub/Sub를 통해 eventType 필드의 요청 정보가 포함된 알림을 앱에 보냅니다. 예를 들어 사용자가 자격을 변경하면 eventTypeENTITLEMENT_PLAN_CHANGED가 됩니다.

    가능한 eventType의 전체 목록을 참조하세요.

  3. 요청을 승인하기 위해 앱은 Partner Procurement API에 HTTP POST 요청을 보냅니다.

다음 섹션에서는 사용자가 수행할 수 있는 요청 유형 및 앱이 요청을 처리하기 위해 수행해야 하는 작업을 설명합니다.

이 섹션에 설명된 API 호출에 대해 다음 엔드포인트를 사용합니다.

https://cloudcommerceprocurement.googleapis.com/

새 사용자의 계정 만들기

사용자가 처음으로 제품을 구입하면 Cloud Marketplace에서 사용자와 개발자와의 관계를 추적하는 계정 리소스를 만듭니다. 계정 리소스가 생성되면 생성된 Pub/Sub 주제를 통해 알림을 받습니다. Pub/Sub 메시지의 형식은 다음과 같습니다.

{
  "eventId": "...",
  "providerId": "YOUR_PARTNER_ID",
  "account": {
    "id": "USER_ACCOUNT_ID",
    "updateTime": "..."
  }
}

여기서 USER_ACCOUNT_ID는 Cloud Marketplace에서 만든 계정 ID이고 YOUR_PARTNER_ID는 파트너 엔지니어가 Partner Procurement API에 대한 액세스를 사용 설정할 때 개발자에게 할당된 ID입니다.

동시에 사용자가 등록 페이지로 연결되고, 여기에서 개발자 시스템의 계정을 만듭니다. 등록 페이지 만들기에 대한 자세한 내용은 앱의 프런트엔드 통합을 참조하세요.

사용자 계정 승인

사용자가 등록에 성공하면 앱에서 Partner Procurement API를 호출하고 계정이 승인되었음을 표시해야 합니다. 계정은 ACCOUNT_ACTIVE 상태로 작성되지만 signup라고 부르는 approvals 필드에 PENDING 항목이 존재하며 이는 사용자가 아직 등록되지 않았다는 의미입니다. 사용자가 등록한 후 계정을 승인하려면 다음 HTTP POST 요청을 사용합니다.

POST v1/providers/YOUR_PARTNER_ID/accounts/USER_ACCOUNT_ID:approve {'approvalName': 'signup'}

사용자 계정 상태 확인

연결된 계정의 상태를 확인하려면 다음 HTTP GET 요청을 사용하세요.

GET v1/providers/YOUR_PARTNER_ID/accounts/USER_ACCOUNT_ID

응답은 다음 형식입니다.

{
  "name": "providers/YOUR_PARTNER_ID/accounts/USER_ACCOUNT_ID",
  "provider": "acme-services",
  "state": "ACCOUNT_ACTIVE",
  "approvals": [{
    "name": "signup",
    "state": "APPROVED",
    "updateTime": "...",
  }],
  "updateTime": "...",
  "createTime": "..."
}

가능한 계정 상태 목록은 providers.accounts API 참조를 참조하세요.

사용 권한 관리

고객이 소프트웨어의 요금제를 선택하면 Google은 사용 권한을 만들어 고객이 Cloud Marketplace에서 제품을 구매했음을 나타냅니다. 이 섹션에서는 Partner Procurement API를 사용하여 고객의 자격을 만들고 관리하는 방법을 검토합니다.

자격 관리에 대한 자세한 내용은 참고 문서를 확인하세요.

동일한 제품의 여러 주문을 사용 설정한 경우 Partner Procurement API에서 동일한 ACCOUNT_ID에 대해 ENTITLEMENT_ACTIVE 이벤트 유형을 사용하여 여러 이벤트를 전송할 수 있으며, 이때 각 이벤트는 서로 다른 오퍼에 대해 고유한 ENTITLEMENT_ID를 사용합니다. 이 경우 애플리케이션의 이벤트 처리 로직을 ACCOUNT_ID 또는 PRODUCT_ID 대신 ENTITLEMENT_ID에 응답하도록 수정해야 합니다.

또한 JWT 페이로드에서 전송된 새 orders 객체를 처리하도록 프런트엔드 통합을 변경해야 합니다. 자세한 내용은 앱의 프런트엔드 통합을 참조하세요.

동일한 제품의 여러 주문을 선택하는 방법에 대한 자세한 내용은 동일한 제품의 여러 주문 사용 설정을 참고하세요.

사용 권한 승인 또는 거부

고객이 요금제를 선택하면 Cloud Marketplace에서 사용 권한을 만들고 앱에 다음과 같은 Pub/Sub 메시지를 전송합니다.

{
  "eventId": "...",
  "eventType": "ENTITLEMENT_CREATION_REQUESTED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "updateTime": "...",
    "newOfferDuration": "P2Y3M",   // Contract duration for offer-based entitlements
  },
}

여기서 ENTITLEMENT_ID는 Cloud Marketplace에서 만든 ID입니다. 오퍼에 지정된 기간이 있으면 해당 기간이 연 및 월 단위로 제공됩니다. 오퍼에 기간 대신 지정된 종료 날짜가 있으면 기간을 나타내는 필드가 비어 있습니다.

시스템에서 사용자가 요금제를 구입한 것이 반영되도록 사용자 계정을 업데이트합니다. 그런 다음 자격을 승인하기 위해 Partner Procurement API에 대해 HTTP POST 요청을 실행하고 승인 중인 ENTITLEMENT_ID를 보냅니다.

POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:approve

자격을 거부하려면 HTTP POST 요청에 reject 메서드를 대신 사용합니다.

POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:reject

요청 본문에서 사용 권한을 거부하는 이유를 제공하려면 다음 형식을 사용합니다.

{
  "reason": "..."
}

사용 권한 요금제 변경

가격 책정 요금제를 설정한 방법에 따라 고객은 자신의 요금제를 변경할 수 있습니다. 고객이 새로운 가격 책정 요금제를 선택하면, 다음 형식의 Pub/Sub 메시지가 수신됩니다.

{
  "eventId": "...",
  "eventType": "ENTITLEMENT_PLAN_CHANGE_REQUESTED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "newPlan": "ultimate",   // New plan
    "updateTime": "...",
    "newOfferDuration": "P2Y3M",   // Contract duration for the new offer, for offer-based entitlements
  },
}

오퍼에 지정된 기간이 있으면 해당 기간이 연 및 월 단위로 제공됩니다. 오퍼에 기간 대신 지정된 종료 날짜가 있으면 기간을 나타내는 필드가 비어 있습니다.

요금제 변경을 승인하려면 Partner Procurement API에 다음과 같은 HTTP POST 요청을 보냅니다.

POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:approvePlanChange

요청 본문에는 승인 중인 요금제가 있어야 합니다.

{
  "pendingPlanName": PLAN_NAME
}

변경이 승인된 후에는 변경이 적용될 때 또 다른 Pub/Sub 메시지가 수신됩니다. 메시지에서 eventType 필드가 ENTITLEMENT_PLAN_CHANGED로 변경됩니다. 요금제 상태를 확인하려면 Partner Procurement API에 다음 HTTP GET 요청을 수행합니다.

GET v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID

응답은 다음과 유사하며 state 필드는 새 요금제의 활성화 여부 또는 요금제 변경이 여전히 보류 중인지 여부를 나타냅니다.

{
  "name": "providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID",
  "provider": "YOUR_PARTNER_ID",
  "account": "USER_ACCOUNT_ID",
  "product": "example-server",
  "plan": "pro",
  "state": "ENTITLEMENT_PENDING_PLAN_CHANGE",
  "newPendingPlan": "ultimate",
  ...
}

사용자에게 상태 메시지 전송

사용자가 가격 책정 요금제를 선택한 시점과 백엔드가 자격을 승인한 시점 사이의 시간이 몇 시간 이상인 경우, 사용자에게 상태 메시지를 제공하는 것이 좋습니다. 이 메시지에서는 승인 진행 상태와 승인이 완료될 예상 시간을 표시합니다.

상태 메시지를 제공하려면 Procurement API에 다음 HTTP POST 요청을 수행합니다.

POST v1/providers/your-partner-id/entitlements/entitlement_id:updateUserMessage

요청 본문에서 다음 예와 비슷한 메시지 텍스트를 제공합니다.

{
  "message": "Approval expected in 2 days"
}

사용 권한 취소

사용자가 자격을 취소하기로 결정하면 Pub/Sub 알림을 받습니다. 요금제 변경과 비슷하게, 실제 취소는 현재 청구 주기가 종료될 때 적용될 수 있습니다.

알림은 다음 형식입니다.

{
  "eventId": "...",
  // If the entitlement is canceled at the end of the month,
  // eventType is ENTITLEMENT_PENDING_CANCELLATION
  "eventType": "ENTITLEMENT_CANCELLED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "updateTime": "..."
  },
}

자격 삭제

사용자가 Google 지원팀에 직접 요청하거나 Google 플랫폼을 떠나면, 사용자의 자격이 즉시 취소되고 60일의 유예 기간이 지난 후 자격 및 계정이 삭제됩니다. 사용자의 개인정보 보호를 위해 알림을 받았을 때 서버에서 해당 데이터를 삭제해야 합니다.

자격이 취소되고 계정이 삭제되면 다음과 비슷한 알림이 수신됩니다.

{
  "eventId": "...",
  "eventType": "ENTITLEMENT_DELETED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "updateTime": "...",
  },
}
{
  "eventId": "...",
  "eventType": "ACCOUNT_DELETED",
  "providerId": "YOUR_PARTNER_ID",
  "account": {
    "id": "USER_ACCOUNT_ID",
    "updateTime": "...",
  },
}

계정 작업의 이벤트 유형 목록

다음은 앱이 Pub/Sub 메시지에서 받을 수 있는 eventType 목록입니다.

eventType설명
ACCOUNT_CREATION_REQUESTED지원 중단됨
ACCOUNT_ACTIVE고객의 계정이 생성되었음을 나타냅니다.
ACCOUNT_DELETED고객의 계정이 Google Cloud 시스템에서 삭제되었음을 나타냅니다.
ENTITLEMENT_CREATION_REQUESTED고객이 요금제 중 하나를 선택했음을 나타냅니다.
ENTITLEMENT_OFFER_ACCEPTED고객이 오퍼를 수락했음을 나타냅니다. 오퍼의 예약된 시작 시간이 있는 경우 이를 포함합니다.
ENTITLEMENT_ACTIVE고객이 선택한 요금제가 활성화 되었음을 나타냅니다.
ENTITLEMENT_PLAN_CHANGE_REQUESTED고객이 새로운 요금제를 선택했음을 나타냅니다.
ENTITLEMENT_PLAN_CHANGED고객의 요금제 변경이 승인되었으며 변경 사항이 적용되었음을 나타냅니다.
ENTITLEMENT_PLAN_CHANGE_CANCELLED고객의 요금제 변경이 승인되지 않았거나 이전 요금제로 다시 전환되었기 때문에 취소되었음을 나타냅니다.
ENTITLEMENT_PENDING_CANCELLATION고객이 요금제를 취소했으며 결제 주기가 끝날 때까지 취소가 보류 중임을 나타냅니다.
ENTITLEMENT_CANCELLATION_REVERTED고객의 대기 중인 취소가 되돌려졌음을 나타냅니다. 취소는 완료된 후에는 취소를 되돌릴 수 없습니다.
ENTITLEMENT_CANCELLED고객의 요금제가 취소되었음을 나타냅니다.
ENTITLEMENT_CANCELLING고객의 요금제 취소를 처리 중임을 나타냅니다.
ENTITLEMENT_RENEWED고객의 자격이 다른 기간 동안 갱신되었음을 나타냅니다. 갱신을 완료하기 위해 별도의 조치를 취할 필요가 없습니다.
ENTITLEMENT_OFFER_ENDED고객의 프라이빗 오퍼가 종료되었음을 나타냅니다. 고객의 자격이 취소된 경우 별도의 ENTITLEMENT_CANCELLED 이벤트가 트리거됩니다. 고객의 자격이 아직 활성 상태라면 요금제가 할인되지 않은 가격으로 되돌아갑니다.
ENTITLEMENT_DELETED고객 요금제에 대한 정보가 Cloud Marketplace에서 삭제되었음을 나타냅니다.

(사용량 기반 가격 책정의 경우) Google에 사용량 보고

제품의 사용량 기준 가격 책정을 선택한 경우, 앱의 사용량을 Service Control API에 보고해야 합니다.

Service Control에 대한 소개는 시작 가이드를 참조하세요.

Service Control에 사용할 수 있도록 Producer Portal을 사용하여 Producer Portal에 서비스 계정을 만드는 것이 좋습니다.

자격이 생성되면, 다음 HTTP GET 요청을 사용하여 파트너 조달 API를 호출하여 usageReportingId을 검색해야 합니다.

GET v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID

응답에는 다음 형식의 자격 관련 정보가 포함됩니다.

{
  "name": "providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID",
  "provider": "YOUR_PARTNER_ID",
  "account": "USER_ACCOUNT_ID",
  "product": "example-messaging-service",
  "plan": "pro",
  "usageReportingId": "USAGE_REPORTING_ID",
  "state": "ENTITLEMENT_ACTIVATION_REQUESTED",
  "updateTime": "...",
  "createTime": "..."
}

사용량을 보고하려면 먼저 services.check API 호출을 보내 서비스 구성을 확인해야 합니다. 응답에서 checkErrors[] 객체가 비어 있으면 services.report API 호출을 수행하여 사용량 보고서를 보내십시오.

사용량 보고서는 Service Control API Operation입니다. 다음은 고객이 사용 중인 스토리지에 대한 정보를 보내는 example-messaging-service에 대한 사용량 보고서의 예시입니다.

POST https://servicecontrol.googleapis.com/v1/services/example-messaging-service.gcpmarketplace.example.com:report
{
  "operations": [{
    "operationId": "1234-example-operation-id-4567",
    "operationName": "Hourly Usage Report",
    "consumerId": "USAGE_REPORTING_ID",
    "startTime": "2019-02-06T12:00:00Z",
    "endTime": "2019-02-06T13:00:00Z",
    "metricValueSets": [{
      "metricName": "example-messaging-service/UsageInGiB",
      "metricValues": [{ "int64Value": "150" }]
    }],
    "userLabels": {
      "cloudmarketplace.googleapis.com/resource_name": "order_history_cache",
      "cloudmarketplace.googleapis.com/container_name": "storefront_prod",
      "environment": "prod",
      "region": "us-west2"
    }
  }]
}

각 매개변수는 다음과 같습니다.

  • operationId는 서비스 인스턴스가 생성하는 고유한 문자열입니다. checkreport 작업에는 동일한 operationId를 사용해야 합니다.

  • consumerId는 자격의 usageReportingId와 동일합니다.

  • startTimeendTimereport 작업의 전체 간격의 시작 및 종료 시간을 나타냅니다. 대부분의 경우 report 작업의 startTime은 이전 report 작업의 endTime과 동일한 값을 가져야 합니다.

    고객의 서비스가 report 작업의 startTime 전에 사용 중지되면 services.check API 호출은 checkErrors[] 객체에서 오류를 전송하며 해당 간격에 대해서는 고객에게 요금이 청구되지 않습니다.

  • MetricValueSet에는 하나 이상의 중간 시간 간격과 해당하는 업데이트된 측정항목 값이 포함됩니다. 가격 책정 모델을 선택하고 제출할 때 서비스 측정항목을 정의합니다.

    Producer Portal의 기술 통합 섹션에서 측정항목의 식별자를 보고 참조합니다.

  • userLabels는 특정 문법 요구사항을 따르는 키-값 문자열로 정의된 사용자가 만든 라벨입니다. 이러한 라벨은 기여 분석을 위해 Cloud Billing 비용 관리 도구에 전달됩니다. 권장되는 라벨 지정 규칙은 사용량 라벨 지정 권장사항을 참조하세요.

services.check API가 다음 오류 중 하나 이상을 리턴하면 오류가 해결될 때까지 고객에게 서비스 제공을 중지하는 것이 좋습니다.

  • SERVICE_NOT_ACTIVATED
  • BILLING_DISABLED
  • PROJECT_DELETED

사용량 보고 권장사항

사용자 작업 또는 리소스 사용률과 같은 사용량을 보고할 때 고객에게 올바른 요금을 청구하도록 다음 정보에 유의하세요.

어커런스 시점의 사용량 보고

사용량 보고가 지연되면 고객의 비용 관리 환경이 저하되고 파트너 보고서에 반영되지 않을 수 있습니다. 서비스 제공업체는 사용량이 생성된 후 1시간 이내에 사용량을 보고해야 합니다.

사용량을 보고하는 데 시간이 더 필요한 경우 파트너 엔지니어에게 문의하세요.

자격을 취소한 후 사용량 보고

자격이 취소된 후 보고되지 않은 사용량이 있는 경우 사용량이 생성된 실제 시간을 나타내는 타임스탬프로 계속 보고할 수 있습니다. 타임스탬프는 자격이 취소되기 전이어야 합니다. 1시간 이내에 사용량을 보고합니다. 자격이 종료된 후 사용량을 새 사용량으로 보고해서는 안 됩니다.

월말 사용량 보고

1시간 보고 기간은 월말 마감 기한에 적용됩니다. 현재 월의 인보이스에 사용량이 보고되도록 하려면 해당 월 말일의 다음 날 오전 1시(미국 및 캐나다 태평양 표준시(UTC-7 또는 UTC-8)) 기준으로 사용량을 보고합니다.

예를 들어 9월 인보이스의 경우 10월 1일 오전 1시(미국 및 캐나다 태평양 표준시(UTC-7 또는 UTC-8)) 기준으로 사용량을 보고합니다.

뒤늦게 사용량이 보고된 경우 해당 사용량은 이번 달 인보이스에 포함되지 않을 수 있습니다.

어커런스 시점의 사용량을 보고하지 못하도록 하는 고객 조치 구제

사용량을 보고할 수 없거나 서비스 또는 결제가 장시간 사용 중지되었으면 고객에게 서비스를 복원할 수 있도록 유예 기간을 제공하는 것이 좋습니다. 30일을 초과하지 않는 것이 좋습니다. 이 유예 기간 동안 다음을 수행하는 것이 좋습니다.

  • 제공된 서비스 성능 저하. 예를 들어 고객을 무료 등급으로 전환하거나 통화를 거부합니다.

  • 서비스가 중지된 동안 사용량 로그를 계속 수집합니다. 서비스가 사용 설정된 후 재생할 수 있도록 최대 1시간마다 청구 분석으로 사용량을 수집하는 것이 좋습니다.

서비스가 사용 설정된 경우 서비스가 사용 중지된 동안 수집된 사용량을 데이터가 수집된 시간의 실제 사용량으로 보고해야 합니다. 또한 일반 사용량 보고를 재개해야 합니다.

Kubernetes 앱의 경우 앱이 시작될 때 사용량 보고가 실패하면 고객이 문제를 즉시 확인하고 해결할 수 있도록 앱이 자체적으로 중지되도록 설정하는 것이 좋습니다.

사용량 라벨 지정 권장사항

사용량 기반 SaaS 제품의 경우 사용량이 usageReportingId 필드로 지정된 단일 프로젝트에 대해 청구됩니다. 일부 시나리오에서 SaaS 제품은 고객의 조직 내에서 광범위하게 공유되고 여러 고객 프로젝트에서 사용될 수 있습니다. 보다 구체적인 비용 기여 분석을 사용하려면 사용량 기반 SaaS 제품의 사용량 보고서 작업에 선택사항 userLabels 필드를 포함하는 것이 좋습니다.

서비스가 기본적으로 리소스 라벨 개념을 지원하는 경우 사용량 보고서에 해당 라벨을 전달하는 것이 좋습니다. 라벨은 문법 요구사항을 준수해야 합니다.

Cloud Marketplace에서 다음 라벨을 예약합니다. 이러한 라벨을 사용하여 고유 서비스 플랫폼 내에서 사용에 대한 추가 컨텍스트를 식별할 수 있습니다. 기본적으로 사용 보고서에 이러한 라벨을 포함하는 것이 좋습니다.

라벨 키라벨 값설명>
cloudmarketplace.googleapis.com/resource_name USER_SUPPLIED 사용량 측정항목과 연결된 리소스의 이름입니다.
cloudmarketplace.googleapis.com/container_name USER_SUPPLIED 리소스 컨테이너의 이름입니다.

라벨은 비용 보고서결제 내보내기를 포함한 Cloud Billing 비용 관리 도구로 전달됩니다.

사용량 라벨 지정 예시

이 예시에서는 조직이 SaaS Storage Solutions라는 스토리지 제품을 제안한다고 가정해보세요.

칼이라는 고객은 전자상거래 웹사이트의 user_profiles_dbproducts_db 데이터베이스를 호스팅하기 위해 Google Cloud 프로젝트 e-commerce-website에 대해 스토리지 서비스를 구매했습니다.

  • user_profiles_db에는 칼의 사이트를 방문하는 사용자에 대한 정보가 포함되어 있습니다.
  • products_db에는 칼이 사이트에서 판매하는 제품에 대한 정보가 포함되어 있습니다.

칼에게 사용량에 대한 자세한 비용 분석을 제공하려면 userLabels 키-값 쌍을 사용하여 각 데이터베이스의 사용량 비용을 별도로 보고할 수 있습니다.

예를 들어 칼의 products_db 스토리지 사용량에 대한 비용을 보고하려면 칼의 products_db 스토리지 비용에 100단위가 소요됨을 나타내는 다음 보고서를 보내면 됩니다.

operation = {
  'operationId': '<UUID>',
  'operationName': 'db-total-storage',
  'consumerId': 'project:carl_website',
  'startTime': '<Timestamp>',
  'endTime': '<Timestamp>',
  'metricValues': [{
      'int64Value': 100,
  }],
  'userLabels': {
    'cloudmarketplace.googleapis.com/container_name': 'e-commerce-website',
    'cloudmarketplace.googleapis.com/resource_name': 'products_db'
  }
}

service.services().report(
  serviceName=service_name, body={
    'operations': [operation]
}).execute()

이 예시에서 service_name은 칼의 Google Cloud 프로젝트의 프로젝트 ID입니다.

userLabels 사용에 대한 자세한 예시는 SaaS Codelab을 참조하세요.

(선택사항) Virtual Private Cloud(VPC)와 보고 통합

제품 서비스가 실행되는 환경에서 Virtual Private Cloud(VPC)를 사용하려면 다음 단계를 완료하여 Google Cloud Marketplace 보고를 VPC와 통합해야 합니다. 기본적으로 VPC의 Compute Engine VM은 내부적으로만 통신할 수 있습니다. VPC에서 나머지 VM이 보고에 사용할 수 있도록 VM 중 하나를 외부적으로 통신할 수 있도록 구성해야 합니다.

시작하기 전에

비공개 Google 액세스 설정

제품의 Compute Engine 가상 머신(VM)이 보고 목적으로 외부와 통신하도록 하려면 비공개 Google 액세스를 설정해야 합니다. 비공개 Google 액세스 구성에 대한 자세한 내용은 비공개 Google 액세스를 참조하세요.

  1. 서비스 계정에 대해 비공개 Google 액세스를 사용 설정합니다.

  2. private.googleapis.com에 대한 요청 해결을 위해 DNS를 구성합니다.

  3. Google API에 대해 커스텀 경로를 만듭니다.

    • 이름route-google-apis-services를 지정합니다.

    • 네트워크에에서 VPC를 선택합니다.

    • 대상 IP 범위199.36.153.8/30을 지정합니다.

    • 우선순위0을 지정합니다.

    • 인스턴스 태그google-apis-services를 지정합니다.

    • 다음 홉에서 기본 인터넷 게이트웨이를 선택합니다.

  4. 제품이 Google API와 통신할 수 있도록 VPC 방화벽 규칙을 만듭니다.

    • 이름google-apis-services를 지정합니다.

    • 설명Allow egress traffic to Google APIs and services를 지정합니다.

    • 방화벽 규칙 로깅을 사용 설정합니다.

    • 네트워크에에서 VPC를 선택합니다.

    • 트래픽 방향에 대해 이그레스를 선택합니다.

    • 일치 시 작업으로 허용을 선택합니다.

    • 이름google-apis-services를 지정합니다.

    • 대상에 대해 Specified target tags를 선택하고 대상 태그에 대해 google-apis-services를 지정합니다.

    • 대상 필터에 대해 IPv4 ranges를 선택하고 대상 IPv4 범위에 대해 199.36.153.8/30을 지정합니다.

    • 프로토콜 및 포트에 대해 Allow all을 선택합니다.

  5. Google Cloud 콘솔에서 제품 사용량을 보고하는 데 사용할 VM을 선택합니다. 네트워크 태그에서 google-apis-services를 추가하고 저장을 클릭합니다.

  6. 네트워크 인터페이스에서 VPC의 네트워크 인터페이스를 찾습니다.

  7. 서브네트워크 열에서 서브넷 링크를 클릭합니다. 서브넷 세부정보 페이지에서 수정을 클릭하고 비공개 Google 액세스사용으로 설정합니다.

  8. 저장을 클릭합니다.

(선택사항) 보고를 VPC 서비스 제어와 통합

제품 서비스가 실행되는 환경에서 VPC 서비스 제어를 사용하려면 다음 단계를 완료하여 Google Cloud Marketplace 보고를 VPC 서비스 제어와 통합해야 합니다.

  1. 서비스 환경에서 선호하는 VPC 서비스 제어 구현을 설정합니다. VPC 서비스 제어 설정에 대한 자세한 내용은 VPC 서비스 제어를 사용하여 서비스 경계 설정을 참조하세요.

  2. VPC 서비스 제어 구현에서 servicecontrol.googleapis.com 서비스가 제한되지 않았는지 확인합니다.