워크플로 정의 언어를 사용하여 Azure Logic Apps 워크플로 설명

완료됨

JSON 문서를 사용하여 Azure Logic App 워크플로의 구조와 워크플로를 정의합니다. 이 문서에는 논리 앱 워크플로를 구성하는 요소에 대한 JSON 설명이 포함되어 있으며 워크플로 정의 언어 스키마가 유효성을 검사합니다. 스키마를 설명하는 가장 쉬운 방법은 Azure Portal에서 워크플로 디자이너를 사용하여 만든 기존 워크플로를 검사한 다음 이 논리 앱에 대한 JSON 설명을 보는 것입니다.

샘플 시나리오에서는 컨설턴트가 근무하는 대학의 특정 요구에 맞게 조정할 수 있는 공통 워크플로를 제공하려고 합니다. 각각의 워크플로를 가능한 쉽게 사용자 지정 및 배포하고자 하므로 워크플로를 구성하는 코드, 즉 워크플로 정의 JSON을 살펴보기로 합니다.

워크플로 디자이너

워크플로 디자이너를 사용하면 논리 앱 워크플로에 대한 워크플로를 그래픽으로 만들고 디버그할 수 있습니다. 개발자들은 개발자들이 워크플로가 작동하는 방식을 살펴보고 어떻게 구현되는지 알 수도 있게 합니다. 다음 이미지는 HTTP GET 요청을 지정된 URL로 전송하여 트리거되는 간단한 워크플로의 예를 보여 줍니다. 결과는 HTTP 응답으로 반환됩니다. 이 예제에서는 워크플로가 간단한 Hello Logic Apps Template! 메시지를 다시 보냅니다.

Diagram showing workflow designer overview.

이제 JSON 템플릿에서 사용하는 워크플로 정의 언어를 살펴보겠습니다.

코드 보기

코드 보기 창은 워크플로를 설명하는 JSON 문서를 보여 줍니다. 샘플 앱에서 JSON은 다음과 같습니다.

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Response": {
                "inputs": {
                    "body": "Hello Azure Logic Apps Template!",
                    "statusCode": 200
                },
                "kind": "Http",
                "runAfter": {},
                "type": "Response"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "method": "GET",
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    }
}

definition 범위에서 디자이너에 표시된 작업과 트리거와 관련된 섹션을 살펴봅니다. 논리 앱 워크플로의 기능에 필요한 변경 내용을 반영하도록 이 문서의 JSON 코드를 편집할 수 있습니다. 또한 추가 작업을 추가하고 워크플로의 논리가 한 작업에서 다음 작업으로 실행되는 방법을 지정할 수 있습니다.

트리거 섹션

triggers 섹션은 트리거 유형과 호출되는 방식에 대한 설명을 포함합니다. 예로 든 트리거는 HTTP GET 요청에 대한 응답으로 실행되는 간단한 HTTP 트리거입니다.

"triggers": {
    "manual": {
        "inputs": {
            "method": "GET",
            "schema": {}
        },
        "kind": "Http",
        "type": "Request"
    }
}

트리거에는 다음 요소가 포함되어야 합니다.

  • 워크플로 내에서 고유한 이름. 이전 예제에서 트리거의 기본 이름은 수동이지만 기본 이름을 보다 의미 있는 식별자로 바꿀 수 있습니다.

  • 트리거 유형. 유형은 실행할 트리거를 발생시키는 이벤트를 나타냅니다. Request 트리거는 HTTP 요청에 대한 응답으로 실행됩니다. 사용 가능한 다른 트리거 유형은 다음과 같습니다.

    • 되풀이 일정에 따라 실행되는 트리거를 만드는 Recurrence.

    • 엔드포인트에서 이벤트를 수신 대기하는 HttpWebhook.

    • 다른 Azure 서비스가 트리거하는 이벤트에 응답하는 ApiConnection(예: 메시지 큐에 도달한 메시지, 메일 메시지 등). ApiConnection 트리거 유형은 일반화되며 서비스 유형을 표시하는 추가 정보와 필요한 연결 정보를 지정합니다.

  • inputs 섹션. 이 섹션에서는 트리거의 동작을 정의하는 데이터를 지정합니다. 요청 트리거의 경우 메서드가 트리거 실행을 유발하는 HTTP 요청의 유형을 표시합니다. ApiConnection 트리거의 경우 inputs 섹션이 이벤트를 트리거하는 리소스에 연결하는 방법과 관련한 정보를 포함합니다(예: 메시지 큐 연결 문자열). 트리거가 요청 트리거라면 입력 정의의 schema 섹션이 요청 본문의 페이로드가 준수해야 할 스키마를 지정합니다. HTTP GET 요청에는 요청 본문이 없으므로 이전 예제에서 schema가 비었습니다.

다음 예제에서는 워크플로를 시작하고 HTTP POST 요청을 수신하는 다른 요청 트리거의 정의를 보여 줍니다. 일반적으로 POST 요청은 게시할 데이터를 포함하는 요청 본문을 제공합니다. 이 예제의 요청 본문은 거리와 도시로 구성된 고객 이름과 주소를 포함합니다.

"mypostrequest": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "POST",
      "schema": {
         "type": "object",
         "properties": {
            "customerName": {
               "type": "String"
            },
            "customerAddress": { 
               "type": "Object",
               "properties": {
                  "streetAddress": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  }
               }
            }
         }
      }
   }
}

트리거는 조건도 지정할 수 있습니다. 트리거는 해당 조건에 부합하는 경우에만 발생합니다. 선택적인 conditions 섹션에서 조건을 정의합니다. 예를 들어, 요청 본문이 New York 시를 지정하는 경우에만 이전 예제의 mypostrequest 트리거를 실행하고자 할 수 있습니다.

"mypostrequest": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      ...
   }
   "conditions": [
      {
        "expression": "@equals(triggerOutputs()['body']['customerAddress']['city'], 'New York')"
      }
   ]
}

작업 섹션

논리 앱의 작업 섹션은 워크플로의 논리와 구조를 정의합니다. 여기에는 일련의 작업 항목이 포함됩니다. 작업 항목은 워크플로를 생성하기 위한 기본 구성 요소입니다. 작업 항목은 입력을 받아 출력을 생성하고, 이 출력은 워크플로의 다음 작업 항목으로 전달됩니다. 다음 표에는 사용 가능한 다양한 작업 유형이 나와 있습니다.

작업 항목 설명
ApiConnection 특정 서비스에 HTTP 요청을 보냅니다. 이 작업 유형을 사용하면 Azure Service Bus 및 Azure Event Grid 등을 비롯한 Azure 기능과 논리 앱 워크플로를 통합할 수 있습니다. 이 작업에서는 서비스 액세스를 위한 연결 문자열을 포함하는 입력과 서비스 호출을 위한 추가 정보 및 매개 변수가 필요합니다.
Compose 여러 입력 및 식을 단일 출력으로 결합합니다.
Function Azure Function을 호출할 수 있습니다.
HTTP Azure 서비스가 아니라 HTTP 엔드포인트에 HTTP 요청을 보냅니다.
Join 데이터 항목의 배열을 입력으로 받아 지정된 구분 기호로 분리된 항목을 포함하는 문자열을 생성합니다.
Parse 지정된 스키마를 사용하는 토큰 세트로 JSON 문서를 구문 분석합니다.
쿼리 지정된 조건을 사용하여 입력 배열의 항목을 필터링합니다.
Response HTTP 요청에 대한 응답을 만듭니다.
테이블 JSON 개체의 배열에서 HTML 테이블을 생성합니다.
Terminate 워크플로를 즉시 취소합니다.
Wait 지정된 간격 동안 또는 시간 초과가 발생할 때까지 워크플로를 일시 중지합니다.
Workflow 다른 논리 앱 워크플로를 실행합니다.
Condition 워크플로에서 프로그래밍 방식의 제어 흐름을 구현할 수 있는 작업 유형 집합입니다(Foreach, If, SwitchUntil). 컬렉션에서 항목을 반복하고 입력 매개 변수 값에 따라 판단하며 어떤 조건에 부합할 때까지 반복할 수 있습니다.
InitializeVariable,
IncrementVariable,
DecrementVariable
SetVariable
워크플로의 작업 항목 사이에 전달할 수 있는 변수를 정의하고, 초기화하고, 할당하고, 수정합니다.

트리거처럼 각 작업은 워크플로에서 고유한 이름을 가져야 합니다. 다음 예제에서 기본 작업 이름은 응답이지만 유효하고 의미 있는 식별자를 사용할 수 있습니다. 작업에는 작업에서 사용할 데이터를 지정하는 inputs 섹션이 있어야 합니다. 응답 작업의 경우 HTTP 상태 코드와 더불어 응답 메시지에 반환되는 식에 대한 데이터를 지정할 수 있습니다.

이 기본 워크플로 정의에서는 작업에서 본문이 짧은 메시지인 HTTP 응답을 생성합니다.

"actions": {
    "Response": {
        "inputs": {
            "body": "Hello Azure Logic Apps Template!",
            "statusCode": 200
        },
        "kind": "Http",
        "runAfter": {},
        "type": "Response"
    }
}

runAfter 섹션은 워크플로 시퀀스에서 작업이 실행되는 위치를 나타냅니다. 이전 예제에는 작업이 하나뿐이므로 트리거가 발생하면 항상 실행됩니다. 워크플로에 여러 작업이 있으면 이 섹션에서 해당 작업의 상태와 작업 이름을 지정할 수 있습니다. runAfter 작업이 지정된 상태 함께 완료되면 작업이 실행됩니다. 다음은 예를 보여 주는 코드입니다. mySecondAction 작업은 myFirstAction 다음에 실행되나 myFirstAction이 "Succeeded" 상태로 끝났을 때만 해당합니다.

"actions": {
    "mySecondAction": {
        "inputs": {
            ...
        },
        "runAfter": {
            "myFirstAction": [
                "Succeeded"
            ]
        },
        "type": ...
    },
    "myFirstAction": {
        "inputs": {
            ...
        },
        "runAfter": {},
        "type": ...
    }
}

출력 섹션

outputs 섹션은 실행을 마쳤을 때 워크플로가 반환할 수 있는 데이터를 정의합니다. 워크플로의 각 실행에 대해 특정 상태나 데이터를 추적할 수 있습니다. Workflow REST API의 Azure Portal을 통해 제공되는 Azure Logic Apps 실행 기록을 사용하여 워크플로의 각 실행에서 출력을 검사할 수 있습니다.

outputs 섹션의 형식은 다음과 같습니다.

"outputs": {
  "<key-name>": {
    "type": "<key-type>",
    "value": "<key-value>"
  }
}

워크플로 식

고정 값, 변수 또는 상수 대신 워크플로 식을 사용할 수 있습니다. 또한 식 앞에 at 기호(@)를 붙여 JSON 문자열 값의 어디에서나 식을 사용할 수 있습니다. 예를 들어, 식에서 @parameters 함수를 사용하여 명명된 매개 변수(매개 변수는 다음 섹션에서 설명)의 값을 검색할 수 있습니다.

"customerFullName": "Bill Frost",
"accountName": "@parameters('customerName')"

Azure Logic Apps는 복잡한 식을 만드는 데 사용할 수 있는 기본 제공 함수를 제공합니다.

  • 문자열 함수: 문자열을 연결하거나 분할하고, 대문자와 소문자 간에 문자를 변환하고, 부분 문자열을 검색합니다.
  • 컬렉션 함수: 컬렉션에 특정 패턴과 일치하는 항목이 포함되어 있는지 여부를 감지하고, 컬렉션에서 항목을 검색하고, 컬렉션을 결합합니다.
  • Logical 비교 함수: 피연산자는 서로 같거나, 다르거나, 숫자가 크거나, 숫자가 서로 작은지 여부를 검색합니다.
  • 변환 함수: 데이터의 형식 또는 형식을 변경합니다.
  • 수학 함수: add, sub, div 및 mul같은 여러 가지 함수를 추가합니다.
  • 날짜 및 시간 함수: 구문 분석 및 처리 날짜 및 시간.
  • 워크플로 함수: 워크플로 작업에 전달된 데이터에 대한 정보를 검색합니다. 예를 들어, parameter 함수(위에 표시)는 이름이 parameter인 값을 가져오고 body 함수(위에 표시)는 작업에서 생성된 데이터를 반환합니다.
  • JSON 및 XML 조작 함수: JSON 및 XML 문서 구문 분석 및 처리

InitializeVariable 작업의 inputs 섹션에서 변수를 정의하고 식을 사용하여 이러한 변수를 조작할 수 있습니다. 변수 함수를 사용하여 변수 값을 읽습니다 . 다음 예제에서는 InitializeVariable 작업을 사용하여 이름이 myIntegerVariable인 정수 변수를 만들고 99로 초기화합니다. 또한 이 예제에서는 Condition 작업을 If 유형으로 표시합니다. 조건은 식을 사용하여 myIntegerVariable 변수 값을 테스트하고 값 100과 일치하는 경우 조건은 HTTP 작업을 사용하여 GET 요청을 수행합니다.

"actions": {
    "Condition": {
        "actions": {
            "HTTP": {
                "inputs": {
                    "method": "GET",
                    "uri": "http://dummyurl.com"
                },
                "runAfter": {},
                "type": "Http"
            }
        },
        "expression": {
            "equals": [
                "@variables('myIntegerVariable')",
                100
            ]
        }        ,
        "runAfter": {
            "Initialize": [
                "Succeeded"
            ]
        },
        "type": "If"
    },
    "Initialize": {
        "inputs": {
            "variables": [
                {
                    "name": "myIntegerVariable",
                    "type": "Integer",
                    "value": 99
                }
            ]
        },
        "runAfter": {},
        "type": "InitializeVariable"
    }
}

Parameters 섹션

매개 변수 섹션을 사용하면 워크플로를 매개 변수화할 수 있습니다. 런타임 시 이 매개 변수 각각에 대한 값을 제공할 수 있습니다. 상수 또는 식을 사용할 수 있는 워크플로의 모든 위치에서 매개 변수를 참조할 수 있습니다.

기본값을 사용하여 매개 변수 정의를 추가할 수 있습니다. 런타임 시 매개 변수에 대한 값을 제공하지 않으면 기본값을 사용합니다. 다음 예제에서는 이름이 cityParam인 매개 변수를 정의하는 방법을 보여 줍니다. 이 매개 변수는 mypostrequest 작업에 대한 조건에서 사용됩니다. 요청 문서에 매개 변수 값과 일치하는 도시가 포함된 경우에만 작업을 수행합니다. 기본 매개 변수 값은 뉴욕입니다.


    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            ...
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "cityParam": {
                "defaultValue": "New York",
                "type": "String"
            }
        },
        "triggers": {
            "mypostrequest": {
                "conditions": [
                    {
                        "expression": "@equals(triggerOutputs()['body']['customerAddress']['city'], parameters('cityParam'))"
                    }
                ],
                "inputs": {
                    ...
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    }
}

지식 점검

1.

Azure Logic Apps 워크플로를 3분 간격으로 실행하고자 합니다. 이 되풀이 동작을 정의하는 워크플로 정의 섹션은 무엇인가요?

2.

워크플로 정의의 어떤 부분에 HTTP 요청에 대한 응답을 보내 메시지 본문, 상태 코드, 메시지 헤더를 반환할 수 있나요?

3.

워크플로가 완료되면 반환되는 값을 지정하는 워크플로 정의 섹션은 무엇인가요?