共用方式為


使用預算管理成本

成本控制是為您在雲端的投資創造最大價值的關鍵。 在幾種案例中,成本可見性、報告和成本型協調流程,對於持續的業務營運而言非常重要。 A成本管理 API \(英文\) 提供一組 API 來支援上述每一種情節。 API 能提供使用情況詳細資料,可讓您檢視更細微的執行個體層級成本。

預算經常被當作成本控制的一部分。 在 Azure 中可以設定預算範圍。 例如,您可以依訂用帳戶、資源群組或資源集合縮小預算檢視。 除了使用預算 API 在達到預算閾值時傳送電子郵件通知之外,還可以使用 Azure 監視器動作群組。 動作群組會觸發一系列協調的動作,以回應預算事件。

對於執行非關鍵工作負載的客戶來說,一般預算案例是根據預算管理支出,並在檢閱每月發票時實現可預測的成本。 這種案例需要針對作為 Azure 環境之一部分的資源進行成本型的協調流程。 在此案例中,會為訂用帳戶設定每月 1,000 美元的預算。 此外,也會設定通知閾值以觸發幾個協調流程。 此案例一開始的成本閾值為 80%,這會停止 [選項] 資源群組中的所有虛擬機器 (VM)。 然後,在達到 100% 的成本閾值之後,系統就會停止所有 VM 執行個體。

若要設定此案例,請使用本教學課程中各節所提供的步驟來完成下列動作。

本教學課程所包含的這些動作可以讓您:

  • 建立 Azure 自動化 Runbook,以使用 Webhook 來停止 VM。
  • 建立會依預算閾值觸發,並使用正確參數呼叫 Runbook 的 Azure 邏輯應用程式。
  • 建立 Azure 監視器動作群組,並將其設定為在達到預算閾值時觸發 Azure 邏輯應用程式。
  • 以所需的閾值建立預算,並將其連接到動作群組。

建立 Azure 自動化 Runbook

Azure 自動化是一個服務,可讓您編寫大部分資源管理工作的指令碼,並以排程或在需要時執行那些工作。 在此案例中,您建立會停止 VM 的 Azure 自動化 Runbook。 您將使用來自 Azure 自動化資源庫停止 Azure V2 VM 圖形化 Runbook 來建置此案例。 透過將此 Runbook 匯入您的 Azure 帳戶並發佈它,您就能在達到預算閾值後停止 VM。

建立 Azure 自動化帳戶

  1. 使用您的 Azure 帳戶認證,登入 Azure 入口網站
  2. 選取 Azure 左上角的 [建立資源] 按鈕。
  3. 選取 [管理工具]>[自動化]

    注意

    如果您沒有 Azure 帳戶,可以建立一個免費帳戶

  4. 輸入您的帳戶資訊。 針對 [建立 Azure 執行身分帳戶],選擇 [是] 以自動啟用相關設定來簡化 Azure 驗證。
  5. 完成後,選取 [建立] 可啟動自動化帳戶部署。

匯入 Stop Azure V2 VM Runbook

透過使用 Azure 自動化 Runbook,從資源庫匯入 Stop Azure V2 VM \(英文\) 圖形化 Runbook。

  1. 使用您的 Azure 帳戶認證,登入 Azure 入口網站
  2. 選取 [所有服務]>[自動化帳戶] 來開啟您的自動化帳戶。 然後選取您的自動化帳戶。
  3. 選取 [程序自動化] 區段中的 [Runbook 資源庫]
  4. 將 [資源庫來源] 設定為 [指令碼中心],然後選取 [確定]
  5. 在 Azure 入口網站內找出並選取 Stop Azure V2 VM \(英文\) 資源庫項目。
  6. 選取 [匯入] 以顯示 [匯入] 區域,然後選取 [確定]。 Runbook 概觀區域隨即顯示。
  7. Runbook 完成匯入程序之後,請選取 [編輯] 以顯示圖形化 Runbook 編輯器和發佈選項。
    顯示編輯圖形化 Runbook 的螢幕擷取畫面。
  8. 選取 [發佈] 來發佈 Runbook,然後在系統提示時選取 [是]。 當您發佈 Runbook 時,您會以草稿版本覆寫任何現有的已發佈版本。 在此情況下,因為您剛剛建立 Runbook,所以還沒有已發佈的版本。 如需發佈 Runbook 的詳細資訊,請參閱建立圖形化 Runbook

建立 Runbook 的 Webhook

透過使用 Stop Azure V2 VM \(英文\) 圖形化 Runbook,您會建立兩個 Webhook,以透過單一 HTTP 要求在 Azure 自動化中啟動 Runbook。 當達到 80% 預算閾值的時候,第一個 Webhook 會以資源群組名稱作為參數來叫用 Runbook,以允許系統停止選擇性的 VM。 然後,第二個 Webhook 會在不搭配任何參數 (於 100%) 的情況下叫用 Runbook,這會停止所有剩下的 VM 執行個體。

  1. Azure 入口網站中的 [Runbook] 頁面,選取會顯示 Runbook 概觀區域的 [StopAzureV2Vm] Runbook。
  2. 選取頁面頂端的 [Webhook] 來開啟 [新增 Webhook] 區域。
  3. 選取 [建立新的 Webhook] 來開啟 [建立新的 Webhook ] 區域。
  4. 將 Webhook 的 [名稱] 設定成 Optional。 [Enabled] 屬性必須為 [Yes]。 您不需要變更到期值。 如需 Webhook 屬性的詳細資訊,請參閱 Webhook 屬性
  5. 在 URL 值的旁邊,選取複製圖示來複製 Webhook 的 URL。

    重要

    將名為 Optional 之 Webhook 的 URL 保存在安全的地方。 您稍後會在本教學課程中使用這個 URL。 為了安全起見,當您建立 Webhook 之後,就無法再次查看或擷取該 URL。

  6. 選取 [確定] 以建立新的 Webhook。
  7. 選取 [設定參數與回合設定] 以檢視 Runbook 的參數值。

    注意

    如果 Runbook 有強制參數,除非提供值,否則您無法建立 Webhook。

  8. 選取 [確定] 以接受 Webhook 參數值。
  9. 選取 [建立] 來建立 Webhook。
  10. 接下來,請依照前面的步驟來建立名為 Complete 的第二個 Webhook。

    重要

    請務必儲存這兩個 Webhook URL,以用於本教學課程稍後的步驟。 為了安全起見,當您建立 Webhook 之後,就無法再次查看或擷取該 URL。

您現在應該有兩個已設定的 Webhook,可透過您已儲存的 URL 來使用。

顯示 Webhook 的螢幕擷取畫面。

您已完成 Azure 自動化設定。 若要測試 Webhook,您可以使用簡單的 API 測試來驗證 Webhook 是否有效。 查詢 API 的一些熱門方式如下:

接下來,您必須針對協調流程建立邏輯應用程式。

針對協調流程建立 Azure 邏輯應用程式

Logic Apps 可協助您建立、排程程序,並以工作流程的形式自動執行程序,以便整合各企業或組織的應用程式、資料、系統和服務。 在此案例中,您建立的邏輯應用程式功能,將不僅僅只有呼叫所建立的自動化 Webhook 而己。

預算可以設定成在符合指定閾值的情況下觸發通知。 您可以提供多個要進行通知的閾值,然後邏輯應用程式會示範可讓您根據不同閾值來執行不同動作的能力。 在此範例中,您會設定一個案例,讓您收到一些通知。 第一個通知在達到預算的 80% 時發出。 第二個通知在達到預算的 100% 時發出。 邏輯應用程式會被用來關閉資源群組中的所有 VM。 首先,選擇性閾值達到 80%,然後在達到訂用帳戶中所有 VM 關閉的第二個閾值。

邏輯應用程式可讓您針對 HTTP 觸發程序提供範例結構描述,但您必須設定 Content-type 標頭。 因為動作群組沒有適用於 Webhook 的自訂標頭,您必須在個別的步驟中對承載進行剖析。 您會使用 Parse 動作,並為它提供範例承載。

建立邏輯應用程式

邏輯應用程式會執行數個動作。 下列清單提供邏輯應用程式會執行的高階動作集合:

  • 辨識接收到 HTTP 要求的時機
  • 剖析已傳遞的 JSON 資料,以判斷已經達到的閾值
  • 使用條件式陳述式來檢查閾值額度是否已達到預算範圍的 80% 或更高,但沒有超過或等於 100%。
    • 如果已達到這個閾值額度,便使用名為 Optional 的 Webhook 來傳送 HTTP POST。 此動作會關閉「選擇性」群組中的 VM。
  • 使用條件陳述式來檢查閾值額度是否已達到或超過預算值的 100%。
    • 如果達到這個閾值額度,便使用名為 Complete 的 Webhook 來傳送 HTTP POST。 此動作會關閉所有剩餘的 VM。

建立執行前面步驟的邏輯應用程式需要下列步驟:

  1. Azure 入口網站中,選取 [建立資源]>[整合]>[邏輯應用程式]
    顯示選取邏輯應用程式資源的螢幕擷取畫面。
  2. 在 [建立邏輯應用程式] 區域中,提供建立邏輯應用程式所需的詳細資料,選取 [釘選到儀表板],然後選取 [建立]
    顯示建立邏輯應用程式的螢幕擷取畫面。

在 Azure 部署您的邏輯應用程式之後,[Logic Apps 設計工具] 隨即開啟,並顯示含有簡介影片和常用觸發程序的區域。

新增觸發程序

每個邏輯應用程式都必須使用觸發程序啟動,而該觸發程序會在特定事件發生或符合特定條件時引發。 每次引發觸發程序時,Logic Apps 引擎會建立邏輯應用程式執行個體,啟動並執行您的工作流程。 「動作」是指在觸發程序之後發生的所有步驟。

  1. 在 [Logic Apps 設計工具] 區域的 [範本] 中,選擇 [空白邏輯應用程式]
  2. 在 [Logic Apps 設計工具] 搜尋方塊中輸入「http 要求」來新增觸發程序,以尋找並選取名為 [要求 – 接收到 HTTP 要求時] 的觸發程序。
    顯示收到 HTTP 要求時觸發程序的螢幕擷取畫面。
  3. 選取新增步驟>新增動作
    顯示 [新增步驟 - 新增動作] 的螢幕擷取畫面。
  4. 在 [Logic Apps 設計工具] 搜尋方塊中搜尋「剖析 JSON」,以尋找並選取 [資料作業 - 剖析 JSON] 動作
    顯示 [資料作業 - 剖析 JSON] 的螢幕擷取畫面。
  5. 輸入 "Payload" 作為剖析 JSON 承載的 [內容] 名稱或使用動態內容中的 "Body" 標籤。
  6. 選取 [剖析 JSON] 方塊中的 [請使用範例承載產生結構描述] 選項。
    顯示使用範例 JSON 資料來產生結構描述承載的螢幕擷取畫面。
  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"}} 文字方塊隨即出現:
    顯示範例 JSON 承載的螢幕擷取畫面。
  8. 選取完成

新增第一個條件式動作

使用條件式陳述式來檢查閾值額度是否已達到預算範圍的 80% 或更高,但沒有超過或等於 100%。 如果已達到這個閾值額度,便使用名為 Optional 的 Webhook 來傳送 HTTP POST。 此動作會關閉 [選擇性] 群組中的 VM。

  1. 選取 [新增步驟]>[新增條件]
    顯示 [新增條件] 的螢幕擷取畫面。

  2. 在 [條件] 方塊中,選取包含 Choose a value 的文字方塊,以顯示可用值的清單。
    顯示 [選擇值條件] 的螢幕擷取畫面。

  3. 選取清單頂端的 [運算式],然後在運算式編輯器中輸入下列運算式:float()
    顯示 [浮點數運算式] 的螢幕擷取畫面。

  4. 選取 [動態內容],將游標放在括號 () 裡面,然後從清單中選取 [NotificationThresholdAmount] 來填入完整的運算式。 運算式為:
    float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])

  5. 選取 [確定] 來設定運算式。

  6. 在 [條件] 下拉式方塊中,選取 [大於或等於]

  7. 在 [條件] 的 [選擇值] 方塊中,輸入 .8
    顯示已選取值的 [條件] 對話方塊的螢幕擷取畫面。

  8. 選取 [條件] 方塊內的 [新增]>[新增資料列],以新增條件的其他部分。

  9. 在 [條件] 方塊中選取包含 Choose a value 的文字方塊。

  10. 選取清單頂端的 [運算式],然後在運算式編輯器中輸入下列運算式:float()

  11. 選取 [動態內容],將游標放在括號 () 裡面,然後從清單中選取 [NotificationThresholdAmount] 來填入完整的運算式。

  12. 選取 [確定] 來設定運算式。

  13. 在 [條件] 的下拉式方塊中,選取 [小於]

  14. 在 [條件] 的 [選擇值] 方塊中,輸入 1
    顯示具有兩個條件的 [條件] 對話方塊的螢幕擷取畫面。

  15. 在 [若為 true] 方塊中,選取 [新增動作]。 您可以新增 HTTP POST 動作,以關閉選用的 VM。
    顯示 [新增動作] 的螢幕擷取畫面。

  16. 輸入 HTTP 來搜尋該 HTTP 動作,然後選取 [HTTP – HTTP] 動作。
    顯示 [新增 HTTP] 動作的螢幕擷取畫面。

  17. 選取 Post 作為方法值。

  18. 輸入您稍早於本教學課程中所建立之 Optional Webhook 的 URL,作為 [Uri] 值。
    顯示 HTTP 動作 URI 的螢幕擷取畫面。

  19. 在 [若為 true] 方塊中,選取 [新增動作]。 您會新增電子郵件動作來傳送電子郵件,以通知收件者選擇性 VM 已關閉。

  20. 搜尋「傳送電子郵件」,然後根據您所使用的電子郵件服務,選取其中一個傳送電子郵件動作。
    顯示 [傳送電子郵件] 動作的螢幕擷取畫面。

    對於個人 Microsoft 帳戶,選取 [Outlook.com]。 對於 Azure 工作或學校帳戶,選取 [Office 365 Outlook]。 如果您還沒有連線,系統會要求您登入您的電子郵件帳戶。 Logic Apps 會建立與電子郵件帳戶的連線。 您必須允許邏輯應用程式以存取您的電子郵件資訊。
    顯示存取注意事項的螢幕擷取畫面。

  21. 為通知收件者選擇性 VM 已關閉的電子郵件,新增 [收件者]、[主旨] 和 [本文]。 使用 BudgetNameNotificationThresholdAmount 動態內容來填入主旨和本文欄位。 顯示電子郵件詳細資料的螢幕擷取畫面。

新增第二個條件式動作

使用條件陳述式來檢查閾值額度是否已達到或超過預算值的 100%。 如果達到這個閾值額度,便使用名為 Complete 的 Webhook 來傳送 HTTP POST。 此動作會關閉所有剩餘的 VM。

  1. 選取 [新增步驟]>[新增條件]
    顯示 [若為 True] 對話方塊的螢幕擷取畫面,其中包含 [新增動作] 圖說文字。
  2. 在 [條件] 方塊中,選取包含 Choose a value 的文字方塊,以顯示可用值的清單。
  3. 選取清單頂端的 [運算式],然後在運算式編輯器中輸入下列運算式:float()
  4. 選取 [動態內容],將游標放在括號 () 裡面,然後從清單中選取 [NotificationThresholdAmount] 來填入完整的運算式。 運算式類似:
    float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])
  5. 選取 [確定] 來設定運算式。
  6. 在 [條件] 下拉式方塊中,選取 [大於或等於]
  7. 在 [條件] 的 [選擇值] 方塊中,輸入 1
    顯示 [設定條件] 值的螢幕擷取畫面。
  8. 在 [若為 true] 方塊中,選取 [新增動作]。 您會新增 HTTP POST 動作,以關閉所有其餘 VM。
    顯示 [若為 True] 對話方塊的螢幕擷取畫面,您可在其中新增 HTTP POST 動作。
  9. 輸入 HTTP 來搜尋該 HTTP 動作,然後選取 [HTTP – HTTP] 動作。
  10. 選取 Post 作為方法值。
  11. 輸入您稍早於本教學課程中所建立之 Complete Webhook 的 URL,作為 [Uri] 值。
    顯示 HTTP 對話方塊的螢幕擷取畫面,您可在其中輸入 URL 值。
  12. 在 [若為 true] 方塊中,選取 [新增動作]。 您可以新增電子郵件動作來傳送電子郵件,以通知收件者其餘的 VM 已關閉。
  13. 搜尋「傳送電子郵件」,然後根據您所使用的電子郵件服務,選取其中一個傳送電子郵件動作。
  14. 為通知收件者選擇性 VM 已關閉的電子郵件,新增 [收件者]、[主旨] 和 [本文]。 使用 BudgetNameNotificationThresholdAmount 動態內容來填入主旨和本文欄位。
    顯示設定的電子郵件詳細資料的螢幕擷取畫面。
  15. 選取 [Logic Apps 設計工具] 區域上方的 [儲存]

邏輯應用程式摘要

在完成時,邏輯應用程式看起來應該如下所示。 在不需要任何以閾值為基礎之協調流程的最基本案例中,您可以從 [監視器] 直接呼叫自動化指令碼,並略過 [邏輯應用程式] 步驟。

顯示 [邏輯應用程式 - 完整檢視] 的螢幕擷取畫面。

當您儲存邏輯應用程式時,系統會產生一個可供呼叫的 URL。 您會在本教學課程的下一節中使用這個 URL。

建立 Azure 監視器動作群組

動作群組是您所定義之通知喜好設定的集合。 觸發警示時,特定的動作群組將能透過通知接收到警示。 Azure 警示會根據特定條件主動發出通知,並提供採取動作的機會。 警示可以使用來自各種來源 (包括計量和記錄) 的資料。

動作群組是您唯一會與預算進行整合的端點。 您可以在許多通道中設定通知,不過在本案例中,您會將會專注在您稍早於本教學課程中建立的邏輯應用程式。

在 Azure 監視器中建立動作群組

當您建立動作群組時,您會指向您稍早於本教學課程中建立的邏輯應用程式。

  1. 如果您尚未登入 Azure 入口網站,請登入並選取 [所有服務]>[監視]
  2. 選取 [警示],然後選取 [管理動作]
  3. 從 [動作群組] 區域中,選取 [新增動作群組]
  4. 新增並確認下列項目:
    • 動作群組名稱
    • 簡短名稱
    • 訂用帳戶
    • 資源群組
      顯示 [新增動作群組] 的螢幕擷取畫面。
  5. 在 [新增動作群組] 窗格內,新增 LogicApp 動作。 將該動作命名為 Budget-BudgetLA。 在 [邏輯應用程式] 窗格中,選取 [訂用帳戶] 及 [資源群組]。 然後,選取您稍早於本教學課程中建立的邏輯應用程式
  6. 選取 [確定] 來設定邏輯應用程式。 然後,選取 [新增動作群組] 窗格中的 [確定]以建立動作群組。

您已完成有效協調預算所需的所有支援元件。 現在您只需要建立預算,並將它設定為使用您所建立的動作群組。

建立預算

您可以使用成本管理中的預算功能,在 Azure 入口網站中建立預算。 或者,您可以使用 REST API、PowerShell Cmdlet 或使用 CLI 來建立預算。 下列程序會使用 REST API。 在呼叫 REST API 之前,您需要授權權杖。 若要建立授權權杖,您可以使用 ARMClient \(英文\) 專案。 ARMClient 可讓您將自己驗證至 Azure Resource Manager,並取得呼叫 API 的權杖。

建立驗證權杖

  1. 瀏覽至 GitHub 上的 ARMClient \(英文\) 專案。

  2. 複製存放庫以取得本機複本。

  3. 在 Visual Studio 中開啟專案並加以建置。

  4. 建置成功之後,可執行檔應該會位於 \bin\debug 資料夾中。

  5. 執行 ARMClient。 開啟命令提示字元,並從專案根資料夾瀏覽至 \bin\debug

  6. 若要登入並進行驗證,請在命令提示字元中輸入下列命令:
    ARMClient login prod

  7. 從輸出中複製 subscription guid

  8. 若要將授權權杖複製到剪貼簿,請在命令提示字元中輸入下列命令,但請務必使用上一個步驟中已複製的訂用帳戶識別碼:
    ARMClient token <subscription GUID from previous step>

    當您完成上一個步驟時,您會看到:
    權杖已成功複製到剪貼簿。

  9. 儲存權杖以用於本教學課程下一節的步驟。

建立預算

接下來,您會呼叫 Azure 使用量 REST API 來建立預算。 您需要一種方式來與 API 互動。 查詢 API 的一些熱門方式如下:

您必須將環境和集合檔案匯入 API 用戶端。 集合包含會呼叫 Azure 使用量 REST API 之 HTTP 要求的分組定義。 環境檔案包含集合所使用的變數。

  1. 在您的 API 用戶端中,建立新的要求。

  2. 儲存新的要求,使其沒有任何內容。

  3. 將要求從 Get 變更至 Put 動作。

  4. 將以下 URL 的 {subscriptionId} 取代為您於本教學課程上一節中所使用的訂用帳戶識別碼。 此外,修改 URL 來包含 "SampleBudget" 作為 {budgetName} 的值:https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}?api-version=2018-03-31

  5. 在 API 用戶端中選取 [標頭]。

  6. 新增名為 "Authorization" 的新 [Key] \(金鑰\)。

  7. 將 [Value] \(值\) 設定成於上一節結尾利用 ArmClient 所建立的權杖。

  8. 在 API 用戶端中選取 [內文]。

  9. 在 API 用戶端中選取 [原始] 選項。

  10. 在 API 用戶端的文字區域中,貼上下列範例預算定義。 您必須將 subscriptionIDresourcegroupnameactiongroupname 參數取代為您的訂用帳戶識別碼、資源群組的唯一名稱,以及您在 URL 和要求本文中建立的動作群組名稱:

        {
            "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}"
                       ]
                   }
               }
            }
        }
    
  11. 傳送要求。

現在,呼叫預算 API\(英文\) 的所有元件皆已準備完畢。 預算 API 參考具有特定要求的更多詳細資料,包括:

  • budgetName - 支援多個預算。 預算名稱必須是唯一的。
  • category - 必須是 CostUsage。 API 同時支援成本和使用量預算。
  • timeGrain - 每月、每季或每年的預算。 系統會於期間結束時重設額度。
  • filters - 篩選可讓您將預算縮小到選取範圍內的特定資源集合。 例如,篩選可以是訂用帳戶層級預算的資源群組集合。
  • notifications – 決定通知詳細資料和閾值。 您可以設定多個閾值,並提供電子郵件地址或動作群組來接收通知。

摘要

您已在本教學課程中了解:

  • 如何建立 Azure 自動化 Runbook 來停止 VM。
  • 如何建立會依預算閾值觸發,並使用正確參數呼叫 Runebook 的 Azure 邏輯應用程式。
  • 如何建立 Azure 監視器 動作群組,並將其設定為在達到預算閾值時觸發 Azure 邏輯應用程式。
  • 如何以所需的閾值建立預算,並將其連接到動作群組。

您現在已具有適用於您訂用帳戶且功能完整的預算,會在達到已設定的預算閾值時關閉您的 VM。

下一步