Azure CLI Azure Operator Service Manager (AOSM) 拡張機能の問題

このドキュメントには、Azure CLI AOSM 拡張機能を使用してネットワーク機能をオンボードする際の一般的な問題とその解決策のリストが含まれています。

一般的な問題

発行元が既にリージョン内に存在する

発行元名は 1 つの Azure リージョン内で一意である必要があります。 次のエラーが発生した場合は、選択した発行元名が既に使用されています。

Message: A private publisher resource with the name 'nginx-publisher' already exists in the provided region.

このエラーを解決するには、次の方法があります。

その発行元は自分が所有しており、自分のテナント内にあり、再利用したい場合:

発行元は AOSM CLI 拡張機能の構成ファイル内で定義されます。 publisher_name フィールドと publisher_resource_group_name フィールドは、既存の発行元のものと一致する必要があり、このデプロイに使用するテナントに存在する必要があります。

構成ファイル内の publisher_resource_group_name を、既存の発行元を参照するように変更し、対応する build コマンドを再実行してから、publish コマンドを再実行してください。

その既存の発行元は自分が所有するものではない:

新しい発行元名を使用してください。

ネットワーク サービス設計 (NSD) 成果物のアップロード失敗

az aosm nsd publish コマンドを使用した成果物のアップロードは、まれに失敗することがあります。 この場合のエラー出力は次のとおりです。

ValueError: Issue retrieving session url: {'errors': [{'code': 'UNAUTHORIZED', 'message': 'authentication required, visit https://aka.ms/acr/authorization for more information.', 'detail': [{'Type': 'repository', 'Name': 'contoso-nsd', 'Action': 'pull'}, {'Type': 'repository', 'Name': 'contoso-nsd', 'Action': 'push'}]}]}

このエラーを解決するには、次の方法があります。

オプション 1. 使用するサブスクリプションに Contributor および AcrPush のロールが割り当てられていることを確認します。 割り当てられていない場合は割り当てます。 このロールの割り当てを設定できない場合は、--no-subscription-permissions パラメーターを指定して az aosm nsd publish コマンドを実行します。

オプション 2. これらのアクセス許可で問題が解決しない場合は、az aosm nsd build コマンドによって作成された nsd-cli-output/artifacts フォルダーから次のコマンドを実行します。

  • CLI によって生成された BICEP ファイルからネットワーク機能 ARM テンプレートを構築します
bicep build <nf-name>.bicep
  • az aosm nsd publish コマンドで作成した成果物マニフェストからスコープ マップ トークンの資格情報を生成します。

重要

az aosm nsd publish コマンドで作成した成果物マニフェストを使用する必要があります。 NF ARM テンプレートはそのマニフェスト内でのみ宣言されているため、このマニフェストによって生成されたスコープ マップ トークンのみが NF ARM テンプレートを成果物ストアにプッシュ (またはプル) できます。

az rest --method POST --url 'https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.HybridNetwork/publishers/<publisher>/artifactStores/<artifact-store>/artifactManifests/<artifactManifest>/listCredential?api-version=2023-09-01'
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
  • ORAS を使用して、ネットワーク機能 ARM テンプレートを AOSM マネージド Azure Container Registry (ACR) にアップロードします。 <arm-template-version> 成果物タグは、1.0.0 形式である必要があります。
oras push <aosm-managed-acr-name>.azurecr.io/Contoso-nsd:<arm-template-version> ./nsd-cli-output/artifacts/<nf-name>.json

テナント間コピーの失敗

Azure CLI AOSM 拡張機能では、イメージのテナント間コピーはネイティブにサポートされていません。 ただし、この機能を許可する方法で CLI 環境を構成することは可能です。 このプロセスでは、既定の Azure サブスクリプションをソース ACR を含むサブスクリプションに設定し、ソース ACR にサインインしてから、--subscription パラメーターを指定してすべての az aosm コマンドを実行し、値をターゲット サブスクリプションに設定します。 ソースとターゲットのサブスクリプションは、異なるテナントに存在できます。

az account set --subscription <source-acr-subscription>
az acr login --name <source-acr-name> -u <source-acr-username> -p <source-acr-password> --subscription <source-acr-subscription>
az aosm nfd publish --definition-type cnf --subscription <target-subscription>

一般的な構成ミス

サイトとネットワーク サービス設計のバージョン (NSDV) の構成が一致しない場合、サイト ネットワーク サービス (SNS) のデプロイが失敗する

サイト リソースの nfvi プロパティが NSDV の nfvisFromSite プロパティと一致しない場合、SNS の作成が失敗します。 エラーは次のとおりです。

{
"statusMessage": "{\"status\":\"Failed\",\"error\":{\"code\":\"ResourceOperationFailure\",\"message\":\"The resource operation completed with terminal provisioning state 'Failed'.\",\"details\":[{\"code\":\"InvalidRequestContent\",\"message\":\"For NfviAlias = nfvi1, either NfviName = nsd-contoso_NFVI and NfviType = AzureCore does not match with site resource.\"}]}}",
}

この例では、NSDV nfvisFromSite プロパティには次のものが含まれています。

    nfvisFromSite: {
      nfvi1: {
        name: 'nsd-contoso_NFVI1'
        type: 'AzureArcKubernetes'
      }

サイト リソースの nfvi プロパティは、NSDV の名前と型と一致する必要があります。

resource site 'Microsoft.HybridNetwork/sites@2023-09-01' = {
  name: 'contoso-site'
  location: 'eastus'
  properties: {
    nfvis : [
      {
        name: 'nsd-contoso_NFVI1'
        nfviType: 'AzureArcKubernetes'
        customLocationReference: {
          id: '<custom-location-arm-id>'
        }
      }
    ]
  }
}

構成グループ値 (CGV) の nfdvName が、公開されているネットワーク機能定義バージョン (NFDV) と一致しない

Azure CLI AOSM 拡張機能によって生成される構成グループ スキーマには、nfdvName という必須パラメーターがあります。 nfdvname は NFDV の名前であり、1.0.0 形式の文字列です。 ネットワーク機能 (NF) またはネットワーク機能定義グループ (NFDG) の名前ではありません。 次の例は、正しい使用法を示しています。

{
    "nsd-contoso": {
        "nfdvName": "1.0.0",
        "deployParameters": [
            {}
        ],
        "customLocationId": "<custom-location-arm-id>",
        "managedIdentityId": "<managed-id-arm-id>"
    }
}

構成グループ スキーマ (CGS) でパラメーターを公開しない場合の CGV 値プロパティが正しくない

Azure CLI AOSM 拡張機能によって生成された構成グループ スキーマは、既定で JSON オブジェクトの配列である deployParameters フィールドを公開します。 空の deployParameters フィールドを使用して CGV を作成する理由はいくつかあります。

  • 構成グループ スキーマで公開されている構成がなく、すべての値が Helm チャートの既定の values.yaml に設定されている。
  • 既定値を含む構成グループ スキーマを作成したが、それらをオーバーライドしたくない。

空の deployParameters フィールドを含む CGV を作成する場合、そのフィールド値は空の JSON オブジェクトを含む配列である必要があります。

{
    "nsd-contoso": {
        "nfdv": "1.0.0",
        "deployParameters": [
            {}
        ],
        "customLocationId": "<custom-location-arm-id>",
        "managedIdentityId": "<managed-id-arm-id>"
    }
}

CGV に空のオブジェクトを含む配列 ([{}]) ではなく空の配列 ([]) が含まれている場合、AOSM は次のエラー メッセージを返します。

{"code":"BadRequest","message":"NSDV ResourceElementTemplate (name: 'mco-nsdg', type: 'NetworkFunctionDefinition') expects at least one 'networkfunctions' resource in the associated template. Please use the type: 'ArmResourceDefinition' to install generic ARM resources."}

Helm チャートのイメージ プロパティとソース ACR 内の場所の不一致

AOSM CLI では、ソース レジストリ内のイメージが、Helm チャートに記述されているのと同じリポジトリ構造内にある必要があります。 たとえば、Helm チャートに core/contoso-a:1.0.0 として含まれるイメージは、core/contoso-a:1.0.0 で終わるパスのソース レジストリで使用できる必要があります。 イメージをソース レジストリの正しいパスにアップロードできないと、az aosm nfd publish が次のエラーで失敗します。

Code: InvalidParameters
Message: Operation registries-cd9ad97d-f3a3-11ee-a728-6b163569f55a failed. Resource /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerRegistry/registries/contoso Invalid message NotFound Not Found {"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest tagged by \"0.0.0-9\" is not found","detail":{"Tag":"0.0.0-9"}}]}

複数の解決策があります。

  • Helm チャートを編集するか、values.yaml でイメージ パスを渡し、ソース レジストリのリポジトリ構造と一致するようにイメージ パスを設定します。
  • cnf-input.jsonc ファイル内の "image_sources" と Helm チャートからのイメージ パスを連結したものが、ソース レジストリ内のアップロードされた場所と一致するように、イメージをソース レジストリにアップロードします。
  • AOSM CLI は、検出したイメージのメタデータを cnf-cli-output/artifacts/artifacts.json に保存します。 AOSM CLI がソース レジストリ内で検索するパスは、<registry_name>/<registry_namespace>/<artifact_name>/<artifact_version> です。 値がソース ACR 内のイメージの場所と一致するように、このファイルを手動で編集できます。

パラメータが null 型の場合、CGV が CGS と一致しない

現在、AOSM では、deployParameters スキーマの既定値として null がサポートされていません。つまり、構成グループ スキーマでも既定値 null は許可されません。 この問題を回避するために、AOSM CLI では null 型のパラメーターの既定値が文字列 "null" に設定されており、これで NFDV を正常に発行できます。

ポータルを使用して CGV を作成する場合、パラメーターは値として "null" を持つようにオートフィルされます。 この値を変更しない場合、ポータルに "新しい構成グループの値がスキーマと一致しません - 値を編集してください" というエラー メッセージが表示されます。

構成グループの値が構成グループ スキーマと一致しないためにエラー メッセージが表示されたポータルのスクリーンショット。

このエラーを修正するには、CGV で "null"null に変更します。

たとえば、最初は値 "null" がありました。

"serviceAccount_name": "null",

これは値 null に変更する必要があります。

"serviceAccount_name": null,