練習 - 使用 ARM 範本部署及匯出 Azure Logic Apps 工作流程
在上述練習中,我們使用基本的 Azure Resource Manager 範本部署了一個邏輯應用程式。 此範本不具彈性,因為所有項目都已硬式編碼。 例如,若要變更工作流程名稱或應用程式的部署位置,您必須編輯範本。 如果在指令碼環境中有多個部署,手動編輯範本便顯得相當繁瑣。 更好的方法是提供值作為參數以自訂資源部署。
將我們的範本更新為使用範本參數
使用下列
cp
命令,複製我們在前面練習中使用的基本範本:cp basic-template.json template-with-params.json
使用下列
code
命令,在內建編輯器中開啟範本:code template-with-params.json
首先的步驟是新增參數,以便輕鬆自訂應用程式的名稱和執行應用程式的位置。
將範本中的
parameters
區段更換為下列程式碼片段,這會新增兩個新參數logicAppName
和location
:"parameters": { "logicAppName": { "type": "string", "metadata": { "description": "The name of the logic app to create." } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } },
這兩個參數都是字串。 我們不提供
logicAppName
參數的預設值,也就是說,您需要在部署階段只提供一個參數。 相反地,location
是選擇性的,因為我們提供預設值。location
參數的預設值為部署應用程式所在資源群組的位置。 我們會參考resourceGroup()
範本函式所傳回之資源群組的 location 屬性,以取得該值。 運算式會分別以左括弧和右括弧開頭和結尾 ([ ]
)。 當範本完成部署後,會評估運算式的值。 運算式可以傳回字串、整數、布林值、陣列或物件。 在範本中,您可以定義 256 個參數為上限。既然我們已經定義兩個新參數,讓我們在範本中,將硬式編碼值換成新參數參考,藉以使用這些參數。
在範本的資源區段中取代
name
和location
欄位,以使用新的參數,如下列程式碼片段所示:"name": "[parameters('logicAppName')]", "location": "[parameters('location')]",
將範本底部的
outputs
區段取代為下列程式碼。 我們會將logicAppUrl
範本變數的值更新為也使用logicAppName
參數,如下列程式碼片段所示:"outputs": { "logicAppUrl": { "type": "string", "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]" } }
按下 Ctrl + S,將所有變更儲存到 template-with-params.json。
使用參數化的範本部署邏輯應用程式資源
有兩種方式可以在部署期間使用 az deployment group create
命令中的 --parameters
旗標,將參數提供給我們的範本。 我們可以傳入遠端參數檔案的 URI,或本機檔案的名稱。 讓我們使用本機檔案。
建立參數 JSON 檔案
在內建的程式碼編輯器中,使用下列命令建立稱為
params.json
的新檔案:code params.json
將下列 JSON 貼到 params.json 中並儲存變更,並且按下 Ctrl + S 儲存您的變更。
{ "logicAppName": { "value": "myLogicApp" } }
驗證我們的範本
從 Cloud Shell 執行
az deployment group validate
來驗證範本:az deployment group validate \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters @params.json
--template-file
引數會指向本機範本。 範本的檔案名稱為 template-with-params.json。您會看到一個大型 JSON 區塊作為輸出,告訴您範本已通過驗證。
Azure Resource Manager 會填入範本參數,並檢查範本是否會成功地在訂用帳戶中執行。
如果驗證失敗,您會在輸出中看到失敗的詳細描述。
使用本機檔案中的參數部署範本
在 Cloud Shell 中執行下列命令,以部署應用程式名稱取自 params.json 檔案的邏輯應用程式資源。 params.json 檔案中未設定
location
參數,所以會使用預設值。az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters @params.json
部署需要幾秒鐘的時間,而且您可以在 Cloud Shell 命令列中觀看進度。 部署完成時,您應該會在 JSON 結果中,看到值為
Succeeded
的provisioningState
。若要查看作用中的應用程式,請在 JSON 結果中尋找 logicAppUrl 值。 選取 URL,或將其複製並貼上至新的瀏覽器視窗中。 此頁面將會顯示 Hello Azure Logic Apps Template! 訊息。
使用命令列中的參數部署範本
我們可以在命令列上的 JSON 字串中提供參數,而不是在每次我們想要從命令列部署時,編輯參數檔案。
在 Cloud Shell 中執行下列命令,以部署應用程式名稱及其位置取自命令列上 JSON 字串的邏輯應用程式資源:
az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"MyLogicApp2"}, "location": {"value":"East US"}}'
部署需要幾秒鐘的時間,而且您可以在 Cloud Shell 命令列中觀看進度。 部署完成時,您應該會在 JSON 結果中,看到值為
Succeeded
的provisioningState
。若要查看作用中的應用程式,請在 JSON 結果中尋找 logicAppUrl 值。 選取 URL,並將其貼到新的瀏覽器視窗中。 此頁面將會顯示 Hello Azure Logic Apps Template! 訊息。
執行下列命令可列出到目前為止已經部署的所有 Azure Logic Apps 工作流程:
az resource list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
此命令將會列出兩個我們到目前為止已經部署的 Azure Logic Apps 工作流程,全部都是從範本部署的。
在 Azure Resource Manager 範本中更新應用程式動作
現在讓我們將注意力轉移到如何讓我們的應用程式不只是將靜態訊息傳回給我們。 我們將應用程式保留為 HTTP 觸發的工作流程,而且其仍會傳回 HTTP 回應。 讓我們使用要求傳入一些值,然後讓應用程式為我們執行計算。 我們會執行基本的面積計算。 假設我們傳入的輸入為矩形的高度和寬度,我們將會傳回面積。 接著,我們將部署新的應用程式,看著應用程式執行。
使用內建的編輯器,在 Cloud Shell 中執行下列命令,以開啟 template-with-params.json:
code template-with-params.json
將
relativePath
欄位新增至 HTTP 要求觸發程序的 inputs 區段,如下列程式碼片段所示:"inputs": { "method": "GET", "relativePath": "{width}/{height}", "schema": {} }
relativePath
項目會指定我們希望 HTTP 端點 URL 接受的參數。 在此案例中,我們定義兩個參數,分別是 width 和 height。 我們將使用這些參數值來計算面積,並傳回結果。使用下面一行更新 [回應] 動作的本文:
"body": "Response from @{workflow().name} Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height']) , int(triggerOutputs()['relativePathParameters']['width']) )}",
更新後的回應會執行下列工作:
列印邏輯應用程式資源的名稱。 回應會呼叫
workflow()
函式,傳回工作流程的相關資訊。 從該結果中,我們會參考 name 屬性。傳回 URL 參數高度和寬度字串值之整數對等項目的乘積。 此工作會使用
mul()
函式和int()
轉換函式。
按下 Ctrl + S,將所有變更儲存到 template-with-params.json。
在 Cloud Shell 中使用
az deployment group validate
命令驗證這些變更之後的範本。 在此範例中,我們會使用內嵌參數,將應用程式的名稱設定為 CalculateArea。az deployment group validate \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
執行下列命令,將變更部署到名為 CalculateArea 的邏輯應用程式。 我們會省略
location
參數的值,只使用預設值。az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
部署需要幾秒鐘的時間,而且您可以在 Cloud Shell 命令列中觀看進度。 部署完成時,您應該會在 JSON 結果中,看到值為
Succeeded
的provisioningState
。若要查看作用中的應用程式,請在 JSON 結果中尋找 logicAppUrl 值。 選取 URL,並將其貼到新的瀏覽器視窗中。
在瀏覽器中,將
/triggers/manual/paths/invoke?api
變更為/triggers/manual/paths/invoke/{width}/{height}?api
以更新 URL,其中 {width} 和 {height} 是我們想要計算的面積中,寬度與高度的整數值。 例如:/triggers/manual/paths/invoke/6/7?api
。 應用程式的回應將會列出工作流程名稱以及所計算的面積,如下列螢幕擷取畫面所示:注意
請務必只取代上一個步驟中 URL 的參考部分。 讓任一端保持所有文字不變。
執行下列命令可列出到目前為止已經部署的所有 Azure Logic Apps 工作流程:
az resource list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
在本練習中,我們透過參數,讓我們的範本更具彈性。 我們在命令列上使用本機檔案來提供這些參數。 我們也透過直接變更我們傳回之回應的 body
,更新了我們簡單工作流程執行的動作。
您可以在 Cloud Shell 中使用下列 curl
命令,從 GitHub 下載參數和範本檔案。
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/params.json > params-final.json
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/template.json > template-with-params-final.json