Azure Synapse Analytics 작업 영역에 대한 연속 통합 및 업데이트

CI(연속 통합)는 팀 멤버가 변경 사항을 버전 제어로 커밋할 때마다 코드 작성 및 테스트를 자동화하는 프로세스입니다. CD(지속적인 업데이트)는 여러 테스트 또는 스테이징 환경에서 프로덕션 환경으로 빌드, 테스트, 구성 및 배포하는 프로세스입니다.

Azure Synapse Analytics 작업 영역에서 CI/CD는 모든 엔터티를 한 환경(개발, 테스트, 프로덕션)에서 다른 환경으로 이동합니다. 작업 영역을 다른 작업 영역으로 승격하는 작업은 두 부분으로 구성된 프로세스입니다. 먼저 ARM 템플릿(Azure Resource Manager 템플릿)을 사용하여 작업 영역 리소스(풀 및 작업 영역)를 만들거나 업데이트합니다. 그런 다음, Azure DevOps 또는 GitHub에서 Synapse 작업 영역 배포 도구를 사용하여 SQL 스크립트 및 노트북, Spark 작업 정의, 파이프라인, 데이터 세트와 같은 아티팩트 및 다른 아티팩트를 마이그레이션합니다.

이 문서에서는 Azure DevOps 릴리스 파이프라인 및 GitHub Actions를 사용하여 Azure Synapse 작업 영역을 여러 환경에 배포하는 작업을 자동화하는 방법을 간략하게 설명합니다.

필수 조건

Azure Synapse 작업 영역을 여러 환경에 배포하는 작업을 자동화하려면 다음 필수 구성 요소 및 구성이 준비되어 있어야 합니다.

Azure DevOps

GitHub

  • Azure Synapse 작업 영역 아티팩트 및 작업 영역 템플릿이 포함된 GitHub 리포지토리를 만듭니다.
  • 자체 호스팅된 실행기를 만들었는지 확인하거나 GitHub 호스팅된 실행기를 사용합니다.

Microsoft Entra ID

  • 서비스 주체를 사용하는 경우 Microsoft Entra ID에서 배포에 사용할 서비스 주체를 생성합니다.
  • 관리 ID를 사용하는 경우, Azure의 VM에서 시스템이 할당한 관리 ID를 에이전트 또는 실행기로 사용하도록 설정하고 Azure Synapse Studio에 Synapse 관리자로 추가합니다.
  • Microsoft Entra 관리자 역할을 사용하여 이러한 작업을 완료합니다.

Azure Synapse Analytics

참고 항목

이러한 필수 구성 요소는 동일한 파이프라인, ARM 템플릿 또는 Azure CLI를 사용하여 자동화하고 배포할 수 있지만 이 문서에는 이러한 프로세스가 설명되어 있지 않습니다.

  • 개발에 사용되는 "원본" 작업 영역은 Azure Synapse Studio에서 Git 리포지토리로 구성되어야 합니다. 자세한 내용은 Azure Synapse Studio의 소스 제어를 참조하세요.

  • 배포할 빈 작업 영역을 설정합니다.

    1. 새 Azure Synapse 작업 영역을 만듭니다.
    2. 서비스 주체에게 새 Synapse 작업 영역에 다음 권한을 부여합니다.
      • Microsoft.Synapse/workspaces/integrationruntimes/write
      • Microsoft.Synapse/workspaces/operationResults/read
      • Microsoft.Synapse/workspaces/read
    3. 작업 영역에서 Git 리포지토리 연결을 구성하지 마세요.
    4. Azure Synapse 작업 영역에서 Studio>관리>액세스 제어로 이동합니다. 4. Azure Synapse 작업 영역에서 Studio > 관리 > 액세스 제어로 이동합니다. “Synapse 아티팩트 게시자”를 서비스 주체에 할당합니다. 배포 파이프라인이 관리형 프라이빗 엔드포인트를 배포해야 하는 경우 대신 “Synapse 관리자”를 할당합니다.
    5. 연결 정보가 Azure Key Vault에 저장되어 있는 연결된 서비스를 사용하는 경우 다른 환경에 대해 별도의 키 자격 증명 모음을 유지하는 것이 좋습니다. 또한 각각의 키 자격 증명 모음에 대해 개별 권한 수준을 구성할 수도 있습니다. 예를 들어 팀 멤버에게 프로덕션 비밀에 대한 사용 권한을 부여하지 않을 수 있습니다. 이 접근 방식을 따를 경우 모든 단계에서 동일한 비밀 이름을 유지하는 것이 좋습니다. 동일한 비밀 이름을 유지하는 경우, 별도의 매개 변수인 키 자격 증명 모음 이름이 유일하게 변경되므로 CI/CD 환경에서 각 연결 문자열을 매개 변수화할 필요가 없습니다.

기타 필수 구성 요소

  • Spark 풀 및 자체 호스팅 통합 런타임은 작업 영역 배포 작업에서 생성되지 않습니다. 자체 호스팅 통합 런타임을 사용하는 연결된 서비스가 있는 경우 새 작업 영역에서 수동으로 런타임을 만듭니다.
  • 개발 작업 영역의 항목이 특정 풀에 연결된 경우, 매개 변수 파일에서 대상 작업 영역의 풀에 대해 동일한 이름을 만들거나 매개 변수화해야 합니다.
  • 배포를 시도할 때 프로비전된 SQL 풀이 일시 중지되면 배포가 실패할 수 있습니다.

자세한 내용은 Azure Synapse Analytics의 CI CD 4부 - 릴리스 파이프라인를 참조하세요.

Azure DevOps에서 릴리스 파이프라인 설정

이 섹션에서는 Azure DevOps에서 Azure Synapse 작업 영역을 배포하는 방법을 알아봅니다.

  1. Azure DevOps에서 릴리스에 대해 만든 프로젝트를 엽니다.

  2. 왼쪽 메뉴에서 파이프라인>릴리스를 선택합니다.

    Screenshot that shows selecting Pipelines and then Releases on the Azure DevOps menu.

  3. 새 파이프라인을 선택합니다. 기존 파이프라인이 있으면 새로 만들기>새 릴리스 파이프라인을 선택합니다.

  4. 빈 작업 템플릿을 선택합니다.

    Screenshot that shows selecting the Empty job template.

  5. 스테이지 이름에 사용자 환경의 이름을 입력합니다.

  6. 아티팩트 추가를 선택한 다음 개발 환경에서 Azure Synapse Studio를 사용하여 구성된 Git 리포지토리를 선택합니다. 풀 및 작업 영역 ARM 템플릿을 관리하는 Git 리포지토리를 선택합니다. GitHub를 원본으로 사용하는 경우 GitHub 계정 및 풀 리포지토리에 대한 서비스 연결을 만듭니다. 자세한 내용은 서비스 연결을 참조하세요.

    Screenshot that shows selecting GitHub to add a publish branch for a new artifact.

  7. 리소스 ARM 템플릿 분기를 선택합니다. 기본 버전의 경우 기본 분기에서 최신 버전을 선택합니다.

    Screenshot that shows setting the resource ARM template branch.

  8. 아티팩트 기본 분기의 경우 리포지토리 게시 분기 또는 Synapse 아티팩트가 포함된 다른 게시가 아닌 분기를 선택합니다. 기본적으로 게시 분기는 workspace_publish입니다. 기본 버전의 경우 기본 분기에서 최신 버전을 선택합니다.

    Screenshot that shows setting the artifacts branch.

리소스 생성 및 업데이트를 위한 ARM 템플릿의 스테이지 작업 설정

Azure Synapse 작업 영역, Spark 및 SQL 풀 또는 키 자격 증명 모음과 같은 리소스를 배포하는 ARM 템플릿이 있는 경우 해당 리소스를 만들거나 업데이트하는 Azure Resource Manager 배포 작업을 추가합니다.

  1. 단계 보기에서 단계 작업 보기를 선택합니다.

    Screenshot that shows setting the stage view.

  2. 새 작업을 만듭니다. ARM 템플릿 배포를 검색한 후 추가를 선택합니다.

  3. 배포 작업 탭에서 작업 영역에 대한 구독, 리소스 그룹 및 위치를 선택합니다. 필요한 경우 자격 증명을 제공합니다.

  4. 작업에서 리소스 그룹 만들기 또는 업데이트를 선택합니다.

  5. 템플릿에서 줄임표 단추(...)를 선택합니다. 작업 영역의 ARM 템플릿으로 이동합니다.

  6. 템플릿 매개 변수에서 를 선택하여 매개 변수 파일을 선택합니다.

    Screenshot that shows the: workspace and pools deploy.

  7. 템플릿 매개 변수 재정의에서 를 선택한 다음 작업 영역에 사용할 매개 변수 값을 입력합니다.

  8. 배포 모드에서 증분을 선택합니다.

  9. (선택 사항) 권한 부여 및 업데이트 작업 영역 역할 할당에 대해 Azure PowerShell을 추가합니다. 릴리스 파이프라인을 사용하여 Azure Synapse 작업 영역을 만드는 경우 파이프라인의 서비스 주체가 기본 작업 영역 관리자로 추가됩니다. PowerShell을 실행하여 다른 계정에 작업 영역에 대한 액세스 권한을 부여할 수 있습니다.

    Screenshot that demonstrates running a PowerShell script to grant permissions.

Warning

전체 배포 모드에서는 새 ARM 템플릿에 지정되지 않은 리소스 그룹의 리소스가 삭제됩니다. 자세한 내용은 Azure Resource Manager 배포 모드를 참조하세요.

Azure Synapse 아티팩트 배포에 대한 스테이지 작업 설정

Synapse 작업 영역 배포 확장을 사용하여 Azure Synapse 작업 영역에 다른 항목을 배포합니다. 배포할 수 있는 항목에는 데이터 세트, SQL 스크립트 및 Notebook, Spark 작업 정의, 통합 런타임, 데이터 흐름, 자격 증명 및 작업 영역의 기타 아티팩트가 포함됩니다.

배포 확장 설치 및 추가

  1. Visual Studio Marketplace에서 확장을 검색하여 가져옵니다.

    Screenshot that shows the Synapse workspace deployment extension as it appears in Visual Studio Marketplace.

  2. 확장을 설치할 Azure DevOps 조직을 선택합니다.

    Screenshot that shows selecting an organization in which to install the Synapse workspace deployment extension.

  3. Azure DevOps 파이프라인의 서비스 주체가 Subscription 권한이 부여되고 작업 영역의 Synapse 작업 영역 관리자로 할당되었는지 확인합니다.

  4. 새 작업을 만들려면 Synapse 작업 영역 배포를 검색한 다음 추가를 선택합니다.

    Screenshot that shows searching for Synapse workspace deployment to create a task.

배포 작업 구성

배포 작업은 3가지 유형의 작업 즉, 유효성 검사, 배포 및 유효성 검사, 배포를 지원합니다.

참고 항목

이 작업 영역 배포 확장은 이전 버전과 호환되지 않습니다. 최신 버전이 설치되어 있고 사용되는지 확인하세요. Azure DevOps의 개요 및 GitHub 작업의 최신 버전에서 릴리스 정보를 읽을 수 있습니다.

유효성 검사는 작업을 사용하여 게시되지 않은 분기의 Synapse 아티팩트의 유효성을 검사하고 작업 영역 템플릿 및 매개 변수 템플릿 파일을 생성하는 것입니다. 유효성 검사 작업은 YAML 파이프라인에서만 작동합니다. 샘플 YAML 파일은 다음과 같습니다.

   pool:
     vmImage: ubuntu-latest

   resources:
     repositories:
     - repository: <repository name>
       type: git
       name: <name>
       ref: <user/collaboration branch>

   steps:
     - checkout: <name>
     - task: Synapse workspace deployment@2
       continueOnError: true    
       inputs:
         operation: 'validate'
         ArtifactsFolder: '$(System.DefaultWorkingDirectory)/ArtifactFolder'
         TargetWorkspaceName: '<target workspace name>'    

유효성 검사 및 배포를 사용하여 아티팩트 루트 폴더로 게시되지 않은 분기에서 작업 영역을 직접 배포할 수 있습니다.

참고 항목

작업 유형이 유효성 검사 또는 유효성 검사 및 배포로 선택된 경우 배포 작업은 이 엔드포인트 web.azuresynapse.net에서 종속성 JS 파일을 다운로드해야 합니다. VM에서 네트워크 정책이 사용하도록 설정된 경우 엔드포인트 web.azuresynapse.net이 허용되는지 확인하세요.

유효성 검사 및 배포 작업은 클래식 및 YAML 파이프라인 모두에서 작동합니다. 샘플 YAML 파일은 다음과 같습니다.

   pool:
     vmImage: ubuntu-latest

   resources:
     repositories:
     - repository: <repository name>
       type: git
       name: <name>
       ref: <user/collaboration branch>

   steps:
     - checkout: <name>
     - task: Synapse workspace deployment@2
       continueOnError: true    
       inputs:
         operation: 'validateDeploy'
         ArtifactsFolder: '$(System.DefaultWorkingDirectory)/ArtifactFolder'
         TargetWorkspaceName: 'target workspace name'
         azureSubscription: 'target Azure resource manager connection name'
         ResourceGroupName: 'target workspace resource group'
         DeleteArtifactsNotInTemplate: true
         OverrideArmParameters: >
           -key1 value1
           -key2 value2

배포 작업 배포의 입력에는 작업 영역 게시 분기에 게시한 후 또는 유효성 검사 후에 만들 수 있는 Synapse 작업 영역 템플릿 및 매개 변수 템플릿이 포함됩니다. 버전 1.x와 동일합니다.

사용 사례에 따라 작업 유형을 선택할 수 있습니다. 다음 파트는 배포의 예제입니다.

  1. 작업에서 작업 유형을 배포로 선택합니다.

    Screenshot that shows the selection of operation deploy.

  2. 작업의 템플릿 옆에서 를 선택하여 템플릿 파일을 선택합니다.

  3. 템플릿 매개 변수 옆에서 를 선택하여 매개 변수 파일을 선택합니다.

  4. 작업 영역에 대한 연결, 리소스 그룹 및 이름을 선택합니다.

  5. 템플릿 매개 변수 재정의 옆에서 를 선택합니다. 연결된 서비스에 사용되는 연결 문자열 및 계정 키를 포함하여 작업 영역에 사용할 매개 변수 값을 입력합니다. 자세한 정보는 Azure Synapse Analytics의 CI/CD를 참조하세요.

    Screenshot that shows setting up the Synapse deployment task for the workspace.

  6. 관리형 프라이빗 엔드포인트의 배포는 버전 2.x에서만 지원됩니다. 올바른 버전을 선택하고 템플릿에서 관리형 프라이빗 엔드포인트 배포를 확인하세요.

    Screenshot that shows selecting version 2.x to deploy private endpoints with synapse deployment task.

  7. 트리거를 관리하려면 트리거 토글을 사용하여 배포 전에 트리거를 중지할 수 있습니다. 또한 배포 작업 후에 트리거를 다시 시작하는 작업을 추가할 수도 있습니다.

    Screenshot that shows managing triggers before and after deployment.

Important

CI/CD 시나리오에서는 서로 다른 환경에서의 통합 런타임 형식이 동일해야 합니다. 예를 들어 개발 환경에 자체 호스팅 통합 런타임이 있는 경우 테스트 및 프로덕션과 같은 다른 환경에서 동일한 통합 런타임을 자체 호스트해야 합니다. 마찬가지로 여러 스테이지에서 통합 런타임을 공유하는 경우 개발, 테스트, 프로덕션과 같은 모든 환경에서 통합 런타임을 연결하고 자체 호스트해야 합니다.

배포용 릴리스 만들기

모든 변경 내용을 저장한 후 릴리스 만들기를 선택하여 수동으로 릴리스를 만들 수 있습니다. 릴리스 만들기를 자동화하는 방법을 알아보려면 Azure DevOps 릴리스 트리거를 참조하세요.

Screenshot that shows the New release pipeline pane, with Create release highlighted.

GitHub Actions에서 릴리스 설정

이 섹션에서는 Azure Synapse 작업 영역 배포에 GitHub Actions를 사용하여 GitHub 워크플로를 생성하는 방법을 설명합니다.

GitHub Action for Azure Resource Manager 템플릿을 사용하여 Azure에 작업 영역 및 컴퓨팅 풀에 대한 ARM 템플릿을 자동으로 배포할 수 있습니다.

워크플로 파일

리포지토리의 /.github/workflows/ 경로에 있는 YAML(.yml) 파일에서 GitHub Actions 워크플로를 정의합니다. 이 정의는 워크플로를 구성하는 다양한 단계와 매개 변수를 포함합니다.

.yml 파일에는 두 개의 섹션이 있습니다.

섹션 작업
인증 1. 서비스 주체를 정의합니다.
2. GitHub 비밀을 만듭니다.
Deploy 작업 영역 아티팩트를 배포합니다.

GitHub Actions 비밀 구성

GitHub Actions 비밀은 암호화된 환경 변수입니다. 이 리포지토리에 대한 Collaborator 권한이 있는 모든 사용자는 이러한 비밀을 사용하여 리포지토리에서 Actions와 상호 작용할 수 있습니다.

  1. GitHub 리포지토리에서 설정 탭을 선택한 다음 비밀>새 리포지토리 비밀을 선택합니다.

    Screenshot that shows the GitHub elements to select to create a new repository secret.

  2. 배포에 서비스 주체를 사용하는 경우 클라이언트 ID에 대한 새 비밀을 추가하고 새 클라이언트 비밀을 추가합니다. 구독 ID 및 테넌트 ID를 비밀로 저장하도록 선택할 수도 있습니다.

워크플로 추가

GitHub 리포지토리에서 작업으로 이동합니다.

  1. 워크플로 직접 설정을 선택합니다.

  2. 워크플로 파일에서 on: 섹션 뒤에 있는 모든 항목을 삭제합니다. 예를 들어 나머지 워크플로는 다음 예제와 같습니다.

    name: CI
    
    on:
    push:
        branches: [ master ]
    pull_request:
        branches: [ master ]
    
  3. 워크플로 이름을 바꿉니다. Marketplace 탭에서 Synapse 작업 영역 배포 작업을 검색하여 추가합니다.

    Screenshot that shows searching for the Synapse workspace deployment task on the Marketplace tab.

  4. 필요한 값 및 작업 영역 템플릿을 설정합니다.

    name: workspace deployment
    
    on:
        push:
            branches: [ publish_branch ]
    jobs:
        release:
            # You also can use the self-hosted runners.
            runs-on: windows-latest
            steps:
            # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it.
            - uses: actions/checkout@v2
            - uses: azure/synapse-workspace-deployment@release-1.0
            with:
              TargetWorkspaceName: 'target workspace name'
              TemplateFile: './path of the TemplateForWorkspace.json'
              ParametersFile: './path of the TemplateParametersForWorkspace.json'
              OverrideArmParameters: './path of the parameters.yaml'
              environment: 'Azure Public'
              resourceGroup: 'target workspace resource group'
              clientId: ${{secrets.CLIENTID}}
              clientSecret:  ${{secrets.CLIENTSECRET}}
              subscriptionId: 'subscriptionId of the target workspace'
              tenantId: 'tenantId'
              DeleteArtifactsNotInTemplate: 'true'
              managedIdentity: 'False'
    
  5. 변경 내용을 커밋할 준비가 완료되었습니다. 커밋 시작을 선택하고 제목을 입력한 다음, 설명(선택 사항)을 추가합니다. 그런 다음 새 파일 커밋을 선택합니다.

    Screenshot that shows committing the workflow in GitHub.

    파일은 리포지토리의 .github/workflows 폴더에 있습니다.

    참고 항목

    관리 ID는 Azure의 자체 호스팅 VM에서만 지원됩니다. 실행기를 자체 호스팅으로 설정해야 합니다. VM에 시스템 할당 관리 ID를 사용하도록 설정하고, Azure Synapse Studio에 Synapse 관리자로 추가합니다.

배포 검토

  1. GitHub 리포지토리에서 작업으로 이동합니다.

  2. 워크플로 실행에 대한 자세한 로그를 확인하려면 첫 번째 결과를 엽니다.

    Screenshot that shows selecting the workspace deployment log in the repository Actions in GitHub.

작업 영역 템플릿에서 사용자 지정 매개 변수 만들기

자동화된 CI/CD를 사용 중이고 배포 중에 일부 속성을 변경하려고 하지만 기본적으로 속성이 매개 변수화되지 않은 경우 기본 매개 변수 템플릿을 재정의할 수 있습니다.

기본 매개 변수 템플릿을 재정의하려면 Git 분기의 루트 폴더에 template-parameters-definition.json이라는 사용자 지정 매개 변수 템플릿을 만듭니다. 정확하게 이 파일 이름을 사용해야 합니다. Azure Synapse 작업 영역이 협업 분기에서 게시되거나 배포 태스크가 다른 분기의 아티팩트 유효성을 검사하는 경우 이 파일을 읽고 해당 구성을 사용하여 매개 변수를 생성합니다. Azure Synapse 작업 영역은 이 파일을 찾을 수 없는 경우 기본 매개 변수 템플릿을 사용합니다.

사용자 지정 매개 변수 구문

다음 지침을 사용하여 사용자 지정 매개 변수 파일을 만들 수 있습니다.

  • 관련 엔터티 형식 아래에 속성 경로를 입력합니다.
  • 속성 이름을 *로 설정하면 해당 속성 아래의 모든 속성(재귀적이 아닌 첫 번째 수준만)을 매개 변수화합니다. 이 구성에 예외를 설정할 수 있습니다.
  • 문자열로 속성의 값을 설정하면 속성을 매개 변수화하려고 함을 나타냅니다. <action>:<name>:<stype> 형식을 사용합니다.
    • <action>은 다음 문자 중 하나일 수 있습니다.
      • =는 현재 값을 매개 변수의 기본값으로 유지함을 의미합니다.
      • -는 매개 변수의 기본값을 유지하지 않음을 의미합니다.
      • |는 연결 문자열 또는 키와 관련한 Azure Key Vault의 비밀에 대한 특수 사례입니다.
    • <name>은 매개 변수의 이름입니다. 비어 있는 경우 속성의 이름을 사용합니다. 값이 - 문자로 시작하는 경우에는 이름이 짧아집니다. 예를 들어 AzureStorage1_properties_typeProperties_connectionString에서 AzureStorage1_connectionString으로 줄어듭니다.
    • <stype>은 매개 변수의 형식입니다. <stype>이 비어 있는 경우 기본 형식은 string입니다. 지원되는 값은 string, securestring, int, bool, object, secureobject, array입니다.
  • 파일에서 배열을 지정하면 템플릿의 일치하는 속성이 배열임을 나타냅니다. Azure Synapse는 지정된 정의를 사용하여 배열에서 모든 개체를 반복합니다. 두 번째 개체, 문자열은 각 반복에 대한 매개 변수의 이름으로 사용되는 속성의 이름이 됩니다.
  • 정의는 리소스 인스턴스와 관련될 수 없습니다. 모든 정의는 해당 형식의 모든 리소스에 적용됩니다.
  • 기본적으로 Key Vault 비밀과 같은 모든 보안 문자열과 연결 문자열, 키, 토큰 등의 보안 문자열은 매개 변수화됩니다.

매개 변수 템플릿 정의 예제

매개 변수 템플릿 정의의 예제는 다음과 같습니다.

{
    "Microsoft.Synapse/workspaces/notebooks": {
        "properties": {
            "bigDataPool": {
                "referenceName": "="
            }
        }
    },
    "Microsoft.Synapse/workspaces/sqlscripts": {
        "properties": {
            "content": {
                "currentConnection": {
                    "*": "-"
                }
            }
        }
    },
    "Microsoft.Synapse/workspaces/pipelines": {
        "properties": {
            "activities": [{
                "typeProperties": {
                    "waitTimeInSeconds": "-::int",
                    "headers": "=::object",
                    "activities": [
                        {
                            "typeProperties": {
                                "url": "-:-webUrl:string"
                            }
                        }
                    ]
                }
            }]
        }
    },
    "Microsoft.Synapse/workspaces/integrationRuntimes": {
        "properties": {
            "typeProperties": {
                "*": "="
            }
        }
    },
    "Microsoft.Synapse/workspaces/triggers": {
        "properties": {
            "typeProperties": {
                "recurrence": {
                    "*": "=",
                    "interval": "=:triggerSuffix:int",
                    "frequency": "=:-freq"
                },
                "maxConcurrency": "="
            }
        }
    },
    "Microsoft.Synapse/workspaces/linkedServices": {
        "*": {
            "properties": {
                "typeProperties": {
                    "accountName": "=",
                    "username": "=",
                    "connectionString": "|:-connectionString:secureString",
                    "secretAccessKey": "|"
                }
            }
        },
        "AzureDataLakeStore": {
            "properties": {
                "typeProperties": {
                    "dataLakeStoreUri": "="
                }
            }
        },
        "AzureKeyVault": {
            "properties": {
                "typeProperties": {
                    "baseUrl": "|:baseUrl:secureString"
                },
                "parameters": {
                    "KeyVaultURL": {
                        "type": "=",
                        "defaultValue": "|:defaultValue:secureString"
                    }
                }
            }
        }
    },
    "Microsoft.Synapse/workspaces/datasets": {
        "*": {
            "properties": {
                "typeProperties": {
                    "folderPath": "=",
                    "fileName": "="
                }
            }
        }
    },
    "Microsoft.Synapse/workspaces/credentials" : {
        "properties": {
            "typeProperties": {
                "resourceId": "="
            }
        }
    }
}

다음은 리소스 종류별로 이전 템플릿이 구성되는 방식에 대한 설명입니다.

notebooks

  • properties/bigDataPool/referenceName 경로의 모든 속성은 해당 기본값을 사용하여 매개 변수화됩니다. 각 Notebook 파일에 대해 연결된 Spark 풀을 매개 변수화할 수 있습니다.

sqlscripts

  • properties/content/currentConnection 경로의 poolNamedatabaseName 속성은 템플릿에 기본값이 없는 문자열로 매개 변수화됩니다.

pipelines

  • activities/typeProperties/waitTimeInSeconds 경로에 있는 모든 속성은 매개 변수화됩니다. waitTimeInSeconds라는 코드 수준 속성(예: Wait 작업)이 있는 파이프라인의 모든 작업은 기본 이름을 가진 숫자로 매개 변수화됩니다. 이 속성은 Resource Manager 템플릿에 기본값이 없습니다. 대신 Resource Manager를 배포하는 동안 속성이 필수 입력이 됩니다.
  • headers속성(예: Web 작업에서)은 object 형식(Object)으로 매개 변수화됩니다. headers 속성은 원본 팩터리와 동일한 기본값을 갖습니다.

integrationRuntimes

  • typeProperties 경로에 있는 모든 속성은 해당 기본값을 사용하여 매개 변수화됩니다. 예를 들어 IntegrationRuntimes 형식 속성에는 computePropertiesssisProperties의 두 가지 속성이 있습니다. 두 속성 유형 모두 해당 기본값과 유형(Object)으로 만들어집니다.

triggers

  • typeProperties에서 두 속성은 매개 변수화됩니다.

    • maxConcurrency 속성은 기본값이 있으며 string 형식입니다. maxConcurrency 속성의 기본 매개 변수 이름은 <entityName>_properties_typeProperties_maxConcurrency입니다.
    • recurrence 속성도 매개 변수화됩니다. recurrence 속성 아래의 모든 속성은 기본값 및 매개 변수 이름을 사용하여 문자열로 매개 변수화하도록 설정됩니다. 단, int 형식으로 매개 변수화되는 interval 속성은 예외입니다. 매개 변수 이름에는 <entityName>_properties_typeProperties_recurrence_triggerSuffix가 접미사로 붙습니다. 마찬가지로 freq 속성은 문자열이며 문자열로 매개 변수화됩니다. 그러나 freq 속성은 기본값 없이 매개 변수화됩니다. 이름이 단축되고 접미사가 붙습니다(예: <entityName>_freq).

    참고 항목

    현재 최대 50개의 트리거가 지원됩니다.

linkedServices

  • 연결된 서비스는 고유합니다. 연결된 서비스 및 데이터 세트에는 다양한 형식이 있어 형식별로 사용자 지정할 수 있습니다. 위의 예제에서는 AzureDataLakeStore 형식의 모든 연결된 서비스에 대해 특정 템플릿이 적용됩니다. (* 문자를 사용하여 식별된) 다른 모든 항목에는 다른 템플릿이 적용됩니다.
  • connectionString 속성은 securestring 값으로 매개 변수화됩니다. 기본값은 없습니다. 매개 변수 이름은 단축되고 접미사 connectionString이 붙습니다.
  • secretAccessKey 속성은 AzureKeyVaultSecret 값으로 매개 변수화됩니다(예: Amazon S3 연결된 서비스에서). 속성이 자동으로 Azure Key Vault 비밀로 매개 변수화되고 구성된 키 자격 증명 모음에서 페치됩니다. 키 자격 증명 모음 자체를 매개 변수화할 수도 있습니다.

datasets

  • 데이터 세트의 형식을 사용자 지정할 수 있지만 명시적 *-level 구성은 필요하지 않습니다. 이전 예에서 typeProperties 아래의 모든 데이터 세트 속성은 매개 변수화됩니다.

CI/CD에 대한 모범 사례

Azure Synapse 작업 영역을 통해 Git 통합을 사용하고 개발에서 테스트, 프로덕션 순서로 변경 내용을 이동하는 CI/CD 파이프라인이 있는 경우 다음 모범 사례를 적용하는 것이 좋습니다.

  • 개발 작업 영역만 Git와 통합합니다. Git 통합을 사용하는 경우 개발 Azure Synapse 작업 영역만 Git와 통합합니다. 테스트 및 프로덕션 작업 영역에 대한 변경 내용은 CI/CD를 통해 배포되므로 Git 통합이 필요하지 않습니다.
  • 아티팩트를 마이그레이션하기 전에 풀을 준비합니다. 개발 작업 영역의 풀에 연결된 SQL 스크립트 또는 Notebook이 있는 경우 다른 환경의 풀에 동일한 이름을 사용합니다.
  • 인프라의 버전 관리를 코드 시나리오로 동기화합니다. 기술 모델에서 인프라(네트워크, 가상 머신, 부하 분산 장치 및 연결 토폴로지)를 관리하려면 DevOps 팀이 소스 코드에 사용하는 것과 동일한 버전 관리를 사용합니다.
  • Azure Data Factory 모범 사례를 검토합니다. Data Factory를 사용하는 경우 Data Factory 아티팩트 모범 사례를 참조하세요.

아티팩트 배포 문제 해결

Synapse 작업 영역 배포 작업을 사용하여 Synapse 아티팩트 배포

Azure Synapse에서는 Data Factory와 달리 아티팩트가 Resource Manager 리소스가 아닙니다. ARM 템플릿 배포 작업을 사용하여 Azure Synapse 아티팩트를 배포할 수 없습니다. 대신 Synapse 작업 영역 배포 작업을 사용하여 아티팩트를 배포하고 ARM 리소스(풀 및 작업 영역) 배포에 ARM 배포 작업을 사용합니다. 한편 이 작업은 리소스가 Microsoft.Synapse 형식인 Synapse 템플릿만 지원합니다. 또한 이 작업을 통해 사용자는 Synapse Studio에서 게시를 수동으로 클릭하지 않고도 모든 분기의 변경 내용을 자동으로 배포할 수 있습니다. 다음은 자주 발생하는 몇 가지 문제입니다.

1. 게시 실패: 작업 영역 arm 파일이 20MB를 초과함

Git 공급자에는 파일 크기 제한이 있습니다. 예를 들어 Azure DevOps에서 최대 파일 크기는 20Mb입니다. 작업 영역 템플릿 파일 크기가 20Mb를 초과하면 작업 영역 템플릿 파일이 생성되고 Git에 동기화되는 Synapse Studio에서 변경 내용을 게시할 때 이 오류가 발생합니다. 이 문제를 해결하려면 유효성 검사 또는 유효성 검사 및 배포 작업과 함께 Synapse 배포 태스크를 사용하여 작업 영역 템플릿 파일을 Synapse Studio에서 수동으로 게시하지 않고도 파이프라인 에이전트에 직접 저장할 수 있습니다.

2. 릴리스의 예기치 않은 토큰 오류

매개 변수 파일에 이스케이프되지 않은 매개 변수 값이 있는 경우 릴리스 파이프라인은 파일을 구문 분석하지 못하고 unexpected token 오류를 생성합니다. 매개 변수를 재정의하거나 Key Vault를 사용하여 매개 변수 값을 검색하는 것이 좋습니다. 이중 이스케이프 문자를 사용하여 문제를 해결할 수도 있습니다.

3. 통합 런타임 배포 실패

관리형 Vnet 지원 작업 영역에서 생성된 작업 영역 템플릿이 있고 일반 작업 영역에 배포하려는 경우나 그 반대의 경우에도 이 오류가 발생합니다.

4. 값을 구문 분석하는 동안 예기치 않은 문자 발생

템플릿 파일에서 템플릿을 구문 분석할 수 없습니다. 백슬래시를 이스케이프하여 시도합니다. 예: \\Test01\Test

5. 작업 영역 정보를 페치하지 못함, 찾을 수 없음

대상 작업 영역 정보가 올바르게 구성되지 않았습니다. 만든 서비스 연결의 범위가 작업 영역이 있는 리소스 그룹으로 지정되어 있는지 확인하세요.

6. 아티팩트 삭제 실패

확장은 게시 분기에 있는 아티팩트와 템플릿을 비교하고 차이점에 따라 아티팩트를 삭제합니다. 게시 분기에 있는 아티팩트를 삭제하려 하지 않고 일부 다른 아티팩트에 관련 참조 또는 종속성이 있는지 확인하세요.

8. 오류로 배포 실패: json 위치 0

템플릿을 수동으로 업데이트하려고 하면 이 오류가 발생합니다. 템플릿을 수동으로 편집하지 않았는지 확인하세요.

9. 잘못된 참조로 인해 문서 만들기 또는 업데이트 실패

Synapse의 아티팩트가 다른 아티팩트에서 참조될 수 있습니다. 아티팩트에서 참조되는 특성을 매개 변수화한 경우 null이 아닌 올바른 값을 제공해야 합니다.

10. Notebook 배포에서 배포 상태를 페치하지 못함

배포하려는 Notebook은 작업 영역 템플릿 파일의 Spark 풀에 연결되지만 배포에서 풀은 대상 작업 영역에 없습니다. 풀 이름을 매개 변수화하지 않는 경우 환경 간에 풀에 동일한 이름을 사용하는지 확인하세요.