Azure Logic Apps를 사용하여 워크플로에서 작업을 반복하는 루프 만들기

적용 대상: Azure Logic Apps(사용량 + 표준)

Azure Logic Apps에는 워크플로에서 사용할 수 있는 다음 루프 작업이 포함됩니다.

  • 배열의 항목에 대해 하나 이상의 작업을 반복하려면 워크플로에 For each 작업을 추가합니다.

    또는 배열을 받는 트리거가 있고 각 배열 항목에 대한 반복을 실행하려는 경우, SplitOn 트리거 속성을 사용하여 해당 배열을 분리 처리할 수 있습니다.

  • 조건이 충족되거나 상태가 변경될 때까지 하나 이상의 작업을 반복하려면 Until 작업을 워크플로에 추가합니다.

    워크플로는 먼저 루프 내부의 모든 작업을 실행한 다음, 조건 또는 상태를 확인합니다. 조건이 충족되면 루프가 중지됩니다. 그렇지 않으면 루프가 반복됩니다. 워크플로에 포함될 수 있는 Until 루프 수에 대한 기본 및 최대 제한은 동시성, 반복, 분리 제한을 참조하세요.

필수 조건

각각에 대해

For each 작업은 배열에서만 작동하며 배열의 각 항목에 대해 하나 이상의 작업을 반복합니다. 다음 목록에는 For each 작업을 사용하려는 경우에 대한 몇 가지 고려 사항이 포함되어 있습니다.

  • For each 작업은 제한된 수의 배열 항목을 처리할 수 있습니다. 이 제한에 대해서는 동시성, 반복 및 분리 제한을 참조하세요.

  • 기본적으로 For each 작업의 주기 또는 반복은 동시에 병렬로 실행됩니다.

    이 동작은 Power Automate의 각 루프에 대한 적용과 다릅니다. 여기서는 반복이 한 번에 하나씩 또는 순차적으로 실행됩니다. 그러나 순차적으로 For each 반복에 대해 설정할 수 있습니다. 예를 들어 지연 작업을 사용하여 For each 작업에서 다음 반복을 일시 중지하려면 각 반복이 순차적으로 실행되도록 설정해야 합니다.

    기본 동작에 대한 예외로, 중첩된 For each 작업의 반복이 항상 병렬이 아닌 순차적으로 실행됩니다. 중첩된 루프의 항목에 대해 작업을 병렬로 실행하려면 자식 논리 앱 워크플로을 만들고 호출합니다.

  • 각 반복 중에 변수 작업에서 예측 가능한 결과를 얻으려면 반복을 순차적으로 실행합니다. 예를 들어, 동시에 실행 중인 반복이 종료될 때 변수 증가, 변수 감소, 변수에 추가 작업은 예측 가능한 결과를 반환됩니다. 그러나 동시 실행 루프에서 각 반복이 수행되는 동안 이러한 작업을 수행하면 예기치 않은 결과가 반환될 수 있습니다.

  • For each 루프의 작업은 item() 함수를 사용하여 배열의 각 항목을 참조하고 처리합니다. 배열에 없는 데이터를 지정하면 워크플로가 실패합니다.

이 예제 워크플로는 웹 사이트 RSS 피드에 대한 일별 요약을 보냅니다. 워크플로는 각각의 새 항목에 대한 메일을 보내는 For each 작업을 사용합니다.

워크플로가 사용량인지 아니면 표준인지에 따라 해당 단계를 따릅니다.

  1. Azure Portal에서 다음 단계를 지정된 순서로 사용하여 사용량 논리 앱 워크플로의 예제를 만듭니다.

  2. 동일한 일반적인 단계에 따라 워크플로에 RSS 트리거와 워크플로에서 메일 보내기 작업 사이에 For each 작업을 추가합니다.

  3. 이제 루프를 작성합니다.

    1. 이전 단계에서 출력 선택 상자 내부를 선택하여 동적 콘텐츠 목록을 열도록 합니다.

    2. 동적 콘텐츠 추가 목록의 피드 항목이 게시된 경우 섹션에서 RSS 트리거의 배열 출력인 피드 링크를 선택합니다.

      참고 항목

      피드 링크 출력이 표시되지 않으면 트리거 섹션 레이블 옆에 있는 자세히 보기를 선택합니다. 동적 콘텐츠 목록에서 이전 단계의 출력 선택할 수 있습니다.

      Screenshot shows Azure portal, Consumption workflow designer, action named For each, and opened dynamic content list.

      완료되면 선택한 배열 출력이 다음 예제와 같이 표시됩니다.

      Screenshot shows Consumption workflow, action named For each, and selected array output.

    3. 각 배열 항목에 대한 기존 작업을 수행하려면 메일 보내기 작업을 For each 루프로 끕니다.

      이제 워크플로는 다음 예제와 같습니다.

      Screenshot shows Consumption workflow, action named For each, and action named Send an email, now inside For each loop.

  4. 완료되면 워크플로를 저장합니다.

  5. 워크플로를 수동으로 테스트하려면 디자이너 도구 모음에서 트리거 실행>실행을 선택합니다.

For each 작업 정의(JSON)

코드 보기에서 작업하는 경우 워크플로의 JSON 정의에서 For_each 작업을 정의할 수 있습니다. 예를 들어 다음과 같습니다.

"actions": {
   "For_each": {
      "actions": {
         "Send_an_email_(V2)": {
            "type": "ApiConnection",
            "inputs": {
               "body": {
                  "Body": "@{item()}",
                  "Subject": "New CNN post @{triggerBody()?['publishDate']}",
                  "To": "me@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/v2/Mail"
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "type": "Foreach"
   }
},

For each: 순차적으로 실행

기본적으로 For each 루프의 반복은 동시에 실행되거나 병렬로 실행됩니다. 그러나 예측 가능한 결과가 예상되는 루프 내에 중첩된 루프 또는 변수가 있는 경우 해당 루프를 한 번에 하나씩 또는 순차적으로 실행해야 합니다.

  1. For each 작업의 오른쪽 위 모서리에서 줄임표(...) >설정을 선택합니다.

  2. 동시성 제어 아래에서 설정을 끄기에서 으로 변경합니다.

  3. 병렬 처리 수준 슬라이더를 1로 이동한 후 완료를 선택합니다.

    Screenshot shows Consumption workflow, action named For each, concurrency control setting turned on, and degree of parallelism slider set to 1.

For each 작업 정의(JSON): 순차적으로 실행

워크플로의 JSON 정의에 있는 For_each 작업으로 코드 보기에서 작업하는 경우 operationOptions 매개 변수를 추가하여 Sequential 옵션을 사용할 수 있습니다. 예를 들자면 다음과 같습니다.

"actions": {
   "For_each": {
      "actions": {
         "Send_an_email_(V2)": { }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "type": "Foreach",
      "operationOptions": "Sequential"
   }
}

Until

Until 작업은 필요한 지정된 조건이 충족될 때까지 하나 이상의 작업을 실행하고 반복합니다. 조건이 충족되면 루프가 중지됩니다. 그렇지 않으면 루프가 반복됩니다. 워크플로에 포함될 수 있는 Until 작업 또는 반복 횟수에 대한 기본 및 최대 제한은 동시성, 반복, 분리 제한을 참조하세요.

다음 목록에는 Until 작업을 사용할 수 있는 몇 가지 일반적인 시나리오가 포함되어 있습니다.

  • 원하는 응답을 받을 때까지 엔드포인트를 호출합니다.

  • 데이터베이스에 레코드를 만듭니다. 해당 레코드의 특정 필드가 승인될 때까지 기다립니다. 처리를 계속합니다.

다음 예제 워크플로에서 매일 오전 8시부터 Until 작업은 변수의 값이 10이 될 때까지 변수를 증가합니다. 그런 다음, 워크플로에서 현재 값을 확인하는 메일을 보냅니다.

참고 항목

이 예제에서는 Office 365 Outlook을 사용하지만 Azure Logic Apps가 지원하는 모든 메일 공급자를 사용할 수 있습니다. 다른 이메일 계정을 사용하는 경우 일반적인 단계는 동일하지만 UI가 약간 다르게 표시될 수 있습니다.

  1. Azure Portal에서 빈 워크플로를 사용하여 사용량 논리 앱 리소스를 만듭니다.

  2. 디자이너에서 다음 일반적인 단계에 따라 Schedule이라는 이름의 되풀이 기본 제공 트리거를 워크플로에 추가합니다.

  3. 되풀이 트리거에서 트리거가 실행되도록 간격, 빈도, 하루 중 시간을 지정합니다.

    속성
    Interval 1
    빈도 Day
    시간 선택 8

    시간 선택 매개 변수를 추가하려면 새 매개 변수 추가 목록을 열고 빈도로 설정한 후에만 표시되는 시간 선택을 선택합니다.

    Screenshot shows Azure portal, Consumption workflow designer, and Recurrence trigger parameters with selected option for At these hours.

    완료되면 되풀이 트리거는 다음 예제와 같이 표시됩니다.

    Screenshot shows Azure portal, Consumption workflow, and Recurrence trigger parameters set up.

  4. 트리거 아래에서 다음 일반적인 단계에 따라 변수 초기화라는 이름의 변수 기본 제공 작업을 워크플로에 추가합니다.

  5. 변수 초기화 작업에서 다음 값을 제공합니다.

    속성 설명
    이름 한도 변수의 이름
    Type 정수 변수의 데이터 형식
    0 변수의 시작 값

    Screenshot shows Azure portal, Consumption workflow, and parameters for built-in action named Initialize variable.

  6. 변수 초기화 작업 아래에서 다음 일반적인 단계에 따라 워크플로에 Until이라는 이름의 컨트롤 기본 제공 작업을 추가합니다.

  7. Until 작업에서 다음 값을 제공하여 루프에 대한 중지 조건을 설정합니다.

    1. 동적 콘텐츠 목록을 자동으로 여는 값 선택이라는 맨 왼쪽 상자 내부를 선택합니다.

    2. 목록의 변수 아래에서 Limit라는 변수를 선택합니다.

    3. 중간 연산자 목록에서 같음 연산자를 선택합니다.

    4. 값 선택이라는 맨 오른쪽 상자에 비교 값으로 10을 입력합니다.

    Screenshot shows Consumption workflow and built-in action named Until with finished stop condition.

  8. Until 작업 내에서 작업 추가를 선택합니다.

  9. 작업 선택 검색 상자에서 다음 일반적인 단계에 따라 변수 추가라는 이름의 변수라는 기본 제공 작업을 Until 작업에 추가합니다.

  10. 변수 증가 작업에서 다음 값을 제공하여 변수 제한 값을 1로 증분합니다.

    속성
    이름 Limit 변수를 선택합니다.
    1

    Screenshot shows Consumption workflow and built-in action named Until with Name set to the Limit variable and Value set to 1.

  11. 외부 및 Until 작업 아래에서 다음 일반적인 단계에 따라 메일 보내는 작업을 추가합니다.

    이 예제에서는 계속 메일 보내기라는 Office 365 Outlook 작업을 사용합니다.

  12. 메일 작업에서 다음 값을 제공합니다.

    속성 설명
    받는 사람 <email-address@domain> 받는 사람의 이메일 주소입니다. 테스트를 위해 자신의 이메일 주소를 사용합니다.
    주제 “Limit” 변수의 현재 값은 Limit입니다. 메일 제목. 이 예제에서는 현재 값이 지정된 조건을 충족하는지 확인하기 위해 Limit 변수를 포함해야 합니다.

    1. 동적 콘텐츠 목록을 표시하도록 제목 상자 내부를 선택합니다.

    2. 동적 콘텐츠 목록에서 변수 섹션 헤더 옆에 있는 자세히 보기를 선택합니다.

    3. 제한을 선택합니다.
    본문 <email-content> 보내려는 메일 메시지 콘텐츠입니다. 이 예제에서는 텍스트를 원하는 대로 입력합니다.

    완료되면 메일 작업은 다음 예제와 비슷합니다.

    Screenshot shows Consumption workflow and action named Send an email with property values.

  13. 워크플로를 저장합니다.

워크플로 테스트

논리 앱 워크플로를 수동으로 테스트하려면 사용량 또는 표준 논리 앱이 있는지 여부에 따라 단계를 수행합니다.

디자이너 도구 모음에서 트리거 실행>실행을 선택합니다.

워크플로가 실행되기 시작하면 지정한 내용이 포함된 메일을 받습니다.

Screenshot shows sample email received from example workflow.

무한 루프 방지

Until 작업은 작업에서 제한 변경을 선택하여 볼 수 있는 다음 속성에 따라 실행을 중지합니다. 이런 속성 값을 적절하게 설정해야 합니다.

속성 Description
개수 루프가 종료되기 전에 실행되는 최대 반복 수입니다.

워크플로에 포함될 수 있는 Until 작업 수에 대한 기본 및 최대 제한은 동시성, 반복, 분리 제한을 참조하세요.
시간 제한 모든 반복을 포함하여 Until 작업이 루프가 종료되기 전에 실행되는 최대 시간입니다. 이 값은 ISO 8601 형식으로 지정되며 각 반복에 대해 평가됩니다.

루프의 작업이 시간 제한보다 오래 걸리면 현재 반복이 중지되지 않습니다. 그러나 제한 조건이 충족되지 않으면 다음 반복이 시작되지 않습니다.

제한 시간 값에 대한 기본 및 최대 제한은 동시성, 반복 및 분리 제한을 참조하세요.

"Until" 정의(JSON)

코드 보기에서 작업하는 경우 워크플로의 JSON 정의에서 Until 작업을 정의할 수 있습니다. 예를 들어 다음과 같습니다.

"actions": {
   "Initialize_variable": {
      // Definition for initialize variable action
   },
   "Send_an_email": {
      // Definition for send email action
   },
   "Until": {
      "type": "Until",
      "actions": {
         "Increment_variable": {
            "type": "IncrementVariable",
            "inputs": {
               "name": "Limit",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "expression": "@equals(variables('Limit'), 10)",
      // To prevent endless loops, an "Until" loop 
      // includes these default limits that stop the loop. 
      "limit": { 
         "count": 60,
         "timeout": "PT1H"
      },
      "runAfter": {
         "Initialize_variable": [
            "Succeeded"
         ]
      }
   }
}

이 예제 Until 루프는 리소스를 만드는 HTTP 엔드포인트를 호출합니다. HTTP 응답 본문이 Completed 상태로 반환되면 루프가 중지됩니다. 또한 무한 루프를 방지하기 위해 다음 조건 중 하나라도 발생하면 루프가 중지됩니다.

  • 루프가 count 특성에 지정한 대로 10회 실행되었습니다. 기본값은 60회입니다.

  • 루프가 ISO 8601 형식의 timeout 특성에 지정한 대로 2시간 동안 실행되었습니다. 기본값은 1시간입니다.

"actions": {
   "myUntilLoopName": {
      "type": "Until",
      "actions": {
         "Create_new_resource": {
            "type": "Http",
            "inputs": {
               "body": {
                  "resourceId": "@triggerBody()"
               },
               "url": "https://domain.com/provisionResource/create-resource",
               "body": {
                  "resourceId": "@triggerBody()"
               }
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(triggerBody(), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}

다음 단계