展開の構成ガイド

ALM Accelerator for Power Platform は、JSON 形式の構成ファイルを使用して、ソリューションのデプロイを自動化します。 これらは接続参照、環境変数、アクセス許可、キャンバスアプリの共有、ソリューションが下流環境に展開されたときの Power Automate フローのようなソリューション コンポーネントの所有者の更新を設定します。

この記事の構成ファイルを使用すると、ソリューションが展開される環境に固有の項目を構成できます。 必要な構成ファイル、つまりこの記事で従う必要がある手順は、ソリューション パイプラインがデプロイするコンポーネントによって異なります。 たとえば、自分のソリューションに含まれているのが環境ごとの構成やデータが不要な Dataverse テーブルとモデル駆動型アプリのみの場合、これらの手順の一部はスキップできます。

構成ファイルとデータ展開構成の例については、ALMAcceleratorSampleSolution の 展開設定カスタム展開設定 を参照してください

開始する前に

この記事は、展開構成ファイルを手動でセットアップするためのステップバイステップのガイドです。 これは、ALM Accelerator アプリとパイプラインが実行するアクションの詳細とコンテキストが含まれており、管理者がプロセスの各ステップの詳細を知りたいときのリファレンスとして使用できます。

ただし、ALM Accelerator アプリの 展開設定を構成する ことをお勧めします。

展開設定 JSON ファイルの作成

customDeploymentSettings.json ファイルを config ディレクトリのルートに保存する場合、同じ構成がすべての環境に適用されます。 ファイル変換またはトークン置換パイプライン タスクを使用して特定の環境固有の情報を格納していると仮定すると、パイプライン変数に環境ごとの値を指定できます。

ただし、環境固有の customDeploymentSettings.json ファイルの作成もできます。 それらをあなたの環境に対して名前の付いた config ディレクトリのサブディレクトリに保存します。 このディレクトリ名は、パイプラインの設定 (検証、テスト、本番の環境) 時に作成した EnvironmentName 変数に一致する必要があります。 環境固有の展開設定 JSON とディレクトリが見つからない場合、パイプラインは config ディレクトリのルートにある構成に戻ります。

config ディレクトリ階層のスクリーンショット。

上の画像の JohannaDev ディレクトリのようなユーザー固有の構成ファイルを作成することもできます。 開発者は、ソース管理からアンマネージド ソリューションをインポートするときに、これらを使用して特定の構成を選択できます。

展開設定 JSON ファイルは、接続参照と環境変数を構成します。

{
    "EnvironmentVariables": [
        {
            "SchemaName": "cat_shared_sharepointonline_97456712308a4e65aae18bafcd84c81f",
            "Value": "#{environmentvariable.cat_shared_sharepointonline_97456712308a4e65aae18bafcd84c81f}#"
        },
        {
            "SchemaName": "cat_shared_sharepointonline_21f63b2d26f043fb85a5c32fc0c65924",
            "Value": "#{environmentvariable.cat_shared_sharepointonline_21f63b2d26f043fb85a5c32fc0c65924}#"
        },
        {
            "SchemaName": "cat_TextEnvironmentVariable",
            "Value": "#{environmentvariable.cat_TextEnvironmentVariable}#"
        },
        {
            "SchemaName": "cat_ConnectorBaseUrl",
            "Value": "#{environmentvariable.cat_ConnectorBaseUrl}#"
        },
        {
            "SchemaName": "cat_DecimalEnvironmentVariable",
            "Value": "#{environmentvariable.cat_DecimalEnvironmentVariable}#"
        },
        {
            "SchemaName": "cat_JsonEnvironmentVariable",
            "Value": "#{environmentvariable.cat_JsonEnvironmentVariable}#"
        },
        {
            "SchemaName": "cat_ConnectorHostUrl",
            "Value": "#{environmentvariable.cat_ConnectorHostUrl}#"
        }
    ],
    "ConnectionReferences": [
        {
            "LogicalName": "new_sharedsharepointonline_b49bb",
            "ConnectionId": "#{connectionreference.new_sharedsharepointonline_b49bb}#",
            "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline"
        },
        {
            "LogicalName": "cat_CDS_Current",
            "ConnectionId": "#{connectionreference.cat_CDS_Current}#",
            "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps"
        }
    ]
}
  1. 前の JSON コード サンプルを、deploymentSettings.json という名前の新しいファイルにコピーします。

  2. ファイルを Git の config フォルダーに保存します。

config フォルダー構造のスクリーンショット。

接続参照 JSON の作成

customDeploymentConfiguration.json ファイルのプロパティ ConnectionReferences は、ソリューションが環境にインポートされた後、ソリューション内の接続参照を設定します。 ConnectionReferences また、変数で指定された接続の所有者に基づいて、ソリューションのインポート後にフローを有効にします。

  1. ターゲット環境で手動で接続を作成します。

  2. 接続の ID をコピーします。

    • ソリューション内で、接続参照コンポーネントから背悦z九参照の理論名を取得します。

      ソリューション内の接続参照スキーマ名のスクリーンショット。名前ラベルの下の無効なテキスト フィールドで強調表示されています。

    • それを作成したあと、接続の URL から接続 ID を取得します。 例えば、URL が 'https://.../connections/shared_commondataservice/9f66d1d455f3474ebf24e4fa2c04cea2/details' の場合、接続 ID は 9f66d1d455f3474ebf24e4fa2c04cea2 です。

  3. 次のコード例のように、customDeploymentSettings.json ファイルを編集し、 ConnectionReferences プロパティに ID を貼り付けます。

    "ConnectionReferences": 
    [
            {
                "LogicalName": "new_sharedsharepointonline_b49bb",
                "ConnectionId": "#{connectionreference.new_sharedsharepointonline_b49bb}#",
                "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline"
            },
            {
                "LogicalName": "cat_CDS_Current",
                "ConnectionId": "#{connectionreference.cat_CDS_Current}#",
                "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps"
            }
    ]
    
  4. 前の例のように、トークンの置換の拡張機能を使用して構成にトークンを追加する場合、ソリューションのパイプラインを開いてから、編集>変数 を選択します。

  5. パイプライン変数 画面で、接続 <connection_reference_logicalname> を作成します。 この例では、パイプライン変数に connection.cat_CDS_Current と名前を付けます。

  6. 値を、前に見つけた接続 ID に設定します。

  7. 値がプレーン テキストとして保存されないようにするには、この値を秘密にする を選択します。

必要に応じて、作成するソリューションとパイプラインごとに上記の手順を繰り返します。

デプロイメント構成ファイルに環境変数 JSON を作成します

customDeploymentConfiguration.json ファイルのプロパティ EnvironmentVariables は、ソリューションが環境にインポートされた後、ソリューション内の Dataverse 環境変数を設定します。

重要

ソース コントロールされたソリューションをエクスポートするとき、環境変数の値はソリューションとともにエクスポートされます。 これには、環境変数に機密情報が含まれていると、セキュリティ リスクになる可能性があります。 機密情報を環境変数に保存しないことをお勧めします。 環境変数の値がソース管理されないようにする 1 つの方法は、開発環境で環境変数値専用のソリューションを作成し、そのソリューションでそれらの値を設定することです。 これにより、ソリューションのエクスポート中に現在の値がエクスポートされ、ソース管理に保存されるのを防ぐことができます。

  1. ソリューション内で環境変数コンポーネントから環境変数のスキーマ名をコピーします。

    ソリューション内の接続変数スキーマ名のスクリーンショット。名前ラベルの下の無効なテキスト フィールドで強調表示されています。

  2. 次のコード例のように、customDeploymentSettings.json ファイルを編集し、 EnvironmentVariables プロパティに名前を貼り付けます。

    {
        "EnvironmentVariables": [
            {
                "SchemaName": "cat_TextEnvironmentVariable",
                "Value": "#{variable.cat_TextEnvironmentVariable}#"
            },
            {
                "SchemaName": "cat_DecimalEnvironmentVariable",
                "Value": "#{variable.cat_DecimalEnvironmentVariable}#"
            },
            {
                "SchemaName": "cat_JsonEnvironmentVariable",
                "Value": "{\"name\":\"#{variable.cat_JsonEnvironmentVariable.name}#\"}"
            }
        ]    
    }
    
  3. 前の例のように、トークンの置換の拡張機能を使用して構成にトークンを追加する場合、ソリューションのパイプラインを開いてから、編集>変数 を選択します。

  4. パイプライン変数 画面で、例えば variable.cat_TextEnvironmentVariable のように構成内のトークンごとにパイプライン変数を作成します。

  5. その環境に対する環境変数の値にその値を設定します。

  6. 値がプレーン テキストとして保存されないようにするには、この値を秘密にする を選択します。

必要に応じて、作成するソリューションとパイプラインごとに上記の手順を繰り返します。

カスタム展開設定 JSON ファイルの作成

カスタム展開設定 JSON ファイルには、ユーザーに代わってフローをアクティブ化し、フローの所有権を指定し、キャンバス アプリを Microsoft Entra グループと共有し、展開後に Dataverse グループ チームを作成するための構成が含まれています。

{
  "ActivateFlowConfiguration": [
    {
      "solutionComponentName": "DevOpsKitSampleFlow",
      "solutionComponentUniqueName": "0a43b549-50ed-ea11-a815-000d3af3a7c4",
      "activateAsUser": "#{activateflow.activateas.DevOpsKitSampleFlow}#"
    },
    {
      "solutionComponentName": "CallMeFromCanvasApp",
      "solutionComponentUniqueName": "71cc728c-2487-eb11-a812-000d3a8fe6a3",
      "activateAsUser": "#{activateflow.activateas.CallMeFromCanvasApp}#"
    },
    {
      "solutionComponentName": "GetEnvironmentVariables",
      "solutionComponentUniqueName": "d2f7f0e2-a1a9-eb11-b1ac-000d3a53c3c2",
      "activateAsUser": "#{activateflow.activateas.GetEnvironmentVariables}#"
    }
  ],
  "SolutionComponentOwnershipConfiguration": [
    {
      "solutionComponentType": 29,
      "solutionComponentName": "DevOpsKitSampleFlow",
      "solutionComponentUniqueName": "0a43b549-50ed-ea11-a815-000d3af3a7c4",
      "ownerEmail": "#{owner.ownerEmail.DevOpsKitSampleFlow}#"
    },
    {
      "solutionComponentType": 29,
      "solutionComponentName": "CallMeFromCanvasApp",
      "solutionComponentUniqueName": "71cc728c-2487-eb11-a812-000d3a8fe6a3",
      "ownerEmail": "#{owner.ownerEmail.CallMeFromCanvasApp}#"
    },
    {
      "solutionComponentType": 29,
      "solutionComponentName": "GetEnvironmentVariables",
      "solutionComponentUniqueName": "d2f7f0e2-a1a9-eb11-b1ac-000d3a53c3c2",
      "ownerEmail": "#{owner.ownerEmail.GetEnvironmentVariables}#"
    }
  ],
  "AadGroupCanvasConfiguration": [
    {
      "aadGroupId": "#{canvasshare.aadGroupId.DevOpsKitSampleCanvasApp}#",
      "canvasNameInSolution": "cat_devopskitsamplecanvasapp_c7ec5",
      "canvasDisplayName": "DevOpsKitSampleCanvasApp",
      "roleName": "#{canvasshare.roleName.DevOpsKitSampleCanvasApp}#"
    }
  ],
  "AadGroupTeamConfiguration": [
    {
      "aadGroupTeamName": "Sample Group Team Name",
      "aadSecurityGroupId": "#{team.samplegroupteamname.aadSecurityGroupId}#",
      "dataverseSecurityRoleNames": [
        "#{team.samplegroupteamname.role}#"
      ]
    }
  ]
}
  1. 前の JSON コード サンプルを、customDeploymentSettings.json という名前の新しいファイルにコピーします。

  2. ファイルを Git の config フォルダーに保存します。

カスタム展開設定の config フォルダー構造のスクリーンショット。

カスタム展開構成ファイルに既定の環境変数 JSON を作成します

customDeploymentConfiguration.json のプロパティ DefaultEnvironmentVariables は、ソリューションがエクスポートされてソース管理に保存されるときに、ソリューションの Dataverse の既定の環境変数を設定するためにエクスポート パイプラインで使用されます。

Note

既定の環境変数設定は、エクスポート パイプラインがパイプライン変数 VerifyDefaultEnvironmentVariableValues = True で構成されている場合にのみ適用されます。

  1. ソリューション内で環境変数コンポーネントから環境変数のスキーマ名をコピーします。

    環境変数スキーマ名のスクリーンショット。名前ラベルの下の無効なテキスト フィールドで強調表示されています。

  2. 次のコード例のように、customDeploymentSettings.json ファイルを編集し、 DefaultEnvironmentVariables プロパティに名前を貼り付けます。

    {
      "DefaultEnvironmentVariables": [
        [ "cat_TextEnvironmentVariable", "#{defaultvariable.cat_TextEnvironmentVariable}#" ],
        [ "cat_DecimalEnvironmentVariable", "#{defaultvariable.cat_DecimalEnvironmentVariable}#" ],
        [ "cat_jsonEnvironmentVariable", "{\"name\":\"#{defaultvariable.cat_jsonEnvironmentVariable.name}#\"}" ]
      ]
    }
    
  3. 前の例のように、トークンの置換の拡張機能を使用して構成にトークンを追加する場合、ソリューションのパイプラインを開いてから、編集>変数 を選択します。

  4. パイプライン変数 画面で、例えば defaultvariable.cat_TextEnvironmentVariable のように構成内のトークンごとにパイプライン変数を作成します。

必要に応じて、作成するソリューションとパイプラインごとに上記の手順を繰り返します。

Microsoft Entra グループ キャンバス構成 JSON の作成

customDeploymentConfiguration.json ファイルのプロパティ AadGroupCanvasConfiguration は、ソリューションが環境にインポートされた後にソリューション内のキャンバス アプリを特定の Microsoft Entra グループと共有します。

  1. キャンバス アプリと Microsoft Entra グループの ID をコピーします。

    • キャンバス アプリのスキーマ名は、ソリューションのキャンバス アプリ コンポーネントから取得できます。

      キャンバス アプリ ラベル スキーマ名のスクリーンショット。名前ラベルの下の無効なテキスト フィールドで強調表示されています。

    • Azure ポータルの グループ ページから Microsoft Entra グループ ID を取得します。

  2. 次のコード例のように、customDeploymentSettings.json ファイルを編集し、 AadGroupCanvasConfiguration プロパティに ID を貼り付けます。

    {
      "AadGroupCanvasConfiguration": [
        {
          "aadGroupId": "#{canvasshare.aadGroupId}#",
          "canvasNameInSolution": "cat_devopskitsamplecanvasapp_c7ec5",
          "roleName": "#{canvasshare.roleName}#"
        }
      ]
    }
    

    roleNameCanViewCanViewWithShareCanEdit にできます。

  3. 前の例のように、トークンの置換の拡張機能を使用して構成にトークンを追加する場合、ソリューションのパイプラインを開いてから、編集>変数 を選択します。

  4. パイプライン変数 画面で、例えば canvasshare.aadGroupId のように構成内のトークンごとにパイプライン変数を作成します。

  5. 値を、その特定の環境でアプリを共有する必要がある Microsoft Entra グループ ID に設定します。

  6. 値がプレーン テキストとして保存されないようにするには、この値を秘密にする を選択します。

必要に応じて、作成するソリューションとパイプラインごとに上記の手順を繰り返します。

Microsoft Entra グループ およびチーム構成 JSON の作成

customDeploymentConfiguration.json ファイルのプロパティ AadGroupTeamConfiguration は、ソリューションが環境にインポートされた後、ソリューション内の Dataverse チームとロールを Microsoft Entra グループにマッピングします。

ターゲット環境内に手動で作成しない場合は、セキュリティ ロールをソリューションに追加する必要があります。 1 つまたは複数の役割をチームに適用できます。 これらのロールは、グループ内のユーザーが必要とするソリューション コンポーネントへのアクセス許可を提供します。

  1. Dataverse チーム名は、既存のチーム、またはソリューションがインポートされた後 Dataverse で作成して Microsoft Entra グループにマッピングする新しいチームにすることができます。

  2. Dataverse ロールは、Dataverse の任意のセキュリティ ロールにすることができます。これは、ソリューションがパイプラインを介してインポートされた後、チームに適用されます。 このロールには、テーブルやプロセスなど、ソリューションに必要なリソースに対する特権が必要です。

  3. 前のセクションにあったように、Azure ポータルの グループ ページから Microsoft Entra グループ ID を取得します。

  4. 次のコード例のように、customDeploymentSettings.json ファイルを編集し、 AadGroupTeamConfiguration プロパティに JSON を貼り付けます。

    {
      "AadGroupTeamConfiguration": [
        {
          "aadGroupTeamName": "alm-accelerator-sample-solution",
          "aadSecurityGroupId": "#{team.aadSecurityGroupId}#",
          "dataverseSecurityRoleNames": [
            "ALM Accelerator Sample Role"
          ]
        }
      ]
    }
    
  5. 前の例のように、トークンの置換の拡張機能を使用して構成にトークンを追加する場合、ソリューションのパイプラインを開いてから、編集>変数 を選択します。

  6. パイプライン変数 画面で、例えば team.aadSecurityGroupId のように構成内のトークンごとにパイプライン変数を作成します。

  7. 値を Microsoft Entra グループ ID に設定して、 Dataverse のチームに関連付けます。

  8. 値がプレーン テキストとして保存されないようにするには、この値を秘密にする を選択します。

必要に応じて、作成するソリューションとパイプラインごとに上記の手順を繰り返します。

ソリューション コンポーネントの所有権 JSON の作成

customDeploymentConfiguration.json ファイルのプロパティ SolutionComponentOwnershipConfiguration は、ソリューションを環境にインポートした後、ソリューション コンポーネントの所有権を Dataverse ユーザーに割り当てます。 コンポーネントの所有権の割り当ては、ソリューションがパイプラインによってインポートされ、組織がインポート後にそれらを再割り当てするときに、サービス プリンシパル ユーザーによって規定で所有されるフローなどのコンポーネントに役立ちます。

SolutionComponentOwnershipConfiguration プロパティは、接続参照を持たないフローを有効にするためにも使用されます。 フローを有効にするために使用する接続参照がない場合、フローは指定されたユーザーによって有効にされます。

注意

現在のパイプラインは、フローの所有権を設定する機能のみを実装しています。

  1. ソリューション コンポーネント タイプ コードは、solutioncomponent EntityType Web API リファレンスで指定されたコンポーネント タイプに基づいています。 たとえば、Power Automate フローはコンポーネント タイプ 29 です。 コンポーネント タイプは整数値 (引用符なしで) として指定する必要があります。

  2. アンパック ソリューションから Power Automate フロー コンポーネントの一意の名前を取得します。

    フローの作成時に一意の名前は必要ありません。 そのため、フローの唯一の真の一意識別子は、システムがソリューションでフローを割り当てするために使用する内部 ID です。

    アンパックされたソリューション ワークフロー XML ファイルのスクリーンショット。

    WorkflowId を示すアンパックされたソリューション ワークフロー XML のスクリーンショット。

  3. 所有者のメール アドレスは、Dataverse または Microsoft 365 にあるユーザーの記録から取得できます。

  4. 次のコード例のように、customDeploymentSettings.json ファイルを編集し、 AadGroupTeamConfiguration プロパティに JSON を貼り付けます。

    {
      "SolutionComponentOwnershipConfiguration": [
        {
          "solutionComponentType": 29,
          "solutionComponentUniqueName": "00000000-0000-0000-0000-00000000000",
          "ownerEmail": "#{owner.ownerEmail}#"
        },
        {
          "solutionComponentType": 29,
          "solutionComponentUniqueName": "00000000-0000-0000-0000-00000000000",
          "ownerEmail": "#{owner.ownerEmail}#"
        }
      ]
    }
    
  5. 前の例のように、トークンの置換の拡張機能を使用して構成にトークンを追加する場合、ソリューションのパイプラインを開いてから、編集>変数 を選択します。

  6. パイプライン変数 画面で、例えば owner.ownerEmail のように構成内のトークンごとにパイプライン変数を作成します。

  7. 値をコンポーネントの所有者の電子メール アドレスに設定します。

  8. 値がプレーン テキストとして保存されないようにするには、この値を秘密にする を選択します。

必要に応じて、作成するソリューションとパイプラインごとに上記の手順を繰り返します。

パイプラインからのデータのインポート

ソリューションをターゲット環境に展開した後、構成またはシード データを最初に Dataverse 環境にインポートします。 パイプラインは、 NuGet 経由で利用可能な 構成移行ツール を使用してデータをインポートするように構成されています。 構成データの管理について詳しく学習します

構成データを 構成 ディレクトリのルートに格納する場合、同じ構成データがすべての環境に展開されます。 環境固有の構成データ ファイルを作成できます。 それらをあなたの環境に対して名前の付いた config ディレクトリのサブディレクトリに保存します。 このディレクトリ名は、パイプラインの設定 (検証、テスト、本番の環境) 時に作成した EnvironmentName 変数に一致する必要があります。 環境固有の構成データとディレクトリが見つからない場合、パイプラインは config ディレクトリのルートにある構成データに戻ります。

  1. ソリューションがソース管理され、ソリューション パイプライン YAML を作成したた Azure DevOps リポジトリをローカル マシンへクローンします。

  2. まだ作成していない場合は、ソリューション フォルダーの config フォルダーに config という名前のディレクトリを作成します。

    ローカル リポジトリのソリューション ディレクトリの下にある config ディレクトリのスクリーンショット。

  3. 構成移行ツールをインストールします。 NuGet からのツールをダウンロード の手順に従います。

  4. 構成移行ツールを開き、スキーマの作成 を選択し、続行 を選択します。

  5. 構成データのエクスポート元のテナントにログインします。

  6. 環境を選択します。

  7. エクスポートするテーブルと列を選択します。

  8. 保存してエクスポート を選択します。 データがインポートされるソリューションに対して、データを自分のローカル Azure DevOps リポジトリでディレクトリ パス config\ConfigurationMigrationData に保存します。

    注意

    ソリューションがインポートされた後、パイプラインはこの特定のフォルダーを探してインポートを実行します。 フォルダーの名前とその場所がここで指定されているとおりであることを確認してください。

  9. データをエクスポートするように求められたら、はいを選択します。

  10. エクスポートしたデータと同じ場所を選択して、保存 を選択し、データのエクスポート を選択します。

  11. エクスポートが完了したら、ファイルを data.zip ファイルから ConfigurationMigrationData ディレクトリに解凍します。 data.zip ファイルと SampleData.xml ファイルを削除します。

    ConfigurationMigrationData ディレクトリで解凍された構成移行データのスクリーンショット。

  12. データと共に変更を Azure DevOps にコミットします。

次の手順