使用預算管理成本

成本控制是將雲端投資價值最大化的重要元件。 有數個案例,其中成本可見度、報告和成本型協調流程對於持續的業務營運至關重要。 成本管理 API 提供一組 API 來支持這些案例。 API 提供使用量詳細數據,可讓您檢視細微的實例層級成本。

預算通常用來作為成本控制的一部分。 預算可以在 Azure 中設定範圍。 例如,您可以根據訂用帳戶、資源群組或資源的集合來縮小預算檢視範圍。 除了使用預算 API 在達到預算閾值時透過電子郵件通知您之外,您還可以使用 Azure 監視器動作群組 來觸發預算事件所產生的一組協調動作。

針對執行非關鍵工作負載的客戶來說,常見的預算案例可能會在客戶想要針對預算進行管理時發生,並在查看每月發票時取得可預測的成本。 此案例需要屬於 Azure 環境的一些以成本為基礎的資源協調流程。 在此案例中,已設定訂用帳戶每月預算 $1,000 美元。 此外,通知閾值會設定為觸發一些協調流程。 此案例的開頭為 80% 的成本閾值,這會停止資源群組 中所有虛擬機 [選擇性]。 然後,在 100% 的成本閾值下,所有 VM 實例都會停止。

若要設定此案例,您將使用本教學課程每個區段中提供的步驟來完成下列動作。

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

  • 建立 Azure 自動化 Runbook,以使用 Webhook 停止 VM。
  • 建立要根據預算閾值觸發的 Azure 邏輯應用程式,並使用正確的參數呼叫 Runbook。
  • 建立設定為在符合預算閾值時觸發 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. 完成時,選取 [ 建立],以啟動自動化帳戶部署。

匯入停止 Azure V2 VM Runbook

使用 Azure 自動化 Runbook,從資源庫匯入停止 Azure V2 VM 圖形化 Runbook。

  1. 使用您的 Azure 帳戶認證,登入 Azure 入口網站
  2. 選取 [所有服務>自動化帳戶],以開啟您的自動化帳戶。 然後,選取您的自動化帳戶。
  3. 從 [行程自動化] 區段選取 [Runbook] 資源庫
  4. 將資源 庫來源 設定為 腳本中心 ,然後選取 [ 確定]。
  5. 找出並選取 Azure 入口網站 內的 [停止 Azure V2 VM 資源庫] 專案。
  6. 選取 [匯入] 以顯示 [入] 區域,然後選取 [確定]。 將會顯示 Runbook 概觀區域。
  7. Runbook 完成匯入程式之後,請選取 [編輯 ] 以顯示圖形化 Runbook 編輯器和發佈選項。
    顯示編輯圖形化 Runbook 的螢幕快照。
  8. 選取 [發佈 ] 以發佈 Runbook,然後在出現提示時選取 [ ]。 當您發佈 Runbook 時,您可以使用草稿版本覆寫任何現有的已發佈版本。 在此情況下,您沒有已發佈的版本,因為您已建立 Runbook。 如需發佈 Runbook 的詳細資訊,請參閱 建立圖形化 Runbook

建立 Runbook 的 Webhook

使用停止 Azure V2 VM 圖形化 Runbook,您可以建立兩個 Webhook,透過單一 HTTP 要求在 Azure 自動化 啟動 Runbook。 第一個 Webhook 會以具有資源組名作為參數的 80% 預算閾值叫用 Runbook,讓選擇性 VM 停止。 然後,第二個 Webhook 會叫用不含參數的 Runbook(在 100%),這會停止所有剩餘的 VM 實例。

  1. 從 Azure 入口網站[Runbook] 頁面中,選取顯示 Runbook 概觀區域的 StopAzureV2Vm Runbook。
  2. 選取 頁面頂端的 [Webhook ],以開啟 [ 新增 Webhook ] 區域。
  3. 選取 [建立新的 Webhook ] 以開啟 [ 建立新的 Webhook ] 區域。
  4. [Webhook 的名稱 ] 設定為 [選擇性]。 Enabled 屬性必須是 [是]。 您不需要變更 [到期] 值。 如需 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,每個 Webhook 都可使用您儲存的 URL。

顯示 Webhook 的螢幕快照。

您現在已完成 Azure 自動化 設定。 您可以使用簡單的 Postman 測試來測試 Webhook,以驗證 Webhook 是否正常運作。 接下來,您必須建立協調流程的邏輯應用程式。

建立適用於協調流程的 Azure 邏輯應用程式

Logic Apps 可協助您以工作流程的形式建置、排程及自動化程式,以便跨企業或組織整合應用程式、數據、系統和服務。 在此案例中,您建立的 邏輯應用程式 只會呼叫您建立的自動化 Webhook。

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

邏輯應用程式可讓您提供 HTTP 觸發程式的範例架構,但要求您設定 Content-Type 標頭。 因為動作群組沒有 Webhook 的自定義標頭,因此您必須在不同的步驟中剖析承載。 您將使用剖 動作,並提供範例承載。

建立邏輯應用程式

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

  • 辨識收到 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 request」 以新增觸發程式,以尋找並選取名為 Request 的觸發程式 – 收到 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()
    顯示 Float 表達式的螢幕快照。

  4. 選取 [動態內容],將游標放在括弧內 (),然後從清單中選取 NotificationThresholdAmount 以填入完整的表達式。 運算式會是:
    float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])

  5. 選取 [ 確定 ] 以設定表達式。

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

  7. 在條件的 [ 選擇值 ] 方塊中, 輸入 .8
    顯示 [條件] 對話框的螢幕快照,其中已選取值。

  8. 選取 [條件] 方塊中的 [新增>新增數據列] 以新增條件的另一個部分。

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

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

  11. 選取 [動態內容],將游標放在括弧內 (),然後從清單中選取 NotificationThresholdAmount 以填入完整的表達式。

  12. 選取 [ 確定 ] 以設定表達式。

  13. Select 小於 [條件] 下拉式方塊中的 。

  14. 在條件的 [ 選擇值 ] 方塊中, 輸入 1
    顯示 [條件] 對話框有兩個條件的螢幕快照。

  15. 在 [ 如果為 true] 方塊中,選取 [ 新增動作]。 您將新增 HTTP POST 動作,以關閉選用的 VM。
    顯示 [新增動作] 的螢幕快照。

  16. 輸入 HTTP 以搜尋 HTTP 動作,然後選取 HTTP – HTTP 動作。
    顯示 [新增 HTTP] 動作的螢幕快照。

  17. 針對 [方法] 值選取 [張貼]。

  18. 輸入您稍早在本教學課程中建立的 Webhook URL 作為 URI 值。
    顯示 HTTP 動作 URI 的螢幕快照。

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

  20. 搜尋「傳送電子郵件」,並根據您使用的電子郵件服務選取傳送 電子郵件 動作。
    顯示 [傳送電子郵件] 動作的螢幕快照。

    針對個人 Microsoft 帳戶,選取 [Outlook.com]。 針對 Azure 公司或學校帳戶,選取 [Office 365 Outlook]。 如果您還沒有連線,系統會要求您登入您的電子郵件帳戶。 Logic Apps 會建立電子郵件帳戶的連線。 您必須允許邏輯應用程式存取電子郵件資訊。
    顯示存取通知的螢幕快照。

  21. 為電子郵件新增 [收件者]、[主旨] 和 [內文] 文字,通知收件者已關閉選用 VM。 使用 BudgetNameNotificationThresholdAmount 動態內容來填入主旨和本文字段。 顯示電子郵件詳細數據的螢幕快照。

新增第二個條件式動作

使用條件語句來檢查臨界值是否已達到或超過預算值的 100%。 如果已達到臨界值數量,請使用名為 Complete 的 Webhook 傳送 HTTP POST。 此動作將會關閉所有剩餘的 VM。

  1. 選取 [新增步驟>] [新增條件]。
    顯示 [If true] 對話框的螢幕快照,其中已呼叫 [新增動作]。
  2. 在 [ 條件] 方塊中,選取包含 Choose a value 的文字框以顯示可用值的清單。
  3. 選取 清單頂端的 [運算式 ],然後在運算式編輯器中輸入下列運算式: float()
  4. 選取 [動態內容],將游標放在括弧內 (),然後從清單中選取 NotificationThresholdAmount 以填入完整的表達式。 表示式會類似:
    float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])
  5. 選取 [ 確定 ] 以設定表達式。
  6. 在 [條件] 的下拉式方塊中,Select 大於或等於
  7. 在條件的 [ 選擇值] 方塊 中, 輸入 1
    顯示 [設定條件] 值的螢幕快照。
  8. 在 [ 如果為 true] 方塊中,選取 [ 新增動作]。 您將新增 HTTP POST 動作,以關閉其餘所有 VM。
    顯示 [If true] 對話框的螢幕快照,其中您可以新增 H T T P POST 動作。
  9. 輸入 HTTP 以搜尋 HTTP 動作,然後選取 HTTP – HTTP 動作。
  10. 選取 [Post ] 作為 [方法] 值。
  11. 輸入您稍早在本教學課程中建立之 Webhook 的 URL 作為 URI 值。
    顯示 [H T T P] 對話框的螢幕快照,您可以在其中輸入 U R L 值。
  12. 在 [If true] 方塊中選取 [新增動作]。 您將新增電子郵件動作,以傳送電子郵件通知收件者剩餘的 VM 已關閉。
  13. 搜尋「傳送電子郵件」,並根據您使用的電子郵件服務選取傳送 電子郵件 動作。
  14. 為電子郵件新增 [收件者]、[主旨] 和 [內文] 文字,通知收件者已關閉選用 VM。 使用 BudgetNameNotificationThresholdAmount 動態內容來填入主旨和本文字段。
    此螢幕快照顯示您設定的電子郵件詳細數據。
  15. 選取邏輯應用程式設計工具區域頂端的 [儲存]。

邏輯應用程式摘要

完成之後,邏輯應用程式看起來會像這樣。 在不需要任何閾值型協調流程的最基本案例中,您可以直接從 監視 呼叫自動化腳本,並略過 邏輯應用程式 步驟。

顯示邏輯應用程式 - 完整檢視的螢幕快照。

儲存邏輯應用程式時,會產生一個可以呼叫的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. 從輸出複製訂用 帳戶 GUID

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

    完成上述步驟之後,您會看到:
    已成功複製到剪貼簿的令牌。

  9. 儲存要用於本教學課程下一節步驟的令牌。

建立預算

接下來,您將設定 Postman 呼叫 Azure 使用量 REST API 來建立預算。 Postman 是 API 開發環境。 您會將環境和集合檔案匯入 Postman。 集合包含呼叫 Azure 取用 REST API 之 HTTP 要求的群組定義。 環境檔案包含集合所使用的變數。

  1. 下載並開啟 Postman REST 用戶端 以執行 REST API。

  2. 在 Postman 中,建立新的要求。
    顯示Postman中建立新要求的螢幕快照。

  3. 將新要求儲存為集合,讓新要求沒有任何專案。
    顯示將新要求儲存在Postman中的螢幕快照。

  4. 將要求從 Get 變更為 Put 動作。

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

  6. 選取 Postman 內的 [ 標頭] 索引 標籤。

  7. 新增名為 「Authorization」 的新 金鑰

  8. Value 設定為最後一節結尾使用 ArmClient 所建立的令牌。

  9. 選取 Postman 內的 [本文 ] 索引標籤。

  10. 選取 [原始] 按鈕選項。

  11. 在文本框中,貼上下列範例預算定義,不過您必須將 、 resourcegroupnameactiongroupname 參數取代subscriptionID為您的訂用帳戶標識碼、資源群組的唯一名稱,以及您在 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}"
                       ]
                   }
               }
            }
        }
    
  12. 按 [ 傳送 ] 以傳送要求。

您現在擁有呼叫預算 API 所需的所有專案。 預算 API 參考有特定要求的詳細數據,包括:

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

摘要

使用本教學課程,您已瞭解:

  • 如何建立 Azure 自動化 Runbook 來停止 VM。
  • 如何建立以預算臨界值為基礎的 Azure 邏輯應用程式,並使用正確的參數呼叫相關的 Runbook。
  • 如何建立設定為在符合預算閾值時觸發 Azure 邏輯應用程式的 Azure 監視器動作群組。
  • 如何建立具有所需閾值的預算,並將其聯機至動作群組。

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

下一步