Azure Functions를 사용하여 Azure Logic Apps의 워크플로에서 코드 만들기 및 실행

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

논리 앱 워크플로에서 특정 작업을 수행하는 코드를 실행하려는 경우 Azure Functions를 사용하여 함수를 만들 수 있습니다. 이 서비스를 사용하면 완전한 앱 또는 인프라를 빌드하지 않고도 코드를 실행 수 있으므로 Node.js, C# 및 F# 함수를 만드는 데 유용합니다. Azure Functions는 클라우드에서 서버리스 컴퓨팅을 제공하며 예를 들어 다음과 같은 특정 작업을 수행하는 데 유용합니다.

  • Node.js 또는 C#의 함수를 사용하여 논리 앱의 동작을 확장합니다.
  • 논리 앱 워크플로에서 계산을 수행합니다.
  • 논리 앱 워크플로에서 고급 서식 지정 또는 컴퓨팅 필드를 적용합니다.

이 방법 가이드에서는 논리 앱 워크플로에서 Azure 함수를 호출하는 방법을 보여 줍니다. Azure Functions를 사용하지 않고 코드 조각을 실행하려면 인라인 코드 추가 및 실행을 검토합니다. 함수 내에서 논리 앱 워크플로를 호출하고 트리거하려면 논리 앱이 호출 가능한 엔드포인트를 제공하는 트리거로 시작해야 합니다. 예를 들어 HTTP, 요청, Azure 큐 또는 Event Grid 트리거로 워크플로를 시작할 수 있습니다. 함수 내에서 트리거의 URL로 HTTP POST 요청을 전송하고 해당 워크플로에서 처리할 페이로드를 포함합니다. 자세한 내용은 논리 앱 워크플로 호출, 트리거 또는 중첩을 참조하세요.

제한 사항

  • 사용량 논리 앱 워크플로 내부에서 직접 함수를 만들 수 있지만 표준 논리 앱 워크플로에서는 만들 수 없습니다. 그러나 다른 방법으로 함수를 만들 수 있습니다. 자세한 내용은 논리 앱 워크플로 내에서 함수 만들기를 참조하세요.

  • 사용량 워크플로만 Microsoft Entra 인증을 통해 관리 ID를 사용하여 Azure 함수 호출 인증을 지원합니다. 표준 워크플로는 현재 함수 호출에 대한 인증을 사용하도록 설정하는 방법에 대한 섹션에서 지원되지 않습니다.

  • Azure Logic Apps는 배포 슬롯이 사용되도록 설정된 Azure Functions 사용을 지원하지 않습니다. 이 시나리오가 작동하는 경우도 있지만 이 동작은 예측할 수 없으며 워크플로에서 Azure 함수를 호출하려고 할 때 권한 부여 문제가 발생할 수 있습니다.

필수 조건

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

  • Azure Functions를 사용하여 만들 수 있는 함수의 컨테이너인 Azure 함수 앱 리소스 및 사용하려는 함수

    함수 앱이 없는 경우 함수 앱을 먼저 만듭니다. 그런 다음, Azure Portal의 Azure Functions를 사용하여 논리 앱 워크플로 외부에서 또는 디자이너의 논리 앱 내에서 함수를 만들 수 있습니다.

  • 논리 앱 리소스를 사용하는 경우 기존 또는 새로운 함수 앱과 함수에 모두 동일한 요구 사항이 적용됩니다.

    • 함수 앱 리소스와 논리 앱 리소스는 동일한 Azure 구독을 사용해야 합니다.

    • 새 함수 앱은 .NET 또는 JavaScript를 런타임 스택으로 사용해야 합니다. 기존 함수 앱에 새 함수를 추가하는 경우 C# 또는 JavaScript를 선택할 수 있습니다.

    • 함수는 HTTP 트리거 템플릿을 사용합니다.

      HTTP 트리거 템플릿은 논리 앱 워크플로에서 생성된 application/json 형식의 콘텐츠를 수락할 수 있습니다. 워크플로에 함수를 추가하면 Azure 구독 내에서 이 템플릿을 통해 생성된 사용자 지정 함수가 디자이너에 표시됩니다.

    • OpenAPI 정의(Swagger 파일)를 만들지 않은 경우에는 함수에서 사용자 지정 경로를 사용하지 않습니다.

    • 함수에 OpenAPI 정의가 있는 경우 워크플로 디자이너는 함수 매개 변수를 사용하기 위한 보다 풍부한 환경을 제공합니다. 논리 앱 워크플로에서 OpenAPI 정의가 포함된 함수를 찾아서 액세스할 수 있도록 먼저 이후 단계를 수행하여 함수 앱을 설정합니다.

  • 이 방법 가이드의 예제를 따르려면 첫 번째 단계로 트리거가 있는 사용량 논리 앱 리소스 및 워크플로가 필요합니다. 시나리오에 트리거를 사용할 수 있지만 이 예제에서는 새 이메일이 도착한 경우라는 Office 365 Outlook 트리거를 사용합니다.

OpenAPI 설명이 있는 함수 찾기

워크플로 디자이너에서 함수 매개 변수를 사용할 때 보다 풍부한 경험을 얻으려면 함수에 대한 Swagger 파일 또는 OpenAPI 정의를 생성합니다. 논리 앱이 Swagger 설명이 포함된 함수를 찾아 사용할 수 있도록 함수 앱을 설정하려면 다음 단계를 수행합니다.

  1. Azure Portal에서 함수 앱을 엽니다. 함수 앱이 현재 실행되고 있는지 확인합니다.

  2. 다음 단계에 따라 함수 앱에 대해 CORS(원본 간 리소스 공유)를 설정하여 모든 원본이 허용되도록 합니다.

    1. 함수 앱 리소스 메뉴의 API에서 CORS를 선택합니다.

    2. CORS 아래에 별표(*) 와일드카드 문자를 추가하되, 목록의 다른 원본은 모두 제거하고 저장을 선택합니다.

HTTP 요청 내에서 속성 값에 액세스

웹후크 함수는 HTTP 요청을 입력으로 수락하고 해당 요청을 다른 함수에 전달할 수 있습니다. 예를 들어 Azure Logic Apps에는 DateTime 값을 변환하는 함수가 있지만, 이 기본 샘플 JavaScript 함수는 함수에 전달된 요청 개체 내의 속성에 액세스하고 해당 속성 값에 대해 작업을 수행할 수 있는 방법을 보여 줍니다. 개체 내의 속성에 액세스하기 위해 이 예제에서는 점(.) 연산자를 사용합니다.

function convertToDateString(request, response){
   var data = request.body;
   response = {
      body: data.date.ToDateString();
   }
}

이 함수 내에서 수행되는 작업은 다음과 같습니다.

  1. 이 함수는 data 변수를 만들고 request 개체 내의 body 개체를 해당 변수에 할당합니다. 이 함수는 점(.) 연산자를 사용하여 request 개체 내의 body 개체를 참조합니다.

    var data = request.body;
    
  2. 이 함수는 이제 data 변수를 통해 date 속성에 액세스하고, ToDateString() 함수를 호출하여 해당 속성 값을 DateTime 형식에서 DateString 형식으로 변환할 수 있습니다. 또한 이 함수는 다음과 같이 함수의 응답에서 body 속성을 통해 결과를 반환합니다.

    body: data.date.ToDateString();
    

Azure에서 함수를 만들었으므로 논리 앱에 함수를 추가하는 단계를 따르세요.

논리 앱 워크플로 내에서 함수 만들기(사용량 워크플로만 해당)

워크플로 디자이너의 기본 제공 Azure Functions 작업을 사용하여 사용량 워크플로 내에서 직접 함수를 만들 수 있지만 이 메서드는 JavaScript로 작성된 함수에만 사용할 수 있습니다. 다른 언어의 경우 Azure Portal에서 Azure Functions 환경을 통해 함수를 만들 수 있습니다. 그러나 Azure에서 함수를 만들려면 함수 컨테이너인 함수 앱 리소스가 이미 있어야 합니다. 함수 앱이 없는 경우 함수 앱을 먼저 만듭니다. 자세한 내용은 Azure Portal에서 첫 번째 함수 만들기를 참조하세요.

표준 워크플로는 현재 워크플로 내에서 함수를 만드는 데 이 옵션을 지원하지 않지만 다음과 같은 방법으로 함수를 만든 다음, Azure 함수 호출이라는 Azure Functions 작업을 사용하여 표준 논리 앱 워크플로에서 해당 함수를 호출할 수 있습니다.

  1. Azure Portal에서 디자이너를 통해 사용량 논리 앱 및 워크플로를 엽니다.

  2. 디자이너에서 다음 일반 단계에 따라 Azure Functions 선택이라는 Azure Functions 작업을 추가합니다.

  3. 표시되는 함수 앱 목록에서 함수 앱을 선택합니다. 표시되는 작업 목록에서 새 함수 만들기라는 작업을 선택합니다.

  4. 함수 정의 편집기에서 함수를 정의합니다.

    1. 함수 이름 상자에 함수에 대한 이름을 입력합니다.

    2. 코드 상자에 함수 실행이 완료된 후에 논리 앱에 반환하려는 응답 및 페이로드를 포함한 코드를 함수 템플릿에 추가합니다. 완료되면 만들기를 선택합니다. 예를 들면 다음과 같습니다.

    템플릿 함수 정의가 있는 함수 작성 편집기를 보여 주는 스크린샷.

    템플릿 코드에서 context 개체는 워크플로가 이후 단계에서 요청 본문 속성을 통해 전송하는 메시지를 참조합니다. 함수 내에서 context 개체의 속성에 액세스하려면 다음 구문을 사용합니다.

    context.body.<property-name>

    예를 들어 context 개체 내의 content 속성을 참조하려면 다음 구문을 사용합니다.

    context.body.content

    또한 템플릿 코드에는 함수가 해당 값에 대해 작업을 수행할 수 있도록 data 매개 변수의 값을 저장하는 input 변수도 포함되어 있습니다. JavaScript 함수 내에서 data 변수는 context.body를 빠르게 수행하는 방법이기도 합니다.

    참고 항목

    여기서 body 속성은 context 개체에 적용되며, 함수에도 전달될 수 있는 작업의 출력에서 가져온 Body 토큰과 다릅니다.

  5. 요청 본문 상자에 JSON (JavaScript Notation) 개체로 형식이 지정된 함수 입력을 제공합니다.

    이 입력은 컨텍스트 개체이거나, 논리 앱이 함수에 보내는 메시지입니다. 요청 본문 필드를 클릭하면 이전 단계의 출력에 대한 토큰을 선택할 수 있도록 동적 콘텐츠 목록이 나타납니다. 이 예제에서는 컨텍스트 페이로드에 이메일 트리거의 From 토큰 값이 있는 content라는 속성이 포함되어 있다고 지정합니다.

    예제 컨텍스트 개체 페이로드가 있는 함수 및

    여기서 컨텍스트 개체는 문자열로 캐스팅되지 않으므로 개체의 콘텐츠는 JSON 페이로드에 직접 추가됩니다. 그러나 컨텍스트 개체가 문자열, JSON 개체 또는 JSON 배열을 전달하는 JSON 토큰이 아닌 경우 오류가 발생합니다. 따라서 이 예제에서 받은 시간 토큰을 대신 사용한 경우 큰따옴표를 추가하여 컨텍스트 개체를 문자열로 캐스팅할 수 있습니다. 예를 들면 다음과 같습니다.

    개체를 문자열로 캐스팅하는

  6. 사용할 메서드, 요청 헤더, 쿼리 매개 변수 또는 인증 등의 기타 세부 정보를 지정하려면 새 매개 변수 추가 목록을 열고 원하는 옵션을 선택합니다. 인증의 경우 선택한 함수에 따라 옵션이 달라집니다. 자세한 내용은 함수에 인증 사용을 참조하세요.

논리 앱 워크플로에 기존 함수 추가(소비 + 표준 워크플로)

논리 앱 워크플로에서 기존 함수를 호출하려면 디자이너의 다른 작업과 같은 함수를 추가하면 됩니다.

  1. Azure Portal에서 디자이너를 통해 사용량 논리 앱 워크플로를 엽니다.

  2. 디자이너에서 다음 일반 단계에 따라 Azure Functions 선택이라는 Azure Functions 작업을 추가합니다.

  3. 함수 앱 목록에서 함수 앱을 선택합니다. 표시되는 함수 목록에서 함수를 선택합니다.

    선택한 함수 앱 및 함수를 보여 주는 사용량 스크린샷.

    API 정의(Swagger 설명)가 있고 논리 앱이 해당 함수를 찾아 액세스할 수 있도록 설정된 함수에 대해 Swagger 작업을 선택할 수 있습니다.

    선택한 함수 앱 및 선택한 함수인

  4. 요청 본문 상자에 JSON (JavaScript Notation) 개체로 형식이 지정된 함수 입력을 제공합니다.

    이 입력은 컨텍스트 개체이거나, 논리 앱이 함수에 보내는 메시지입니다. 요청 본문 필드를 클릭하면 이전 단계의 출력에 대한 토큰을 선택할 수 있도록 동적 콘텐츠 목록이 나타납니다. 이 예제에서는 컨텍스트 페이로드에 이메일 트리거의 From 토큰 값이 있는 content라는 속성이 포함되어 있다고 지정합니다.

    여기서 컨텍스트 개체는 문자열로 캐스팅되지 않으므로 개체의 콘텐츠는 JSON 페이로드에 직접 추가됩니다. 그러나 컨텍스트 개체가 문자열, JSON 개체 또는 JSON 배열을 전달하는 JSON 토큰이 아닌 경우 오류가 발생합니다. 따라서 이 예제에서 Received Time 토큰을 대신 사용하면 큰따옴표를 추가하여 컨텍스트 개체를 문자열로 캐스팅할 수 있습니다.

    개체를 문자열로 캐스팅하는

  5. 사용할 메서드, 요청 헤더, 쿼리 매개 변수 또는 인증 등의 기타 세부 정보를 지정하려면 새 매개 변수 추가 목록을 열고 원하는 옵션을 선택합니다. 인증의 경우 선택한 함수에 따라 옵션이 달라집니다. 자세한 내용은 함수에 인증 사용을 참조하세요.

함수 호출에 인증 사용(사용량 워크플로에만 해당)

사용량 워크플로는 관리 ID(이전의 관리되는 서비스 ID 또는 MSI)를 사용하여 함수 호출을 인증하고 Microsoft Entra ID로 보호되는 리소스에 대한 액세스를 인증할 수 있습니다. 이 관리 ID는 로그인하고 자격 증명 또는 비밀을 제공하지 않더라도 액세스를 인증할 수 있습니다. 이 ID는 Azure에서 관리되며, 비밀을 제공하거나 순환할 필요가 없기 때문에 자격 증명을 보호하는 데 도움이 됩니다. 논리 앱 리소스 수준에서 시스템 할당 ID 또는 수동으로 만든 사용자 할당 ID를 설정할 수 있습니다. 워크플로에서 호출된 함수는 동일한 ID를 인증에 사용할 수 있습니다.

참고 항목

현재 사용량 워크플로만 관리 ID 및 Microsoft Entra 인증을 사용하여 Azure 함수 호출에 대한 인증을 지원합니다. 표준 워크플로는 현재 Azure Functions 커넥터를 사용할 때 이 지원을 포함하지 않습니다.

자세한 내용은 다음 설명서를 검토하세요.

사용량 논리 앱의 관리 ID를 사용할 수 있도록 함수 앱과 함수를 설정하려면 다음과 같은 개략적인 단계를 수행합니다.

  1. 논리 앱 관리 ID를 사용하도록 설정하고 구성합니다.

  2. 익명 인증을 위해 함수를 설정합니다.

  3. Microsoft Entra 인증을 설정하는 데 필요한 값을 찾습니다.

  4. 함수 앱에 대한 앱 등록을 만듭니다.

익명 인증을 위한 함수 설정(사용량 워크플로만 해당)

함수에서 사용량 논리 앱의 관리 ID를 사용하려면 함수의 인증 수준을 익명으로 설정해야 합니다. 그러지 않으면 워크플로에서 BadRequest 오류를 throw합니다.

  1. Azure Portal에서 함수 앱을 찾아 선택합니다.

    다음 단계에서는 FabrikamFunctionApp이라는 예제 함수 앱을 사용합니다.

  2. 함수 앱 리소스 메뉴의 개발 도구에서 고급 도구>이동을 선택합니다.

  3. Kudu Services 페이지가 열리면 Kudu 웹 사이트의 제목 표시줄에 있는 디버그 콘솔 메뉴에서 CMD를 선택합니다.

  4. 다음 페이지가 표시되면 폴더 목록에서 사이트>wwwroot>함수를 선택합니다.

    다음 단계에서는 FabrikamAzureFunction이라는 예제 함수를 사용합니다.

    함수가 선택된

  5. 편집을 위해 function.json 파일을 엽니다.

    편집 명령이 선택된

  6. bindings 개체에서 authLevel 속성이 있는지 확인합니다. 속성이 있는 경우 속성 값을 anonymous로 설정합니다. 그렇지 않으면 해당 속성을 추가하고 값을 설정합니다.

  7. 완료되면 설정을 저장합니다. 다음 섹션을 계속합니다.

Microsoft Entra 인증을 설정하는 데 필요한 값 찾기(사용량 워크플로에만 해당)

Microsoft Entra 인증을 사용하도록 함수 앱을 설정하려면 먼저 이 섹션의 단계에 따라 다음 값을 찾아 저장해야 합니다.

  1. 논리 앱 관리 ID의 개체(보안 주체) ID를 찾습니다.
  2. Microsoft Entra ID에 대한 테넌트 ID를 찾습니다.

논리 앱 관리 ID의 개체 ID 찾기

  1. 사용량 논리 앱의 관리 ID가 사용하도록 설정된 후 논리 앱 메뉴의 설정에서 ID를 선택한 다음, 시스템 할당 또는 사용자 할당을 선택합니다.

    • 시스템 할당

      시스템 할당 ID의 경우 ID의 개체 ID를 복사합니다. 예를 들면 다음과 같습니다.

    • 사용자 할당

      1. 사용자 할당 ID의 경우 ID를 선택하여 클라이언트 ID를 찾습니다. 예를 들면 다음과 같습니다.

      2. 관리 ID의 개요 창에서 ID의 클라이언트 ID를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

        클라이언트 ID가 선택된 사용자 할당 ID의

Microsoft Entra ID에 대한 테넌트 ID 찾기

Microsoft Entra 테넌트 ID를 찾으려면 Get-AzureAccount라는 PowerShell 명령을 실행하거나 Azure Portal에서 다음 단계를 따릅니다.

  1. Azure Portal에서 Microsoft Entra 테넌트를 엽니다. 관련 단계에서는 Fabrikam을 예제 테넌트로 사용합니다.

  2. Microsoft Entra 테넌트 메뉴의 관리에서 속성을 선택합니다.

  3. 나중에 사용하기 위해 테넌트 ID를 복사하고 저장합니다. 예를 들면 다음과 같습니다.

    테넌트 ID의 복사 단추가 선택된 Microsoft Entra ID

함수 앱에 대한 앱 등록 만들기(사용량 워크플로만 해당)

사용량 논리 앱의 관리 ID에 대한 개체 ID와 Microsoft Entra ID에 대한 테넌트 ID를 찾은 후 앱 등록을 만들어 Microsoft Entra 인증을 사용하도록 함수 앱을 설정할 수 있습니다.

  1. Azure Portal에서 함수 앱을 엽니다.

  2. 함수 앱 메뉴의 설정에서 인증을 선택한 다음, ID 공급자 추가를 선택합니다.

  3. ID 공급자 추가 창의 기본 사항 아래에 있는 ID 공급자 목록에서 Microsoft를 선택합니다.

  4. 앱 등록 아래의 앱 등록 유형에서 기존 앱 등록의 세부 정보 제공을 선택하고 이전에 저장한 값을 입력합니다.

    속성 필요함 설명
    애플리케이션(클라이언트) ID <object-ID> 이 앱 등록에 사용할 고유 식별자입니다. 이 시나리오에서는 논리 앱 관리 ID의 개체 ID를 사용합니다.
    클라이언트 암호 선택 사항이지만 권장됨 <client-secret> 앱에서 토큰을 요청할 때 해당 ID를 증명하는 데 사용하는 암호 값입니다. 클라이언트 암호는 앱 구성에서 MICROSOFT_PROVIDER_AUTHENTICATION_SECRET이라는 슬롯 고정 애플리케이션 설정으로 생성되어 저장됩니다. Azure Key Vault에서 암호를 대신 관리하기 위해 나중에 Key Vault 참조를 사용하도록 이 설정을 업데이트할 수 있습니다.

    - 클라이언트 암호 값을 제공하는 경우 로그인 작업은 하이브리드 흐름을 사용하고 액세스 토큰과 새로 고침 토큰을 둘 다 반환합니다.

    - 클라이언트 암호를 제공하지 않는 경우 로그인 작업은 OAuth 2.0 암시적 허용 흐름을 사용하고 ID 토큰만 반환합니다.

    이러한 토큰은 공급자가 보내고 EasyAuth 토큰 저장소에 저장됩니다.
    발급자 URL 아니요 <authentication-endpoint-URL>/<Azure-AD-tenant-ID>/v2.0 이 URL은 사용자를 올바른 Microsoft Entra 테넌트로 리디렉션하고 적절한 메타데이터를 다운로드하여 적절한 토큰 서명 키와 토큰 발급자 클레임 값을 결정합니다. Azure AD v1을 사용하는 앱의 경우 URL에서 /v2.0을 생략합니다.

    이 시나리오에서는 다음 URL을 사용합니다. https://sts.windows.net/<Azure-AD-tenant-ID>
    허용되는 토큰 대상 그룹 아니요 <application-ID-URI> 함수 앱의 애플리케이션 ID URI(리소스 ID)입니다. 웹앱의 인증 토큰을 허용하려는 클라우드 또는 서버 앱의 경우 웹앱의 애플리케이션 ID URI를 추가합니다. 구성된 클라이언트 ID는 암시적으로 항상 허용되는 대상 그룹으로 간주됩니다.

    이 시나리오에서 값은 https://management.azure.com입니다. 나중에 관리 ID를 사용하도록 워크플로의 함수 작업을 설정할 때 대상 그룹 속성에 동일한 URI를 사용할 수 있습니다.

    중요: 애플리케이션 ID URI(리소스 ID)는 필수 후행 슬래시를 포함하여 Microsoft Entra ID에서 예상하는 값과 정확히 일치해야 합니다.

    현재 버전은 다음 예제와 유사합니다.

    함수 앱의 논리 앱 및 ID 공급자에 대한 앱 등록을 보여 주는 스크린샷.

    ID 공급자를 사용하여 함수 앱을 처음 설정하는 경우 App Service 인증 설정 섹션도 나타납니다. 이러한 옵션은 함수 앱이 인증되지 않은 요청에 응답하는 방법을 결정합니다. 기본 선택은 새 ID 공급자로 로그인하도록 모든 요청을 리디렉션합니다. 지금 이 동작을 사용자 지정하거나, 나중에 기본 인증 페이지에서 인증 설정 옆에 있는 편집을 선택하여 설정을 조정할 수 있습니다. 옵션에 대해 자세히 알아보려면 인증 흐름 - Azure App Service 및 Azure Functions의 인증 및 권한 부여를 검토합니다.

    그렇지 않으면 다음 단계를 계속 진행할 수 있습니다.

  5. 앱 등록 만들기를 완료하려면 추가를 선택합니다.

    완료되면 인증 페이지에 앱 등록의 ID 공급자와 앱 ID(클라이언트 ID)가 나열됩니다. 이제 함수 앱에서 이 앱 등록을 인증에 사용할 수 있습니다.

  6. 워크플로의 뒷부분에서 대상 그룹 속성에 사용하기 위해 함수의 앱 ID(클라이언트 ID)를 복사합니다.

  7. 디자이너로 돌아가서 기본 제공 Azure Functions 작업을 사용하여 관리 ID로 액세스를 인증하는 단계를 수행합니다.

다음 단계