Краткое руководство. Создание бюджета с помощью Bicep

Бюджеты в службе "Управление затратами" помогают планировать и отслеживать отчетность на уровне организации. С бюджетами вы можете учитывать службы Azure, которые используете или на которые подписываетесь в течение определенного периода. Они помогают сообщать другим пользователям о своих расходах, чтобы эффективно управлять затратами и контролировать то, как они возрастают с течением времени. Когда созданные вами пороговые значения бюджета превышены, активируются уведомления. Ни один из ваших ресурсов не затронут а потребление не остановлено. Анализируя затраты, можно использовать бюджеты для их сравнения и отслеживания. В этом кратком руководстве описано, как создать бюджет под названием "MyBudget" с помощью Bicep.

Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он обеспечивает краткий синтаксис, надежную безопасность типов и поддержку повторного использования кода. Bicep предлагает лучшие возможности для разработки решений Azure типа "инфраструктура как код".

Предварительные требования

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.

Если вы используете новую подписку, вы не сможете сразу создать бюджет или использовать другие функции службы "Управление затратами". Полная активация всех функций Управления затратами может потребовать до 48 часов.

Бюджеты поддерживаются для следующих областей и типов учетных записей Azure:

  • Области управления доступом на основе ролей (Azure RBAC)
    • Группы управления
    • Подписка
  • Области Соглашения Enterprise
    • учетная запись выставления счетов;
    • отдел;
    • учетная запись регистрации;
  • Отдельные соглашения:
    • учетная запись выставления счетов;
  • Области Клиентского соглашения Майкрософт
    • учетная запись выставления счетов;
    • Профиль выставления счетов
    • Раздел счета
    • Customer
  • Области AWS
    • Внешняя учетная запись
    • Внешняя подписка

Чтобы просмотреть данные о бюджете, вам нужен как минимум доступ на чтение для учетной записи Azure.

Для подписок Azure EA вам необходимо иметь доступ на чтение для просмотра данных о бюджете. А для создания и администрирования бюджетов требуется разрешение уровня участника.

На подписку для бюджетов по пользователям и группам поддерживаются следующие разрешения или области Azure. См. основные сведения об областях и работе с ними.

  • Владелец — может создавать, изменять или удалять бюджеты подписки.
  • Участник и участник управления затратами — может создавать, изменять или удалять свои собственные бюджеты. Можно изменить сумму бюджета для бюджетов, созданных другими пользователями.
  • Читатель и читатель службы "Управление затратами" — может просматривать бюджеты, к которым имеет доступ.

Дополнительные сведения о назначении разрешений на доступ к данным службы "Управление затратами" см. в этой статье.

Нет фильтра

Проверка BICEP-файла

Файл Bicep, используемый в этом кратком руководстве, взят из шаблонов быстрого запуска Azure.

targetScope = 'subscription'

@description('Name of the Budget. It should be unique within a resource group.')
param budgetName string = 'MyBudget'

@description('The total amount of cost or usage to track with the budget')
param amount int = 1000

@description('The time covered by a budget. Tracking of the amount will be reset based on the time grain.')
@allowed([
  'Monthly'
  'Quarterly'
  'Annually'
])
param timeGrain string = 'Monthly'

@description('The start date must be first of the month in YYYY-MM-DD format. Future start date should not be more than three months. Past start date should be selected within the timegrain preiod.')
param startDate string

@description('The end date for the budget in YYYY-MM-DD format. If not provided, we default this to 10 years from the start date.')
param endDate string

@description('Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0.01 and 1000.')
param firstThreshold int = 90

@description('Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0.01 and 1000.')
param secondThreshold int = 110

@description('The list of email addresses to send the budget notification to when the threshold is exceeded.')
param contactEmails array

resource budget 'Microsoft.Consumption/budgets@2023-11-01' = {
  name: budgetName
  properties: {
    timePeriod: {
      startDate: startDate
      endDate: endDate
    }
    timeGrain: timeGrain
    amount: amount
    category: 'Cost'
    notifications: {
      NotificationForExceededBudget1: {
        enabled: true
        operator: 'GreaterThan'
        threshold: firstThreshold
        contactEmails: contactEmails
      }
      NotificationForExceededBudget2: {
        enabled: true
        operator: 'GreaterThan'
        threshold: secondThreshold
        contactEmails: contactEmails
      }
    }
  }
}

output name string = budget.name
output resourceId string = budget.id

В файле Bicep определяется один ресурс Azure.

Развертывание BICEP-файла

  1. Сохраните файл Bicep с именем main.bicep на локальном компьютере.

  2. Разверните файл Bicep с помощью Azure CLI или Azure PowerShell.

    myContactEmails ='("user1@contoso.com", "user2@contoso.com")'
    
    az deployment sub create --name demoSubDeployment --location centralus --template-file main.bicep --parameters startDate=<start-date> endDate=<end-date> contactEmails=$myContactEmails
    

    Вам потребуется ввести следующие параметры:

    • startDate: замените <start-date> на дату начала. Это должно быть первое число месяца в формате ГГГГ-ММ-ДД. Дата начала в будущем должна быть не позднее, чем через три последующих месяца. Прошедшая дата начала должна быть выбрана в пределах периода timegrain.
    • endDate: замените <end-date> датой окончания в формате ГГГГ-ММ-ДД. Если этот параметр не указан, по умолчанию используется значение десять лет с даты начала.
    • contactEmails: сначала создайте переменную, содержащую адреса электронной почты, а затем передайте ее. Замените примеры электронных адресов на адреса электронной почты, на которые будут отправляться уведомления о превышении порогового значения для бюджета.

    Примечание

    После завершения развертывания должно отобразиться сообщение о том, что развертывание успешно выполнено.

Один фильтр

Проверка BICEP-файла

Файл Bicep, используемый в этом кратком руководстве, взят из шаблонов быстрого запуска Azure.

targetScope = 'subscription'

@description('Name of the Budget. It should be unique within a resource group.')
param budgetName string = 'MyBudget'

@description('The total amount of cost or usage to track with the budget')
param amount int = 1000

@description('The time covered by a budget. Tracking of the amount will be reset based on the time grain.')
@allowed([
  'Monthly'
  'Quarterly'
  'Annually'
])
param timeGrain string = 'Monthly'

@description('The start date must be first of the month in YYYY-MM-DD format. Future start date should not be more than three months. Past start date should be selected within the timegrain preiod.')
param startDate string

@description('The end date for the budget in YYYY-MM-DD format. If not provided, we default this to 10 years from the start date.')
param endDate string

@description('Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0.01 and 1000.')
param firstThreshold int = 90

@description('Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0.01 and 1000.')
param secondThreshold int = 110

@description('The list of email addresses to send the budget notification to when the threshold is exceeded.')
param contactEmails array

@description('The set of values for the resource group filter.')
param resourceGroupFilterValues array

resource budget 'Microsoft.Consumption/budgets@2021-10-01' = {
  name: budgetName
  properties: {
    timePeriod: {
      startDate: startDate
      endDate: endDate
    }
    timeGrain: timeGrain
    amount: amount
    category: 'Cost'
    notifications: {
      NotificationForExceededBudget1: {
        enabled: true
        operator: 'GreaterThan'
        threshold: firstThreshold
        contactEmails: contactEmails
      }
      NotificationForExceededBudget2: {
        enabled: true
        operator: 'GreaterThan'
        threshold: secondThreshold
        contactEmails: contactEmails
      }
    }
    filter: {
      dimensions: {
        name: 'ResourceGroupName'
        operator: 'In'
        values: resourceGroupFilterValues
      }
    }
  }
}

В файле Bicep определяется один ресурс Azure.

Развертывание BICEP-файла

  1. Сохраните файл Bicep с именем main.bicep на локальном компьютере.

  2. Разверните файл Bicep с помощью Azure CLI или Azure PowerShell.

    myContactEmails ='("user1@contoso.com", "user2@contoso.com")'
    myRgFilterValues ='("resource-group-01", "resource-group-02")'
    
    az deployment sub create --name demoSubDeployment --location centralus --template-file main.bicep --parameters startDate=<start-date> endDate=<end-date> contactEmails=$myContactEmails resourceGroupFilterValues=$myRgFilterValues
    

    Вам потребуется ввести следующие параметры:

    • startDate: замените <start-date> на дату начала. Это должно быть первое число месяца в формате ГГГГ-ММ-ДД. Дата начала в будущем должна быть не позднее, чем через три последующих месяца. Прошедшая дата начала должна быть выбрана в пределах периода timegrain.
    • endDate: замените <end-date> датой окончания в формате ГГГГ-ММ-ДД. Если этот параметр не указан, по умолчанию используется значение десять лет с даты начала.
    • contactEmails: сначала создайте переменную, содержащую адреса электронной почты, а затем передайте ее. Замените примеры электронных адресов на адреса электронной почты, на которые будут отправляться уведомления о превышении порогового значения для бюджета.
    • resourceGroupFilterValues Сначала создайте переменную, содержащую значения фильтра группы ресурсов, а затем передайте ее. Замените примеры значений фильтра набором значений для фильтра группы ресурсов.

    Примечание

    После завершения развертывания должно отобразиться сообщение о том, что развертывание успешно выполнено.

Два или более фильтров

Проверка BICEP-файла

Файл Bicep, используемый в этом кратком руководстве, взят из шаблонов быстрого запуска Azure.

targetScope = 'subscription'

@description('Name of the Budget. It should be unique within a resource group.')
param budgetName string = 'MyBudget'

@description('The total amount of cost or usage to track with the budget')
param amount int = 1000

@description('The time covered by a budget. Tracking of the amount will be reset based on the time grain.')
@allowed([
  'Monthly'
  'Quarterly'
  'Annually'
])
param timeGrain string = 'Monthly'

@description('The start date must be first of the month in YYYY-MM-DD format. Future start date should not be more than three months. Past start date should be selected within the timegrain preiod.')
param startDate string

@description('The end date for the budget in YYYY-MM-DD format. If not provided, we default this to 10 years from the start date.')
param endDate string

@description('Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0.01 and 1000.')
param firstThreshold int = 90

@description('Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0.01 and 1000.')
param secondThreshold int = 110

@description('The list of contact roles to send the budget notification to when the threshold is exceeded.')
param contactRoles array = [
  'Owner'
  'Contributor'
  'Reader'
]

@description('The list of email addresses to send the budget notification to when the threshold is exceeded.')
param contactEmails array

@description('The list of action groups to send the budget notification to when the threshold is exceeded. It accepts array of strings.')
param contactGroups array

@description('The set of values for the resource group filter.')
param resourceGroupFilterValues array

@description('The set of values for the meter category filter.')
param meterCategoryFilterValues array

resource budget 'Microsoft.Consumption/budgets@2021-10-01' = {
  name: budgetName
  properties: {
    timePeriod: {
      startDate: startDate
      endDate: endDate
    }
    timeGrain: timeGrain
    amount: amount
    category: 'Cost'
    notifications: {
      NotificationForExceededBudget1: {
        enabled: true
        operator: 'GreaterThan'
        threshold: firstThreshold
        contactEmails: contactEmails
        contactRoles: contactRoles
        contactGroups: contactGroups
      }
      NotificationForExceededBudget2: {
        enabled: true
        operator: 'GreaterThan'
        threshold: secondThreshold
        contactEmails: contactEmails
        contactRoles: contactRoles
        contactGroups: contactGroups
        thresholdType: 'Forecasted'
      }
    }
    filter: {
      and: [
        {
          dimensions: {
            name: 'ResourceGroupName'
            operator: 'In'
            values: resourceGroupFilterValues
          }
        }
        {
          dimensions: {
            name: 'MeterCategory'
            operator: 'In'
            values: meterCategoryFilterValues
          }
        }
      ]
    }
  }
}

В файле Bicep определяется один ресурс Azure.

Развертывание BICEP-файла

  1. Сохраните файл Bicep с именем main.bicep на локальном компьютере.

  2. Разверните файл Bicep с помощью Azure CLI или Azure PowerShell.

    myContactEmails ='("user1@contoso.com", "user2@contoso.com")'
    myContactGroups ='("/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/microsoft.insights/actionGroups/groupone", "/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/microsoft.insights/actionGroups/grouptwo")'
    myRgFilterValues ='("resource-group-01", "resource-group-02")'
    myMeterCategoryFilterValues ='("meter-category-01", "meter-category-02")'
    
    az deployment sub create --name demoSubDeployment --location centralus --template-file main.bicep --parameters startDate=<start-date> endDate=<end-date> contactEmails=$myContactEmails contactGroups=$myContactGroups resourceGroupFilterValues=$myRgFilterValues meterCategoryFilterValues=$myMeterCategoryFilterValues
    

    Вам потребуется ввести следующие параметры:

    • startDate: замените <start-date> на дату начала. Это должно быть первое число месяца в формате ГГГГ-ММ-ДД. Дата начала в будущем должна быть не позднее, чем через три последующих месяца. Прошедшая дата начала должна быть выбрана в пределах периода timegrain.
    • endDate: замените <end-date> датой окончания в формате ГГГГ-ММ-ДД. Если этот параметр не указан, по умолчанию используется значение десять лет с даты начала.
    • contactEmails: сначала создайте переменную, содержащую адреса электронной почты, а затем передайте ее. Замените примеры электронных адресов на адреса электронной почты, на которые будут отправляться уведомления о превышении порогового значения для бюджета.
    • contactGroups: сначала создайте переменную, содержащую группы контактов, а затем передайте ее. Замените примеры групп связи на список групп действий, в которые будут отправляться уведомления о превышении порогового значения для бюджета. Необходимо передать ИД ресурса группы действий, которую можно получить с помощью az monitor action-group show или Get-AzActionGroup.
    • resourceGroupFilterValues: сначала создайте переменную, содержащую значения фильтра группы ресурсов, а затем передайте ее. Замените примеры значений фильтра набором значений для фильтра группы ресурсов.
    • meterCategoryFilterValues: сначала создайте переменную, содержащую значения фильтра категорий измерения, а затем передайте ее. Замените примеры значений фильтра в скобках набором значений для фильтра категорий измерения.

    Примечание

    После завершения развертывания должно отобразиться сообщение о том, что развертывание успешно выполнено.

Просмотр развернутых ресурсов

Используйте портал Azure, Azure CLI или Azure PowerShell для получения списка ресурсов, развернутых в группе ресурсов.

az consumption budget list

Очистка ресурсов

Если бюджет больше не требуется, используйте портал Azure, Azure CLI или Azure PowerShell, чтобы удалить его:

az consumption budget delete --budget-name MyBudget

Дальнейшие действия

В этом кратком руководстве вы создали бюджет и развернули его с помощью Bicep. Дополнительные сведения об управлении затратами, выставлением счетов и Bicep см. в указанных ниже статьях.