다음을 통해 공유


Azure Logic Apps에 대한 워크플로에서 작업을 반복하는 루프 추가

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

논리 앱 워크플로에서 작업을 반복하려면 시나리오에 대한 요구 사항에 따라 For each 루프 또는 Until 루프를 워크플로에 추가하면 됩니다.

참고

루프에 대한 Power Automate 설명서를 찾고 계신가요? 루프 사용을 참조하세요.

사용 사례에 따라 다음 유형의 루프 작업 중에서 선택할 수 있습니다.

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

    또는 배열을 처리할 수 있는 트리거가 있고 각 배열 항목에 대해 워크플로 인스턴스를 실행하려는 경우 트리거 속성에서 분할을 설정하여 배열을 분리할 수 있습니다.

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

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

필수 구성 요소

  • Azure 계정 및 구독 구독이 없는 경우 Azure 체험 계정에 등록합니다.

  • 워크플로를 만들고 편집할 수 있는 논리 앱 리소스입니다. Azure Logic Apps란?을 참조하세요.

  • 루프의 작업과 워크플로를 시작하는 트리거를 반복하려는 논리 앱 리소스 및 워크플로입니다.

    루프 작업을 추가하려면 먼저 첫 번째 단계로 워크플로가 트리거로 시작해야 합니다. 자세한 내용은 워크플로를 빌드하는 트리거 또는 작업 추가를 참조하세요.

다음 단계에서는 Azure Portal을 사용하지만 적절한 Azure Logic Apps 확장을 사용하면 다음 도구를 사용하여 Logic Apps 워크플로를 빌드할 수도 있습니다.

사용량 또는 표준 워크플로가 있는지 여부에 따라 일부 단계가 약간 다릅니다.

For each

For each 작업은 배열에서만 작동합니다. 이 루프는 배열의 각 항목에 대해 하나 이상의 작업을 반복합니다. For each 작업에 대해 다음 고려 사항을 검토합니다.

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

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

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

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

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

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

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

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

    • 피드 항목이 게시될 때라는 이름의 RSS 트리거

      다음 일반 단계에 따라 사용량 또는 표준 논리 앱 워크플로에 트리거를 추가합니다.

    • 메일 보내기라는 이름의 Outlook.com 또는 Office 365 Outlook 작업

      다음 일반 단계에 따라 사용량 또는 표준 논리 앱 워크플로에 작업을 추가합니다.

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

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

    1. For each 항목에서 이전 단계의 출력 선택 상자에서 선택한 다음 번개 모양 아이콘을 선택합니다.

    2. 열리는 동적 콘텐츠 목록의 피드 항목이 게시될 때에서 RSS 트리거의 배열 출력인 피드 링크를 선택합니다.

      참고

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

      스크린샷은 For each라는 작업과 열린 동적 콘텐츠 목록이 있는 Azure Portal 및 워크플로 디자이너를 보여줍니다.

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

      스크린샷은 워크플로 디자이너와 선택한 배열 출력이 있는 For each라는 작업을 보여줍니다.

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

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

      스크린샷은 워크플로 디자이너, For each라는 작업, 그리고 이제 For each 작업 내에 있는 전자 메일 보내기라는 작업을 보여줍니다.

  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 각 작업의 반복은 동시에 병렬로 실행됩니다. 그러나 예측 가능한 결과가 예상되는 루프 내에 중첩된 루프 또는 변수가 있는 경우 해당 루프를 한 번에 하나씩 또는 순차적으로 실행해야 합니다.

  1. 디자이너에서 For each 작업을 선택하여 정보 창을 연 다음 설정을 선택합니다.

  2. 동시성 제어에서 설정을 Off에서 On으로 변경합니다.

  3. 병렬 처리 수준 슬라이더를 1로 이동합니다.

    스크린샷은 병렬 처리 수준 슬라이더가 1로 설정된 상태로 활성화된 For each 작업, 설정 탭 및 동시성 제어 설정을 보여 줍니다.

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 작업을 사용할 수 있는 몇 가지 일반적인 시나리오가 포함되어 있습니다.

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

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

기본적으로 Until 작업은 다음과 같은 방법으로 성공하거나 실패합니다.

  • Until 루프는 루프 내의 모든 작업이 성공하고 동작 후 실행에 따라 루프 제한에 도달하면 성공합니다.

  • Until 루프의 마지막 반복에 있는 모든 작업이 성공하면 전체 Until 루프가 성공으로 표시됩니다.

  • Until 루프의 마지막 반복에서 작업이 실패하면 전체 Until 루프가 실패로 표시됩니다.

  • 마지막 반복 이외의 반복에서 작업이 실패하면 다음 반복이 계속 실행되고 전체 Until 작업이 실패로 표시되지 않습니다.

    대신 작업이 실패하도록 하려면 operationOptions라는 매개 변수를 추가하고 값을 FailWhenLimitsReached로 설정하여 루프의 JSON 정의에서 기본 동작을 변경합니다. 예를 들면 다음과 같습니다.

    "Until": {
       "actions": {
         "Execute_stored_procedure": {
           <...>
           }
         },
         "expression": "@equals(variables('myUntilStop'), true)",
         "limit": {
           "count": 5,
           "timeout": "PT1H"
         },
         "operationOptions": "FailWhenLimitsReached",
         "runAfter": {
         "Initialize_variable_8": [
           "Succeeded"
         ]
       },
    "type": "Until"
    }
    

다음 예제 워크플로에서 매일 오전 8시부터 Until 작업은 변수의 값이 10이 될 때까지 변수를 증가합니다. 그런 다음, 워크플로에서 현재 값을 확인하는 메일을 보냅니다. 이 예제에서는 Office 365 Outlook을 사용하지만 Azure Logic Apps에서 지원하는 전자 메일 공급자를 사용할 수 있습니다. 다른 메일 계정을 사용하는 경우 일반적인 단계는 동일하게 유지되지만 약간 다르게 보입니다.

  1. Azure Portal에서 빈 워크플로를 사용하여 논리 앱 리소스를 만듭니다. 이전 절차를 참조하세요.

  2. 디자이너에서 일반 단계에 따라 사용량 또는 표준 워크플로에 되풀이라는 예약 기본 제공 트리거를 추가합니다.

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

    매개 변수
    간격 1
    빈도 Day
    시간 선택 8
    분 선택 00

    빈도로 설정하고 나면 이 시간분 선택이 나타납니다.

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

    스크린샷은 되풀이 트리거 매개 변수가 설정된 Azure Portal 및 워크플로 디자이너를 보여줍니다.

  4. 트리거 아래에서 다음 일반적인 단계에 따라 사용량 또는 표준 논리 앱 워크플로에 변수 초기화라는 변수수 기본 제공 작업을 추가합니다.

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

    매개 변수 설명
    이름 제한 변수의 이름
    유형 정수 변수의 데이터 형식
    0 변수의 시작 값

    스크린샷은 매개 변수를 사용하여 변수 초기화라는 Azure Portal, 워크플로 디자이너 및 기본 제공 작업을 보여줍니다.

  6. 변수 초기화 작업에서 다음 일반적인 단계에 따라 사용량 또는 표준 논리 앱 워크플로에 Until이라는 컨트롤 기본 제공 작업을 추가합니다.

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

    1. 다음까지 반복 상자 내에서 선택하고 번개 아이콘을 선택하여 동적 콘텐츠 목록을 엽니다.

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

    3. 개수에서 비교 값으로 10을 입력합니다.

    스크린샷은 설명된 값이 있는 Until이라는 워크플로 및 기본 제공 작업을 보여줍니다.

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

  9. 다음 일반적인 단계에 따라 사용량 또는 표준 논리 앱 워크플로의 Until 작업에 변수 증가라는 변수 기본 제공 작업을 추가합니다.

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

    매개 변수
    제한 Limit 변수를 선택합니다.
    1

    스크린샷은 제한이 Limit 변수로 설정되고 값이 1로 설정된 Until이라는 워크플로 및 기본 제공 작업을 보여줍니다.

  11. Until 작업 외부 및 아래에서 다음 일반적인 단계에 따라 사용량 또는 표준 논리 앱 워크플로에서 전자 메일을 보내는 작업을 추가합니다.

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

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

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

    1. 제목 상자 내에서 선택한 다음 번개 모양 아이콘을 선택합니다.

    2. 열리는 동적 콘텐츠 목록에서 변수 구역 머리글 옆에 있는 자세히 보기를 선택합니다.

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

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

    스크린샷은 속성 값이 있는 전자 메일 보내기라는 워크플로 및 작업을 보여 줍니다.

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

워크플로 테스트

논리 앱 워크플로를 수동으로 테스트하려면 다음을 수행합니다.

  • 디자이너 도구 모음의 실행 옵션에서 실행을 선택합니다.

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

스크린샷은 예제 워크플로에서 받은 샘플 메일을 보여 줍니다.

무한 루프 방지

Until 작업은 선택적 개수시간 제한 매개 변수에 따라 실행을 중지합니다. 이러한 매개 변수 값을 적절하게 설정해야 합니다.

매개 변수 설명
Count 루프가 종료되기 전에 실행되는 최대 반복 수입니다.

워크플로에 포함될 수 있는 Until 작업 수에 대한 기본 및 최대 제한은 동시성, 반복, 분리 제한을 참조하세요.
Timeout 모든 반복을 포함하여 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"
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(body('Create_new_resource'), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}