Azure實踐之如何通過郵件實現Azure VM的開關機(二)—— Flow實戰演練

下邊回到我們的原始需求,來看下郵件開關機應該如何解決安全問題

 

分析這個需求,其實可以通過Microsoft Flow + Azure Automation的方式實現,首先O365郵箱接收郵件,然後通過Flow觸發Azure Automation的runbook,在runbook裏定義好我們需要執行的的任務,這樣就可以實現我們需要的功能了

 

而身份驗證實際上這裏用的是我們之前講的第二種,也就是service principal的方式,automation本身實際就是使用的service principal的方式,在Azure AD中實際上是可以看到automation註冊的application的

image005.png



而Flow觸發runbook,其實可以通過Flow來觸發webhook,而automation其實是可以直接創建webhook的,這樣其實就可以直接通過Flow觸發Azure automation的webhook,我們的需求就可以實現了

 

關於Microsoft Flow,如果說有人瞭解的不是很多的話,可以這裏先做一個簡單的介紹

Microsoft Flow實際上是一個在線的workflow的service,可以在多個app之間執行一些自動化的任務,Flow對接的系統非常的多,比如Facebook,Twitter,Dynamic CRM,O365

 

目前來說,可以通過Flow對接超過200個服務,以下是其中的一部分



image007.png



通過Flow,我們可以制定一些自動化的流程,舉例來說,想實現在Yammer中有負面消息的時候就通知某個人呢,這種需求就可以通過Flow結合其他服務實現

 

首先通過Flow連接到Yammer->調用認知服務文本分析 API 檢查情緒是否是負面的->如果是負面的,還可以調用Microsoft Translator將此文本翻譯爲別的語言->最後調用郵件發送消息通知


這就是一個標準的Flow了

 

對應到我們的需求,則比上邊講的還要簡單一些

首先通過調用郵件,識別關鍵字,如果識別到關鍵字->觸發webhook,在Automation中執行對應的runbook即可,想要複雜一點還可以加一些判斷的邏輯,不同的關鍵字可以調用不同的webhook,實現不同的功能


我們這裏準備實現一個簡單的邏輯,在email的主題中註明是開機還是關機,然後根據關鍵字判斷調用不同的webhook,想要調用webhook,當然首先這個webhook得存在才行,這裏先在Azure automation中把webhook創建好


登陸Azure Portal後,找到automation,創建一個新的開機runbook

image009.png

Runbook 的類型選擇普通的PowerShell即可

image011.png


之後再依此創建一個關機的runbook,當然創建一個單一的runbook,然後根據參數控制開關機也是可以的

 

創建好之後,點擊編輯

image013.png


編寫好對應的代碼,點擊publish

$connectionName = "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName

$logonAttempt = 0
$logonResult = $False

write-output "Login to Azure"
while(!($connectionResult) -And ($logonAttempt -le 10))
{
$LogonAttempt++
# Logging in to Azure...
$connectionResult = Connect-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint

Start-Sleep -Seconds 1
}

write-output "Start auto VM"
import-module Azurerm
Start-AzureRmVM -ResourceGroupName mxyjpwest -Name automationvm


image015.png


之後,給這個runbook添加一個webhook

image017.png



注意,這裏一定要保存好webhook的URL,因爲這個URL創建好之後就不可見了,保存好之後創建webhook

image019.png



在webhook裏已經可以看到了

image021.png


之後按照這個方法,創建好關機的webhook,到此Azure方面的準備工作就完成了

 

之後開始準備Flow,Flow其實在Global Office 365的訂閱裏是包含的,所以直接登錄到Global O365,然後選擇Flow

image023.png



選擇從空白模板創建

image025.png



這裏選擇收到新電子郵件時

image027.png


選擇好收件人,之後添加新步驟

image029.png



然後選擇控制項->條件

image031.png


按照以下條件設置

image033.png


之後對如果是添加操作

image035.png

搜索webhook

image037.png



輸入之前保存下來的webhook URL,注意一點要保證URL的安全,因爲這個URL是包含token的,相當於直接就有執行操作的權限

image039.png


之後設置一個並行的條件,判斷郵件主題是否包含stop,然後添加對應stop的webhook

image041.png


完成後整體是這樣的

image043.png



之後發送一個郵件來進行一波測試

image045.png


稍等片刻後,可以看到Flow已經被觸發了!

image047.png



在automation中可以看到,runbook也在running了!

image049.png



片刻後,VM已經是stopped狀態

image051.png


在log裏可以很清晰地看到有一條由automation賬戶觸發的shutdown操作

image053.png



同理,再發一封start的郵件

image055.png


之後可以看到VM已經自動start了,測試完成!

2.png


當然,這個應用場景是非常簡單得了,但是拋磚引玉,Flow和automation真的能創造出很多的場景!希望以後能有時間多研究研究


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章