継続的インテグレーションおよびデリバリー (CI/CD) の自動化配信

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

Data Factory in Microsoft Fabric は、よりシンプルなアーキテクチャ、組み込みの AI、および新機能を備えた次世代のAzure Data Factoryです。 データ統合を初めて使用する場合は、Fabric Data Factory から始めます。 既存の ADF ワークロードをFabricにアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。

Synapse Analytics も CI/CD をサポートしています。 詳しくは、Synapse Analytics の CI/CD に関するドキュメントを参照してください。

概要

継続的インテグレーションは、コードベースに対して行われた変更を自動的にテストするプラクティスです。 できるだけ早く、継続的デリバリーで、継続的インテグレーションの間に発生したテストに続けて、変更をステージングまたは実稼働システムにプッシュします。

Azure Data Factoryでは、CI/CD は、開発、テスト、運用などの 1 つの環境から別の環境に Data Factory パイプラインを移動することを意味します。 Data Factory では、Azure Resource Manager テンプレート (ARM テンプレート) を使用して、パイプライン、データセット、データ フローなど、さまざまな Data Factory エンティティの構成を格納します。

データ ファクトリを別の環境に昇格させる手法が 2 つ提案されています。

  • Data FactoryとAzure Pipelinesの統合による自動展開。
  • Data Factory ユーザー エクスペリエンスと Azure Resource Manager の統合を使用して ARM テンプレートを手動でアップロードする。

詳細については、Azure Data Factory における継続的インテグレーションとデリバリーを参照してください。

この記事では、継続的なデプロイの機能強化と CI/CD の自動発行機能に焦点を当てます。

継続的なデプロイメントの機能強化

自動発行機能では、Data Factory のユーザー エクスペリエンスの [すべて検証] および [Export ARM template](ARM テンプレートのエクスポート) 機能を利用して、一般公開された npm パッケージ @microsoft/azure-data-factory-utilities 経由でロジックを使用できるようにします。 このため、Data Factory UI にアクセスして手動でボタンを選択しなくても、プログラムを使用してこれらのアクションをトリガーできます。 この機能により、CI/CDパイプラインにより真の継続的統合体験が提供されます。

パッケージ Node.js 古いバージョンとの互換性のなさによるエラーを避けるために、必ずバージョン20.xおよびその互換バージョンを使用してください。

現在の CI/CD フロー

  1. 各ユーザーは、プライベート ブランチに変更を加えます。
  2. メインへのプッシュは許可されていません。 ユーザーは、プル要求を作成して変更を加える必要があります。
  3. ユーザーは、Data Factory UI を読み込み、 [発行] をクリックして Data Factory に変更をデプロイし、発行ブランチに ARM テンプレートを生成する必要があります。
  4. DevOps リリース パイプラインは、新しいリリースを作成し、新しい変更が発行ブランチにプッシュされるたびに ARM テンプレートをデプロイするように構成されています。

現在の CI/CD フローを示す図。

手動ステップ

現在の CI/CD フローでは、ユーザー エクスペリエンスが ARM テンプレートの作成に介在します。 その結果、ユーザーは Data Factory UI にアクセスし、 [発行] を手動で選択して ARM テンプレートの生成を開始し、発行ブランチにドロップする必要があります。

新しい CI/CD フロー

  1. 各ユーザーは、プライベート ブランチに変更を加えます。
  2. メインへのプッシュは許可されていません。 ユーザーは、プル要求を作成して変更を加える必要があります。
  3. Azure DevOpsパイプラインのビルドは、新しいコミットがメインに行われるたびにトリガーされます。 検証が成功した場合にはリソースを検証し、成果物として ARM テンプレートを生成します。
  4. DevOps リリース パイプラインは、新しいリリースを作成し、新しいビルドが利用可能になるたびに ARM テンプレートをデプロイするように構成されています。

新しい CI/CD フローを示す図。

変更箇所

  • これでDevOpsのビルドパイプラインを使ったビルドプロセスが手に入ります。
  • ビルドパイプラインはADFUtilities (@microsoft/azure-data-factory-utilities) npmパッケージを使用し、すべてのリソースを検証しARMテンプレートを生成します。 これらのテンプレートは単独にすることも、リンクすることもできます。
  • ビルドパイプラインはData Factoryリソースを検証し、Data FactoryのUI(公開 ボタン)ではなくARMテンプレートを生成します。
  • DevOpsリリース定義は、Gitのアーティファクトではなくこの新しいビルドパイプラインを消費します。

引き続き既存のメカニズム (adf_publish ブランチ) を使用することも、新しいフローを使用することもできます。 両方ともサポートされています。

パッケージの概要

現在、パッケージで 2 つのコマンドが使用できます。

  • ARM テンプレートのエクスポート
  • 検証

ARM テンプレートのエクスポート

npm run build export <rootFolder> <factoryId> [outputFolder] を実行して、特定のフォルダーのリソースを使用して ARM テンプレートをエクスポートします。 このコマンドはARMテンプレートを生成する前に検証チェックも実行します。 以下は testResourceGroupというリソースグループを使った例です:

npm run build export C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory ArmTemplateOutput
  • RootFolder は、Data Factory リソースが配置されている場所を表す必須フィールドです。
  • FactoryId は、Data Factory リソース ID を /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName> 形式で表す必須フィールドです。
  • OutputFolder は、生成された ARM テンプレートを保存するための相対パスを指定する省略可能なパラメーターです。

更新されたトリガーのみを停止・開始できる機能は一般的に利用可能で、前のコマンドに統合されています。

生成された ARM テンプレートは、ファクトリのライブ バージョンに発行されていません。 デプロイは CI/CD パイプラインを使用して行う必要があります。

検証

npm run build validate <rootFolder> <factoryId> を実行して、特定のフォルダーのすべてのリソースを検証します。 次に例を示します。

npm run build validate C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory
  • RootFolder は、Data Factory リソースが配置されている場所を表す必須フィールドです。
  • FactoryId は、Data Factory リソース ID を /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName> 形式で表す必須フィールドです。

Azure パイプラインを作成する

npmパッケージはさまざまな方法で利用可能ですが、主な利点の一つはAzure Pipelinesを通じて利用できることです。 各コラボレーションブランチへのマージで、まずすべてのコードを検証し、その後ARMテンプレートを ビルドアーティファクト にエクスポートし、リリースパイプラインで消費されるパイプラインをトリガーできます。 現在のCI/CDプロセスと異なる点は、 リリースパイプラインを既存の adf_publish ブランチではなくこのアーティファクトに向けることです。

作業を開始するには、次の手順に従います。

  1. Azure DevOps プロジェクトを開き、Pipelines に移動します。 [新しいパイプライン] を選択します。

    [新しいパイプライン] ボタンを示すスクリーンショット。

  2. パイプライン YAML スクリプトを保存するリポジトリを選択します。 データをData Factoryのリソースと同じリポジトリ内のビルドフォルダに保存してください。 次の例で示すように、このリポジトリ内に、パッケージ名が含まれている package.json ファイルがあることを確認します。

    {
        "scripts":{
            "build":"node node_modules/@microsoft/azure-data-factory-utilities/lib/index"
        },
        "dependencies":{
            "@microsoft/azure-data-factory-utilities":"^1.0.0"
        }
    } 
    
  3. [スタート パイプライン] を選択します。 次の例で示すように、YAML ファイルをアップロードまたはマージした場合は、それを直接ポイントして編集することもできます。

    スタート パイプラインを示すスクリーンショット。

    # Sample YAML file to validate and export an ARM template into a build artifact
    # Requires a package.json file located in the target repository
    
    trigger:
    - main #collaboration branch
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    
    # Installs Node and the npm packages saved in your package.json file in the build
    
    - task: UseNode@1
      inputs:
        version: '20.x'
      displayName: 'Install Node.js'
    
    - task: Npm@1
      inputs:
        command: 'install'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        verbose: true
      displayName: 'Install npm package'
    
    # Validates all of the Data Factory resources in the repository. You'll get the same validation errors as when "Validate All" is selected.
    # Enter the appropriate subscription and name for the source factory. Either of the "Validate" or "Validate and Generate ARM template" options are required to perform validation. Running both is unnecessary.
    
    - task: Npm@1
      inputs:
        command: 'custom'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        customCommand: 'run build validate $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name>'
      displayName: 'Validate'
    
    # Validate and then generate the ARM template into the destination folder, which is the same as selecting "Publish" from the UX.
    # The ARM template generated isn't published to the live version of the factory. Deployment should be done by using a CI/CD pipeline. 
    
    - task: Npm@1
      inputs:
        command: 'custom'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        customCommand: 'run build export $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name> "ArmTemplate"'
    #For using preview that allows you to only stop/ start triggers that are modified, please comment out the above line and uncomment the below line. Make sure the package.json contains the build-preview command. 
     #customCommand: 'run build-preview export $(Build.Repository.LocalPath) /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/GartnerMQ2021/providers/Microsoft.DataFactory/factories/Dev-GartnerMQ2021-DataFactory "ArmTemplate"'
      displayName: 'Validate and Generate ARM template'
    
    # Publish the artifact to be used as a source for a release pipeline.
    
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>/ArmTemplate' #replace with the package.json folder
        artifact: 'ArmTemplates'
        publishLocation: 'pipeline'
    
  4. YAML コードを入力します。 YAMLファイルを出発点として使いましょう。

  5. 保存して実行します。 YAML を使用した場合、main ブランチが更新されるたびにトリガーされます。 実行が成功し、パイプラインの公開アーティファクトに ArmTemplates アーティファクトが生成されたことを確認します。

生成されたアーティファクトにはトリガーの事前・展開後のスクリプトがすでに含まれているので、手動で追加する必要はありません。 しかし、デプロイ時には、提供されたスクリプトを実行するためにトリガーの 停止・開始に関するドキュメント を参照する必要があります。

Data Factoryにおける継続的統合とデリバリーについて詳しく学びましょう:Azure Data Factoryにおける継続的インテグレーションとデリバリー