Azure Logic Apps에서 HTTPS 엔드포인트를 사용하여 호출, 트리거 또는 중첩할 수 있는 워크플로 만들기

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

일부 시나리오에서는 다른 서비스 또는 워크플로에서 인바운드 요청을 받을 수 있는 논리 앱 워크플로 또는 URL을 사용하여 호출할 수 있는 워크플로를 만들어야 할 수 있습니다. 이 작업의 경우 다음 요청 기반 트리거 유형 중 어느 것을 사용할 때 워크플로에 네이티브 동기 HTTPS 엔드포인트를 노출할 수 있습니다.

이 가이드에서는 요청 트리거를 추가하여 워크플로에 대한 호출 가능한 엔드포인트를 만든 다음 다른 워크플로에서 해당 엔드포인트를 호출하는 방법을 보여 줍니다. 모든 원칙은 인바운드 요청을 받을 수 있는 다른 요청 기반 트리거 형식에 동일하게 적용됩니다.

필수 조건

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

  • 요청 기반 트리거를 사용하여 호출 가능한 엔드포인트를 만들려는 논리 앱 워크플로입니다. 현재 트리거를 바꿀 수 있는 빈 워크플로 또는 기존 워크플로로 시작할 수 있습니다. 이 예제는 빈 워크플로로 시작합니다.

  • 만든 호출 가능한 엔드포인트에 대한 URL을 테스트하려면 Postman과 같은 도구 또는 앱이 필요합니다.

호출 가능한 엔드포인트 만들기

표준 또는 소비 논리 앱 워크플로가 있는지 여부에 따라 해당 단계를 수행합니다.

  1. Azure Portal에서 디자이너에서 표준 논리 앱 리소스 및 빈 워크플로를 엽니다.

  2. HTTP 요청을 받을 때라는 요청트리거를 추가하려면 다음 일반적인 단계를 수행합니다.

  3. 필요에 따라 요청 본문 JSON 스키마 상자에 트리거가 수신할 것으로 예상되는 페이로드 또는 데이터를 설명하는 JSON 스키마를 입력할 수 있습니다.

    디자이너는 이 스키마를 사용하여 트리거 출력을 나타내는 토큰을 생성합니다. 그런 다음 논리 앱의 워크플로 전체에서 이러한 출력을 쉽게 참조할 수 있습니다. JSON 스키마에서 생성된 토큰에 관한 추가 정보.

    이 예제에서는 다음 스키마를 입력합니다.

    {
       "type": "object",
       "properties": {
          "address": {
             "type": "object",
             "properties": {
                "streetNumber": {
                   "type": "string"
                },
                "streetName": {
                   "type": "string"
                },
                "town": {
                   "type": "string"
                },
                "postalCode": {
                   "type": "string"
                }
             }
          }
       }
    }
    

    Screenshot shows Standard workflow with Request trigger and Request Body JSON Schema parameter with example schema.

    또는 샘플 페이로드를 제공하여 JSON 스키마를 생성할 수 있습니다.

    1. 요청 트리거에서 샘플 페이로드 사용을 선택하여 스키마를 생성합니다.

    2. 예제 JSON 페이로드 입력 또는 붙여넣기 상자에 샘플 페이로드를 입력합니다. 예를 들면 다음과 같습니다.

      {
         "address": {
            "streetNumber": "00000",
            "streetName": "AnyStreet",
            "town": "AnyTown",
            "postalCode": "11111-1111"
        }
      }
      
    3. 준비가 되면 완료를 선택합니다.

      이제 요청 본문 JSON 스키마 상자에 생성된 스키마가 표시됩니다.

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

    이제 HTTP POST URL 상자에 다른 서비스에서 논리 앱 워크플로를 호출하고 트리거하는 데 사용할 수 있는 생성된 콜백 URL이 표시됩니다. 이 URL에는 인증에 사용되는 SAS(공유 액세스 서명) 키를 지정하는 쿼리 매개 변수가 포함됩니다.

    Screenshot shows Standard workflow, Request trigger, and generated callback URL for endpoint.

  5. 콜백 URL을 복사하려면 다음 옵션이 있습니다.

    • HTTP POST URL 상자 오른쪽에서 URL 복사(파일 복사 아이콘)를 선택합니다.

    • 워크플로 개요 페이지에서 콜백 URL을 복사합니다.

      1. 워크플로 메뉴에서 개요를 선택합니다.

      2. 개요 페이지의 워크플로 URL에서 URL 위로 포인터를 이동하고 클립보드에 복사를 선택합니다.

        Screenshot shows Standard workflow and Overview page with workflow URL.

  6. 요청 트리거에 대해 현재 가지고 있는 콜백 URL을 테스트하려면 Postman과 같은 도구 또는 앱을 사용하고 요청 트리거에 예상되는 메서드를 사용하여 요청을 보냅니다.

    이 예제에서는 POST 메서드를 사용합니다.

    POST https://{logic-app-name}.azurewebsites.net:443/api/{workflow-name}/triggers/{trigger-name}/invoke?api-version=2022-05-01&sp=%2Ftriggers%2F{trigger-name}%2Frun&sv=1.0&sig={shared-access-signature}

예상 요청 방법 선택

기본적으로 요청 트리거에는 요청이 POST 예상됩니다. 그러나 호출자가 사용해야 하는 다른 메서드를 단일 메서드만 지정할 수 있습니다.

  1. 요청 트리거에서 고급 매개 변수 목록을 열고 이 속성을 트리거에 추가하는 메서드를 선택합니다.

  2. 메서드 목록에서 트리거가 예상해야 하는 메서드를 대신 선택합니다. 또는 사용자 지정 메서드를 지정할 수 있습니다.

    예를 들어 나중에 엔드포인트의 URL을 테스트할 수 있도록 GET 메서드를 선택합니다.

엔드포인트 URL을 통해 매개 변수 전달

엔드포인트의 URL을 통해 매개 변수 값을 허용하려는 경우 다음과 같은 옵션이 있습니다.

  • GET 매개 변수 또는 URL 매개 변수 를 통해 값을 허용합니다.

    이러한 값은 엔드포인트의 URL에서 이름-값 쌍으로 전달됩니다. 이 옵션의 경우 요청 트리거에서 GET 메서드를 사용해야 합니다. 이후 작업에서는 식의 함수를 사용하여 triggerOutputs() 매개 변수 값을 트리거 출력으로 가져올 수 있습니다.

  • 요청 트리거의 매개 변수에 대한 상대 경로를 통해 값을 허용합니다.

    이러한 값은 엔드포인트 URL의 상대 경로를 통해 전달됩니다. 트리거에 필요한 메서드도 명시적으로 선택해야 합니다. 후속 작업에서는 해당 출력을 직접 참조하여 매개 변수 값을 트리거 출력으로 가져올 수 있습니다.

GET 매개 변수를 통해 값 수락

  1. 요청 트리거에서 고급 매개 변수열고, 메서드 속성을 트리거에 추가하고, GET 메서드를 선택합니다.

    자세한 내용은 예상 요청 방법 선택을 참조 하세요.

  2. 디자이너 에서 다음 일반적인 단계에 따라 매개 변수 값을 사용하려는 작업을 추가합니다.

    이 예제에서는 Response라는 작업을 선택합니다.

  3. 매개 변수 값을 검색하는 식을 빌드 triggerOutputs() 하려면 다음 단계를 수행합니다.

    1. 응답 작업에서 동적 콘텐츠(번개 아이콘) 및 식 편집기(수식 아이콘)에 대한 옵션이 표시되도록 Body 속성 내부를 선택합니다. 수식 아이콘을 선택하여 식 편집기를 엽니다.

    2. 식 상자에 다음 식을 입력하고 매개 변수 이름으로 바꾼 parameter-name 다음 확인을 선택합니다.

      triggerOutputs()['queries']['parameter-name']

      Screenshot shows Standard workflow, Response action, and the triggerOutputs() expression.

      Body 속성에서 식은 triggerOutputs() 토큰으로 확인됩니다.

      Screenshot shows Standard workflow with Response action's resolved triggerOutputs() expression.

      워크플로를 저장하고 디자이너에서 벗어나 디자이너로 돌아가면 토큰에 지정한 매개 변수 이름이 표시됩니다. 예를 들면 다음과 같습니다.

      Screenshot shows Standard workflow with Response action's resolved expression for parameter name.

      코드 보기 에서 본문 속성은 다음과 같이 응답 작업의 정의에 나타납니다.

      "body": "@{triggerOutputs()['queries']['parameter-name']}",

      예를 들어 라는 postalCode매개 변수에 대한 값을 전달하려는 경우를 가정해 보겠습니다. Body 속성은 문자열 Postal Code: 을 후행 공백으로 지정한 다음 해당 식을 지정합니다.

      Screenshot shows Standard workflow with Response action and example triggerOutputs() expression.

호출 가능한 엔드포인트 테스트

  1. 요청 트리거에서 워크플로 URL을 복사하고 URL을 다른 브라우저 창에 붙여넣습니다. URL에서 매개 변수 이름과 값을 다음 형식으로 URL에 추가하고 Enter 키를 누릅니다.

    ...invoke/{parameter-name}/{parameter-value}?api-version=2022-05-01...

    예시:

    https://mystandardlogicapp.azurewebsites.net/api/Stateful-Workflow/triggers/When_a_HTTP_request_is_received/invoke/address/12345?api-version=2022-05-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0&sig={shared-access-signature}

    브라우저는 다음 텍스트와 함께 응답을 반환합니다. Postal Code: 123456

    Screenshot shows browser with Standard workflow response from request to callback URL.

참고 항목

URI에 해시 또는 파운드 기호(#)를 포함하려는 경우에는 이 인코딩된 버전을 대신 사용합니다. %25%23

상대 경로를 통해 값 수락

  1. 요청 트리거에서 고급 매개 변수 목록을 열고 상대 경로를 선택하여 이 속성을 트리거에 추가합니다.

    Screenshot shows Standard workflow, Request trigger, and added property named Relative path.

  2. 상대 경로 속성에서 URL에 허용하려는 JSON 스키마의 매개 변수에 대한 상대 경로를 지정합니다(예: /address/{postalCode}).

    Screenshot shows Standard workflow, Request trigger, and Relative path parameter value.

  3. 요청 트리거 에서 다음 일반 단계에 따라 매개 변수 값을 사용하려는 작업을 추가합니다.

    이 예제에서는 응답 작업을 추가합니다.

  4. 응답 작업의 본문 속성에 트리거의 상대 경로에 지정한 매개 변수를 나타내는 토큰을 포함합니다.

    예를 들어 응답 동작이 반환 Postal Code: {postalCode}되도록 가정해 보겠습니다.

    1. Body 속성에 후행 공백을 입력 Postal Code: 합니다. 동적 콘텐츠 목록이 다시 열리도록 편집 상자 안에 커서를 기본.

    2. 동적 콘텐츠 목록의 HTTP 요청을 수신할 때 섹션에서 경로 매개 변수 postalCode 트리거 출력을 선택합니다.

      Screenshot shows Standard workflow, Response action, and specified trigger output to include in response body.

      이제 Body 속성에 선택한 매개 변수가 포함됩니다.

      Screenshot shows Standard workflow and example response body with parameter.

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

    요청 트리거에서 콜백 URL이 업데이트되고 이제 상대 경로가 포함됩니다. 예를 들면 다음과 같습니다.

    https://mystandardlogicapp.azurewebsites.net/api/Stateful-Workflow/triggers/When_a_HTTP_request_is_received/invoke/address/%7BpostalCode%7D?api-version=2022-05-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0&sig={shared-access-signature}

  6. 호출 가능한 엔드포인트를 테스트하려면 요청 트리거에서 업데이트된 콜백 URL을 복사하고, URL을 다른 브라우저 창에 붙여넣고, URL로 바꾸고 %7BpostalCode%7D123456, Enter 키를 누릅니다.

    브라우저는 다음 텍스트와 함께 응답을 반환합니다. Postal Code: 123456

    Screenshot shows browser with Standard workflow response from request to callback URL.

참고 항목

URI에 해시 또는 파운드 기호(#)를 포함하려는 경우에는 이 인코딩된 버전을 대신 사용합니다. %25%23

엔드포인트 URL을 통해 워크플로 호출

엔드포인트를 만든 후에는 HTTPS 요청을 엔드포인트의 전체 URL로 전송하여 워크플로를 트리거할 수 있습니다. Azure Logic Apps 워크플로에는 직접 액세스 엔드포인트에 대한 기본 제공 지원이 있습니다.

스키마에서 생성된 토큰

요청 트리거에 JSON 스키마를 제공하는 경우 워크플로 디자이너는 해당 스키마의 속성에 대한 토큰을 생성합니다. 그런 다음 이러한 토큰을 사용하여 워크플로를 통해 데이터를 전달할 수 있습니다.

예를 들어 JSON 스키마에 같은 "suite"속성을 더 추가하면 해당 속성에 대한 토큰을 워크플로의 이후 단계에서 사용할 수 있습니다. 전체 JSON 스키마는 다음과 같습니다.

{
   "type": "object",
   "properties": {
      "address": {
         "type": "object",
         "properties": {
            "streetNumber": {
               "type": "string"
            },
            "streetName": {
               "type": "string"
            },
            "suite": {
               "type": "string"
            },
            "town": {
               "type": "string"
            },
            "postalCode": {
               "type": "string"
            }
         }
      }
   }
}

다른 워크플로 호출

현재 워크플로 내에 중첩하여 요청을 받을 수 있는 다른 워크플로를 호출할 수 있습니다. 이러한 워크플로를 호출하려면 다음 단계를 수행합니다.

  1. 디자이너에서 다음 일반적인 단계에 따라 이 워크플로 앱에서 워크플로 호출이라는 워크플로 작업 작업을 추가합니다.

    워크플로 이름 목록에는 선택할 수 있는 적합한 워크플로가 표시됩니다.

  2. 워크플로 이름 목록에서 호출할 워크플로를 선택합니다. 예를 들면 다음과 같습니다.

    Screenshot shows Standard workflow, action named Invoke a workflow in this workflow app, opened Workflow Name list, and available workflows to call.

인바운드 요청의 참조 콘텐츠

수신 요청의 콘텐츠 형식이 application/json이면 들어오는 요청에서 속성을 참조할 수 있습니다. 그렇지 않으면 이 콘텐츠는 다른 API에 전달할 수 있는 단일 이진 단위로 처리됩니다. 논리 앱의 워크플로 내에서 이 콘텐츠를 참조하려면 먼저 해당 콘텐츠를 변환해야 합니다.

예를 들어 형식이 있는 application/xml 콘텐츠를 전달하는 경우 식을 사용하여 @xpath() XPath 추출을 수행하거나 XML을 JSON으로 변환하는 식을 사용할 @json() 수 있습니다. 지원되는 콘텐츠 형태에 대한 자세한 정보.

들어오는 요청에서 출력을 얻으려면 식을 사용할 @triggerOutputs 수 있습니다. 예를 들어 다음 예제와 같은 출력이 있다고 가정합니다.

{
   "headers": {
      "content-type" : "application/json"
   },
   "body": {
      "myProperty" : "property value"
   }
}

특히 속성에 body 액세스하려면 식을 바로 가기로 사용할 @triggerBody() 수 있습니다.

요청에 응답

경우에 따라 콘텐츠를 호출자에게 반환하여 워크플로를 트리거하는 특정 요청에 응답하려고 합니다. 응답에 대한 상태 코드, 헤더 및 본문을 생성하려면 응답 작업을 사용합니다. 이 작업은 워크플로의 끝부분에 있는 것이 아니라 워크플로의 아무 곳에나 나타날 수 있습니다. 워크플로에 응답 작업이 포함되지 않은 경우 엔드포인트는 202 수락된 상태 즉시응답합니다.

원래 호출자가 응답을 성공적으로 가져오려면 트리거된 워크플로가 중첩된 워크플로로 호출되지 않는 한 응답에 필요한 모든 단계가 요청 제한 시간 내에 완료되어야 합니다. 이 제한 내에서 응답이 반환되지 않으면 들어오는 요청이 시간 초과되고 408 클라이언트 시간 제한 응답을 받습니다.

중첩된 워크플로의 경우 부모 워크플로는 필요한 시간에 관계없이 모든 단계가 완료될 때까지 응답을 계속 기다립니다.

응답 생성

응답 본문에 여러 헤더와 모든 유형의 콘텐츠를 포함할 수 있습니다. 예를 들어 다음 응답의 헤더는 application/json 요청 트리거에 대해 town 이 항목의 앞부분에서 설명한 JSON 스키마를 기반으로 응답의 콘텐츠 형식과 본문에 해당 값과 postalCode 속성에 대한 값을 포함하게 지정합니다.

Screenshot shows Response action and response content type.

응답에는 다음과 같은 속성이 있습니다.

속성(표시) Property(JSON) 설명
상태 코드 statusCode 들어오는 요청에 대한 응답에 사용할 HTTPS 상태 코드입니다. 이 코드는 2xx, 4xx 또는 5xx로 시작하는 유효한 상태 코드일 수 있습니다. 그러나 3xx 상태 코드는 허용되지 않습니다.
헤더 headers 응답에 포함할 하나 이상의 헤더
본문 body 문자열, JSON 개체 또는 이전 단계에서 참조한 이진 콘텐츠일 수 있는 본문 개체입니다.

응답 작업에 대한 JSON 정의와 워크플로의 전체 JSON 정의를 보려면 디자이너 보기에서 코드 보기로 변경합니다.

"Response": {
   "type": "Response",
   "kind": "http",
   "inputs": {
      "body": {
         "postalCode": "@triggerBody()?['address']?['postalCode']",
         "town": "@triggerBody()?['address']?['town']"
      },
      "headers": {
         "content-type": "application/json"
      },
      "statusCode": 200
   },
   "runAfter": {}
}

질문 및 답변

Q: 인바운드 호출의 URL 보안은 어떻습니까?

A: Azure는 SAS(공유 액세스 서명)를 사용하여 논리 앱 콜백 URL을 안전하게 생성합니다. 이 서명은 쿼리 매개 변수로 전달되며 워크플로를 실행하려면 먼저 유효성을 검사해야 합니다. Azure는 논리 앱당 비밀 키, 트리거 이름 및 수행되는 작업의 고유한 조합을 사용하여 서명을 생성합니다. 따라서 비밀 논리 앱 키에 대한 액세스 권한이 없는 경우 유효한 서명을 생성할 수 없습니다.

Important

프로덕션 및 더 높은 보안 시스템의 경우 다음과 같은 이유로 브라우저에서 직접 워크플로를 호출하지 않도록 강력히 권장합니다.

  • 공유 액세스 키가 URL에 나타납니다.
  • Azure Logic Apps 고객 간에 공유 작업기본으로 인해 보안 콘텐츠 정책을 관리할 수 없습니다.

이전에 SSL(Secure Sockets Layer),Microsoft Entra ID OAuth(Microsoft Entra ID OAuth)로 알려진 TLS(전송 계층 보안) 및 워크플로에 대한 인바운드 호출에 대한 보안, 권한 부여 및 암호화에 대한 자세한 내용은 Azure API Management를 사용하여 논리 앱 워크플로를 노출하거나 인바운드 호출을 시작하는 IP 주소를 제한하는 경우 보안 액세스 및 데이터 - 요청 기반 트리거에 대한 인바운드 호출에 대한 액세스입니다.

Q: 호출 가능한 엔드포인트를 추가로 구성할 수 있습니까?

A: 예, HTTPS 엔드포인트는 Azure API Management를 통해 고급 구성을 지원합니다. 또한 이 서비스는 Logic Apps를 포함한 모든 API를 일관성 있게 관리하고 사용자 지정 도메인 이름을 설정하고 다음과 같은 더 많은 인증 방법을 사용하는 기능을 제공합니다.

다음 단계