[Azure][Automation]定時自動將 Azure SQL Database 給 Scale Up 或 Scale Down

介紹一個 Azure Automation 上所可以使用的 PowerShell 範本,讓你可以按照所想要的時間自動 Scale 調整,做最經濟的考量

在之前曾經寫過一篇文章「透過 Azure Automation 將 Azure SQL Database 資料定時匯出」,後來有朋友詢問到一個蠻有趣的問題,當我們需要定時去執行某些事情的時候,到底我們該選用哪一項服務呢 ? 不論是 Web Jobs,或者是 Azure Function ,亦或者是使用之前文章所介紹的 Automation ,好像都可以做到同樣的效果,那到底我該如何選擇呢 ?

目前我自己大致會這樣區分,如果是ㄧ些比較不複雜的處理,特別是 Azure 服務的管理,當可以使用 PowerShell 來解決問題的時候,那麼我就會選擇使用 Automation;但如果今天處理的是比較複雜,或者是需要透過 C# 寫 Code 來處理的話,且不需要去管理 Azure 服務的話,那麼我就會去選擇 Azure Function 來做使用。

這一次會寫這篇文章,最主要是我原本需要定時去把 Azure 上的 VM 給放大或縮小規格,但一值沒有找到合適的腳本可以來使用。後來改換不同的關鍵字去尋找腳本的時候,發現到這個可以定時調整 Azure SQL Database 規模的腳本,因此想說先拿來測試看看,如果合適的話,那麼後續我再把原本對  Azure SQL Database 上的操作,改換成是對 Azure VM 去做動作,那麼應該就可以透過這個腳本,來修改成改 VM 歸模的大小了。


一開始如同之前的文章,先去建立一個 Azure Automation

透過 Runbooks Gallery,我們可以找到一個「Azure SQL Database - Scale using scheduled autoscalling」的範本套件來使用,從他的說明看起來,是可以按照需要來設定不同時間 Azure Sqlsatabase 的等級,因此我們就決定先來測試看看。

當我們要使用這個範本的時候,他會需要使用到八個參數

  1. 資源群組名稱 : 主要是記錄你要改哪個資源群組下的資料庫
  2. 連線資訊:如果是跟 Azure Automation 在同一個訂閱帳號下的資料庫要被管理,那麼就不用設定
  3. Azure Database Server 名稱:這個要注意一下,不是要設定完整的伺服器名稱,主要最前面的名稱,不需要再加上  database.windows.net ,否則是會執行失敗
  4. Azure Database 名稱:就看你這次要動態調整哪個資料庫
  5. 時間區間:設定每週的哪個時間需要將資料庫設定為哪個等級 ,這個是最重要的部分,您可以像是範例的設定,就是表示星期一的七點到下午六點間都是 S3 等級,而星期二到星期四的同個時段,則是設定為 S2 等級了
    [{WeekDays:[1], StartTime:"06:59:59", StopTime:"17:59:59", Edition: "Standard", Tier: "S3"}, {WeekDays:[2,3,4,5], StartTime:"06:59:59", StopTime:"17:59:59", Edition: "Standard", Tier: "S2"}]

     

  6. 時區:用來指定上述時間是哪個時區,如果以台灣為例,那就是要設定為 Taipei Standard Time
  7. 預設資料庫版本:也就是不在 5 所設定的時間內,要用甚麼樣的資料庫版本,預設是 Standard
  8. 預設資料庫等級:也就是不在 5 所設定的時間內,要用甚麼樣的資料庫等級,預設是 S0

上述的設定很簡單,基本上您從 PowerShell 的內容中就可以看到相關的值,而設定好之後,你可以把排程設定為每個小時去檢查一下,這樣如果檢查的時間發現當下資料庫版本與等級,和在前面所設定的這些參數是不同的話,那就會按照您所設定的,自動去幫您調整資料庫等級。而像我目前也有用 S3 等級的 Azure SQL Database 來使用,那這樣一個資料庫一個月花費 NT$4300;但如果我調整為上班時間的八小時才跑 S3 等級,其他時段都跑 S0 等級的,那這樣一個月也就只需要 NT$1400 ,這樣兩下相減,會發現每個月就會省下不少的成本,看來使很划算的投資和設定了。