다음을 통해 공유


빠른 시작: Bicep을 사용하여 예산 만들기

Cost Management의 예산을 통해 조직 책임을 계획하고 주도할 수 있습니다. 예산을 사용하여 특정 기간 중 사용자가 소비 또는 구독하는 Azure 서비스를 설명할 수 있습니다. 비용을 적극적으로 관리하고 지출이 진행되는 방식을 모니터링하기 위해 지출에 대해 다른 사람들에게 알리는 데 도움이 됩니다. 사용자가 만든 예산 임계값을 초과하면 알림이 트리거됩니다. 리소스에는 영향을 미치지 않으며 소비도 중단되지 않습니다. 예산을 사용하여 비용 분석 시 지출을 비교하고 추적할 수 있습니다. 이 빠른 시작에서는 Bicep을 사용하여 'MyBudget'이라는 예산을 만드는 방법을 보여 줍니다.

Bicep은 선언적 구문을 사용하여 Azure 리소스를 배포하는 DSL(도메인 특정 언어)입니다. 간결한 구문, 신뢰할 수 있는 형식 안전성 및 코드 다시 사용에 대한 지원을 제공합니다. Bicep은 Azure에서 코드형 인프라 솔루션에 대한 최고의 제작 환경을 제공합니다.

필수 조건

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

새 구독이 있는 경우 즉시 예산을 만들거나 다른 Cost Management 기능을 사용할 수 없습니다. 모든 Cost Management 기능을 사용하려면 최대 48시간이 걸릴 수 있습니다.

예산은 다음과 같은 유형의 Azure 계정 유형 및 범위에 대해 지원됩니다.

  • Azure RBAC(Azure 역할 기반 액세스 제어) 범위
    • 관리 그룹
    • 구독
  • 기업계약 범위
    • 청구 계정
    • department
    • 등록 계정
  • 개별 계약
    • 청구 계정
  • Microsoft 고객 계약 범위
    • 청구 계정
    • 청구 프로필
    • 청구서 섹션
    • Customer
  • AWS 범위
    • 외부 계정
    • 외부 구독

예산을 보려면 적어도 Azure 계정에 대한 읽기 권한이 필요합니다.

Azure EA 구독의 경우 예산을 보는 읽기 권한이 있어야 합니다. 예산을 만들고 관리하려면 기여자 사용 권한이 있어야 합니다.

다음 Azure 사용 권한 또는 범위는 사용자 및 그룹별 예산에 대한 구독에 따라 지원됩니다. 범위에 대한 자세한 내용은 범위 이해 및 작업을 참조하세요.

  • 소유자: 구독에 대한 예산을 만들고, 수정하거나 삭제할 수 있습니다.
  • 기여자 및 Cost Management 기여자: 자신의 예산을 만들거나, 수정하거나, 삭제할 수 있습니다. 다른 사용자가 만든 예산에 대한 예산 금액을 수정할 수 있습니다.
  • 읽기 권한자 및 Cost Management 읽기 권한자: 사용 권한이 있는 예산을 볼 수 있습니다.

Cost Management 데이터에 대한 사용 권한을 할당하는 방법에 대한 자세한 내용은 Cost Management 데이터에 대한 액세스 할당을 참조하세요.

필터 없음

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. Azure CLI 또는 Azure PowerShell을 사용하여 Bicep 파일을 배포합니다.

    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>를 시작 날짜로 바꿉니다. 시작 날짜는 YYYY-MM-DD 형식이어야 합니다. 미래의 시작 날짜는 3개월 이내여야 합니다. 이전 시작 날짜는 시간 조직 기간 내에 선택해야 합니다.
    • endDate: <end-date>를 YYYY-MM-DD 형식의 종료 날짜로 바꿉니다. 입력하지 않으면 시작 날짜로부터 10년으로 기본 설정됩니다.
    • 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. Azure CLI 또는 Azure PowerShell을 사용하여 Bicep 파일을 배포합니다.

    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>를 시작 날짜로 바꿉니다. 시작 날짜는 YYYY-MM-DD 형식이어야 합니다. 미래의 시작 날짜는 3개월 이내여야 합니다. 이전 시작 날짜는 시간 조직 기간 내에 선택해야 합니다.
    • endDate: <end-date>를 YYYY-MM-DD 형식의 종료 날짜로 바꿉니다. 입력하지 않으면 시작 날짜로부터 10년으로 기본 설정됩니다.
    • contactEmails: 먼저 이메일을 포함하는 변수를 만든 다음 해당 변수를 전달합니다. 샘플 이메일을 임계값 초과 시 예산 알림을 보낼 이메일 주소로 바꿉니다.
    • resourceGroupFilterValues: 먼저 리소스 그룹 필터 값을 포함하는 변수를 만든 다음 해당 변수를 전달합니다. 샘플 필터 값을 리소스 그룹 필터에 대한 값 집합으로 바꿉니다.

    참고 항목

    배포가 완료되면 배포에 성공했음을 나타내는 메시지가 표시됩니다.

2개 이상의 필터

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. Azure CLI 또는 Azure PowerShell을 사용하여 Bicep 파일을 배포합니다.

    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>를 시작 날짜로 바꿉니다. 시작 날짜는 YYYY-MM-DD 형식이어야 합니다. 미래의 시작 날짜는 3개월 이내여야 합니다. 이전 시작 날짜는 시간 조직 기간 내에 선택해야 합니다.
    • endDate: <end-date>를 YYYY-MM-DD 형식의 종료 날짜로 바꿉니다. 입력하지 않으면 시작 날짜로부터 10년으로 기본 설정됩니다.
    • contactEmails: 먼저 이메일을 포함하는 변수를 만든 다음 해당 변수를 전달합니다. 샘플 이메일을 임계값 초과 시 예산 알림을 보낼 이메일 주소로 바꿉니다.
    • contactGroups: 먼저 연락처 그룹을 포함하는 변수를 만든 다음 해당 변수를 전달합니다. 샘플 연락처 그룹을 임계값 초과 시 예산 알림을 보낼 작업 그룹 목록으로 바꿉니다. az monitor action-group show 또는 Get-AzActionGroup을 사용하여 가져올 수 있는 작업 그룹의 리소스 ID를 전달해야 합니다.
    • resourceGroupFilterValues: 먼저 리소스 그룹 필터 값을 보유하는 변수를 만든 다음 해당 변수를 전달합니다. 샘플 필터 값을 리소스 그룹 필터에 대한 값 집합으로 바꿉니다.
    • meterCategoryFilterValues: 먼저 미터 범주 필터 값을 포함하는 변수를 만든 다음 해당 변수를 전달합니다. 괄호 안의 샘플 필터 값을 미터 범주 필터의 값 집합으로 바꿉니다.

    참고 항목

    배포가 완료되면 배포에 성공했음을 나타내는 메시지가 표시됩니다.

배포된 리소스 검토

Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 리소스 그룹에 배포된 리소스를 나열합니다.

az consumption budget list

리소스 정리

예산이 더 이상 필요하지 않은 경우 Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 삭제합니다.

az consumption budget delete --budget-name MyBudget

다음 단계

이 빠른 시작에서는 예산을 만들고 Bicep을 사용하여 배포했습니다. Cost Management 및 청구와 Bicep에 대해 자세히 알아보려면 아래 문서를 계속 진행하세요.