연습 - ARM 템플릿을 사용하여 Azure Logic Apps 워크플로 배포 및 내보내기

완료됨

이전 연습에서는 기본 Azure Resource Manager 템플릿을 사용하여 논리 앱을 배포했습니다. 모든 것이 하드 코드된 이 템플릿은 유연성이 없습니다. 예를 들어 워크플로 이름 또는 앱의 배포 위치를 변경하려면 템플릿을 편집해야 합니다. 스크립트 환경에서 여러 배포가 있는 시나리오에서는 템플릿을 수동으로 편집하는 것이 복잡합니다. 값을 매개 변수로 제공하여 리소스 배포를 사용자 지정하는 것이 더 나은 방법입니다.

템플릿을 업데이트하여 템플릿 매개 변수 사용

  1. 다음 cp 명령을 통해 앞의 연습에서 사용한 기본 템플릿을 복사합니다.

    cp basic-template.json template-with-params.json
    
  2. 다음 code 명령을 통해 템플릿을 기본 제공 편집기에서 엽니다.

    code template-with-params.json
    

    첫 번째 단계는 앱의 이름과 앱이 실행되는 위치를 쉽게 사용자 지정할 수 있도록 매개 변수를 추가하는 것입니다.

  3. 템플릿의 parameters 섹션을 두 개의 새 매개 변수 logicAppNamelocation을 추가하는 다음 코드 조각으로 바꿉니다.

    "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개의 매개 변수를 정의할 수 있습니다.

    두 매개 변수를 정의했으므로 이제 하드 코딩된 값을 새 매개 변수에 대한 참조로 바꾸어 템플릿에서 이 두 가지를 사용해 보겠습니다.

  4. 다음 코드 조각에 나와 있는 것처럼 템플릿의 리소스 섹션에서 namelocation 필드를 바꾸어 새 매개 변수를 사용합니다.

    "name": "[parameters('logicAppName')]",
    "location": "[parameters('location')]",
    
  5. 템플릿 아래쪽의 outputs 섹션을 다음 코드로 바꿉니다. 다음 코드 조각에서처럼 logicAppUrl 템플릿 변수의 값을 logicAppName 매개 변수도 사용하도록 업데이트합니다.

    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]"
        }
     }
    
  6. template-with-params.json에 모든 변경 내용을 저장하려면 Ctrl + S를 누릅니다.

매개 변수화된 템플릿으로 논리 앱 리소스를 배포합니다.

두 가지 방법으로 az deployment group create 명령에서 --parameters 플래그를 사용하여 배포 중에 템플릿에 매개 변수를 제공할 수 있습니다. 원격 매개 변수 파일의 URI에서 또는 로컬 파일의 이름을 전달할 수 있습니다. 로컬 파일을 사용해 보겠습니다.

매개 변수 JSON 파일 만들기

  1. 기본 제공 코드 편집기에서 다음 명령을 사용하여 params.json이라는 새 파일을 만듭니다.

    code params.json
    
  2. 다음 JSON을 params.json에 붙여 넣고 Ctrl + S를 눌러 변경 내용을 저장합니다.

    { 
        "logicAppName": { 
            "value": "myLogicApp" 
        } 
    }
    

템플릿 유효성 검사

  1. 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는 템플릿 매개 변수를 채우고 템플릿이 구독에서 성공적으로 실행될지 여부를 확인합니다.

    유효성 검사에 실패하면 출력에 실패에 대한 자세한 설명이 표시됩니다.

로컬 파일에서 매개 변수로 템플릿 배포

  1. 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 결과의 provisioningStateSucceeded 값이 됩니다.

  2. 실행 중인 앱을 확인하려면 JSON 결과에서 logicAppUrl 값을 찾습니다. URL을 선택하거나 복사하여 새 브라우저 창에 붙여넣습니다. 페이지에 Hello Azure Logic Apps Template! 메시지가 표시됩니다.

명령줄에서 매개 변수로 템플릿 배포

명령줄에서 배포할 때마다 매개 변수 파일을 편집하는 대신 명령줄에서 JSON 문자열로 매개 변수를 제공할 수 있습니다.

  1. 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 결과의 provisioningStateSucceeded 값이 됩니다.

  2. 실행 중인 앱을 확인하려면 JSON 결과에서 logicAppUrl 값을 찾습니다. URL을 선택하여 새 브라우저 창에 붙여 넣습니다. 페이지에 Hello Azure Logic Apps Template! 메시지가 표시됩니다.

  3. 다음 명령을 실행하여 지금까지 배포한 모든 Azure Logic Apps 워크플로를 나열합니다.

    az resource list \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --resource-type Microsoft.Logic/workflows \
    --query [*].[name,location] --output tsv
    

    이 명령은 지금까지 템플릿에서 배포한 2개의 Azure Logic Apps 워크플로를 나열합니다.

Azure Resource Manager 템플릿에서 앱 작업 업데이트

이제 앱이 단순히 고정 메시지를 돌려 보내는 것에서 좀 더 앞선 작업을 수행하게 해보겠습니다. 앱은 HTTP에서 트리거되는 워크플로로 유지되며 계속 HTTP 응답을 반환합니다. 요청에서 몇 가지 값을 전달하고 앱이 계산을 수행하게 합니다. 기본 영역 계산을 수행합니다. 직사각형의 높이와 너비를 입력하면 넓이를 반환합니다. 그런 다음 새 앱을 배포하고 실행을 관찰합니다.

  1. Cloud Shell에서 다음 명령을 실행하여 기본 제공 편집기에서 template-with-params.json을 엽니다.

    code template-with-params.json
    
  2. 다음 코드 조각에 나와 있는 것처럼 relativePath 필드를 HTTP 요청 트리거의 inputs 섹션에 추가합니다.

    "inputs": {
        "method": "GET",
        "relativePath": "{width}/{height}",
        "schema": {}
    }
    

    relativePath 항목은 HTTP 엔드포인트 URL이 허용할 매개 변수를 지정합니다. 여기서는 widthheight 등의 두 매개 변수를 정의합니다. 이 매개 변수 값을 사용하여 넓이를 계산하고 결과를 반환하게 됩니다.

  3. 응답 동작의 본문을 다음 줄로 업데이트합니다.

    "body": "Response from @{workflow().name}  Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height'])  , int(triggerOutputs()['relativePathParameters']['width'])  )}",
    

    업데이트된 응답은 다음 작업을 수행합니다.

    • 논리 앱 리소스의 이름을 인쇄합니다. 응답은 workflow() 함수를 호출하여 워크플로에 대한 정보를 반환합니다. 해당 결과에서 이름 속성을 참조합니다.

    • URL 매개 변수에서 높이 및 너비 문자열 값에 상응하는 정수의 제품을 반환합니다. 이 작업은 mul() 함수 및 int() 변환 함수를 사용합니다.

  4. template-with-params.json에 모든 변경 내용을 저장하려면 Ctrl + S를 누릅니다.

  5. 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"}}'
    
  6. 다음 명령을 실행하여 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 결과의 provisioningStateSucceeded 값이 됩니다.

  7. 실행 중인 앱을 확인하려면 JSON 결과에서 logicAppUrl 값을 찾습니다. URL을 선택하여 새 브라우저 창에 붙여 넣습니다.

  8. /triggers/manual/paths/invoke?api/triggers/manual/paths/invoke/{width}/{height}?api로 변경하여 브라우저의 URL을 업데이트합니다. 여기서 {width}{height}는 계산하려는 넓이의 너비와 높이에 대한 정수 값입니다. 예들 들어 /triggers/manual/paths/invoke/6/7?api입니다. 앱의 응답에서는 다음 스크린샷에 표시된 대로 워크플로의 이름과 계산된 넓이를 나열합니다.

    계산된 넓이라고 하는 앱의 응답을 표시하는 웹 브라우저 스크린샷.

    참고 항목

    이전 단계에서 URL의 참조된 부분만 바꿔야 합니다. 양쪽의 모든 텍스트를 그대로 둡니다.

  9. 다음 명령을 실행하여 지금까지 배포한 모든 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