6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

fabric-cicd と Azure DevOps Pipeline を使用した Microsoft Fabric CI/CD チュートリアル

6
Last updated at Posted at 2026-06-18

はじめに

先日の登壇で紹介した、fabric-cicd を使用した Microsoft Fabric ワークスペースの CI/CD チュートリアルを作成しました。

fabric-cicd を利用することで、Fabric ワークスペースのアイテムを単にコピーするだけでなく、環境差分を吸収しながら、Azure DevOps や GitHub のワークフローに組み込んでデプロイできます。

特に、次の3点が大きなメリットです。

  • 柔軟なパラメーター設定による環境差分の吸収
    開発環境と本番環境で異なるワークスペース ID、Lakehouse ID、接続先などを、デプロイ時に置き換えることができます。Fabric の配置パイプラインにおける配置ルールや Variable Library だけでは対応しづらい環境依存値もカバーできます。

  • Azure DevOps などを利用したワークフロー管理
    Pipeline、Environment、承認フロー、変数グループなどを組み合わせることで、デプロイ手順を管理しやすくなります。

  • プログラムベースのデプロイによる拡張性
    Python スクリプトとしてデプロイ処理を実装できるため、標準機能だけでは対応しづらい処理も柔軟に組み込めます。

この記事では、開発用の Fabric ワークスペースで作成した Notebook、Lakehouse、Variable Library、Semantic Model、Report などのアイテムを、Azure DevOps Pipeline から本番用ワークスペースへデプロイする流れをハンズオン形式で紹介します。

使用するサンプルリポジトリはこちらです。

発表内容:

この記事でやること

このハンズオンでは、次の流れを実施します。

  1. Azure DevOps Repos にサンプルリポジトリをインポートする
  2. 開発用ワークスペースでの開発(Notebook、Lakehouse、Semantic Model、Report)
  3. Azure DevOps Pipeline から本番用ワークスペースへデプロイする
  4. parameter.yml を使用して、環境依存の ID や OneLake URL を本番用に置き換える
  5. 再デプロイし、本番用ワークスペースで Notebook と Report が動作することを確認する

構成イメージ

今回の構成は次のようになります。

Azure DevOps Repos
  └── workspaces/<workspace name>/src
        ├── Notebook
        ├── Lakehouse
        ├── Variable Library
        ├── Semantic Model
        └── Report
                │
                │ Git 統合
                ▼
Fabric workspace: DEV
                │
                │ Azure DevOps Pipeline + fabric-cicd
                ▼
Fabric workspace: PROD

開発用ワークスペースは Fabric の Git 統合で Azure DevOps Repos と同期します。

一方、本番用ワークスペースは Git 統合ではなく、Azure DevOps Pipeline から fabric-cicd を実行してデプロイします。

事前準備

このチュートリアルでは、次の環境が必要です。

項目 用途
Azure DevOps Repos と Pipeline を使用します
Azure サブスクリプション Azure DevOps のサービス接続を作成するために使用します
Microsoft Fabric 環境 開発用・本番用ワークスペースを作成します
Fabric 管理者によるテナント設定 サービスプリンシパルや Git 統合に必要な設定を有効化します

Fabric テナント設定

Fabric 管理ポータルで、少なくとも次の設定を確認します。

  • サービスプリンシパルが Fabric API にアクセスできるようにする
    image.png

  • Azure DevOps Git 統合で必要な場合、外部リージョンへの Git エクスポートを許可する
    image.png

特に、Azure DevOps のリポジトリと Fabric テナントのリージョンが異なる場合は、Git へのエクスポートに関するクロスリージョン設定が必要になります(Azure DevOps には Japan East リージョンがないため)

サンプルリポジトリの構成

今回使用するテンプレートリポジトリは、次のような構成になっています。

.
├── .azuredevops/
│   ├── pipelines/
│   │   ├── deploy-ws-holws-prod.yml
│   │   └── templates/
│   │       └── jobs/
│   │           └── deploy-fabric-workspace.yml
│   └── variable-groups/
│       └── workspace-deploy/
│           └── template.vars
├── .deploy/
│   └── scripts/
│       └── deploy_fabric_workspace.py
└── workspaces/
    ├── template_parameter.yml
    └── <workspace_name>/
        └── src/
            ├── parameter.yml
            ├── Development/
            ├── Environment/
            └── Storage/

主なファイルは次のとおりです。

パス 説明
.azuredevops/pipelines/deploy-ws-<workspace name>-prod.yml 対象のワークスペースを PROD 環境へデプロイする Pipeline 定義です。workspace nameを今回はhol_ws としています
.azuredevops/pipelines/templates/jobs/deploy-fabric-workspace.yml Fabric ワークスペースをデプロイする共通ジョブテンプレートです
.azuredevops/variable-groups/workspace-deploy/template.vars Azure DevOps の変数グループに登録する値のテンプレートです
.deploy/scripts/deploy_fabric_workspace.py Pipelineから呼び出されるFabricワークスペースデプロイスクリプトです。fabric-cicdを使って、リポジトリ内のFabricアイテム定義を指定ワークスペースへ反映します。
workspaces/template_parameter.yml デプロイ時に環境依存値を置き換えるための parameter.yml テンプレートです
workspaces/<workspace name>/src Fabric ワークスペースからエクスポートされたアイテム定義を格納するディレクトリです。 workspace nameを今回はhol_ws としています

1. Azure DevOps を準備する

Repos セットアップ

まず、Azure DevOps の Repos にサンプルリポジトリをインポートします。

  1. Azure DevOps の対象プロジェクトを開き、Repos の Import repository から、次の GitHub リポジトリをインポートします。
    image.png

    チュートリアル用のrepoを使用します。

    https://github.com/ryoma-nagata/fabric-cicd-template.git
    

    image.png

  2. インポート後、必要に応じてワークスペース用フォルダ名を変更します。
    既定では次のパスになっています。hol_ws のままでも問題ありません。

    workspaces/hol_ws/src
    

    image.png

Azure サービス接続の作成

次に、Azure DevOps Pipeline から認証するためのサービス接続を作成します。

  1. Azure DevOps の対象プロジェクトで、Project settingsからService connectionsを開きます。

    image.png
    image.png

  2. Azure Resource Manager のサービス接続を作成します。
    image.png
    image.png

    作成したサービス接続名は、後で Pipeline の YAML で使用します。

    既定値:

    azure_service_connection_name: 'azure-service-connection'
    

    指定したリソースグループに権限付与されます(サービスプリンシパルがAzureへのサインイン時に必要となりますが、このデプロイでは使用しません。)

このサービス接続で使用されるサービスプリンシパルがデプロイを行います。名前を変更したい場合は、以下から変更します。

image.png
image.png

参考:

2. 開発用 Fabric ワークスペースを作成する

セットアップ

  1. Fabric ポータルで、開発用のワークスペースを作成します。
    image.png

  2. 作成後、ワークスペース設定から Git 統合を構成します。

    必ず、repos上のsrcフォルダを Gitフォルダ―として設定します。

    workspaces/hol_ws/src
    

    image.png

  3. 接続後、Git からワークスペースへ同期します。
    同期が完了すると、開発用ワークスペースにサンプルのアイテムが表示されます。
    image.png
    image.png

    名前 説明
    LH_CICD サンプルテーブルを構成するレイクハウスおよびSQL分析エンドポイント
    MLVs マテリアライズドレイクビューの設定とサンプルデータ投入のノートブック
    VL_Main ワークスペースごとに異なる値を扱うための変数ライブラリ

[任意]feature ブランチワークスペースの作成

ブランチの運用方法にもよりますが、開発者や機能ごとにブランチおよびワークスペースを作成し、開発を行い、main に統合をしていきます。

なお、ブランチワークスペースの作成は必須ではありません。単純な検証であれば DEV ワークスペース上で直接作業しても構いません。

参考:https://learn.microsoft.com/ja-jp/fabric/cicd/git-integration/branched-workspace

  1. ソース管理からワークスペースに分岐を選択
    image.png

  2. ブランチワークスペースを作成
    image.png

  3. ブランチがDevOps 上に作成され、ワークスペースと同期されます
    image.png
    image.png

ここから開発を進めます

ノートブックの開発

このサンプルでは、Notebook 内で Variable Library の値を参照し投入するデータの内容を変更しています。

例えば、環境名を表す ENV_NAME を Variable Library から取得することで、DEV / PROD などの環境差分を管理できます。

  1. ノートブックを開きます。LH_CICDを既定のレイクハウスとして紐づけます

    image.png
    image.png

    分岐により作成したワークスペース上のレイクハウスを選ぶと、開発ワークスペース上のレイクハウスにはデータは反映されません。

    担当者間で同じデータストアを参照するか、専用のデータストアを使用するのか、適宜使い分けてください。
    専用のデータストアで作業を行った場合は、ブランチの統合後に、既定のレイクハウスの紐づけ先の調整などが必要です

    既定のレイクハウスはノートブックの先頭に以下のようなセルを構成すると、変数ライブラリの設定で切替も可能です。
    image.png
    https://learn.microsoft.com/ja-jp/fabric/data-engineering/author-execute-notebook#spark-session-configuration-magic-command

    なお、Filesにアクセスしない場合は、既定のレイクハウスは必須ではありません。以下のいずれかの記法でアクセス可能です。
    ※スキーマ有効なレイクハウス
    [`ワークスぺース名`].[`レイクハウス名`].[`スキーマ名`].[`テーブル名`]
    [`レイクハウス名`].[`スキーマ名`].[`テーブル名`]
    ※スキーマ有効でないレイクハウス
    [`レイクハウス名`].[`テーブル名`]
    https://learn.microsoft.com/ja-jp/fabric/data-engineering/lakehouse-schemas#lakehouse-schemas-in-notebook

  2. ノートブックを実行します。
    image.png

  3. Notebook を実行すると、Lakehouse 上にテーブルと Materialized Lake View が作成されます。
    テーブル内容
    image.png
    リネージ
    image.png

Semantic Model と Report を作成する

  1. セマンティックモデルを作成
    レイクハウスのリボンから選択
    image.png

    任意の名前設定でgoldテーブルを選択する
    image.png

    ノートブックと紐づけたレイクハウスから作成します。
    今回は開発ワークスペースのレイクハウスを選択しました。
    テーブルが表示されない場合は、SQL分析エンドポイント側の表示を確認します

  2. レポートを作成
    image.png
    レポートの内容はなんでもOK
    image.png

  3. ワークスペース画面に戻り、Application フォルダを作成
    image.png

  4. Application フォルダに移動します。
    image.png

変更をコミットし、mainブランチに統合する

  1. 作成後、Fabric のソース管理から変更を Azure DevOps Repos にコミットします。
    image.png

  2. DevOpsに反映されます。
    image.png

  3. Create a pull request により、ブランチを統合します。
    image.png
    image.png
    image.png

  4. 開発ワークスペースでソースの更新を取り込みます
    image.png
    image.png

3. 本番用 Fabric ワークスペースを作成する

次に、本番用の Fabric ワークスペースを作成します。

セットアップ

  1. ワークスペースを作成します。
    image.png
    なお、git構成はprodでは使用しません。

  2. 作成後、Azure DevOps のサービス接続で使用しているサービスプリンシパルを、本番用ワークスペースの管理者として追加します。
    image.png

  3. 次の作業用に、本番用ワークスペースの URL から Workspace ID を取得します。
    Fabric ワークスペースの URL には、次のように groups/<workspace_guid> が含まれます。

    https://app.fabric.microsoft.com/groups/<workspace_guid>/...
    

    この <workspace_guid> を控えておきます。
    image.png

4. リリースパイプラインの作成

Azure DevOps Environment を作成する

  1. Azure DevOps で、Pipeline の実行先となる Environment を作成します。

    今回は本番環境用に、PRODという名前で作成します。

    image.png
    image.png

  2. (option) 承認ゲートを設ける場合は、Approvalsを追加します。
    承認をした場合のみパイプラインのステップが進むように構成できます。
    image.png

Azure DevOps 変数グループを作成する

  1. Pipeline で使用する変数グループを作成します。
    image.png

    変数グループ名は.azuredevops/pipelines/deploy-ws-holws-prod.ymlの内容と一致するようにします。

    .azuredevops\pipelines\deploy-ws-holws-prod.yml
    variable_group_name: 'deploy-holws-prod'
    

    image.png

  2. 値を設定します。
    サンプルリポジトリには、変数グループ用のテンプレートがあります。

    .azuredevops/variable-groups/workspace-deploy/template.vars
    

    これを参考に、Azure DevOps の変数グループへ次の変数を登録します。

    変数名 設定例 説明
    workspace_guid 12345678-1234-1234-1234-123456789abc 本番用 Fabric ワークスペースの GUID
    vl_vset_active PROD Fabric Variable Library で使用する Value Set 名
    repo_project_directory workspaces/hol_ws/src Fabric アイテム定義があるリポジトリ内のパス
    fabric_item_type_inscope 空欄 デプロイ対象の Fabric アイテムタイプ。空欄の場合は全アイテムを対象にする想定

    私の環境の設定例です。
    image.png

    特定のアイテムタイプだけをデプロイしたい場合は、fabric_item_type_inscope にカンマ区切りで指定します。

    例:

    Notebook
    Notebook,DataPipeline
    Lakehouse,Warehouse
    Notebook,SemanticModel,Report
    

Pipeline YAML を確認する

サンプルリポジトリには、次の Pipeline 定義ファイルが含まれています。

.azuredevops/pipelines/deploy-ws-holws-prod.yml

この YAML では、変数グループ名と Azure サービス接続名を参照します。

必要に応じて、次の値を自分の環境に合わせて変更します。

variable_group_name: deploy-ws-holws-prod
azure_service_connection_name: sc-fabric-cicd

特に、azure_service_connection_name は Azure DevOps で作成したサービス接続名と一致させてください。

Azure DevOps Pipeline を作成する

  1. Azure DevOps の Pipelines から新しい Pipeline を作成します。
    image.png

  2. ソースとして Azure Repos Git を選択し、インポートしたリポジトリを選びます。
    image.png
    image.png

  3. 既存の YAML ファイルを使用し、次の YAML を指定します。
    image.png

    .azuredevops/pipelines/deploy-ws-holws-prod.yml
    

    image.png

  4. 確認後、Pipeline を実行します。
    image.png

    初回実行時は、変数グループやサービス接続の使用許可を求められる場合があります。その場合は、Pipeline から使用できるように許可します。
    image.png
    image.png
    Environmentで承認を入れていた場合には承認をします。
    image.png

5. 初回デプロイ結果を確認

Pipeline が成功すると、本番用ワークスペースに Fabric アイテムが作成されます。

本番用ワークスペースを開き、次のアイテムがデプロイされていることを確認します。

  • Lakehouse
  • Notebook
  • Environment
  • Variable Library
  • Semantic Model
  • Report
    image.png
    image.png

また、Variable Library のアクティブな Value Set が PROD を向いていることを確認します。
image.png

一方で、この時点では次のような状態になっているはずです。

  • Notebook の既定のLakehouse が開発用ワークスペースの Lakehouse を向いている
  • Semantic Model の 参照先 が開発用ワークスペースの Lakehouse を向いている

image.png

これは、Notebook や Semantic Model の定義内に、開発用ワークスペースの GUID や Lakehouse GUID が含まれているためです。

変数ライブラリで対応しきれないような環境依存値を置き換えるために、次に parameter.yml を設定します。

6. parameter.ymlによる環境差分の吸収

fabric-cicd では、parameter.yml を使用して、デプロイ時に環境依存の値を置き換えることができます。

fabric-cicd - Parameterization

ファイルの配置

サンプルリポジトリには、テンプレートファイルがあります。

workspaces/template_parameter.yml

このファイルをコピーし、対象ワークスペースの src フォルダ直下に配置します。

workspaces/hol_ws/src/parameter.yml

Azure DevOps の Web UI では、次のように設定します。

  1. ファイル作成
    image.png
    image.png

  2. 内容をtemplate_parameter.ymlからコピー

  3. lakehouse_name のプレースホルダを置換(4か所あります)
    <lakehouse_name> は、デプロイ先ワークスペースに存在する Lakehouse アイテム名に置き換えます。

    例:

    PROD: "$items.Lakehouse.LH_CICD.$id"
    

    image.png

  4. コミット
    image.png

作成する parameter.yml の例です。


find_replace:
  # --------------------------------------------------------------------------
  # Notebook: 既定 Lakehouse ID の置換
  # --------------------------------------------------------------------------
  # Notebook のメタデータに含まれる default_lakehouse の GUID を、
  # デプロイ先環境の Lakehouse ID に置き換えます。
  #
  # <lakehouse_name> は、デプロイ先ワークスペース上の Lakehouse アイテム名に
  # 置き換えてください。
  # 例: "$items.Lakehouse.LH_CICD.$id"
  - find_value: \#\s*META\s+"default_lakehouse":\s*"([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})"
    replace_value:
      PPE: "$items.Lakehouse.LH_CICD.$id"
      PROD: "$items.Lakehouse.LH_CICD.$id"
    is_regex: "true"
    item_type: "Notebook"
    # item_name: ["NB_sample"]

  # --------------------------------------------------------------------------
  # Notebook: 既定 Lakehouse Workspace ID の置換
  # --------------------------------------------------------------------------
  # Notebook のメタデータに含まれる default_lakehouse_workspace_id の GUID を、
  # デプロイ先ワークスペース ID に置き換えます。
  - find_value: \#\s*META\s+"default_lakehouse_workspace_id":\s*"([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})"
    replace_value:
      PPE: "$workspace.$id"
      PROD: "$workspace.$id"
    is_regex: "true"
    item_type: "Notebook"
    # item_name: ["NB_sample"]

  # --------------------------------------------------------------------------
  # Semantic Model: OneLake URL 内の Workspace GUID の置換
  # --------------------------------------------------------------------------
  # Semantic Model の Power Query / M 定義に含まれる OneLake URL から、
  # Workspace GUID の部分をデプロイ先ワークスペース ID に置き換えます。
  #
  # item_name には、対象の Semantic Model アイテム名を指定します。
  - find_value: AzureStorage\.DataLake\("https://onelake\.dfs\.fabric\.microsoft\.com/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})/
    replace_value:
      PPE: "$workspace.$id"
      PROD: "$workspace.$id"
    is_regex: "true"
    item_type: "SemanticModel"
   # item_name: ["SM_CostInsight_OL"]

  # --------------------------------------------------------------------------
  # Semantic Model: OneLake URL 内の Lakehouse GUID の置換
  # --------------------------------------------------------------------------
  # Semantic Model の Power Query / M 定義に含まれる OneLake URL から、
  # Lakehouse GUID の部分をデプロイ先環境の Lakehouse ID に置き換えます。
  #
  # <lakehouse_name> は、デプロイ先ワークスペース上の Lakehouse アイテム名に
  # 置き換えてください。
  - find_value: AzureStorage\.DataLake\("https://onelake\.dfs\.fabric\.microsoft\.com/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})
    replace_value:
      PPE: "$items.Lakehouse.LH_CICD.$id"
      PROD: "$items.Lakehouse.LH_CICD.$id"
    is_regex: "true"
    item_type: "SemanticModel"
   # item_name: ["SM_CostInsight_OL"]

parameter.yml のポイント

この parameter.yml では、主に次の値を置き換えています。

Notebook の既定のLakehouse IDとWorkspace ID

Notebook のメタデータには、既定 Lakehouse の GUIDと既定 Lakehouse が存在する Workspace ID が含まれます。
image.png

そのため、次の指定で本番用 Lakehouse の ID に置き換えています。

"$items.Lakehouse.<lakehouse_name>.$id"
"$workspace.$id"

Semantic Model の OneLake URL

Semantic Model の Power Query / M 定義には、OneLake on Direct Lake の場合にOneLake の URL が含まれます。(DirectLake on SQL の場合にはSQL 分析エンドポイントなどの接続文字列)

image.png

例:

https://onelake.dfs.fabric.microsoft.com/<workspace_guid>/<lakehouse_guid>/...

この URL に含まれる Workspace GUID と Lakehouse GUID を、本番用ワークスペースの値に置き換えています。

再度 Pipeline を実行する

parameter.yml をコミットしたら、Azure DevOps Pipeline を再実行します。

実行の完了後、それぞれのアイテムがprodのワークスペースのレイクハウスを参照していることを確認します。

image.png

ノートブックは開発環境のレイクハウスはknown lakehouseというメタデータで残るため、このような状態となりますが、既定のレイクハウスが変更できていればOKです。

image.png

まとめ

この記事では、fabric-cicd と Azure DevOps Pipeline を使用して、Microsoft Fabric ワークスペースのアイテムを本番用ワークスペースへデプロイする流れを紹介しました。

Fabric の CI/CD では、単にアイテムをコピーするだけでなく、環境ごとの差分をどう扱うかが重要です。

特に Notebook の既定 Lakehouse や Semantic Model の OneLake URL は、開発環境の値が残りやすいため、parameter.yml による置換を組み合わせることで、より実運用に近いデプロイ構成を作ることができます。

参考

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?