次の方法で共有


ワークロード オーケストレーションの外部検証を有効にする

外部検証を使用すると、Azure 関数や Webhook などの外部サービスを使用してソリューション テンプレートを検証できます。 外部検証サービスは、ワークロード オーケストレーション サービスからイベントを受信し、カスタム検証ロジックを実行できます。

この記事では、ワークロード オーケストレーション用に Event Grid サブスクリプションを設定する方法と、外部検証を有効にしてソリューション テンプレートを作成して発行する方法について説明します。

[前提条件]

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料でアカウントを 1 つ作成してください。
  • ワークロード オーケストレーション用に環境を設定します。 まだ行っていない場合は、「 ワークロード オーケストレーション用の環境を準備 する」に進み、前提条件を設定します。
    • ワークロード オーケストレーション CLI の最新バージョンがインストールされていることを確認します。

ワークロード オーケストレーション用の Event Grid サブスクリプション

Azure Event Grid は、大規模な信頼性の高いイベント配信を可能にする、フル マネージドのインテリジェントなイベント ルーティング サービスです。 これにより、アプリケーションがほぼリアルタイムでイベントに応答できるため、リアクティブ プログラミングが容易になり、一定のポーリングの必要性が減り、疎結合アーキテクチャが可能になります。

Event Grid サブスクリプションを作成して、ワークロード オーケストレーション サービスから通知を受け取ることができます。 サブスクリプションは、外部ワークロード オーケストレーション ソリューションの検証に使用されます。

Event Grid はファシリテーターとして機能し、システムのさまざまなコンポーネントを接続します。 イベント パブリッシャーとサブスクライバーの間のブリッジとして機能し、密に結合されることなく通信できるようにします。 たとえば、一方の側にはワークロード オーケストレーション サービスがあり、もう一方の側には顧客のプラグイン サービスがあります。 ワークロード オーケストレーション サービスはイベントの発行元ですが、顧客のプラグイン サービスはそれらのイベントを受信して処理するサブスクライバーです。

Event Grid では、Azure サービス、カスタム アプリケーション、Azure Functions、Logic Apps、Event Hubs、カスタム Webhook などのハンドラーなど、さまざまなソースからのイベントをルーティングすることで、イベント ドリブン モデルをサポートしています。 詳細については、「 Azure Event Grid の概要」を参照してください。

Von Bedeutung

Event Grid サブスクリプションは、一度に 1 つのトピックの種類 (製品) に関連付けられます。 別のトピックの種類の Event Grid サブスクリプションが既にある場合は、ワークロード オーケストレーション用の新しいサブスクリプションを作成する必要があります。

Event Grid の登録

現在、Event Grid ファースト パーティはサービス フェデレーション分離 (SFI) のためにサービス間 (S2S) アクセス許可を取得できないため、コンテキストごとに次の手順を 1 回実行する必要があります。

az provider register --namespace Microsoft.EventGrid
    
providerAppId="4962773b-9cdb-44cf-a8bf-237846a00ab7" # App Id for Event Grid
providerOid=$(az ad sp show --id $providerAppId --query id -o tsv)
    
az role assignment create --assignee "$providerOid" \
    --role "Workload Orchestration IT Admin" \
    --scope "/subscriptions/$subId/resourceGroups/$rg/providers/Microsoft.Edge/contexts/$instanceName"

Azure CLI を使用して Event Grid サブスクリプションを作成する

Azure CLI を使用して Event Grid サブスクリプションを作成するには、次の手順に従います。

Azure サブスクリプションとリソース グループの Event Grid サブスクリプションを作成します。

az eventgrid event-subscription create --name <subscription-name> \
    --source-resource-id "/subscriptions/$subId/resourceGroups/$rg/providers/Microsoft.Edge/contexts/$instanceName" \
    --endpoint <function-app-endpoint> \
    --endpoint-type azurefunction 

Azure portal を使用して Event Grid サブスクリプションを作成する

Azure portal を使用して Event Grid サブスクリプションを作成するには、次の手順に従います。

  1. Azure ポータルに移動します。
  2. 検索ボックスに「 Event Grid サブスクリプション 」と入力し、一覧から選択します。
  3. [+ イベント サブスクリプション] を選択します。
  4. [イベント サブスクリプションの作成] ページで、次の手順に従います。
    1. [ 基本 ] タブの [ トピックの種類 ] フィールドで、サブスクライブするイベント ソースの種類を選択します。 ワークロード オーケストレーションの場合は、[ ワークロード オーケストレーション (プレビュー)]を選択します。

      ワークロード オーケストレーション用の Event Grid サブスクリプションを作成する方法を示す Azure portal のスクリーンショット。

    2. ワークロード オーケストレーション コンテキストを含む Azure サブスクリプションリソース グループ を選択します。

    3. [ リソース ] フィールドでコンテキスト リソースを選択します。

    4. [イベントの種類] で、通知を受信するイベントの種類を選択します。

    5. エンドポイントの 種類 と、イベントを受信するエンドポイントを選択します。 たとえば、エンドポイントの種類として Azure 関数を選択できます。SolutionValidator は Event Grid からイベントを受信する関数の名前です。

    6. [ 作成 ] をクリックして Event Grid サブスクリプションを作成します。

詳細については、ポータルを通じた Event Grid サブスクリプションEvent Grid 配信 を参照してください。

ワークロードオーケストレーションにアクセスできるようにする

Event Grid サブスクリプションのエンドポイントとして関数アプリを使用する場合は、 ワークロード オーケストレーション ソリューションの外部検証コントロール ロールを関数アプリのマネージド ID に割り当てる必要があります。 このロールにより、関数アプリはソリューション テンプレートを検証し、イベントをワークロード オーケストレーション サービスに返すことができます。

  1. 次のコマンドを実行して、関数アプリのマネージド ID オブジェクト ID を取得します。 <functionAppName> をお使いの関数アプリの名前に置き換えます。

    az functionapp identity show \
        --name "<functionAppName>" \
        --resource-group "$rg"
    
  2. 関数アプリのマネージド ID オブジェクト ID である出力から principalId をコピーします。

    functionAppMSIObjectId="<principalId>"
    
  3. "ワークロード オーケストレーション ソリューション外部検証コントロール" ロールを関数アプリのマネージド ID に割り当てます。 詳細については、「 Azure CLI を使用して Azure ロールを割り当てる」を参照してください。

    az role assignment create \
        --assignee $functionAppMSIObjectId \
        --role "Workload Orchestration Solution External Validator" \
        --scope "/subscriptions/$subId/resourceGroups/$rg"
    

外部検証を有効にしてソリューション テンプレートを作成する

ソリューション テンプレートを作成するときに、 --enable-external-validation パラメーターを true に設定することで、外部検証を有効にすることができます。 これにより、Azure 関数や Webhook などの外部サービスを使用してソリューション テンプレートを検証できます。 外部検証サービスは、ワークロード オーケストレーション サービスからイベントを受信し、カスタム検証ロジックを実行できます。

たとえば、次のコマンドは、外部検証が有効になっているソリューション テンプレートを作成します。

az workload-orchestration solution-template create \
    --solution-template-name $appName1 \
    --resource-group $rg \
    --location $l \
    --capabilities $appCapList1 \
    --description $desc \
    --config-template-file $appConfig \
    --specification "@specs.json" \
    --version $appVersion \
    --enable-ext-validation "true"

外部検証フラグが設定されたソリューション テンプレート バージョン (true または false) が作成されると、フラグはソリューション テンプレート レベルで格納されます。 その結果、すべてのソリューション バージョン (新規と既存の両方) は、同じ外部検証設定を継承します。 したがって、異なる外部検証構成を持つ同じソリューション テンプレートの下に複数のバージョンを含めることはできません。

ソリューション テンプレートとソリューションの発行の詳細については、「 クイック スタート: 一般的な構成なしで基本的なソリューションを作成する」を参照してください。

ソリューションを発行して検証する

  1. ソリューション バージョンを発行すると、発行コマンドによって外部検証プロセスがトリガーされます。 ワークロード オーケストレーション サービスは、イベントを Event Grid サブスクリプションに送信し、外部検証サービスを呼び出します。 外部検証サービスは、カスタム検証ロジックを実行し、ワークロード オーケストレーション サービスに応答を送信できます。

    az workload-orchestration target publish \
      --solution-version-id /subscriptions/$subId/resourceGroups/$rg/providers/private.edge/targets/$childName/solutions/$appName1/versions/1.0.0 \
      --resource-group "$rg" \
      --target-name "$childName"
    
  2. solutionVersionIdexternalValidationIdを、発行応答の一部として取得する変数として設定します。

    solutionVersionId="<solutionVersionId>"
    externalValidationId="<externalValidationId>"
    

Event Grid では、イベント サブスクリプションを使用して最終的な配信エンドポイントを決定し、サブジェクト名の照合などの必要なフィルター処理を適用して、関連するイベントのみが確実に転送されるようにします。

ワークロード オーケストレーション ポータルを使用して検証の状態を監視する

発行後、ソリューションはワークロード オーケストレーション ポータルですぐに [進行中の発行] 状態に移動する必要があります。つまり、外部検証のためにデータが Event Grid に正常にプッシュされています。

  • ソリューションが デプロイ準備完了 状態の場合、検証は正常に完了しました。

  • ソリューションが 発行に失敗した 状態の場合、いくつかのエラーが原因で検証に失敗しました。 ワークロード オーケストレーション ポータルの [構成] タブ で、[ 発行済みソリューション ] タブに移動し、ソリューションのアラートをクリックしてエラーの詳細を表示します。

CLI を使用してソリューション バージョンの状態を確認する

CLI を使用して、ソリューション バージョンの状態を確認できます。 ソリューション バージョンの状態は、ソリューション バージョン オブジェクトの properties.state フィールドに格納されます。

状態は ReadyToDeploy です

状態が PendingExternalValidation から ReadyToDeploy に変わる場合は、外部検証が成功し、ソリューションをデプロイする準備ができていることを意味します。 ソリューションのインストールを続行できます。

solutionVersionを前の手順で作成した新しいバージョンに変更します。

subId="<subscription-id>"
solutionVersion="<new-solution-version>"
solutionName="<solution-template-name>"

az workload-orchestration target install --resource-group "$rg" --target-name "$childName" --solution-version-id /subscriptions/$subId/resourceGroups/$rg/providers/private.edge/targets/$childName/solutions/$solutionName$/versions/$solutionVersion

ステータスは ExternalValidationFailed です

状態が PendingExternalValidation から ExternalValidationFailedに変わると、構成が間違って外部検証に失敗し、ソリューションをデプロイできないことを意味します。 これを解決するには、有効な構成でソリューション テンプレートの新しいバージョン/リビジョンを作成する必要があります。

状態は外部検証待ちです。

状態が PendingExternalValidation 状態のままである場合は、Function App で何らかのエラーが発生したため、状態がさらに進まない可能性があります。 これを解決するには、次の CLI コマンドを使用して、ソリューション バージョンの状態を Valid または Invalid に手動で更新します。

  1. GET 応答で、properties.state の状態を確認します

    az rest --method GET --url "$solutionVersionId?api-version=2025-01-01-preview"
    
  2. ソリューション バージョンの構成を 有効として設定するには:

    1. 次のコマンドを使用して、ソリューションバージョンの状態を Valid に更新します。

      az workload-orchestration target update-external-validation-status \
          --resource-group $rg \
          --target-name $childName \
          --external-validation-id $externalValidationId \
          --solution-version-id $solutionVersionId \
          --validation-status "Valid"
      
    2. コマンド応答では、ソリューション バージョン オブジェクトが表示され、状態が ReadyToDeployに変更されます。

    3. インストールに進みます。

  3. ソリューションのバージョン構成を 無効として設定するには:

    1. 次のコマンドを使用して、ソリューションバージョンの状態を Invalid に更新します。

      az workload-orchestration target update-external-validation-status \
       --resource-group $rg \
       --target-name $childName \
       --external-validation-id $externalValidationId \
       --solution-version-id $solutionVersionId \
       --validation-status "Invalid" \
       --error-details "@error.json"
      
    2. コマンド応答では、ソリューション バージョン オブジェクトが表示され、状態が ExternalValidationFailedに変更されます。

    3. error.json ファイルに記載されているエラーは、応答ソリューション バージョン オブジェクトの properties.errorDetails フィールドに格納されます。 エラーは、 ワークロード オーケストレーション ポータルに表示されます。

    4. これはターミナル状態であるため、ソリューション バージョンに無効な構成があるため、インストールを続行できません。 インストールを続行するには、有効な構成で新しいバージョン/リビジョンを作成する必要があります。