Azure Function 真的太好用了,以往 Web Job 能做的事都可以交給它來做,包含日常的維護,本文的重新啟動 Azure Web App 就是個例子。
Azure Functions 除了一般的 C#, node.js 外,還可以執行其他程式語言寫的程式,目前包含了像 Bash (Linux 的 Shell), Batch (批次檔), C#, JavaScript (node.js), PHP, Python 以及 F# 都能在 Azure Functions 上使用,本文是以 PowerShell 下重新啟動 Web App 的指令做的示範。
若要重新啟動 Azure Web App,首先要先取得 Azure Web App 的管理存取權,這點可以用 Login-AzureRmAccount
指令實作,不過它預設是採使用者互動的方式,也就是它會跳出對話盒要求使用者登入,若要在背景程式上做,那麼一定要用變數方式處理,這點也不用太擔心,因為 Login-AzureRmAccount
也可以用參數方式登入,不過密碼必須要是 Secure String,因此自動登入可以寫成下列指令:
$username = "your-azure-login-name"
$password = ConvertTo-SecureString "your-azure-login-password" -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password
Login-AzureRmAccount -Credential $cred
取得了 Azure 登入狀態之後,就可以使用 Restart-AzureRmWebApp
來重啟 Web App 了。
Restart-AzureRmWebApp -Name $webappName -ResourceGroupName $resourceGroupName
當然,你也可以使用 Stop-AzureRmWebApp
和 Start-AzureRmWebApp
來做到重啟的工作。
指令很簡單,再來就是把它搬到 Azure Functions 上,這次我使用的是定時的函數,並且將它設定為每天一次:
然後在函數本體中輸入下列指令:
$resourceGroupName = "your-azure-web-app-resource-group-name"
$webappName = "your-azure-web-app-name"
$username = "your-azure-login-name"
$password = ConvertTo-SecureString "your-azure-login-password" -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password
Write-Output "Login to azure environment"
Login-AzureRmAccount -Credential $cred
Write-Output "Restarting Web App..."
Restart-AzureRmWebApp -Name $webappName -ResourceGroupName $resourceGroupName
Write-Output "Operation Completed."
測試執行一下:
成功的執行了。
另外,來源的那篇文章提到了 Save-AzureRmContext
和 Import-AzureRmContext
,是分別用來匯出與匯入登入狀態旳指令,微軟的官方文件並沒有提到匯出的狀態的有效期限,不過我個人認為它不是永久的有效,應該和一般使用時的登入時效相同才是,故它並不適合用在背景處理程序中,還是使用 Login-AzureRmAccount
處理登入較佳。