次の方法で共有


Event Grid 外部検証ペイロード

このドキュメントでは、ワークロード オーケストレーションでのソリューション バージョンの外部検証のための Event Grid ペイロードの詳細について説明します。 これには、ソリューション バージョンのリソースを取得し、外部検証状態を更新するための Event Grid メッセージ形式、フィールドの説明、API エンドポイントに関する情報が含まれています。

詳細については、「 ワークロード オーケストレーションの外部検証」を参照してください。

Event Grid ペイロード Microsoft.Edge.SolutionVersionPublished

ソリューション バージョンが発行されると、コンテキスト リソースに関連付けられている Event Grid トピックにイベントが送信されます。 このイベントには、ソリューションのバージョンに関する情報と、外部検証の状態を更新するためのコールバック URL が含まれています。

Event Grid メッセージの JSON ペイロードには、次のフィールドが含まれています。 data セクションには、外部検証要求の一意識別子であるexternalValidationIdと、検証結果の受信後に呼び出されるエンドポイントであるcallbackUrlが含まれます。

[
  {
    "id": "event-id-guid",
    "topic": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/contexts/<context-name>",
    "subject": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>",
    "eventType": "Microsoft.Edge.SolutionVersionPublished",
    "eventTime": "2025-04-21T11:19:25.281991Z",
    "data": {
      "externalValidationId": "validation-id-guid",
      "targetId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>",
      "solutionTemplateId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/solutionTemplates/<template-name>",
      "solutionTemplateVersionId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/solutionTemplates/<template-name>/versions/<template-version>",
      "solutionVersionId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>",
      "apiVersion": "2025-01-01-preview",
      "callbackUrl": "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/updateExternalValidationStatus?api-version=2025-01-01-preview"
    },
    "dataVersion": "1"
  }
]

次の表では、Event Grid ペイロードのフィールドについて説明します。

フィールド 説明
id イベント専用の識別子。
topic トピック名。ここでは、コンテキスト リソースを示します。
subject イベントのルーティング/フィルター処理に使用される、発行済みソリューション バージョンのリソース パス。
eventType 発行されたイベントの種類 - Microsoft.Edge.SolutionVersionPublished
eventTime イベントが発生したときのタイムスタンプ (UTC 形式)。
data.externalValidationId 外部検証要求の関連付け ID。
data.targetId ターゲット リソースの ARM リソース ID。
data.solutionTemplateId ソリューション テンプレートの ARM リソース ID。
data.solutionTemplateVersionId ソリューション テンプレートの特定のバージョンの ARM ID。
data.solutionVersionId 検証対象の実際のソリューション バージョンの ARM ID。
data.apiVersion リソースのクエリに使用できる API バージョン。
data.callbackUrl 検証後に呼び出されるエンドポイントには、 api-versionが含まれます。
dataVersion データ スキーマのバージョン。

GET API – ソリューション バージョンのリソースを取得する

ソリューション バージョン リソースで GET API コマンドを実行して、解決された構成をフェッチできます。 ここで、ソリューション バージョンの ARM ID には、Event Grid ペイロードのdata.apiVersionから data.solutionVersionId 属性と API バージョンからアクセスできます。

Event Grid ペイロード内の他のリソース ID も、同様の GET APIを使用して照会できます。

エンドポイント:

GET https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>?api-version=2025-01-01-preview

ヘッダー:

Content-Type: application/json
Authorization: Bearer <access-token>

応答本文:

{
  "properties": {
    "solutionTemplateVersionId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/solutionTemplates/<template-name>/versions/<template-version>",
    "revision": 1,
    "targetDisplayName": "<target-name>",
    "configuration": "<config-data>",
    "specification": {
      "components": [
        {
          "name": "helmcomponent",
          "type": "helm.v3",
          "properties": {
            "chart": {
              "repo": "<acr-url>/helm/<chart-name>:<chart-tag>",
              "version": "0.3.0",
              "wait": true,
              "timeout": "5m"
            },
            "values": {
              "AppName": "Hotmelt",
              "TemperatureRangeMax": "100",
              "ErrorThreshold": "20",
              "HealthCheckEndpoint": "localhost:8080",
              "EnableLocalLog": "true",
              "AgentEndpoint": "localhost:8080",
              "HealthCheckEnabled": "true",
              "ApplicationEndpoint": "localhost:8080"
            }
          }
        }
      ]
    },
    "reviewId": "<review-id-guid>",
    "externalValidationId": "<validation-id-guid>",
    "state": "PendingExternalValidation",
    "solutionInstanceName": "<solution-name>",
    "provisioningState": "Succeeded"
  },
  "extendedLocation": {
    "name": "/subscriptions/<subscription-id>/resourceGroups/<cluster-rg>/providers/Microsoft.ExtendedLocation/customLocations/<custom-location>",
    "type": "CustomLocation"
  },
  "eTag": "\"<etag-value>\"",
  "id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>",
  "name": "<version-name>",
  "type": "microsoft.edge/targets/solutions/versions"
}

POST API – 外部検証の状態を更新する

POST API コマンドは、ソリューション バージョンの外部検証状態を更新するために使用されます。 この API は、外部検証プロセスが完了した後に呼び出され、検証結果でソリューション バージョン リソースが更新されます。

エンドポイント:

POST https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/updateExternalValidationStatus?api-version=2025-01-01-preview

ヘッダー:

Content-Type: application/json
Authorization: Bearer <access-token>

リクエストボディ:

{
  "externalValidationId": "validation-id-guid",
  "solutionVersionId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>",
  "validationStatus": "Invalid",
  "errorDetails": {} //explained below
}

要求本文には、次のフィールドが含まれています。

  • externalValidationId: 検証操作を追跡するための一意の GUID。 Event Grid メッセージ ペイロード (data.externalValidationId) から受信したのと同じ GUID を渡す必要があります。これは、古い更新を確実に行うのに役立ちます。
  • solutionVersionId: 検証対象のソリューション バージョンの完全な ARM ID。 Event Grid メッセージ ペイロード (data.solutionVersionId) に存在します。

エラーの詳細オブジェクト

検証の状態が "Invalid" に設定されている場合に要求本文に含めることができるサンプル errorDetails オブジェクトを次に示します。 このオブジェクトは、検証エラーに関する追加情報を提供します。

{
  "code": "InvalidConfigurations",
  "message": "The provided configurations are invalid.",
  "target": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>",
  "additionalInfo": [
    {
      "type": "InvalidHelmChart",
      "info": {
        "level": "Error",
        "message": "The Helm chart provided is invalid or not supported."
      }
    }
  ]
}

errorDetails オブジェクトには、検証エラーに関する情報が含まれています。 次のフィールドが含まれています。

  • code: 問題のカテゴリを示す、コンピューターで読み取り可能なエラー コード。

  • message: 問題が発生した内容を人間が判読できる説明。

  • target: エラーの影響を受ける ARM リソース パス。

  • additionalInfo[]:

    • type: 障害に関連するカテゴリまたはコンポーネント (Helm など)。
    • info.level: エラーの重大度 (ErrorWarningなど)。
    • info.message: トラブルシューティングのためのその他のコンテキスト。

検証の状態が "Valid" に設定されている場合、errorDetails オブジェクトは必要ありません。 その場合は、要求本文から errorDetails フィールドを省略できます。

POST API 応答

POST API の応答本文は、新しい検証状態で更新されたソリューション バージョン リソースを返します。 state フィールドには新しい状態が反映され、検証の状態が"Invalid"に設定されている場合は、errorDetails フィールドにエラー情報が含まれます。

{
  "properties": {
    "solutionTemplateVersionId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/solutionTemplates/<template-name>/versions/<template-version>",
    "revision": 1,
    "errorDetails": {
      "code": "InvalidConfigurations",
      "message": "The provided configurations are invalid.",
      "target": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>",
      "additionalInfo": [
        {
          "type": "InvalidHelmChart",
          "info": {
            "level": "Error",
            "message": "The Helm chart provided is invalid or not supported."
          }
        }
      ]
    },
    "targetDisplayName": "<target-name>",
    "configuration": "<config-data>",
    "specification": {
      "components": [
        {
          "name": "helmcomponent",
          "type": "helm.v3",
          "properties": {
            "chart": {
              "repo": "<acr-url>/helm/<chart-name>:<chart-tag>",
              "version": "0.3.0",
              "wait": true,
              "timeout": "5m"
            },
            "values": {
              "AppName": "Hotmelt",
              "TemperatureRangeMax": "100",
              "ErrorThreshold": "20",
              "HealthCheckEndpoint": "localhost:8080",
              "EnableLocalLog": "true",
              "AgentEndpoint": "localhost:8080",
              "HealthCheckEnabled": "true",
              "ApplicationEndpoint": "localhost:8080"
            }
          }
        }
      ]
    },
    "reviewId": "<review-id-guid>",
    "externalValidationId": "<validation-id-guid>",
    "state": "ExternalValidationFailed",
    "solutionInstanceName": "<solution-name>",
    "provisioningState": "Succeeded"
  },
  "extendedLocation": {
    "name": "/subscriptions/<subscription-id>/resourceGroups/<cluster-rg>/providers/Microsoft.ExtendedLocation/customLocations/<custom-location>",
    "type": "CustomLocation"
  },
  "eTag": "\"<etag-value>\"",
  "id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Edge/targets/<target-name>/solutions/<solution-name>/versions/<version>",
  "name": "<version-name>",
  "type": "microsoft.edge/targets/solutions/versions"
}

外部検証の状態を更新する

validationStatus フィールドは検証の結果を示します。検証の結果は、"Valid"または"Invalid"できます。 詳細については、 CLI を使用したソリューション バージョンの状態の確認を参照してください。

有効な構成を設定する

az workload-orchestration target update-external-validation-status \
 --resource-group <rg-name> \
 --target-name <target-name> \
 --external-validation-id <external-validation-id> \
 --solution-version-id <solution-version-id> \
 --validation-status "Valid"

無効な構成を設定する

az workload-orchestration target update-external-validation-status \
 --resource-group <rg-name> \
 --target-name <target-name> \
 --external-validation-id <external-validation-id> \
 --solution-version-id <solution-version-id> \
 --validation-status "Invalid" \
 --error-details "@error.json"

error.json ファイルは、errorDetails オブジェクトと同じスキーマに従います。