Azure 예산으로 비용 관리Manage costs with Azure Budgets

비용 제어는 클라우드에서 투자 가치를 극대화하는 데 중요한 구성 요소입니다.Cost control is a critical component to maximizing the value of your investment in the cloud. 비용 표시, 보고 및 비용 기반 오케스트레이션이 지속적인 비즈니스 운영에 중요한 몇 가지 시나리오가 있습니다.There are several scenarios where cost visibility, reporting, and cost-based orchestration are critical to continued business operations. Azure Cost Management API는 이러한 각 시나리오를 지원하기 위한 API 집합을 제공합니다.Azure Cost Management APIs provide a set of APIs to support each of these scenarios. API는 사용량 세부 정보를 제공하므로 세부적인 인스턴스 레벨의 비용을 볼 수 있습니다.The APIs provide usage details, allowing you to view granular instance level costs.

예산은 일반적으로 비용 관리의 일부로 사용되며,Budgets are commonly used as part of cost control. Azure에서 예산 범위를 지정할 수 있습니다.Budgets can be scoped in Azure. 예를 들어 구독, 리소스 그룹 또는 리소스의 컬렉션에 따라 예산 보기의 범위를 좁힐 수 있습니다.For instance, you could narrow your budget view based on subscription, resource groups, or a collection of resources. 예산 임계값에 도달하면 예산 API를 사용하여 이메일을 통해 알려줄 뿐만 아니라, Azure Monitor 작업 그룹을 사용하여 예산 이벤트로 인해 오케스트레이션된 작업 집합을 트리거할 수 있습니다.In addition to using the budgets API to notify you via email when a budget threshold is reached, you can use Azure Monitor action groups to trigger an orchestrated set of actions resulting from a budget event.

중요하지 않은 워크로드를 실행하는 고객의 일반적인 예산 시나리오는 예산에 맞게 비용을 관리하고 월간 청구서를 살펴 볼 때 예측 가능한 비용에 이르게 될 때에도 발생할 수 있습니다.A common budgets scenario for a customer running a non-critical workload could occur when they want to manage against a budget and also get to a predictable cost when looking at the monthly invoice. 이 시나리오의 경우 Azure 환경에 포함된 일부 리소스를 비용에 기반하여 오케스트레이션해야 합니다.This scenario requires some cost-based orchestration of resources that are part of the Azure environment. 이 시나리오에서 구독에 월간 $1000의 예산이 설정되었으며,In this scenario, a monthly budget of $1000 for the subscription is set. 몇 가지 오케스트레이션을 트리거하도록 알림 임계값도 설정되었습니다.Also, notification thresholds are set to trigger a few orchestrations. 이 시나리오는 비용 임계값이 최저 80%이며, 이 임계값에 도달하면 리소스 그룹 Optional의 모든 VM이 중지됩니다.This scenario starts with an 80% cost threshold, which will stop all VMs in the resource group Optional. 그다음으로, 100% 비용 임계값에서 모든 VM 인스턴스가 중지됩니다.Then, at the 100% cost threshold, all VM instances will be stopped.

이 시나리오를 구성하려면 이 자습서의 각 섹션에 제공되는 단계를 사용하여 다음 작업을 완료합니다.To configure this scenario, you'll complete the following actions by using the steps provided in each section of this tutorial.

이 자습서에 포함된 이러한 작업으로 다음을 수행할 수 있습니다.These actions included in this tutorial allow you to:

  • Webhook를 사용하여 VM을 중지하기 위해 Azure Automation Runbook을 만듭니다.Create an Azure Automation Runbook to stop VMs by using webhooks.
  • 예산 임계값에 기반하여 트리거될 Azure 논리 앱을 만들고 올바른 매개 변수로 Runbook을 호출합니다.Create an Azure Logic App to be triggered based on the budget threshold value and call the runbook with the right parameters.
  • 예산 임계값이 충족되면 Azure 논리 앱을 트리거하도록 구성될 Azure Monitor 작업 그룹을 만듭니다.Create an Azure Monitor Action Group that will be configured to trigger the Azure Logic App when the budget threshold is met.
  • 원하는 임계값으로 Azure 예산을 만들어서 작업 그룹에 연결합니다.Create the Azure budget with the wanted thresholds and wire it to the action group.

Azure Automation Runbook 만들기Create an Azure Automation Runbook

Azure Automation은 리소스 관리 작업의 대부분을 스크립팅하고 이러한 작업을 예약 또는 주문형으로 실행할 수 있는 서비스입니다.Azure Automation is a service that enables you to script most of your resource management tasks and run those tasks as either scheduled or on-demand. 이 시나리오의 일부로, VM을 중지하는 데 사용될 Azure Automation Runbook을 만들게 됩니다.As part of this scenario, you'll create an Azure Automation runbook that will be used to stop VMs. 갤러리에서 Azure V2 VM 중지 그래픽 Runbook을 사용하여 이 시나리오를 빌드하게 됩니다.You'll use the Stop Azure V2 VMs graphical runbook from the gallery to build this scenario. 이 Runbook을 Azure 계정으로 가져와서 게시하면 예산 임계값 도달 시 VM을 중지할 수 있습니다.By importing this runbook into your Azure account and publishing it, you can stop VMs when a budget threshold is reached.

Azure Automation 계정 만들기Create an Azure Automation account

  1. Azure 계정 자격 증명을 사용하여 Azure Portal에 로그인합니다.Sign in to the Azure portal with your Azure account credentials.
  2. Azure의 왼쪽 위 모서리에서 리소스 만들기 단추를 선택합니다.Select the Create a resource button found on the upper left corner of Azure.
  3. 관리 도구 > 자동화를 선택합니다.Select Management Tools > Automation.

    참고

    Azure 계정이 없으면 체험 계정을 만들 수 있습니다.If you don't have an Azure account, you can create a free account.

  4. 계정 정보를 입력합니다.Enter your account information. Azure에 대한 인증을 간소화하는 데 필요한 설정을 자동으로 사용하도록 설정하기 위해 Azure 실행 계정 만들기에서 를 선택합니다.For Create Azure Run As account, choose Yes to automatically enable the settings needed to simplify authentication to Azure.
  5. 완료되면 만들기를 선택하여 Automation 계정 배포를 시작합니다.When complete, select Create, to start the Automation account deployment.

Azure V2 VM 중지 Runbook 가져오기Import the Stop Azure V2 VMs runbook

Azure Automation Runbook을 사용하여 갤러리에서 Azure V2 VM 중지 그래픽 Runbook을 가져옵니다.Using an Azure Automation runbook, import the Stop Azure V2 VMs graphical runbook from the gallery.

  1. Azure 계정 자격 증명을 사용하여 Azure Portal에 로그인합니다.Sign in to the Azure portal with your Azure account credentials.
  2. 모든 서비스 > Automation 계정을 선택하여 Automation 계정을 엽니다.Open your Automation account by selecting All services > Automation Accounts. 그런 다음, 사용자의 Automation 계정을 선택합니다.Then, select your Automation Account.
  3. 프로세스 자동화 섹션에서 Runbook 갤러리를 선택합니다.Select Runbooks gallery from the Process Automation section.
  4. 갤러리 원본스크립트 센터로 설정하고 확인을 선택합니다.Set the Gallery Source to Script Center and select OK.
  5. Azure Portal 내에서 Azure V2 VM 중지 갤러리 항목을 찾아 선택합니다.Locate and select the Stop Azure V2 VMs gallery item within the Azure portal.
  6. 가져오기를 선택하여 가져오기 영역을 표시하고 확인을 선택합니다.Select Import to display the Import area and select OK. Runbook 개요 영역이 표시됩니다.The runbook overview area will be displayed.
  7. Runbook 가져오기 프로세스가 완료되면 편집을 선택하여 그래픽 Runbook 편집기와 게시 옵션을 표시합니다.Once the runbook has completed the import process, select Edit to display the graphical runbook editor and publishing option.
    Azure - 그래픽 Runbook 편집Azure - Edit graphical runbook
  8. 게시를 선택하여 Runbook을 게시한 다음, 메시지가 표시되면 를 선택합니다.Select Publish to publish the runbook and then select Yes when prompted. Runbook을 게시하면 초안 버전으로 기존의 게시된 버전을 덮어씁니다.When you publish a runbook, you override any existing published version with the draft version. 이 경우 Runbook을 만들었으므로 게시된 버전이 없습니다.In this case, you've no published version because you've created the runbook. Runbook을 게시하는 방법에 대한 자세한 내용은 그래픽 Runbook 만들기를 참조하세요.For more information about publishing a runbook, see Create a graphical runbook.

Runbook에 대한 Webhook 만들기Create webhooks for the runbook

Azure V2 VM 중지 그래픽 Runbook을 사용하여 단일 HTTP 요청을 통해 Azure Automation에서 Runbook을 시작하는 webhook를 두 개 만듭니다.Using the Stop Azure V2 VMs graphical runbook, you create two Webhooks to start the runbook in Azure Automation through a single HTTP request. 첫 번째 webhook는 선택적 VM을 중지할 수 있도록 리소스 그룹 이름을 매개 변수로 사용하여 80% 예산 임계값에서 Runbook을 호출합니다.The first webhook invokes the runbook at an 80% budget threshold with the resource group name as a parameter, allowing the optional VMs to be stopped. 그런 다음, 두 번째 webhook는 매개 변수 없이(100%) Runbook을 호출하여 남은 VM 인스턴스가 모두 중지됩니다.Then, the second webhook invokes the runbook with no parameters (at 100%), which stops all remaining VM instances.

  1. Azure PortalRunbook 페이지에서 Runbook의 개요 영역을 표시하는 StopAzureV2Vm Runbook을 선택합니다.From the Runbooks page in the Azure portal, select the StopAzureV2Vm runbook that displays the runbook's overview area.
  2. 페이지 맨 위에서 Webhook를 선택하여 Webhook 추가 영역을 엽니다.Select Webhook at the top of the page to open the Add Webhook area.
  3. 새 Webhook 만들기를 선택하여 새 Webhook 만들기 영역을 엽니다.Select Create new webhook to open the Create a new webhook area.
  4. Webhook의 이름Optional로 설정합니다.Set the Name of the Webhook to Optional. 사용 속성은 이어야 합니다.The Enabled property must be Yes. 만료 값은 변경할 필요가 없습니다.You don't need to change the Expires value. Webhook 속성에 대한 자세한 내용은 Webhook 속성을 참조하세요.For more information about Webhook properties, see Webhook properties.
  5. URL 값 옆에 있는 복사 아이콘을 선택하여 webhook의 URL을 복사합니다.Next to the URL value, select the copy icon to copy the URL of the webhook.

    중요

    Optional로 명명된 Webhook의 URL을 안전한 곳에 저장합니다.Save the URL of the webhook named Optional in a safe place. 이 URL은 자습서의 뒷부분에서 사용합니다.You'll use the URL later in this tutorial. 보안상의 이유로 Webhook를 만들고 나면 URL을 다시 보거나 검색할 수 없습니다.For security reasons, once you create the webhook, you cannot view or retrieve the URL again.

  6. 확인을 선택하여 새 webhook를 만듭니다.Select OK to create the new webhook.
  7. 매개 변수 및 실행 설정 구성을 선택하여 Runbook에 대한 매개 변수 값을 봅니다.Select Configure parameters and run settings to view parameter values for the runbook.

    참고

    runbook에 필수 매개 변수가 있으면 값을 제공 하지 않는 한 webhook를 만들 수 없습니다.If the runbook has mandatory parameters, then you are not able to create the webhook unless values are provided.

  8. 확인을 선택하여 webhook 매개 변수 값을 적용합니다.Select OK to accept the webhook parameter values.
  9. 만들기 를 선택하여 webhook를 만듭니다.Select Create to create the webhook.
  10. 다음으로, 위의 단계에 따라 Complete로 명명된 두 번째 Webhook를 만듭니다.Next, follow the steps above to create a second webhook named Complete.

    중요

    이 자습서의 뒷부분에서 사용할 수 있도록 두 Webhook URL을 반드시 저장해 두세요.Be sure to save both webhook URLs to use later in this tutorial. 보안상의 이유로 Webhook를 만들고 나면 URL을 다시 보거나 검색할 수 없습니다.For security reasons, once you create the webhook, you cannot view or retrieve the URL again.

이제 저장해 둔 URL을 사용하여 각각 사용 가능한 두 개의 구성된 Webhook가 있습니다.You should now have two configured webhooks that are each available using the URLs that you saved.

Webhook - Optional 및 Complete

이제 Azure Automation 설정이 완료되었습니다.You're now done with the Azure Automation setup. 간단한 Postman 테스트로 Webhook를 테스트하여 제대로 작동하는지 유효성을 검사할 수 있습니다.You can test the webhooks with a simple Postman test to validate that the webhook works. 그런 다음에는 오케스트레이션을 위한 논리 앱을 만들어야 합니다.Next, you must create the Logic App for orchestration.

오케스트레이션을 위해 Azure 논리 앱 만들기Create an Azure Logic App for orchestration

Logic Apps를 사용하면 프로세스를 워크플로로 빌드, 예약 및 자동화하여 기업이나 조직에서 앱, 데이터, 시스템 및 서비스를 통합할 수 있습니다.Logic Apps helps you build, schedule, and automate processes as workflows so you can integrate apps, data, systems, and services across enterprises or organizations. 이 시나리오에서 만드는 논리 앱은 단순히 사용자가 만든 자동화 Webhook를 호출하는 것 보다 약간 더 많은 것을 하게 됩니다.In this scenario, the Logic App you create will do a little more than just call the automation webhook you created.

지정된 임계값이 충족되면 알림을 트리거하도록 예산을 설정할 수 있습니다.Budgets can be set up to trigger a notification when a specified threshold is met. 알림을 받을 수 있는 여러 임계값을 제공할 수 있으며 논리 앱은 사용자가 충족된 임계값에 기반하여 다양한 작업을 수행할 수 있음을 보여 줍니다.You can provide multiple thresholds to be notified at and the Logic App will demonstrate the ability for you to perform different actions based on the threshold met. 이 예에서는 여러 알림을 받는 시나리오를 설정합니다. 첫 번째 알림은 예산의 80%에 도달했을 때이고 두 번째 알림은 예산의 100%에 도달했을 때입니다.In this example, you'll set up a scenario where you get a couple of notifications, the first notification is for when 80% of the budget has been reached and the second notification is when 100% of the budget has been reached. 이 논리 앱은 리소스 그룹의 모든 VM을 종료하는 데 사용됩니다.The logic app will be used to shut down all VMs in the resource group. 먼저, Optional 임계값이 80%에 도달한 다음, 두 번째 임계값에 도달하면 구독의 모든 VM은 종료됩니다.First, the Optional threshold will be reached at 80%, then the second threshold will be reached where all VMs in the subscription will be shut down.

논리 앱을 사용하면 HTTP 트리거에 대한 샘플 스키마를 제공할 수 있지만, Content-Type 헤더를 설정해야 합니다.Logic apps allow you to provide a sample schema for the HTTP trigger, but require you to set the Content-Type header. 작업 그룹에 webhook에 대한 사용자 지정 헤더가 없으므로, 별도의 단계에서 페이로드를 구분 분석해야 합니다.Because the action group doesn't have custom headers for the webhook, you must parse out the payload in a separate step. 구문 분석 작업을 사용하며 샘플 페이로드를 사용하여 제공합니다.You'll use the Parse action and provide it with a sample payload.

논리 앱 만들기Create the logic app

논리 앱은 여러 작업을 수행합니다.The logic app will perform several actions. 다음 목록은 논리 앱이 수행할 상위 수준의 작업 집합을 제공합니다.The following list provides a high-level set of actions that the logic app will perform:

  • HTTP 요청을 받으면 인식합니다.Recognizes when an HTTP request is received
  • 전달된 JSON 데이터를 구분 분석하여 임계값에 도달했는지 판별합니다.Parse the passed in JSON data to determine the threshold value that has been reached
  • 조건문을 사용하여 임계값 크기가 80%인지, 또는 예산 범위보다 크되 100%을 넘지 않는지 확인합니다.Use a conditional statement to check whether the threshold amount has reached 80% or more of the budget range, but not greater than or equal to 100%.
    • 이 임계값 크기에 도달하면 Optional로 명명된 Webhook를 사용하여 HTTP POST를 보냅니다.If this threshold amount has been reached, send an HTTP POST using the webhook named Optional. 이 작업은 "Optional" 그룹의 VM을 종료합니다.This action will shut down the VMs in the "Optional" group.
  • 조건문을 사용하여 임계값 크기에 도달했거나 예산 값의 100%를 초과했는지 여부를 확인합니다.Use a conditional statement to check whether the threshold amount has reached or exceeded 100% of the budget value.
    • 이 임계값 크기에 도달하면 Complete로 명명된 Webhook를 사용하여 HTTP POST를 보냅니다.If the threshold amount has been reached, send an HTTP POST using the webhook named Complete. 이 작업은 나머지 모든 VM을 종료합니다.This action will shut down all remaining VMs.

위의 단계를 수행할 논리 앱을 만들려면 다음 단계가 필요합니다.The following steps are needed to create the logic app that will perform the above steps:

  1. Azure Portal에서 리소스 만들기 > 통합 > 논리 앱을 선택합니다.In the Azure portal, select Create a resource > Integration > Logic App.
    Azure - 논리 앱 리소스 선택Azure - Select the Logic App resource
  2. 논리 앱 만들기 영역에서 논리 앱을 만들기 위해 필요한 세부 정보를 제공하고 대시보드에 고정을 선택한 다음, 만들기를 선택합니다.In the Create logic app area, provide the details need to create your logic app, select Pin to dashboard, and select Create.
    Azure - 논리 앱 만들기Azure - Create a Logic App

Azure가 논리 앱을 배포하면 Logic Apps 디자이너가 열리고 소개 비디오 및 일반적으로 사용되는 트리거가 포함된 영역을 보여줍니다.After Azure deploys your logic app, the Logic Apps Designer opens and shows an area with an introduction video and commonly used triggers.

트리거 추가Add a trigger

모든 논리 앱은 특정 이벤트가 발생하거나 특정 조건이 충족할 때 실행되는 트리거를 통해 시작되어야 합니다.Every logic app must start with a trigger, which fires when a specific event happens or when a specific condition is met. 트리거가 발생될 때마다 Logic Apps 엔진은 워크플로를 시작하고 실행하는 논리 앱 인스턴스를 만듭니다.Each time the trigger fires, the Logic Apps engine creates a logic app instance that starts and runs your workflow. 작업은 트리거 후 발생하는 모든 단계입니다.Actions are all the steps that happen after the trigger.

  1. Logic Apps 디자이너 영역의 템플릿에서 비어 있는 논리 앱을 선택합니다.Under Templates of the Logic Apps Designer area, choose Blank Logic App.
  2. Logic Apps 디자이너 검색창에 "http 요청"을 입력하여 트리거를 추가하고 Request – HTTP request is received로 명명된 트리거를 찾아 선택합니다.Add a trigger by entering "http request" in the Logic Apps Designer search box to find and select the trigger named Request – When an HTTP request is received.
    Azure - 논리 앱 - Http 트리거Azure - Logic app - Http trigger
  3. 새 단계 > 작업 추가를 선택합니다.Select New step > Add an action.
    Azure - 새 단계 - 작업 추가Azure - New step - Add an action
  4. Logic Apps 디자이너 검색창에서 "JSON 구문 분석"을 검색하여 데이터 작업 - JSON 구문 분석 작업을 찾아 선택합니다.Search for "parse JSON" in the Logic Apps Designer search box to find and select the Data Operations - Parse JSON action.
    Azure - 논리 앱 - JSON 구문 분석 작업 추가Azure - Logic app - Add parse JSON action
  5. JSON 구문 분석 페이로드에 대한 콘텐츠 이름으로 “Payload”를 입력하거나, 동적 콘텐츠의 “Body” 태그를 사용합니다.Enter "Payload" as the Content name for the Parse JSON payload or use the "Body" tag from dynamic content.
  6. JSON 구분 분석 상자에서 샘플 페이로드를 사용하여 스키마 생성을 선택합니다.Select the Use sample payload to generate schema option in the Parse JSON box.
    Azure - 논리 앱 - 샘플 JSON 데이터를 사용하여 스키마 생성Azure - Logic app - Use sample JSON data to generate schema
  7. 텍스트 상자에 다음 JSON 샘플 페이로드를 붙여넣습니다. {"schemaId":"AIP Budget Notification","data":{"SubscriptionName":"CCM - Microsoft Azure Enterprise - 1","SubscriptionId":"<GUID>","SpendingAmount":"100","BudgetStartDate":"6/1/2018","Budget":"50","Unit":"USD","BudgetCreator":"email@contoso.com","BudgetName":"BudgetName","BudgetType":"Cost","ResourceGroup":"","NotificationThresholdAmount":"0.8"}}Paste the following JSON sample payload into the textbox: {"schemaId":"AIP Budget Notification","data":{"SubscriptionName":"CCM - Microsoft Azure Enterprise - 1","SubscriptionId":"<GUID>","SpendingAmount":"100","BudgetStartDate":"6/1/2018","Budget":"50","Unit":"USD","BudgetCreator":"email@contoso.com","BudgetName":"BudgetName","BudgetType":"Cost","ResourceGroup":"","NotificationThresholdAmount":"0.8"}} 텍스트 상자는 다음과 같이 나타납니다.The textbox will appear as:
    Azure - 논리 앱 - 샘플 JSON 페이로드Azure - Logic app - The sample JSON payload
  8. 완료 를 선택합니다.Select Done.

첫 번째 조건문 작업 추가Add the first conditional action

조건문을 사용하여 임계값 크기가 80%인지, 또는 예산 범위보다 크되 100%을 넘지 않는지 확인합니다.Use a conditional statement to check whether the threshold amount has reached 80% or more of the budget range, but not greater than or equal to 100%. 이 임계값 크기에 도달하면 Optional로 명명된 Webhook를 사용하여 HTTP POST를 보냅니다.If this threshold amount has been reached, send an HTTP POST using the webhook named Optional. 이 작업은 Optional 그룹의 VM을 종료합니다.This action will shut down the VMs in the Optional group.

  1. 새 단계 > 조건 추가를 선택합니다.Select New step > Add a condition.
    Azure - 논리 앱 - 조건 추가Azure - Logic app - Add a condition

  2. 조건 상자에서 Choose a value가 포함된 텍스트 상자를 선택하여 사용 가능한 값 목록을 표시합니다.In the Condition box, select the textbox containing Choose a value to display a list of available values.
    Azure - 논리 앱 - 조건 상자Azure - Logic app - Condition box

  3. 목록 맨 위에서 을 선택하고 식 편집기에 다음 식을 입력합니다. float()Select Expression at the top of the list and enter the following expression in the expression editor: float()
    Azure - 논리 앱 - Float 식Azure - Logic app - Float expression

  4. 동적 콘텐츠를 클릭하고 괄호() 안에 커서를 놓은 다음, 목록에서 NotificationThresholdAmount를 선택하여 전체 식을 채웁니다.Select Dynamic content, place the cursor inside the parenthesis (), and select NotificationThresholdAmount from the list to populate the complete expression. 식은 다음과 같습니다.The expression will be:
    float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])

  5. 확인을 선택하여 식을 설정합니다.Select OK to set the expression.

  6. 조건의 드롭다운 상자에서 다음보다 크거나 같음을 선택합니다.Select is greater than or equal to in the dropdown box of the Condition.

  7. 조건의 값 선택 상자에 .8을 입력합니다.In the Choose a value box of the condition, enter .8.
    Azure - 논리 앱 - 값이 있는 Float 식Azure - Logic app - Float expression with a value

  8. 조건 상자 안에 있는 추가 > 행 추가를 선택하여 조건의 추가 부분을 추가합니다.Select Add > Add row within the Condition box to add an additional part of the condition.

  9. 조건 상자에서 Choose a value가 포함된 텍스트 상자를 클릭합니다.In the Condition box, select the textbox containing Choose a value.

  10. 목록 맨 위에서 을 선택하고 식 편집기에 다음 식을 입력합니다. float()Select Expression at the top of the list and enter the following expression in the expression editor: float()

  11. 동적 콘텐츠를 클릭하고 괄호() 안에 커서를 놓은 다음, 목록에서 NotificationThresholdAmount를 선택하여 전체 식을 채웁니다.Select Dynamic content, place the cursor inside the parenthesis (), and select NotificationThresholdAmount from the list to populate the complete expression.

  12. 확인을 선택하여 식을 설정합니다.Select OK to set the expression.

  13. 조건의 드롭다운 상자에서 다음보다 작음을 선택합니다.Select is less than in the dropdown box of the Condition.

  14. 조건의 값 선택 상자에 1을 입력합니다.In the Choose a value box of the condition, enter 1.
    Azure - 논리 앱 - 값이 있는 Float 식Azure - Logic app - Float expression with a value

  15. If true 상자에서 작업 추가를 선택합니다.In the If true box, select Add an action. 선택적 VM을 종료하는 HTTP POST 작업을 추가합니다.You'll add an HTTP POST action that will shut down optional VMs.
    Azure - 논리 앱 - 작업 추가Azure - Logic app - Add an action

  16. HTTP를 입력하여 HTTP 작업을 검색하고 HTTP – HTTP 작업을 선택합니다.Enter HTTP to search for the HTTP action and select the HTTP – HTTP action.
    Azure - 논리 앱 - HTTP 작업 추가Azure - Logic app - Add HTTP action

  17. 메서드 값에 Post를 선택합니다.Select Post for the Method value.

  18. 이 자습서 초반에 만든 Optional로 명명된 Webhook의 URL을 Uri 값으로 입력합니다.Enter the URL for the webhook named Optional that you created earlier in this tutorial as the Uri value.
    Azure - 논리 앱 - HTTP 작업 URIAzure - Logic app - HTTP action URI

  19. If true 상자에서 작업 추가를 선택합니다.Select Add an action in the If true box. 받는 사람에게 선택적 VM이 종료되었음을 알리는 이메일을 보내는 이메일 작업을 추가합니다.You'll add an email action that will send an email notifying the recipient that the optional VMs have been shut down.

  20. "이메일 보내기"를 검색하고 사용하는 이메일 서비스에 따라 이메일 보내기 작업을 선택합니다.Search for "send email" and select a send email action based on the email service you use.
    Azure - 논리 앱 - 이메일 보내기 작업Azure - Logic app - Send email action

    Microsoft 개인 계정인 경우 Outlook.com을 선택합니다.For personal Microsoft accounts, select Outlook.com. Azure 회사 또는 학교 계정인 경우 Office 365 Outlook을 선택합니다.For Azure work or school accounts, select Office 365 Outlook. 연결이 없는 경우 이메일 계정에 로그인하라는 메시지가 표시됩니다.If you don't already have a connection, you're asked to sign in to your email account. Logic Apps는 전자 메일 계정에 대한 연결을 만듭니다.Logic Apps creates a connection to your email account. 논리 앱이 이메일 정보에 액세스하도록 허용해야 합니다.You'll need to allow the Logic App to access your email information.
    Azure - 논리 앱 - 액세스 알림Azure - Logic app - Access notice

  21. 받는 사람에게 선택적 VM이 종료되었음을 알리는 전자 메일에 대해 받는 사람, 제목본문 텍스트를 추가합니다.Add the To, Subject, and Body text for the email that notifies the recipient that the optional VMs have been shut down. BudgetNameNotificationThresholdAmount 동적 콘텐츠를 사용하여 제목과 본문 필드를 채웁니다.Use the BudgetName and the NotificationThresholdAmount dynamic content to populate the subject and body fields. Azure - 논리 앱 - 이메일 세부 정보Azure - Logic app - Email details

두 번째 조건문 작업 추가Add the second conditional action

조건문을 사용하여 임계값 크기에 도달했거나 예산 값의 100%를 초과했는지 여부를 확인합니다.Use a conditional statement to check whether the threshold amount has reached or exceeded 100% of the budget value. 이 임계값 크기에 도달하면 Complete로 명명된 Webhook를 사용하여 HTTP POST를 보냅니다.If the threshold amount has been reached, send an HTTP POST using the webhook named Complete. 이 작업은 나머지 모든 VM을 종료합니다.This action will shut down all remaining VMs.

  1. 새 단계 > 조건 추가를 선택합니다.Select New step > Add a Condition.
    Azure - 논리 앱 - 추가 작업Azure - Logic app - Add action
  2. 조건 상자에서 Choose a value가 포함된 텍스트 상자를 선택하여 사용 가능한 값 목록을 표시합니다.In the Condition box, select the textbox containing Choose a value to display a list of available values.
  3. 목록 맨 위에서 을 선택하고 식 편집기에 다음 식을 입력합니다. float()Select Expression at the top of the list and enter the following expression in the expression editor: float()
  4. 동적 콘텐츠를 클릭하고 괄호() 안에 커서를 놓은 다음, 목록에서 NotificationThresholdAmount를 선택하여 전체 식을 채웁니다.Select Dynamic content, place the cursor inside the parenthesis (), and select NotificationThresholdAmount from the list to populate the complete expression. 식은 다음과 유사합니다.The expression will resemble:
    float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])
  5. 확인을 선택하여 식을 설정합니다.Select OK to set the expression.
  6. 조건의 드롭다운 상자에서 다음보다 크거나 같음을 선택합니다.Select is greater than or equal to in the dropdown box of the Condition.
  7. 조건의 값 선택 상자에 1을 입력합니다.In the Choose a value box for the condition, enter 1.
    Azure - 논리 앱 - 조건 값 설정Azure - Logic app - Set condition value
  8. If true 상자에서 작업 추가를 선택합니다.In the If true box, select Add an action. 나머지 모든 VM을 종료하는 HTTP POST 작업을 추가합니다.You'll add an HTTP POST action that will shut down all the remaining VMs.
    Azure - 논리 앱 - 작업 추가Azure - Logic app - Add an action
  9. HTTP를 입력하여 HTTP 작업을 검색하고 HTTP – HTTP 작업을 선택합니다.Enter HTTP to search for the HTTP action and select the HTTP – HTTP action.
  10. 메서드 값으로 Post를 선택합니다.Select Post as the Method value.
  11. 이 자습서 초반에 만든 Complete로 명명된 Webhook의 URL을 Uri 값으로 입력합니다.Enter the URL for the webhook named Complete that you created earlier in this tutorial as the Uri value.
    Azure - 논리 앱 - 작업 추가Azure - Logic app - Add an action
  12. If true 상자에서 작업 추가를 선택합니다.Select Add an action in the If true box. 받는 사람에게 나머지 VM이 종료되었음을 알리는 이메일을 보내는 이메일 작업을 추가합니다.You'll add an email action that will send an email notifying the recipient that the remaining VMs have been shut down.
  13. "이메일 보내기"를 검색하고 사용하는 이메일 서비스에 따라 이메일 보내기 작업을 선택합니다.Search for "send email" and select a send email action based on the email service you use.
  14. 받는 사람에게 선택적 VM이 종료되었음을 알리는 전자 메일에 대해 받는 사람, 제목본문 텍스트를 추가합니다.Add the To, Subject, and Body text for the email that notifies the recipient that the optional VMs have been shut down. BudgetNameNotificationThresholdAmount 동적 콘텐츠를 사용하여 제목과 본문 필드를 채웁니다.Use the BudgetName and the NotificationThresholdAmount dynamic content to populate the subject and body fields.
    Azure - 논리 앱 - 이메일 보내기 세부 정보Azure - Logic app - Send email details
  15. Logic App 디자이너 영역의 맨 위에서 저장을 선택합니다.Select Save at the top of the Logic App Designer area.

논리 앱 요약Logic App summary

완료 시 논리 앱은 다음 모습과 같습니다.Here's what your Logic App looks like once you're done. 임계값 기반 오케스트레이션이 필요하지 않은 시나리오의 대부분 기초에서는 자동화 스크립트를 Monitor에서 바로 호출하고 논리 앱 단계를 건너뛸 수 있습니다.In the most basic of scenarios where you don't need any threshold-based orchestration, you could directly call the automation script from Monitor and skip the Logic App step.

Azure - 논리 앱 - 전체 보기

논리 앱을 저장하면 호출할 수 있는 URL이 생성됩니다.When you saved your logic app, a URL was generated that you'll be able to call. 이 URL을 이 자습서의 다음 섹션에서 사용할 것입니다.You'll use this URL in the next section of this tutorial.

Azure Monitor 작업 그룹 만들기Create an Azure Monitor Action Group

작업 그룹은 사용자가 정의한 알림 기본 설정 컬렉션입니다.An action group is a collection of notification preferences that you define. 경고가 트리거되면 특정 작업 그룹은 경고 알림을 받을 수 있습니다.When an alert is triggered, a specific action group can receive the alert by being notified. Azure 경고는 특정 조건에 따라 사전에 알림을 보내 조치를 취한 기회를 제공합니다.An Azure alert proactively raises a notification based on specific conditions and provides the opportunity to take action. 경고는 메트릭 및 로그를 포함하여 여러 출처의 데이터를 사용할 수 있습니다.An alert can use data from multiple sources, including metrics and logs.

작업 그룹은 예산과 통합할 유일한 엔드포인트입니다.Action groups are the only endpoint that you'll integrate with your budget. 여러 채널에서 알림을 설정할 수 있지만, 이 시나리오의 경우 이 자습서 초반에 만든 논리 앱에 중점을 둡니다.You can set up notifications in a number of channels, but for this scenario you'll focus on the Logic App you created earlier in this tutorial.

Azure Monitor에서 작업 그룹 만들기Create an action group in Azure Monitor

작업 그룹을 만들면 이 자습서 초반에 만든 논리 앱을 가리킵니다.When you create the action group, you'll point to the Logic App that you created earlier in this tutorial.

  1. Azure Portal에 아직 로그인하지 않은 경우 로그인하고 모든 서비스 > 모니터를 선택합니다.If you are not already signed-in to the Azure portal, sign in and select All services > Monitor.
  2. 경고를 선택한 다음, 작업 관리를 선택합니다.Select Alerts then select Manage actions.
  3. 작업 그룹 영역에서 작업 그룹 추가를 선택합니다.Select Add an action group from the Action groups area.
  4. 다음 사항을 추가하고 확인합니다.Add and verify the following items:
    • 작업 그룹 이름Action group name
    • 짧은 이름Short name
    • SubscriptionSubscription
    • Resource groupResource group
      Azure - 논리 앱 - 작업 그룹 추가
  5. 작업 그룹 추가 창에서 LogicApp 작업을 추가합니다.Within the Add action group pane, add a LogicApp action. 작업 이름을 Budget-BudgetLA로 지정합니다.Name the action Budget-BudgetLA. 논리 앱 창에서 구독리소스 이름을 선택합니다.In the Logic App pane, select the Subscription and the Resource group. 그런 다음, 이 자습서 초반에 만든 논리 앱을 선택합니다.Then, select the Logic app that you created earlier in this tutorial.
  6. 확인을 선택하여 논리 앱을 설정합니다.Select OK to set the Logic App. 그런 다음, 작업 그룹 추가 창에서 확인을 선택하여 작업 그룹을 만듭니다.Then, select OK in the Add action group pane to create the action group.

효과적으로 예산을 오케스트레이션하는 데 필요한 모든 지원 구성 요소를 완료했습니다.You're done with all the supporting components needed to effectively orchestrate your budget. 이제는 예산을 만들고 사용자가 만든 작업 그룹을 사용하도록 구성하면 됩니다.Now all you need to do is create the budget and configure it to use the action group you created.

Azure 예산 만들기Create the Azure Budget

Cost Management의 예산 기능을 사용하여 Azure Portal에서 예산을 만들 수 있습니다.You can create a budget in the Azure portal using the Budget feature in Cost Management. 또는 REST API, PowerShell cmdlet을 사용하여 예산을 만들거나 CLI를 사용할 수 있습니다.Or, you can create a budget using REST APIs, PowerShell cmdlets, or use the CLI. 다음 절차는 REST API를 사용합니다.The following procedure uses the REST API. REST API를 호출하기 전에 권한 부여 토큰이 필요합니다.Before calling the REST API, you'll need an authorization token. 권한 부여 토큰을 만들기 위해 ARMClient 프로젝트를 사용할 수 있습니다.To create an authorization token, you can use the ARMClient project. ARMClient를 사용하면 Azure Resource Manager에 사용자를 인증하고 API를 호출하도록 토큰을 받을 수 있습니다.The ARMClient allows you to authenticate yourself to the Azure Resource Manager and get a token to call the APIs.

인증 토큰 만들기Create an authentication token

  1. GitHub에서 ARMClient 프로젝트로 이동합니다.Navigate to the ARMClient project on GitHub.

  2. 리포지토리를 복제하여 로컬 복사본을 얻습니다.Clone the repo to get a local copy.

  3. Visual Studio에서 프로젝트를 열고 빌드합니다.Open the project in Visual Studio and build it.

  4. 빌드가 성공하면 실행 파일은 \bin\debug 폴더에 있어야 합니다.Once the build is successful, the executable should be in the \bin\debug folder.

  5. ARMClient를 실행합니다.Run the ARMClient. 명령 프롬프트를 열고 프로젝트 루트에서 \bin\debug 폴더로 이동합니다.Open a command prompt and navigate to the \bin\debug folder from the project root.

  6. 로그인하여 인증하려면 명령 프롬프트에 다음 명령을 입력합니다.To sign in and authenticate, enter the following command at the command prompt:
    ARMClient login prod

  7. 출력에서 구독 guid를 복사합니다.Copy the subscription guid from the output.

  8. 권한 부여 토큰을 클립보드에 복사하려면 명령 프롬프트에 다음 명령을 입력합니다. 단, 반드시 위의 단계에서 복사한 구독 ID를 사용하세요.To copy an authorization token to your clipboard, enter the following command at the command prompt, but sure to use the copied subscription ID from the step above:
    ARMClient token <subscription GUID from previous step>

    위 단계를 완료하면 다음 메시지가 표시됩니다.Once you have completed the step above, you'll see:
    토큰을 클립보드에 복사했습니다.Token copied to clipboard successfully.

  9. 이 자습서의 다음 섹션의 단계에 사용할 토큰을 저장합니다.Save the token to be used for steps in the next section of this tutorial.

예산 만들기Create the Budget

다음으로, Azure Consumption REST API를 호출하여 예산을 만들도록 Postman을 구성합니다.Next, you'll configure Postman to create a budget by calling the Azure Consumption REST APIs. Postman은 API 개발 환경입니다.Postman is an API Development environment. 환경 및 컬렉션 파일을 Postman으로 가져옵니다.You'll import environment and collection files into Postman. 컬렉션에는 Azure Consumption REST API를 호출하는 HTTP 요청의 그룹화된 정의가 포함되어 있습니다.The collection contains grouped definitions of HTTP requests that call Azure Consumption REST APIs. 환경 파일에는 컬렉션에 사용되는 변수가 포함되어 있습니다.The environment file contains variables that are used by the collection.

  1. Postman REST 클라이언트를 다운로드한 후 열어 REST API를 실행합니다.Download and open the Postman REST client to execute the REST APIs.

  2. Postman에서 새 요청을 만듭니다.In Postman, create a new request.
    Postman - 새 요청 만들기

  3. 새 요청에 아무 것도 없도록 새 요청을 컬렉션으로 저장합니다.Save the new request as a collection, so that the new request has nothing on it.
    Postman - 새 요청 저장

  4. Get에서 Put 작업으로 요청을 변경합니다.Change the request from a Get to a Put action.

  5. {subscriptionId}를 이 자습서의 이전 섹션에서 사용한 구독 ID로 바꿔 다음 URL을 수정합니다.Modify the following URL by replacing {subscriptionId} with the Subscription ID that you used in the previous section of this tutorial. 또한, {budgetName}에 대한 값으로 "SampleBudget"을 포함하도록 URL을 수정합니다. https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}?api-version=2018-03-31Also, modify the URL to include "SampleBudget" as the value for {budgetName}: https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}?api-version=2018-03-31

  6. Postman에서 헤더 탭을 선택합니다.Select the Headers tab within Postman.

  7. "권한 부여"로 명명된 새 를 추가합니다.Add a new Key named "Authorization".

  8. 을 마지막 섹션의 끝 부분에서 ArmClient를 사용하여 만든 토큰으로 설정합니다.Set the Value to the token that was created using the ArmClient at the end of the last section.

  9. Postman에서 본문 탭을 선택합니다.Select Body tab within Postman.

  10. 원시 단추 옵션을 선택합니다.Select the raw button option.

  11. 텍스트 상자에 아래 샘플 예산 정의를 붙여넣습니다. 단, subscriptionID, resourcegroupnameactiongroupname 매개 변수를 사용자의 구독 ID, 리소스 그룹의 고유한 이름, URL 및 요청 본문 모두에서 만든 작업 그룹 이름으로 바꿔야 합니다.In the textbox, paste in the below sample budget definition, however you must replace the subscriptionID, resourcegroupname, and actiongroupname parameters with your subscription ID, a unique name for your resource group, and the action group name you created in both the URL and the request body:

        {
            "properties": {
                "category": "Cost",
                "amount": 100.00,
                "timeGrain": "Monthly",
                "timePeriod": {
                "startDate": "2018-06-01T00:00:00Z",
                "endDate": "2018-10-31T00:00:00Z"
                },
                "filters": {},
            "notifications": {
                "Actual_GreaterThan_80_Percent": {
                    "enabled": true,
                    "operator": "GreaterThan",
                    "threshold": 80,
                    "contactEmails": [],
                    "contactRoles": [],
                    "contactGroups": [
                        "/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/microsoft.insights/actionGroups/{actiongroupname}"
                    ]
                },
               "Actual_EqualTo_100_Percent": {
                       "operator": "EqualTo",
                       "threshold": 100,
                       "contactGroups": [
                           "/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/microsoft.insights/actionGroups/{actiongroupname}"
                       ]
                   }
               }
            }
        }
    
  12. 보내기를 눌러 요청을 보냅니다.Press Send to send the request.

이제 예산 API를 호출하는 데 필요한 모든 요소를 갖추었습니다.You now have all the pieces you need to call the budgets API. 예산 API 참조에는 다음을 포함해 특정 요청에 대한 추가적인 세부 정보가 있습니다.The budgets API reference has additional details on the specific requests, including:

  • budgetName - 여러 예산이 지원됩니다.budgetName - Multiple budgets are supported. 예산 이름은 고유해야 합니다.Budget names must be unique.
  • 범주 - 비용 또는 사용량이어야 합니다.category - Must be either Cost or Usage. API는 비용 및 사용량 예산을 모두 지원합니다.The API supports both cost and usage budgets.
  • timeGrain -월별, 분기별 또는 연간 예산입니다.timeGrain - A monthly, quarterly, or yearly budget. 기간의 끝에서 크기가 다시 설정됩니다.The amount resets at the end of the period.
  • 필터 -필터를 사용하면 선택한 범위 내 측정 리소스 집합으로 예산을 좁힐 수 있습니다.filters - Filters allow you to narrow the budget to a specific set of resources within the selected scope. 예를 들어 필터는 구독 수준 예산에 대한 리소스 그룹의 컬렉션일 수 있습니다.For example, a filter could be a collection of resource groups for a subscription level budget.
  • 알림 – 알림 세부 정보 및 임계값을 결정합니다.notifications – Determines the notification details and thresholds. 여러 임계값을 설정하고 알림을 받을 이메일 주소 또는 작업 그룹을 제공할 수 있습니다.You can set up multiple thresholds and provide an email address or an action group to receive a notification.

요약Summary

이 자습서를 사용하여 다음 사항을 알아보았습니다.By using this tutorial, you learned:

  • VM을 중지하도록 Azure Automation Runbook을 만드는 방법How to create an Azure Automation Runbook to stop VMs.
  • 예산 임계값에 기반하여 트리거될 Azure 논리 앱을 만들고 올바른 매개 변수로 관련 Runbook을 호출합니다.How to create an Azure Logic App that is triggered based on the budget threshold values and call the related runbook with the right parameters.
  • 예산 임계값이 충족되면 Azure 논리 앱을 트리거하도록 구성된 Azure Monitor 작업 그룹을 만드는 방법How to create an Azure Monitor Action Group that was configured to trigger the Azure Logic App when the budget threshold is met.
  • 원하는 임계값으로 Azure 예산을 만들고 작업 그룹에 연결하는 방법How to create the Azure budget with the desired thresholds and wire it to the action group.

이제 사용자가 구성한 예산 임계값에 도달하면 VM이 종료되는 구독에 완벽하게 기능하는 예산이 마련되었습니다.You now have a fully functional budget for your subscription that will shut down your VMs when you reach your configured budget thresholds.

다음 단계Next steps