2
votes

Syntaxe des paramètres de la zone de disponibilité Azure

J'essaye de paramétrer un déploiement de VM qui utilise des zones de disponibilité. Cependant, je continue de recevoir cette erreur lors du déploiement:

"La valeur fournie pour le paramètre de modèle" availabilityZoneParameter "à la ligne" 1 "et la colonne" 5118 "n'est pas valide."

ou: p>

"L'analyse du modèle de déploiement a échoué: 'Erreur lors de la conversion de la valeur \" [' 1 '] \ "en type' System.String [] '. Path' '.'."

Le paramètre la syntaxe du fichier est actuellement:

  "resources": [
{
  "apiVersion": "[variables('apiVersion')]",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('location')]",
  "zones": "[variables('availabilityZone')]",
  "plan": {
    "name": "[parameters('imageSku')]",
    "product": "[parameters('imageOffer')]",
    "publisher": "[parameters('imagePublisher')]"
  },
  "properties":

Je le porte ensuite en tant que paramètre et le transforme en variable, avant de l'exporter vers d'autres modèles liés et de l'utiliser dans le modèle de construction initial.

Paramètre dans la syntaxe du fichier de déploiement:

  "variables": {
"apiVersion": "2018-04-01",
"availabilityZone": "[parameters('avZone')]"

Variable dans la syntaxe du fichier de déploiement d'origine:

    "avZone": {
  "type": "string"


3 commentaires

pouvez-vous faire un zoom arrière un peu


Bien sûr, je vais mettre à jour avec quelques détails supplémentaires.


D'accord, j'ai ajouté les différents morceaux de syntaxe, dans l'ordre que je crois qu'ils s'exécutent.


3 Réponses :


3
votes

D'après l'exemple que j'ai trouvé en ligne, cela devrait ressembler à ceci:

"availabilityZoneParameter": {
    "type": "array"
}

aussi, ce devrait être array:

"availabilityZoneParameter": {
    "value": [ "1" ]
}

Comme il exclut un tableau, pas une chaîne qui ressemble à un tableau:

https://github.com/Azure/azure-quickstart-templates/blob/master/101-vm-simple-zones/azuredeploy. json # L176


1 commentaires

Oui, cela a fonctionné. J'obtenais quelques erreurs lorsque j'essayais de l'utiliser également comme tableau ... puis j'ai réalisé que j'avais des crochets supplémentaires là-dedans! Maintenant c'est corrigé. Merci pour l'aide!



0
votes

Le paramètre doit-il être simplement?

"availabilityZoneParameter": {
  "value": "1"
}


1 commentaires

Salut Dwayne. La valeur du paramètre doit être écrite sous forme de tableau et le type "tableau" spécifié dans le modèle plutôt que le type "chaîne". Si vous êtes intéressé, veuillez consulter ma réponse "syntaxe finale" pour la syntaxe complète.



0
votes

Syntaxe finale, pour ceux qui viennent sur ce forum cherchant la même réponse:

Notez que la valeur est un tableau et non une chaîne, comme indiqué par le contributeur 4c74356b41 dans ce fil.

Dans le fichier azureparameter d'origine:

  "apiVersion": "[variables('apiVersion')]",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('location')]",
  "zones": "[parameters('avZone')]",

Dans le fichier azuredeploy:

    },
"avZone": {
  "type": "array"
}

Pour appeler la zone de disponibilité paramètre dans un modèle imbriqué (exemple utilisant une ressource de disque de stockage):

"avZone": {
  "value": "[parameters('availabilityZone')]"

Si vous utilisez un modèle lié, lors de l'expression des paramètres du modèle lié, j'ai utilisé cette syntaxe:

XXX

Importation du paramètre dans le modèle lié:

  "name": "[variables('diskName')]",
  "type": "Microsoft.Compute/disks",
  "apiVersion": "2017-03-30",
  "location": "[resourceGroup().location]",
  "zones": "[parameters('availabilityZone')]",
  "sku": {

Et puis dans les ressources du modèle lié, j'ai appelé le paramètre dans le même comme le modèle azuredeploy:

    },
"availabilityZone": {
  "type": "array"
}

Comme vous pouvez le voir, j'ai décidé de ne pas le transformer en variable car cela n'était pas nécessaire dans mon cas.

p >


0 commentaires