Integrazione del backend dell'app

Questa sezione descrive i passaggi per integrare il backend della tua app con Cloud Marketplace. Con questa integrazione, puoi gestire gli account e i diritti degli utenti, che indicano che gli utenti hanno acquistato il tuo prodotto da Cloud Marketplace. Se scegli un modello di prezzi basato sull'utilizzo, integri anche il tuo backend per segnalare l'utilizzo a Google.

Per un esempio di integrazione di un'app di base con Cloud Marketplace e una procedura dettagliata del codice campione, consulta il codelab per l'integrazione di un servizio gestito.

Per il codice campione utilizzato nel codelab, consulta il repository GitHub.

Prima di iniziare

  • Configura l'accesso all'API Cloud Commerce Partner Procurement, come descritto in Integrazione dell'app: configurazione.
  • Se hai scelto uno schema di prezzi basato sull'utilizzo, verifica che il tuo Partner Engineer abbia creato un servizio in base al quale puoi generare report sull'utilizzo. Questo servizio viene visualizzato nel campo Dominio del servizio della sezione Integrazione fatturazione di Producer Portal.

Crea un account di servizio

Per integrare il tuo prodotto con Google Cloud, devi creare un account di servizio nel progetto che stai utilizzando per il prodotto. La tua app utilizza questo account di servizio per interagire con le API Cloud Marketplace Partner e ricevere informazioni sugli acquisti degli utenti.

Utilizza Producer Portal per creare e collegare i tuoi account di servizio. Per la procedura dettagliata sulla creazione di un account di servizio, consulta Creazione e gestione degli account di servizio.

Usa Producer Portal per integrare il backend della tua app

Per accedere a tutte le informazioni necessarie per integrare il backend della tua app con Cloud Marketplace da un'unica posizione, ad esempio gli account di servizio e gli identificatori a livello di piano, puoi utilizzare la sezione Integrazione fatturazione del portale Producer.

Il link diretto al Producer Portal è:

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

Per accedere alla sezione Integrazione della fatturazione:

  1. Nell'elenco dei prodotti, fai clic sul nome del tuo prodotto.

  2. Nella pagina Panoramica del prodotto, vai alla sezione Integrazione tecnica e fai clic su Integrazione della fatturazione.

Creazione e collegamento degli account di servizio in Producer Portal

Puoi utilizzare la sezione Integrazione della fatturazione di Producer Portal per creare e collegare gli account di servizio da utilizzare per interagire con le API partner e per ottenere informazioni sugli acquisti degli utenti.

Il link diretto al Producer Portal è:

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

Nei passaggi seguenti, puoi utilizzare gli account di servizio esistenti o crearne di nuovi. Se crei un nuovo account di servizio, specifica il nome dell'account di servizio nel campo Nome account di servizio e l'ID dell'account di servizio nel campo ID account di servizio, quindi fai clic su Crea e collega.

Per collegare gli account di servizio:

  1. Nell'elenco dei prodotti, fai clic sul nome del tuo prodotto.

  2. Nella pagina Panoramica del prodotto, vai alla sezione Integrazione tecnica e fai clic su Integrazione della fatturazione.

  3. Per l'integrazione con l'API Partner Procurement, in Collega un account di servizio per chiamare l'API Procurement, fai clic su Aggiungi account di servizio. Puoi inserire un account di servizio esistente nel campo o crearne uno nuovo.

  4. Per l'integrazione con Pub/Sub, in Collega un account di servizio per sottoscrivere un abbonamento all'argomento Pub/Sub, fai clic su Aggiungi account di servizio. Puoi inserire un account di servizio esistente nel campo o crearne uno nuovo.

  5. Per l'integrazione con l'API Service Control, in Aggiungi roles/servicemanagement.serviceController a un account di servizio, fai clic su Aggiungi account di servizio. Puoi inserire nel campo un account di servizio esistente o crearne uno nuovo.

Attività degli account utente

A livello generale, la tua app deve gestire il seguente scenario:

  1. Un utente effettua una richiesta o modifica in Cloud Marketplace, ad esempio si registra al tuo prodotto.

  2. Cloud Marketplace invia alla tua app una notifica tramite Pub/Sub, contenente informazioni sulla richiesta nel campo eventType. Ad esempio, se un utente cambia il proprio diritto, eventType sarà ENTITLEMENT_PLAN_CHANGED.

    Consulta l'elenco completo dei possibili eventType.

  3. Per approvare la richiesta, la tua app invia una richiesta HTTP POST all'API Partner Procurement.

Le seguenti sezioni descrivono i tipi di richieste che gli utenti possono effettuare e cosa deve fare la tua app per gestirle.

Per le chiamate API descritte in questa sezione, utilizza questo endpoint:

https://cloudcommerceprocurement.googleapis.com/

Creare un account per un nuovo utente

Quando un utente acquista per la prima volta il tuo prodotto, Cloud Marketplace crea una risorsa account che tiene traccia della relazione dell'utente con te. Una volta creata la risorsa dell'account, riceverai una notifica tramite l'argomento Pub/Sub creato per te. Il messaggio Pub/Sub ha il seguente formato:

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

dove USER_ACCOUNT_ID è l'ID account creato da Cloud Marketplace e YOUR_PARTNER_ID è un ID assegnato a te quando il tuo Partner Engineer consente l'accesso all'API Partner Procurement.

Allo stesso tempo, l'utente viene indirizzato alla pagina di registrazione, dove crea un account nel tuo sistema. Per informazioni sulla creazione della pagina di registrazione, consulta la pagina relativa all'integrazione del frontend dell'app.

Approvare l'account di un utente

Dopo che l'utente si è registrato correttamente, la tua app deve chiamare l'API Partner Procurement e indicare che l'account è stato approvato. Gli account vengono creati nello stato ACCOUNT_ACTIVE, ma nel campo approvals è presente la voce PENDING denominata signup, che indica che l'utente non ha ancora effettuato la registrazione. Per approvare l'account dopo la registrazione dell'utente, utilizza la seguente richiesta HTTP POST:

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

Verificare lo stato dell'account di un utente

Per controllare lo stato di un account collegato, utilizza la seguente richiesta HTTP GET:

GET v1/providers/YOUR_PARTNER_ID/accounts/USER_ACCOUNT_ID

La risposta è nel seguente formato:

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

Per un elenco dei possibili stati dell'account, consulta il riferimento dell'API providers.accounts.

Gestire i diritti

Quando i clienti scelgono un piano tariffario per il tuo software, Google crea un diritto, che indica che il cliente ha acquistato il tuo prodotto da Cloud Marketplace. Questa sezione esamina come creare e gestire i diritti per i tuoi clienti utilizzando l'API Partner Procurement.

Per maggiori dettagli sulla gestione dei diritti, consulta la documentazione di riferimento.

Approvare o rifiutare un diritto

Quando un cliente sceglie un piano tariffario, Cloud Marketplace crea un diritto e invia il seguente messaggio Pub/Sub alla tua app:

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

dove ENTITLEMENT_ID è un ID creato da Cloud Marketplace. Se l'offerta ha una durata specificata, questa durata è espressa in anni e mesi. Se l'offerta ha una data di fine specificata, anziché una durata, il campo che indica la durata è vuoto.

Nel sistema, aggiorna l'account dell'utente in modo che rifletta l'acquisto di un piano. Quindi, per approvare il diritto, invia una richiesta HTTP POST all'API Partner Procurement e invia il ENTITLEMENT_ID che stai approvando:

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

Per rifiutare un diritto, utilizza invece il metodo reject nella richiesta HTTP POST:

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

Per specificare il motivo del rifiuto del diritto nel corpo della richiesta, utilizza il formato seguente:

{
  "reason": "..."
}

Modificare un piano di diritti

A seconda di come configuri i tuoi piani tariffari, i tuoi clienti potrebbero essere in grado di modificare il loro piano. Se un cliente seleziona un nuovo piano tariffario, riceverai un messaggio Pub/Sub nel seguente formato:

{
  "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
  },
}

Se l'offerta ha una durata specificata, questa durata è espressa in anni e mesi. Se l'offerta ha una data di fine specificata, anziché una durata, il campo che indica la durata è vuoto.

Per approvare la modifica del piano, invia la seguente richiesta HTTP POST all'API Partner Procurement:

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

Il corpo della richiesta deve disporre del piano che viene approvato:

{
  "pendingPlanName": PLAN_NAME
}

Dopo l'approvazione della modifica, riceverai un altro messaggio Pub/Sub quando la modifica avrà effetto. Nel messaggio, il campo eventType diventa ENTITLEMENT_PLAN_CHANGED. Per controllare lo stato di un piano, effettua la seguente richiesta HTTP GET all'API Partner Procurement.

GET v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID

La risposta è simile alla seguente, con il campo state che indica se il nuovo piano è attivo o se la modifica del piano è ancora in attesa:

{
  "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",
  ...
}

Invia un messaggio di stato agli utenti

Se il periodo di tempo che intercorre tra la scelta di un piano tariffario e l'approvazione di un diritto da parte del backend è di alcune ore o più, ti consigliamo di fornire un messaggio di stato agli utenti. In questo messaggio, indica lo stato di avanzamento dell'approvazione e, se disponibile, quando prevedi che l'approvazione venga completata.

Per fornire un messaggio di stato, effettua la seguente richiesta HTTP POST all'API Procurement:

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

Nel corpo della richiesta, fornisci il testo del messaggio, simile al seguente esempio:

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

Annullare un diritto

Se un utente decide di annullare il proprio diritto, riceverai una notifica di Pub/Sub. Analogamente alla modifica di un piano, l'annullamento effettivo potrebbe avere effetto alla fine del ciclo di fatturazione corrente.

La notifica ha il seguente formato:

{
  "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",
    "cancellationDate": "...",
    "updateTime": "..."
  },
}

Eliminare un diritto

Se un utente fa una richiesta diretta all'Assistenza Google o se lascia la piattaforma Google, il suo diritto viene annullato immediatamente e il diritto e gli account vengono eliminati dopo un periodo di tolleranza di 60 giorni. Per proteggere la privacy dell'utente, devi eliminare i suoi dati dai tuoi server quando ricevi la notifica.

Quando i diritti vengono annullati e l'account viene eliminato, ricevi notifiche simili alle seguenti:

{
  "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": "...",
  },
}

Elenco dei tipi di eventi per le attività dell'account

Di seguito è riportato un elenco dei eventType che la tua app potrebbe ricevere nei messaggi Pub/Sub:

eventTypeDescrizione
ACCOUNT_CREATION_REQUESTEDDeprecata
ACCOUNT_ACTIVEIndica che l'account del cliente è stato creato.
ACCOUNT_DELETEDIndica che l'account del cliente è stato eliminato dai sistemi Google Cloud.
ENTITLEMENT_CREATION_REQUESTEDIndica che un cliente ha selezionato uno dei tuoi piani tariffari.
ENTITLEMENT_OFFER_ACCEPTEDIndica che un'offerta è stata accettata da un cliente. Include l'ora di inizio programmata dell'offerta, se presente.
ENTITLEMENT_ACTIVEIndica che il piano scelto di un cliente è ora attivo.
ENTITLEMENT_PLAN_CHANGE_REQUESTEDIndica che un cliente ha scelto un nuovo piano.
ENTITLEMENT_PLAN_CHANGEDIndica che la modifica del piano di un cliente è stata approvata e le modifiche sono state applicate.
ENTITLEMENT_PLAN_CHANGE_CANCELLEDIndica che la modifica del piano di un cliente è stata annullata perché non è stata approvata o perché è tornato al piano precedente.
ENTITLEMENT_PENDING_CANCELLATIONIndica che un cliente ha annullato il piano e l'annullamento è in attesa fino alla fine del ciclo di fatturazione.
ENTITLEMENT_CANCELLATION_REVERTEDIndica che l'annullamento in attesa di un cliente è stato ripristinato. Tieni presente che gli annullamenti non possono essere ripristinati una volta definitivi.
ENTITLEMENT_CANCELLEDIndica che il piano di un cliente è stato annullato.
ENTITLEMENT_CANCELLINGIndica che il piano di un cliente è in fase di annullamento.
ENTITLEMENT_RENEWEDIndica che il diritto di un cliente è stato rinnovato per un altro periodo. Non è richiesta alcuna azione da parte tua per completare il rinnovo.
ENTITLEMENT_OFFER_ENDEDIndica che l'offerta privata di un cliente è terminata. Se il diritto del cliente è stato annullato, viene attivato un evento ENTITLEMENT_CANCELLED separato. Se il diritto del cliente è ancora attivo, il piano torna al prezzo non scontato.
ENTITLEMENT_DELETEDIndica che le informazioni sul piano di un cliente sono state eliminate da Cloud Marketplace.

(Per i prezzi basati sull'utilizzo) Segnalazione dell'utilizzo a Google

Se scegli prezzi basati sull'utilizzo per il tuo prodotto, devi segnalare l'utilizzo dell'app all'API Service Control.

Per un'introduzione a Service Control, consulta la Guida introduttiva.

Ti consigliamo di utilizzare Producer Portal per creare un account di servizio in Producer Portal da utilizzare con Service Control.

Quando viene creato un diritto, devi chiamare l'API Partner Procurement per recuperare un usageReportingId, utilizzando la seguente richiesta HTTP GET:

GET v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID

La risposta contiene informazioni sul diritto nel seguente formato:

{
  "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": "..."
}

Per segnalare l'utilizzo, devi prima effettuare una chiamata API services.check per verificare la configurazione del servizio. Nella risposta, se l'oggetto checkErrors[] è vuoto, effettua una chiamata API services.report per inviare il report sull'utilizzo.

Il report sull'utilizzo è un'API Service Control Operation. Di seguito è riportato un esempio di report sull'utilizzo di example-messaging-service che invia informazioni sullo spazio di archiviazione utilizzato dal cliente:

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"
    }
  }]
}

dove:

  • operationId è una stringa univoca generata dall'istanza di servizio. Dovresti utilizzare lo stesso operationId per le operazioni check e report.

  • consumerId corrisponde a usageReportingId del diritto.

  • startTime e endTime rappresentano le ore di inizio e di fine dell'intervallo totale per l'operazione report. Nella maggior parte dei casi, il valore startTime di un'operazione report deve avere lo stesso valore di endTime dell'operazione report precedente.

    Se il servizio di un cliente viene disabilitato prima del startTime di un'operazione report, la chiamata API services.check invia un errore nell'oggetto checkErrors[] e al cliente non viene addebitato l'intervallo corrispondente.

  • MetricValueSet contiene uno o intervalli di tempo intermedi e i corrispondenti valori della metrica aggiornati. Puoi definire le metriche del servizio quando scegli e invii il modello di prezzi.

    Puoi visualizzare e fare riferimento agli identificatori per le tue metriche nella sezione Integrazione tecnica di Producer Portal.

  • userLabels sono etichette create dall'utente, definite come stringhe di coppie chiave-valore che seguono requisiti di sintassi specifici. Queste etichette vengono inoltrate agli strumenti di gestione dei costi del fatturazione Cloud per l'attribuzione. Per le convenzioni di etichettatura consigliate, consulta le best practice per l'etichettatura di utilizzo.

Se l'API services.check restituisce uno o più dei seguenti errori, ti consigliamo di interrompere la fornitura del servizio al cliente finché l'errore non sarà risolto:

  • SERVICE_NOT_ACTIVATED
  • BILLING_DISABLED
  • PROJECT_DELETED

Best practice per i report sull'utilizzo

Quando generi report sull'utilizzo, ad esempio operazioni degli utenti o utilizzo delle risorse, tieni presente le seguenti informazioni per assicurarti che la fatturazione ai clienti avvenga correttamente.

Utilizzo dei report al momento dell'occorrenza

I ritardi nei report sull'utilizzo riducono l'esperienza di gestione dei costi dei clienti e potrebbero non essere inclusi nei report dei partner. I fornitori di servizi devono segnalare l'utilizzo entro un'ora da quello generato.

Se hai bisogno di più tempo per generare report sull'utilizzo, contatta il tuo Partner Engineer.

Segnalare l'utilizzo dopo l'annullamento di un diritto

Se hai un utilizzo non segnalato dopo l'annullamento di un diritto, puoi comunque segnalarlo con un timestamp che riflette l'ora effettiva in cui è stato generato l'utilizzo. Il timestamp deve precedere l'annullamento del diritto. Segnala questo utilizzo entro un'ora. Non devi segnalare alcun utilizzo come nuovo utilizzo al termine del diritto.

Utilizzo dei report alla fine del mese

La finestra di report di un'ora si applica alla scadenza limite di fine mese. Per assicurarti che l'utilizzo sia riportato nella fattura del mese corrente, segnala l'utilizzo entro le 01:00 del fuso orario del Pacifico USA e del Canada (UTC-7 o UTC-8) del giorno successivo.

Ad esempio, per una fattura di settembre, indica l'utilizzo entro le ore 01:00 del 1° ottobre, fuso orario degli Stati Uniti e del Pacifico canadese (UTC-7 o UTC-8).

Se l'utilizzo viene segnalato più tardi nell'arco della giornata, potrebbe non essere incluso nella fattura del mese corrente.

Soluzione per le azioni dei clienti che impediscono l'utilizzo dei report al momento in cui si verifica

Se non riesci a segnalare l'utilizzo oppure se il servizio o la fatturazione vengono disattivati per un periodo di tempo prolungato, ti consigliamo di concedere al cliente un periodo di tolleranza per ripristinare il servizio. Consigliamo di non superare i 30 giorni. Durante questo periodo di tolleranza, ti consigliamo di:

  • Riduci la qualità del servizio fornito. Ad esempio, passa il cliente a un livello gratuito o inizia a rifiutare le chiamate.

  • Continua a raccogliere il log sull'utilizzo mentre il servizio è disabilitato. Ti consigliamo di raccogliere l'utilizzo con l'analisi degli addebiti, al massimo in un periodo di un'ora, in modo che possa essere riprodotta dopo l'abilitazione del servizio.

Se il servizio è abilitato, devi segnalare l'utilizzo raccolto mentre il servizio era disabilitato come utilizzo effettivo nel momento in cui sono stati raccolti i dati. Devi anche riprendere i report sul normale utilizzo.

Per le app Kubernetes, se i report sull'utilizzo non vanno a buon fine durante l'avvio dell'app, è consigliabile che l'app si arresti autonomamente, in modo che i clienti ricevano feedback immediato e possano risolvere il problema.

Best practice per l'etichettatura dell'utilizzo

Per i prodotti SaaS basati sull'utilizzo, l'utilizzo viene attribuito a un singolo progetto specificato dal campo usageReportingId. In alcuni scenari, un prodotto SaaS può essere condiviso ampiamente all'interno dell'organizzazione di un cliente e utilizzato in numerosi progetti del cliente. Per abilitare il supporto per un'attribuzione dei costi più specifica, consigliamo che i prodotti SaaS basati sull'utilizzo includano il campo facoltativo userLabels nel report sull'utilizzo operazione.

Se il tuo servizio supporta in modo nativo il concetto di etichette delle risorse, ti consigliamo di inoltrarle nei report sull'utilizzo. Le etichette devono essere conformi ai requisiti per la sintassi.

Cloud Marketplace prenota le seguenti etichette. Puoi usare queste etichette per identificare un contesto aggiuntivo da usare all'interno della tua piattaforma di servizio nativa. Ti consigliamo di includere queste etichette nei report sull'utilizzo per impostazione predefinita.

Chiave di etichettaValore etichettaDescrizione>
cloudmarketplace.googleapis.com/resource_name USER_SUPPLIED Il nome della risorsa associata a una metrica di utilizzo.
cloudmarketplace.googleapis.com/container_name USER_SUPPLIED Il nome di un container di risorse.

Le etichette vengono inoltrate agli strumenti di gestione dei costi del fatturazione Cloud, tra cui i report sui costi e le esportazioni della fatturazione.

Esempio di etichettatura dell'utilizzo

Per questo esempio, immagina che la tua organizzazione offra un prodotto di archiviazione chiamato SaaS Storage Solutions.

Un cliente, Carlo, ha acquistato la tua offerta di archiviazione per il suo progetto Google Cloud e-commerce-website, al fine di ospitare i database user_profiles_db e products_db per il suo sito web di e-commerce:

  • user_profiles_db contiene informazioni sugli utenti che visitano il sito di Carlo.
  • products_db contiene informazioni sui prodotti che Carlo vende sul suo sito.

Se vuoi fornire a Carlo un'analisi dettagliata dei costi del loro utilizzo, puoi usare la coppia chiave-valore userLabels per segnalare separatamente il costo di utilizzo per ogni database.

Ad esempio, per segnalare il costo attribuito all'utilizzo dello spazio di archiviazione di products_db da parte di Carlo, potresti inviare il seguente report, che indica che lo spazio di archiviazione di products_db di Carlo costa 100 unità:

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()

In questo esempio, service_name è l'ID del progetto Google Cloud di Carla.

Per un esempio più dettagliato sull'utilizzo di userLabels, puoi fare riferimento al codelab SaaS.

(Facoltativo) Integrare i report con Virtual Private Cloud (VPC)

Se vuoi utilizzare Virtual Private Cloud (VPC) nell'ambiente in cui viene eseguito il servizio del tuo prodotto, devi completare i seguenti passaggi per integrare i report di Google Cloud Marketplace con VPC. Per impostazione predefinita, le VM di Compute Engine nel tuo VPC possono comunicare solo internamente. Devi configurare una delle VM per la comunicazione esterna, in modo che le altre VM nel tuo VPC possano utilizzarla per i report.

Prima di iniziare

Configurare l'accesso privato Google

Per consentire alle macchine virtuali (VM) Compute Engine del tuo prodotto di comunicare all'esterno per scopi di reporting, devi configurare l'accesso privato Google. Per ulteriori informazioni sulla configurazione dell'accesso privato Google, consulta Configurare l'accesso privato Google.

  1. Abilita l'accesso privato Google per il tuo ambiente di servizio.

  2. Configura il DNS per risolvere le richieste a private.googleapis.com.

  3. Crea una route personalizzata per le API di Google:

    • Per Nome, specifica route-google-apis-services.

    • In Rete, seleziona il tuo VPC.

    • Per Intervallo IP di destinazione, specifica 199.36.153.8/30.

    • In Priorità, specifica 0.

    • In Tag istanza, specifica google-apis-services.

    • In Hop successivo, seleziona Gateway internet predefinito.

  4. Crea una regola firewall VPC per consentire al tuo prodotto di comunicare con le API di Google:

    • Per Nome, specifica google-apis-services.

    • Per Descrizione, specifica Allow egress traffic to Google APIs and services.

    • Abilita il logging delle regole firewall.

    • In Rete, seleziona il tuo VPC.

    • In Direzione del traffico, seleziona In uscita.

    • Per Azione in caso di corrispondenza, seleziona Consenti.

    • Per Nome, specifica google-apis-services.

    • In Target, seleziona Specified target tags, quindi per Tag di destinazione, specifica google-apis-services.

    • Per Filtro di destinazione, seleziona IPv4 ranges e per Intervalli IPv4 di destinazione specifica 199.36.153.8/30.

    • Per Protocolli e porte, seleziona Allow all.

  5. Nella console Google Cloud, seleziona la VM che vuoi utilizzare per segnalare l'utilizzo del tuo prodotto. In Tag di rete, aggiungi google-apis-services e fai clic su SALVA.

  6. In Interfacce di rete, individua l'interfaccia di rete del tuo VPC.

  7. Nella colonna Subnet, fai clic sul link della subnet. Nella pagina Dettagli subnet, fai clic su MODIFICA e imposta Accesso privato Google su On.

  8. Fai clic su SALVA.

(Facoltativo) Integrare i report con i Controlli di servizio VPC

Se vuoi utilizzare Controlli di servizio VPC nell'ambiente in cui viene eseguito il servizio del tuo prodotto, devi completare i seguenti passaggi per integrare i report di Google Cloud Marketplace con i Controlli di servizio VPC:

  1. Configura l'implementazione che preferisci dei Controlli di servizio VPC nel tuo ambiente di servizio. Per ulteriori informazioni sulla configurazione dei Controlli di servizio VPC, consulta Configurare un perimetro di servizio utilizzando i Controlli di servizio VPC.

  2. Assicurati che il servizio servicecontrol.googleapis.com nell'implementazione dei Controlli di servizio VPC non sia limitato.