Este documento explica como configurar notificações de orçamento programático e anomalia de custo (pré-lançamento) usando o Pub/Sub.
Os orçamentos e as anomalias de custo geralmente são configurados para enviar notificações por e-mail. Se você usa orçamentos ou a detecção de anomalias de custo como uma ferramenta de controle de custos, as notificações por e-mail podem não ser o melhor método para garantir a ação imediata de controle dos custos. É possível configurar e usar notificações programáticas para automatizar as respostas de controle de custos. Exemplos de respostas automatizadas de controle de custos incluem:
- Integração com o Slack para respostas mais rápidas
 - Gerenciar o consumo de recursos para reduzir custos
 - Limitar os gastos desativando o faturamento quando você atingir o orçamento
 
Limitações
Os orçamentos usam dados estimados do Faturamento do Cloud, que estão sujeitos a alterações até a finalização da fatura.
Se você definir as políticas da organização para limitar o compartilhamento de recursos por domínio, por exemplo, ativando
enforceInTransitnos tópicos do Pub/Sub, poderá encontrar um erro ao tentar configurar ou conectar tópicos do Pub/Sub. Nesse caso, talvez você precise forçar o acesso à conta para conectar um tópico do Pub/Sub a um orçamento. Para forçar o acesso à conta, siga estas etapas:- Remova a política da organização que contém a restrição de domínio usando um dos seguintes métodos:
 - Siga as etapas para conectar um tópico do Pub/Sub.
 - Ative novamente a política da organização para a organização ou o projeto (opcional).
 
Permissões exigidas para a tarefa
Notificações de orçamento
Para configurar notificações de orçamento programático, você precisa ter permissões para criar ou modificar orçamentos e tópicos do Pub/Sub. Você precisa de um conjunto diferente de permissões, dependendo do seu nível de acesso.
| Usuários com permissões na conta do Cloud Billing | Apenas usuários com permissões no nível do projeto (Prévia) | 
|---|---|
| 
  Se a organização usa papéis personalizados para autenticação, você precisa das seguintes permissões: 
 Para que papéis personalizados modifiquem um orçamento existente do Cloud Billing e o conectem a um tópico existente do Pub/Sub, é necessário ter as seguintes permissões: 
 Para receber as permissões necessárias usando funções predefinidas, peça ao administrador para conceder a você uma das seguintes funções predefinidas do IAM do Cloud Billing na sua conta do Cloud Billing: E peça ao administrador que conceda a você o seguinte papel no projeto de destino que contém os tópicos do Pub/Sub:  | 
   Se a organização usa papéis personalizados para autenticação, você precisa das seguintes permissões: 
 Para receber as permissões necessárias usando papéis predefinidos, peça ao administrador para conceder a você um dos seguintes papéis predefinidos do IAM do Cloud Billing no projeto: E peça ao administrador que conceda a você o seguinte papel no projeto de destino que contém os tópicos do Pub/Sub:  | 
Notificações de anomalias
Para configurar notificações de anomalias programáticas, você precisa ter permissões para criar ou modificar anomalias e tópicos do Pub/Sub. Você precisa ter permissões na conta do Cloud Billing.
| Usuários com permissões na conta do Cloud Billing (pré-lançamento) | 
|---|
| 
   Para receber as permissões necessárias usando papéis predefinidos, peça ao administrador para conceder a você um dos seguintes papéis predefinidos do IAM do Cloud Billing na sua conta do Cloud Billing: E peça ao administrador que conceda a você o seguinte papel no projeto de destino que contém os tópicos do Pub/Sub:  | 
Criar um tópico do Pub/Sub
Para configurar notificações de orçamento programático ou anomalias, primeiro você precisa criar um tópico do Pub/Sub. Se você já tiver configurado um tópico do Pub/Sub para orçamentos ou anomalias de custo, pule esta etapa.
Acesse a página Google Cloud Pub/Sub do console.
Selecione um projeto para conter o tópico do Pub/Sub.
Ao configurar tópicos do Pub/Sub para notificações de faturamento, recomendamos usar um projeto de administração de FinOps para conter os tópicos do Pub/Sub relacionados ao faturamento.
Clique em Criar tópico.
No campo ID do tópico, forneça um nome para o tópico.
Mantenha as configurações padrão de assinatura e criptografia e clique em Criar.
Conectar seu tópico do Pub/Sub
Para permitir que notificações programáticas recebam mensagens do Pub/Sub com o status atual do seu orçamento ou anomalia, conecte seu orçamento ou anomalia ao tópico do Pub/Sub.
Notificações de orçamento
Para conectar um tópico do Pub/Sub a um orçamento do Cloud Billing, siga estas etapas:
| Usuários com permissões na conta do Cloud Billing | Apenas usuários com permissões no nível do projeto (Prévia) | 
|---|---|
  | 
  | 
Notificações de anomalias
Para conectar um tópico do Pub/Sub a uma anomalia de custo, siga estas etapas:
| Usuários com permissões na conta do Cloud Billing (pré-lançamento) | 
|---|
  
  | 
Formato da notificação
As notificações enviadas ao tópico do Pub/Sub são compostas de duas partes:
- Atributos: um conjunto de pares de chave-valor com a descrição do evento.
 Dados: uma string que contém um objeto JSON com a descrição dos detalhes do alerta de orçamento.
Notificações de orçamento
Atributos
Os atributos são pares de chave-valor incluídos em todas as notificações enviadas pelo Faturamento do Cloud para seu tópico do Pub/Sub. As notificações sempre contêm o seguinte conjunto de pares de chave-valor, independentemente da carga útil.
| Nome do atributo | Exemplo | Descrição | 
|---|---|---|
| billingAccountId | 
01D4EE-079462-DFD6EC
 | 
O identificador da conta de faturamento do Cloud que detém o orçamento. | 
| budgetId | 
de72f49d-779b-4945-a127-4d6ce8def0bb
 | 
O identificador do alerta de orçamento na conta de faturamento do Cloud. | 
| schemaVersion | 
1.0
 | 
A versão do esquema de notificações. | 
Dados
Os detalhes do alerta de orçamento são retornados em uma string UTF-8 codificada em base64 que contém um objeto JSON com as seguintes propriedades:
| Dados | Exemplo | Descrição | 
|---|---|---|
budgetDisplayName
 | 
"My Personal Budget"
 | 
O nome legível atribuído ao orçamento. | 
costAmount
 | 
140.321
 | 
O valor acumulado dos custos. O tipo de custo monitorado depende dos filtros e das configurações do orçamento. | 
costIntervalStart
 | 
"2021-02-01T08:00:00Z"
 | 
O início do período de alerta do orçamento. `costAmount` inclui os custos de uso a partir dessa data. Esse é o primeiro dia do período do orçamento (mês, trimestre, ano ou período personalizado) em que o uso do orçamento ocorreu. | 
budgetAmount
 | 
152.557
 | 
O valor alocado no orçamento. | 
budgetAmountType
 | 
"SPECIFIED_AMOUNT"
 | 
O tipo de valor do orçamento. Pode ser um dos seguintes valores:
  | 
alertThresholdExceeded
 | 
0.9
 | 
O limite máximo de alertas de custo real configurado foi excedido. O valor está em formato decimal (por exemplo, 0,9 é 90%). Essa chave não está presente se o custo real não exceder um limite. | 
forecastThresholdExceeded
 | 
0.2
 | 
O alerta de limite máximo de custo previsto foi excedido. O valor é uma porcentagem em formato decimal (por exemplo, 0,2 é 20%). Essa chave não estará presente se o custo previsto não exceder nenhum limite. | 
currencyCode
 | 
"USD"
 | 
A moeda do alerta de orçamento. Todos os custos e valores orçamentários do alerta estão nessa moeda. | 
Notificações de anomalias
Atributos
Os atributos são pares de chave-valor contidos em todas as notificações enviadas pelo Faturamento do Cloud para seu tópico do Pub/Sub. As notificações sempre contêm o seguinte conjunto de pares de chave-valor, independentemente do payload da notificação.
| Nome do atributo | Exemplo | Descrição | 
|---|---|---|
| escopo | 
scope_project
 | 
O escopo da anomalia. | 
| billingAccountName | 
billingAccounts/01D4EE-079462-DFD6EC
 | 
O identificador da conta do Cloud Billing em que a anomalia ocorreu. | 
| resourceDisplayName | 
My project
 | 
O nome de exibição do recurso em que a anomalia ocorreu. | 
| resourceName | 
projects/123456
 | 
O identificador do recurso em que a anomalia ocorreu. | 
| SchemaVersion | 
1.0
 | 
A versão do esquema do Pub/Sub. | 
Dados
Os detalhes do alerta de anormalidade são retornados em uma string UTF-8 codificada em base64 que contém um objeto JSON com as seguintes propriedades:
| Dados | Exemplo | Descrição | 
|---|---|---|
anomalyName
 | 
billingAccounts/01D4EE-079462-DFD6EC/anomalies/aaa
 | 
O nome do recurso da anomalia. | 
billingAccountName
 | 
billingAccounts/01D4EE-079462-DFD6EC
 | 
O identificador da conta de faturamento. | 
resourceName
 | 
"projects/12345"
 | 
O identificador do recurso em que a anomalia ocorreu. | 
resourceDisplayName
 | 
"My project"
 | 
O nome de exibição do recurso em que a anomalia ocorreu. | 
detectionDate
 | 
"2024-02-01T08:00:00Z"
 | 
A data em que a anomalia de custo foi detectada. | 
Scope
 | 
SCOPE_PROJECT
 | 
Indica o escopo da anomalia. | 
expectedSpendAmount
 | 
{
 | 
O gasto esperado para o recurso. | 
actualSpendAmount
 | 
196.22
 | 
O gasto real do recurso. | 
deviationAmount
 | 
31.01
 | 
A diferença entre o gasto real e o esperado. | 
deviationPercentage
 | 
18.77
 | 
A porcentagem do valor de desvio do gasto esperado. | 
Root cause
 | 
root_causes {
resource: "services/XXX-XXXX-XXX"
display_name: "BigQuery"
cause_type: CAUSE_TYPE_SERVICE
deviation {
  expected_spend {
    currency_code: "USD"
    units: "5000"
  }
  actual_spend {
    currency_code: "USD"
    units: "5000"
  }
  deviation_amount {
    currency_code: "USD"
    units: "5000"
  }
  deviation_percentage: "Infinity"
}
sub_causes {
  resource: "locations/us-west1",
  display_name: "us-west1",
  cause_type: CAUSE_TYPE_LOCATION,
  deviation {
    expected_spend {
      currency_code: "USD",
    }
    actual_spend {
      currency_code: "USD",
      units:"5000"
    }
    deviation_amount {
      currency_code: "USD",
      units: "5000"
    }
    deviation_percentage: "Infinity"
  }
  sub_causes {
    resource: "services/XXXX-XXXX-XXXX/skus/XXXX-XXXX-XXXX"
    display_name: "Some display name"
    cause_type: CAUSE_TYPE_SKU
    deviation {
      expected_spend {
        currency_code: "USD"
      }
      actual_spend {
        currency_code: "USD"
        units: 5000
      }
      deviation_amount {
        currency_code: "USD"
        units: 5000
      }
      deviation_percentage: "Infinity"
    }
  }
  sub_causes {
    resource: "services/XXXX-XXXX-XXXX/skus/XXXX-XXXX-XXXX"
    display_name: "Some display name"
    cause_type: CAUSE_TYPE_SKU
    deviation {
      expected_spend {
        currency_code: "USD"
        units: "1"
        nanos: 5413077
      }
      actual_spend {
        currency_code: "USD"
        units: "1",
        nanos: 122606000
      }
      deviation_amount {
        currency_code: "USD"
        nanos: 117192923
      }
      deviation_percentage:11.656196419841217
    }
  }
}
}
 | 
Um campo repetido que contém informações sobre a causa raiz da anomalia. | 
Garantias de entrega de notificações ao Pub/Sub
Depois de conectar seu orçamento ou anomalia a um tópico do Pub/Sub, você vai receber notificações programáticas da seguinte maneira:
Notificações de orçamento
- As notificações de orçamento são enviadas ao tópico do Pub/Sub várias vezes por dia com o status atual do seu orçamento. Essa cadência é diferente da cadência dos e-mails de alerta de orçamento, que são enviados apenas quando um limite de orçamento é atingido.
 - As notificações de Pub/Sub são enviadas mesmo que a conta de faturamento do Cloud não tenha nenhum uso.
 - Pode levar várias horas para você receber a primeira notificação do Pub/Sub.
 - O Pub/Sub somente garante a entrega pelo menos uma vez. É possível receber uma mensagem várias vezes, e as mensagens podem chegar fora de ordem.
 - Se a entrega falhar devido a um erro de configuração do tópico do Pub/Sub, você não vai receber uma notificação.
 
Pode haver uma falha na entrega por um dos seguintes motivos:
- O tópico do Pub/Sub não existe mais.
 - O Cloud Billing não tem mais permissão para publicar no tópico Pub/Sub.
 - Você excedeu sua cota de notificações.
 - Você tem políticas da organização em vigor que limitam o compartilhamento de recursos por domínio.
 
Notificações de anomalias
- As notificações de anomalia são enviadas ao tópico do Pub/Sub somente quando o limite é atingido.
 - O Pub/Sub garante apenas a entrega pelo menos uma vez. É possível receber uma mensagem várias vezes, e as mensagens podem chegar fora de ordem.
 - Se a entrega falhar devido a um erro de configuração do tópico do Pub/Sub, você não vai receber uma notificação.
 
Pode haver uma falha na entrega por um dos seguintes motivos:
- O tópico do Pub/Sub não existe mais.
 - A conta do Faturamento do Cloud não tem mais permissão para publicar no tópico do Pub/Sub.
 - Você excedeu sua cota de notificações.
 - Você tem políticas da organização em vigor que limitam o compartilhamento de recursos por domínio.
 
Para mais informações, consulte Publicar e receber mensagens no Pub/Sub.
A seguir
Para saber mais sobre como usar notificações programáticas, consulte os seguintes exemplos de respostas de controle de custos programático:
- Ouvir as notificações
 - Enviar notificações para o Slack
 - Controlar o uso de recursos com notificações
 - Desativar o uso do faturamento com notificações