단일 테넌트 Azure Logic Apps에서 표준 논리 앱 워크플로에 대한 DevOps 배포 설정

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

이 문서에서는 DevOps 도구 및 프로세스를 사용하여 Visual Studio Code에서 인프라로 단일 테넌트 Azure Logic Apps에 표준 논리 앱 프로젝트를 배포하는 방법을 보여 줍니다. 배포 시 GitHub과 Azure DevOps 중 어떤 것을 선호하는지 여부에 따라 시나리오에 가장 적합한 경로와 도구를 선택합니다. 예제 논리 앱 프로젝트와 GitHub 또는 Azure DevOps를 사용하는 Azure 배포 예제가 포함된 샘플을 사용할 수 있습니다. 단일 테넌트용 DevOps에 대한 자세한 내용은 단일 테넌트 Azure Logic Apps의 DevOps 배포 개요를 참조하세요.

필수 조건

  • 활성 구독이 있는 Azure 계정. Azure 구독이 없는 경우 무료 계정을 만드세요.

  • Visual Studio Code 및 Azure Logic Apps(표준) 확장으로 만들어진 표준 논리 앱 프로젝트입니다.

    논리 앱 프로젝트 또는 인프라를 아직 설정하지 않은 경우 원본 및 배포 옵션에 따라 포함된 샘플 프로젝트를 사용하여 예제 앱 및 인프라를 배포할 수 있습니다. 이러한 샘플 프로젝트와 예제 논리 앱을 실행하기 위해 포함된 리소스에 대한 자세한 내용은 인프라 배포를 참조하세요.

  • Azure에 배포하려는 경우 Azure에서 만든 기존 논리 앱(표준) 리소스가 필요합니다. 빈 논리 앱 리소스를 빠르게 만들려면 단일 테넌트 기반 논리 앱 워크플로 만들기 - 포털을 검토합니다.

인프라 리소스 배포

논리 앱 프로젝트 또는 인프라를 아직 설정하지 않은 경우 사용할 원본 및 배포 옵션에 따라 다음 샘플 프로젝트를 사용하여 예제 앱 및 인프라를 배포할 수 있습니다.

두 샘플 모두 논리 앱이 실행하는 데 사용하는 다음 리소스를 포함합니다.

리소스 이름 Required 설명
논리 앱(표준) 이 Azure 리소스에는 단일 테넌트 Azure Logic Apps에서 실행하는 워크플로가 포함되어 있습니다.
Functions 프리미엄 또는 App Service 호스팅 계획 이 Azure 리소스는 컴퓨팅, 처리, 스토리지, 네트워킹 등 논리 앱을 실행하는 데 사용할 호스팅 리소스를 지정합니다.

중요: 현재 환경에서 논리 앱(표준) 리소스에는 Functions 프리미엄 호스팅 계획을 기반으로 하는 워크플로 표준 호스팅 계획이 필요합니다.

Azure Storage 계정 예, 상태 저장 및 상태 비저장 워크플로 모두에 대해 이 Azure 리소스는 메타데이터, 액세스 제어용 키, 상태, 입력, 출력, 실행 기록 및 워크플로에 대한 기타 정보를 저장합니다.
Application Insights 선택 사항 이 Azure 리소스는 워크플로에 대한 모니터링 기능을 제공합니다.
API 연결 선택 사항(없는 경우) 이러한 Azure 리소스는 워크플로가 Office 365, SharePoint 등과 같은 관리 커넥터 작업을 실행하는 데 사용하는 모든 관리되는 API 연결을 정의합니다.

중요: 논리 앱 프로젝트에서 connections.js 파일은 관리되는 API 연결 및 워크플로에서 사용하는 Azure Functions에 대한 메타데이터, 엔드포인트 및 키를 포함합니다. 각 환경에 대해 서로 다른 연결과 함수를 사용하려면 이 connections.json 파일을 매개 변수화하고 엔드포인트를 업데이트해야 합니다.

자세한 내용은 API 연결 리소스 및 액세스 정책을 검토하세요.

ARM(Azure Resource Manager) 템플릿 선택 사항 이 Azure 리소스는 재사용하거나 내보낼 수 있는 기준 인프라 배포를 정의합니다.

API 연결 리소스 및 액세스 정책

단일 테넌트 Azure Logic Apps에서 워크플로의 모든 관리 또는 API 연결 리소스에는 연결된 액세스 정책이 필요합니다. 이 정책에는 관리되는 커넥터 인프라에 액세스하기 위한 올바른 권한을 제공하기 위해 논리 앱의 ID가 필요합니다. 포함된 샘플 프로젝트에는 이러한 액세스 정책을 비롯하여 필요한 모든 인프라 리소스를 포함하는 ARM 템플릿이 포함되어 있습니다.

다음 다이어그램에서는 논리 앱 프로젝트와 인프라 리소스 간의 종속성을 보여줍니다.

Conceptual diagram showing infrastructure dependencies for a logic app project in the single-tenant Azure Logic Apps model.

논리 앱 리소스 배포(zip 배포)

논리 앱 프로젝트를 원본 리포지토리로 푸시한 후 인프라에 논리 앱을 배포하는 Azure 내부 또는 외부의 빌드 및 릴리스 파이프라인을 설정할 수 있습니다.

프로젝트 빌드

논리 앱 프로젝트 형식에 따라 빌드 파이프라인을 설정하려면 다음 표에 있는 해당 작업을 완료합니다.

프로젝트 형식 설명 및 단계
Nuget 기반 NuGet 기반 프로젝트 구조는 .NET Framework를 기반으로 합니다. 이러한 프로젝트를 빌드하려면 .NET Standard 빌드 단계를 수행해야 합니다. 자세한 내용은 MSBuild를 사용하여 NuGet 패키지 만들기 설명서를 검토합니다.
번들 기반 확장 번들 기반 프로젝트는 언어별 프로젝트가 아니며 언어별 빌드 단계가 필요하지 않습니다. 모든 메서드를 사용하여 프로젝트 파일을 압축할 수 있습니다.

중요: .zip 파일에 모든 워크플로 폴더, 구성 파일(예: host.json, connections.json) 및 기타 관련 파일을 포함한 실제 빌드 아티팩트가 포함되어 있는지 확인합니다.

Azure 릴리스 전

논리 앱 프로젝트의 connections.json 파일 내부에 관리되는 API 연결은 Visual Studio Code에서 로컬 사용을 위해 특별히 만들어집니다. Visual Studio Code에서 Azure로 프로젝트 아티팩트를 릴리스하려면 먼저 이러한 아티팩트를 업데이트해야 합니다. Azure에서 관리되는 API 연결을 사용하려면 Azure에서 사용하기에 올바른 형식이 되도록 인증 방법을 업데이트해야 합니다.

인증 형식 업데이트

인증을 사용하는 각 관리 API 연결에 대해 첫 번째 및 두 번째 코드 예제에 각각 표시된 대로 Visual Studio Code의 로컬 형식에서 Azure Portal 형식으로 인증 개체를 업데이트해야 합니다.

Visual Studio Code 형식

{
   "managedApiConnections": {
      "sql": {
         "api": {
            "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Web/locations/westus/managedApis/sql"
      },
      "connection": {
         "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/ase/providers/Microsoft.Web/connections/sql-8"
      },
      "connectionRuntimeUrl": "https://xxxxxxxxxxxxxx.01.common.logic-westus.azure-apihub.net/apim/sql/xxxxxxxxxxxxxxxxxxxxxxxxx/",
      "authentication": {
         "type": "Raw",
         "scheme": "Key",
         "parameter": "@appsetting('sql-connectionKey')"
      }
   }
}

Azure Portal 형식

{
   "managedApiConnections": {
      "sql": {
         "api": {
            "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Web/locations/westus/managedApis/sql"
      },
      "connection": {
         "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/ase/providers/Microsoft.Web/connections/sql-8"
      },
      "connectionRuntimeUrl": "https://xxxxxxxxxxxxxx.01.common.logic-westus.azure-apihub.net/apim/sql/xxxxxxxxxxxxxxxxxxxxxxxxx/",
      "authentication": {
         "type": "ManagedServiceIdentity",
      }
   }
}

필요에 따라 API 연결 만들기

논리 앱 워크플로를 로컬 개발 환경과 다른 Azure 지역 또는 구독에 배포하는 경우 배포 전에 이러한 관리되는 API 연결도 만들어야 합니다. ARM(Azure Resource Manager) 템플릿 배포는 관리되는 API 연결을 만드는 가장 쉬운 방법입니다.

다음 예에서는 ARM 템플릿의 SQL 관리 API 연결 리소스 정의를 보여 줍니다.

{
   "type": "Microsoft.Web/connections",
   "apiVersion": "2016–06–01",
   "location": "[parameters('location')]",
   "name": "[parameters('connectionName')]",
   "properties": {
      "displayName": "sqltestconnector",
      "api": {
         "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Web/locations/{Azure-region-location}/managedApis/sql"
      },
      "parameterValues": {
         "authType": "windows", 
         "database": "TestDB",
         "password": "TestPassword",
         "server": "TestServer",
         "username": "TestUserName"
      }
   }
}

연결 리소스 정의를 완료하기 위해 properties 개체에서 사용해야 하는 값을 찾으려면 특정 커넥터에 대해 다음 API를 사용할 수 있습니다.

GET https://management.azure.com/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{Azure-region-location}/managedApis/{connector-name}?api-version=2016-06-01

응답에서 특정 커넥터에 대한 리소스 정의를 완료하는 데 필요한 모든 정보가 포함된 connectionParameters 개체를 찾습니다. 다음 예제에서는 SQL 관리 연결에 대한 예제 리소스 정의를 보여줍니다.

{
   "type": "Microsoft.Web/connections",
   "apiVersion": "2016–06–01",
   "location": "[parameters('location')]",
   "name": "[parameters('connectionName')]",
   "properties": {
      "displayName": "sqltestconnector",
      "api": {
         "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{Azure-region-location}/managedApis/sql"
      },
      "parameterValues": {
         "authType": "windows",
         "database": "TestDB",
         "password": "TestPassword",
         "server": "TestServer",
         "username": "TestUserName"
      }
   }
}

또는 Azure Logic Apps에서 워크플로 디자이너를 사용하여 연결을 만들 때 네트워크 추적을 캡처하고 검토할 수 있습니다. 앞에서 설명한 대로 커넥터의 관리 API로 전송된 PUT 호출을 찾고 필요한 모든 정보에 대해 요청 본문을 검토합니다.

Azure에 릴리스

Azure에 배포하는 릴리스 파이프라인을 설정하려면 GitHub, Azure DevOps 또는 Azure CLI에 대한 관련 단계를 따릅니다.

참고 항목

Azure Logic Apps는 현재 Azure 배포 슬롯을 지원하지 않습니다.

GitHub 배포의 경우 GitHub Actions(예: Azure Functions의 GitHub 작업)를 사용하여 논리 앱을 배포할 수 있습니다. 이 작업을 수행하려면 다음 정보를 전달해야 합니다.

  • 배포에 사용할 논리 앱 이름
  • 모든 워크플로 폴더, 구성 파일(예: host.json, connections.json) 및 기타 관련 파일을 포함한 실제 빌드 아티팩트가 포함된 zip 파일입니다.
  • 인증에 사용되는 게시 프로필
- name: 'Run Azure Functions Action'
  uses: Azure/functions-action@v1
  id: fa
  with:
   app-name: 'MyLogicAppName'
   package: 'MyBuildArtifact.zip'
   publish-profile: 'MyLogicAppPublishProfile'

자세한 내용은 GitHub 작업을 사용하여 지속적으로 업데이트 설명서를 검토하세요.

Azure로 릴리스 후

각 API 연결에는 액세스 정책이 있습니다. zip 배포가 완료되면 Azure Portal에서 논리 앱 리소스를 열고 각 API 연결에 대한 액세스 정책을 만들어 배포된 논리 앱에 대한 권한을 설정해야 합니다. zip 배포는 앱 설정을 만들지 않습니다. 따라서 배포 후 로컬 Visual Studio Code 프로젝트의 local.settings.json 파일을 기반으로 이러한 앱 설정을 만들어야 합니다.

다음 단계

단일 테넌트 Azure Logic Apps 사용 경험에 대한 여러분의 의견을 듣고 싶습니다.