Azure Logic Apps의 워크플로에서 Azure Functions 호출
적용 대상: Azure Logic Apps(사용량 + 표준)
논리 앱 워크플로에서 특정 작업을 수행하는 코드를 실행하기 위해 완전한 앱이나 인프라를 빌드할 필요가 없습니다. 대신 Azure 함수를 만들고 호출할 수 있습니다. Azure Functions는 클라우드에서 서버리스 컴퓨팅과 다음 작업을 수행할 수 있는 기능을 제공합니다.
- Node.js 또는 C#을 사용하여 만들어진 함수를 실행하여 워크플로의 동작을 확장합니다.
- 워크플로에서 계산을 수행합니다.
- 워크플로에 고급 서식을 적용하거나 필드를 계산합니다.
이 방법 가이드에서는 사용량 또는 표준 워크플로에서 기존 Azure 함수를 호출하는 방법을 보여 줍니다. Azure Functions를 사용하지 않고 코드를 실행하려면 다음 설명서를 참조하세요.
제한 사항
사용량 워크플로만 Microsoft Entra 인증을 통해 관리 ID를 사용하여 Azure 함수 호출 인증을 지원합니다. 표준 워크플로는 현재 함수 호출에 대한 인증을 사용하도록 설정하는 방법에 대한 섹션에서 지원되지 않습니다.
Azure Logic Apps는 배포 슬롯이 사용되도록 설정된 Azure Functions 사용을 지원하지 않습니다. 이 시나리오가 작동하는 경우도 있지만 이 동작은 예측할 수 없으며 워크플로에서 Azure 함수를 호출하려고 할 때 권한 부여 문제가 발생할 수 있습니다.
필수 조건
Azure 계정 및 구독 구독이 없는 경우 Azure 체험 계정에 등록합니다.
하나 이상의 Azure 함수가 포함된 Azure 함수 앱 리소스.
함수 앱 리소스와 논리 앱 리소스는 동일한 Azure 구독을 사용해야 합니다.
함수 앱 리소스는 .NET 또는 Node.js를 런타임 스택으로 사용해야 합니다.
함수 앱에 새 함수를 추가할 때 C# 또는 JavaScript를 선택할 수 있습니다.
호출하려는 Azure 함수입니다. 다음 도구를 사용하여 이 함수를 만들 수 있습니다.
함수는 HTTP 트리거 템플릿을 사용해야 합니다.
HTTP 트리거 템플릿은 논리 앱 워크플로에서 생성된
application/json
형식의 콘텐츠를 수락할 수 있습니다. 워크플로에 함수를 추가하면 Azure 구독 내에서 이 템플릿을 통해 생성된 사용자 지정 함수가 디자이너에 표시됩니다.함수 코드에는 함수가 완료된 후 워크플로로 반환할 응답과 페이로드가 포함되어야 합니다.
context
개체는 이 가이드 뒷부분에 나오는 요청 본문이라는 Azure Functions 작업 매개 변수를 통해 워크플로가 보내는 메시지를 나타냅니다.이 가이드에서는 FabrikamAzureFunction이라는 다음 샘플 함수를 사용합니다.
module.exports = function (context, data) { var input = data; // Function processing logic // Function response for later use context.res = { body: { content:"Thank you for your feedback: " + input } }; context.done(); }
함수 내에서
context
개체의 속성에 액세스하려면 다음 구문을 사용합니다.context.body.<property-name>
예를 들어,
context
개체의content
속성을 참조하려면 다음 구문을 사용합니다.context.body.content
이 코드에는 함수가 해당 값에 대한 작업을 수행할 수 있도록
data
매개 변수의 값을 저장하는input
변수도 포함되어 있습니다. JavaScript 함수 내에서data
변수는context.body
를 빠르게 수행하는 방법이기도 합니다.참고 항목
여기서
body
속성은context
개체에 적용되며, 함수에도 전달될 수 있는 작업의 출력에서 가져온 Body 토큰과 다릅니다.OpenAPI 정의를 정의하지 않으면 함수에서 사용자 지정 경로를 사용할 수 없습니다.
함수에 OpenAPI 정의가 있는 경우 워크플로 디자이너는 함수 매개 변수를 사용하기 위한 보다 풍부한 환경을 제공합니다. 워크플로에서 OpenAPI 정의가 있는 함수를 찾아 액세스하려면 먼저 다음 단계에 따라 함수 앱을 설정합니다.
모든 트리거로 시작되는 사용량 또는 표준 논리 앱 워크플로입니다.
이 가이드의 예에서는 새 이메일이 도착할 때라는 Office 365 Outlook 트리거를 사용합니다.
다른 워크플로를 호출하는 Azure 함수를 만들고 호출하려면 호출 가능한 엔드포인트를 제공하는 트리거로 보조 워크플로가 시작되는지 확인합니다.
예를 들어, 일반 HTTP 또는 요청 트리거를 사용하여 워크플로를 시작하거나 Azure Queues 또는 Event Grid와 같은 서비스 기반 트리거를 사용할 수 있습니다. 함수 내에서 HTTP POST 요청을 트리거의 URL로 보내고 보조 워크플로에서 처리할 페이로드를 포함합니다. 자세한 내용은 호출, 트리거 또는 중첩 논리 앱 워크플로를 참조하세요.
Azure 함수 작업에 대한 팁
OpenAPI 정의를 사용하여 함수 찾기
워크플로에서 OpenAPI 정의가 있는 함수를 찾고 사용할 수 있도록 함수 앱을 설정하려면 다음 단계를 수행합니다.
Azure Portal에서 함수 앱을 엽니다. 함수 앱이 현재 실행되고 있는지 확인합니다.
다음 단계에 따라 함수 앱에서 모든 원본이 허용되도록 CORS(원본 간 리소스 공유)를 설정합니다.
HTTP 요청 내에서 속성 값에 액세스
웹후크 기반 함수는 HTTP 요청을 입력으로 수락하고 해당 요청을 다른 함수에 전달할 수 있습니다. 예를 들어 Azure Logic Apps에는 DateTime 값을 변환하는 함수가 있지만, 이 기본 샘플 JavaScript 함수는 함수에 전달된 HTTP 요청 개체 내의 속성에 액세스하고 해당 속성 값에 대해 작업을 수행할 수 있는 방법을 보여 줍니다. 개체 내의 속성에 액세스하기 위해 이 예제에서는 점(.) 연산자를 사용합니다.
function convertToDateString(request, response){
var data = request.body;
response = {
body: data.date.ToDateString();
}
}
이 함수 내에서 수행되는 작업은 다음과 같습니다.
함수는
data
변수를 만든 다음request
개체 내부에 있는body
개체를 변수에 할당합니다. 이 함수는 점(.) 연산자를 사용하여request
개체 내의body
개체를 참조합니다.var data = request.body;
이 함수는 이제
data
변수를 통해date
속성에 액세스하고,ToDateString()
함수를 호출하여 해당 속성 값을 DateTime 형식에서 DateString 형식으로 변환할 수 있습니다. 또한 이 함수는 다음과 같이 함수의 응답에서body
속성을 통해 결과를 반환합니다.body: data.date.ToDateString();
Azure에서 함수를 만든 후 워크플로에 Azure 함수를 추가하는 단계를 따릅니다.
함수에 URI 매개 변수 전달
함수에 URI 매개 변수를 전달해야 하는 경우 함수의 엔드포인트 URL에서 쿼리 매개 변수를 사용할 수 있습니다.
논리 앱에 대해 워크플로 디자이너가 열리고 함수 정보 창이 열리면 고급 매개 변수 목록에서 쿼리를 선택합니다.
매개 변수 입력을 키-값 쌍으로 입력할 수 있는 테이블이 나타납니다.
매개 변수의 키-값 쌍을 입력합니다. 예를 들면 다음과 같습니다.
워크플로에 함수 추가(사용량 + 표준 워크플로)
워크플로에서 Azure 함수를 호출하려면 디자이너의 다른 작업처럼 해당 함수를 추가하면 됩니다.
Azure Portal에서 디자이너를 통해 사용량 논리 앱 워크플로를 엽니다.
디자이너에서 다음 일반 단계에 따라 Azure Functions 선택이라는 Azure Functions 작업을 추가합니다.
작업 추가 창에서 다음 단계를 수행합니다.
함수 앱 목록에서 함수 앱을 선택하고, 함수를 선택한 다음, 작업 추가를 선택합니다. 예를 들면 다음과 같습니다.
함수의 정보 상자가 나타나면 다음 단계를 수행합니다.
요청 본문의 경우 JSON(JavaScript Object Notation) 개체의 형식을 사용해야 하는 함수의 입력을 제공합니다. 예를 들면 다음과 같습니다.
{"context": <selected-input> }
이 입력은 워크플로가 함수에 보내는 컨텍스트 개체 페이로드 또는 메시지입니다.
이전 단계의 출력을 나타내는 토큰을 선택하려면 요청 본문 상자 내부를 선택한 다음 동적 콘텐츠 목록(번개 아이콘)을 여는 옵션을 선택합니다.
식을 만들려면 요청 본문 상자 내부를 선택한 다음 옵션을 선택하여 식 편집기(수식 아이콘)를 엽니다.
다음 예에서는
content
특성이 있는 JSON 개체와 이메일 트리거의 보낸 사람 출력을 요청 본문 값으로 나타내는 토큰을 지정합니다.여기서 컨텍스트 개체는 문자열로 캐스팅되지 않으므로 개체의 콘텐츠는 JSON 페이로드에 직접 추가됩니다. 다음은 전체 예입니다.
문자열, JSON 개체 또는 JSON 배열을 전달하는 JSON 토큰 이외의 컨텍스트 개체를 제공하면 오류가 발생합니다. 그러나 예를 들어, 수신 시간 토큰을 사용하려는 경우 토큰을 따옴표("")로 묶어 컨텍스트 개체를 문자열로 변환할 수 있습니다.
사용할 방법, 요청 헤더, 쿼리 매개 변수, 인증 등 기타 세부 정보를 지정하려면 고급 매개 변수 목록을 열고 원하는 매개 변수를 선택합니다. 인증의 경우 선택한 함수에 따라 옵션이 달라집니다. 자세한 내용은 함수에 인증 사용을 참조하세요.
Azure 함수 호출에 대한 인증 사용(사용량 워크플로에만 해당)
사용량 워크플로는 관리 ID를 사용하여 Azure 함수 호출을 인증하고 Microsoft Entra ID로 보호되는 리소스에 액세스할 수 있습니다. 관리 ID는 로그인하고 자격 증명이나 비밀을 제공하지 않고도 액세스를 인증할 수 있습니다. 이 ID는 Azure에서 관리되며, 비밀을 제공하거나 순환할 필요가 없기 때문에 자격 증명을 보호하는 데 도움이 됩니다. 논리 앱 리소스 수준에서 시스템 할당 ID 또는 수동으로 만든 사용자 할당 ID를 설정할 수 있습니다. 워크플로에서 호출되는 Azure 함수는 인증을 위해 동일한 관리 ID를 사용할 수 있습니다.
참고 항목
사용량 워크플로만 관리 ID 및 Microsoft Entra 인증을 사용하여 Azure 함수 호출에 대한 인증을 지원합니다. 현재 표준 워크플로에는 작업을 사용하여 Azure 함수를 호출할 때 이 지원이 포함되지 않습니다.
자세한 내용은 다음 설명서를 참조하세요.
사용량 논리 앱의 관리 ID를 사용할 수 있도록 함수 앱과 함수를 설정하려면 다음과 같은 개략적인 단계를 수행합니다.
익명 인증을 위한 함수 설정(사용량 워크플로만 해당)
함수에서 사용량 논리 앱의 관리 ID를 사용하려면 함수의 인증 수준을 anonymous
로 설정해야 합니다. 그러지 않으면 워크플로에서 BadRequest 오류를 throw합니다.
Azure Portal에서 함수 앱을 찾아 선택합니다.
다음 단계에서는 FabrikamFunctionApp이라는 예제 함수 앱을 사용합니다.
함수 앱 리소스 메뉴의 개발 도구에서 고급 도구>이동을 선택합니다.
Kudu Plus 페이지가 열리면 Kudu 웹 사이트 제목 표시줄에 있는 디버그 콘솔 메뉴에서 CMD를 선택합니다.
다음 페이지가 표시되면 폴더 목록에서 사이트>wwwroot>함수를 선택합니다.
다음 단계에서는 FabrikamAzureFunction이라는 예제 함수를 사용합니다.
편집을 위해 function.json 파일을 엽니다.
bindings 개체에서 authLevel 속성이 있는지 확인합니다. 속성이 있으면 속성 값을
anonymous
로 설정합니다. 그렇지 않으면 해당 속성을 추가하고 값을 설정합니다.완료되면 설정을 저장합니다. 다음 섹션을 계속합니다.
Microsoft Entra 인증을 설정하는 데 필요한 값 찾기(사용량 워크플로에만 해당)
관리 ID 및 Microsoft Entra 인증을 사용하도록 함수 앱을 설정하려면 먼저 이 섹션의 단계에 따라 다음 값을 찾아 저장해야 합니다.
Microsoft Entra 테넌트의 테넌트 ID 찾기
Get-AzureAccount라는 PowerShell 명령을 실행하거나 Azure Portal에서 다음 단계를 따릅니다.
Azure Portal에서 Microsoft Entra 테넌트를 엽니다.
이 가이드에서는 Fabrikam을 예 테넌트로 사용합니다.
테넌트 메뉴에서 개요를 선택합니다.
나중에 사용하기 위해 테넌트 ID를 복사하고 저장합니다. 예를 들면 다음과 같습니다.
관리 ID에 대한 개체 ID 찾기
사용량 논리 앱 리소스에 대해 관리 ID를 사용하도록 설정한 후 관리 ID에 대한 개체를 찾습니다. 이 ID를 사용하여 Microsoft Entra 테넌트에서 연결된 엔터프라이즈 애플리케이션을 찾습니다.
논리 앱 메뉴의 설정에서 ID를 선택한 다음 시스템 할당 또는 사용자 할당을 선택합니다.
관리 ID와 연결된 Azure Enterprise 애플리케이션의 애플리케이션 ID 찾기
논리 앱 리소스에서 관리 ID를 사용하도록 설정하면 Azure는 같은 이름으로 연결된 Azure Enterprise 애플리케이션을 자동으로 만듭니다. 이제 연결된 엔터프라이즈 애플리케이션을 찾아 해당 애플리케이션 ID를 복사해야 합니다. 나중에 이 애플리케이션 ID를 사용하여 앱 등록을 만들어 함수 앱에 대한 ID 공급자를 추가합니다.
Azure Portal에서 Microsoft Entra 테넌트 찾기 및 엽니다.
테넌트 메뉴의 관리에서 엔터프라이즈 애플리케이션을 선택합니다.
모든 애플리케이션 페이지의 검색 상자에 관리 ID의 개체 ID를 입력합니다. 결과에서 일치하는 엔터프라이즈 애플리케이션을 찾고 애플리케이션 ID를 복사합니다.
이제 복사한 애플리케이션 ID를 사용하여 함수 앱에 ID 공급자를 추가합니다.
함수 앱에 대한 ID 공급자 추가(사용량 워크플로에만 해당)
이제 테넌트 ID와 애플리케이션 ID가 있으므로 ID 공급자를 추가하고 앱 등록을 만들어 Microsoft Entra 인증을 사용하도록 함수 앱을 설정할 수 있습니다.
Azure Portal에서 함수 앱을 엽니다.
함수 앱 메뉴의 설정에서 인증을 선택한 다음, ID 공급자 추가를 선택합니다.
ID 공급자 추가 창의 기본 사항 아래에 있는 ID 공급자 목록에서 Microsoft를 선택합니다.
앱 등록 아래의 앱 등록 유형에서 기존 앱 등록의 세부 정보 제공을 선택하고 이전에 저장한 값을 입력합니다.
속성 필요함 값 설명 애플리케이션(클라이언트) ID 예 <application-ID> 이 앱 등록에 사용할 고유 식별자입니다. 이 예에서는 관리 ID와 연결된 엔터프라이즈 애플리케이션에 대해 복사한 애플리케이션 ID를 사용합니다. 클라이언트 암호 선택 사항이지만 권장됨 <client-secret> 앱에서 토큰을 요청할 때 해당 ID를 증명하는 데 사용하는 암호 값입니다. 클라이언트 암호는 앱 구성에서 MICROSOFT_PROVIDER_AUTHENTICATION_SECRET이라는 슬롯 고정 애플리케이션 설정으로 생성되어 저장됩니다.
- 암호를 정기적으로 회전하고 안전하게 저장해야 합니다. 예를 들어 권한이 없는 사용자에게 값을 노출하지 않고 관리 ID를 사용하여 키를 검색할 수 있는 Azure Key Vault에서 암호를 관리합니다. Key Vault 참조를 사용하기 위해 이 설정을 업데이트할 수 있습니다.
- 클라이언트 암호 값을 제공하는 경우 로그인 작업은 하이브리드 흐름을 사용하고 액세스 토큰과 새로 고침 토큰을 둘 다 반환합니다.
- 클라이언트 암호를 제공하지 않는 경우 로그인 작업은 OAuth 2.0 암시적 허용 흐름을 사용합니다. 이 메서드는 ID 토큰 또는 액세스 토큰만 직접 반환합니다. 이러한 토큰은 공급자가 보내고 EasyAuth 토큰 저장소에 저장됩니다.
중요: 보안 위험으로 인해 암시적 허용 흐름은 더 이상 적합한 인증 방법이 아닙니다. 대신 PKCE(코드 교환용 증명 키) 또는 SPA(단일 페이지 애플리케이션) 권한 부여 코드와 함께 권한 부여 코드 흐름을 사용합니다.발급자 URL 아니요 <authentication-endpoint-URL>/<Microsoft-Entra-tenant-ID>/v2.0 이 URL은 사용자를 올바른 Microsoft Entra 테넌트로 리디렉션하고 적절한 메타데이터를 다운로드하여 적절한 토큰 서명 키와 토큰 발급자 클레임 값을 결정합니다. Azure AD v1을 사용하는 앱의 경우 URL에서 /v2.0을 생략합니다.
이 시나리오에서는 다음 URLhttps://sts.windows.net/
<을 사용합니다. Microsoft-Entra-tenant-ID>허용되는 토큰 대상 그룹 아니요 <application-ID-URI> 함수 앱의 애플리케이션 ID URI(리소스 ID)입니다. 웹앱의 인증 토큰을 허용하려는 클라우드 또는 서버 앱의 경우 웹앱의 애플리케이션 ID URI를 추가합니다. 구성된 클라이언트 ID는 암시적으로 항상 허용되는 대상 그룹으로 간주됩니다.
이 시나리오에서 값은https://management.azure.com
입니다. 나중에 관리 ID를 사용하도록 워크플로의 함수 작업을 설정할 때 대상 그룹 속성에 동일한 URI를 사용할 수 있습니다.
중요: 애플리케이션 ID URI(리소스 ID)는 필수 후행 슬래시를 포함하여 Microsoft Entra ID에서 예상하는 값과 정확히 일치해야 합니다.현재 버전은 다음 예제와 유사합니다.
ID 공급자를 사용하여 함수 앱을 처음 설정하는 경우 App Service 인증 설정 섹션도 나타납니다. 이러한 옵션은 함수 앱이 인증되지 않은 요청에 응답하는 방법을 결정합니다. 기본 선택은 새 ID 공급자로 로그인하도록 모든 요청을 리디렉션합니다. 지금 이 동작을 사용자 지정하거나, 나중에 기본 인증 페이지에서 인증 설정 옆에 있는 편집을 선택하여 설정을 조정할 수 있습니다. 옵션에 대해 자세히 알아보려면 인증 흐름 - Azure App Service 및 Azure Functions의 인증 및 권한 부여를 검토합니다.
그렇지 않으면 다음 단계를 계속 진행할 수 있습니다.
앱 등록 만들기를 완료하려면 추가를 선택합니다.
완료되면 이제 인증 페이지에 ID 공급자와 앱 등록의 애플리케이션(클라이언트) ID가 나열됩니다. 이제 함수 앱에서 이 앱 등록을 인증에 사용할 수 있습니다.
나중에 워크플로에 대한 Azure Functions 작업의 대상 그룹 속성에서 사용할 앱 등록의 앱(클라이언트) ID를 복사합니다.
디자이너로 돌아가서 기본 제공 Azure Functions 작업을 사용하여 관리 ID로 액세스를 인증하는 단계를 수행합니다.