AJÁNLOTT eljárások az ARM-sablonokhoz

Ez a cikk bemutatja, hogyan használhatja az ajánlott eljárásokat a Azure Resource Manager (ARM-sablon) létrehozásakor. Ezek a javaslatok segítenek elkerülni a gyakori problémákat, amikor ARM-sablonnal helyez üzembe egy megoldást.

Sablonkorlátok

Korlátozza a sablon méretét 4 MB-re. A 4 MB-os korlát a sablon végső állapotára vonatkozik, miután iteratív erőforrás-definíciókat, valamint változók és paraméterek értékeit kiterjesztette. A paraméterfájl mérete is legfeljebb 4 MB lehet. Ha a kérés teljes mérete túl nagy, a rendszer 4 MB-nál kisebb sablon- vagy paraméterfájllal hibát jelezhet. A nagyméretű kérések elkerülése érdekében a sablon egyszerűsítésével kapcsolatos további információkért lásd: A feladat méretének túllépése esetén előforduló hibák elhárítása.

A következőre is van korlátozva:

  • 256 paraméter
  • 256 változó
  • 800 erőforrás (beleértve a másolások számát)
  • 64 kimeneti érték
  • 24 576 karakter egy sablonkifejezésben

Beágyazott sablon használatával túlléphet bizonyos sablonkorlátokat. További információ: Csatolt és beágyazott sablonok használata Azure-erőforrások üzembe helyezésekor. A paraméterek, változók vagy kimenetek számának csökkentéséhez több értéket kombinálhat egy objektumban. További információ: Objektumok paraméterként.

Erőforráscsoport

Amikor erőforrásokat helyez üzembe egy erőforráscsoportban, az erőforráscsoport az erőforrások metaadatait tárolja. A metaadatok az erőforráscsoport helyén vannak tárolva.

Ha az erőforráscsoport régiója átmenetileg nem érhető el, nem frissítheti az erőforráscsoport erőforrásait, mert a metaadatok nem érhetők el. A más régiókban található erőforrások továbbra is a várt módon fognak működni, de nem frissítheti őket. A kockázat minimalizálása érdekében keresse meg az erőforráscsoportot és az erőforrásokat ugyanabban a régióban.

Paraméterek

Az ebben a szakaszban található információk hasznosak lehetnek a paraméterekkel való munka során.

Általános javaslatok a paraméterekhez

  • Minimalizálja a paraméterek használatát. Ehelyett használjon változókat vagy konstansértékeket olyan tulajdonságokhoz, amelyek nem lesznek megadva az üzembe helyezés során.

  • A paraméternevekhez használja a camel case (camel case) nevet.

  • A paraméterek olyan beállításokhoz használhatók, amelyek a környezettől függően, például az SKU, a méret vagy a kapacitás szerint változnak.

  • Az egyszerű azonosítás érdekében használjon paramétereket az erőforrásnevekhez.

  • Adja meg a metaadatokban megadott összes paraméter leírását.

    "parameters": {
      "storageAccountType": {
        "type": "string",
        "metadata": {
          "description": "The type of the new storage account created to store the VM disks."
        }
      }
    }
    
  • Definiálja a nem bizalmas paraméterek alapértelmezett értékeit. Az alapértelmezett érték megadásával könnyebb üzembe helyezni a sablont, és a sablon felhasználói egy megfelelő értékre láthatnak egy példát. A paraméterek minden alapértelmezett értékének érvényesnek kell lennie az összes felhasználóra az alapértelmezett üzembe helyezési konfigurációban.

    "parameters": {
      "storageAccountType": {
        "type": "string",
        "defaultValue": "Standard_GRS",
        "metadata": {
          "description": "The type of the new storage account created to store the VM disks."
        }
      }
    }
    
  • Nem kötelező paraméter megadásához ne használjon üres sztringet alapértelmezett értékként. Ehelyett használjon konstansértéket vagy nyelvi kifejezést egy érték felépítéséhez.

    "storageAccountName": {
       "type": "string",
       "defaultValue": "[concat('storage', uniqueString(resourceGroup().id))]",
       "metadata": {
         "description": "Name of the storage account"
       }
    }
    
  • Csak allowedValues ritkán használja. Csak akkor használja, ha meg kell győződnie arról, hogy egyes értékek nem szerepelnek az engedélyezett beállítások között. Ha túl széles körben használja, letilthatja az érvényes központi telepítéseket, ha nem tartja naprakészen a allowedValues listát.

  • Ha a sablonban egy paraméternév megegyezik a PowerShell üzembehelyezési parancs egyik paraméterének nevével, a Resource Manager úgy oldja fel ezt az elnevezési ütközést, hogy hozzáadja a FromTemplate utótagot a sablonparaméterhez. Ha például egy ResourceGroupName nevű paramétert ad meg a sablonban, az ütközik a New-AzResourceGroupDeployment parancsmag ResourceGroupName paraméterével. Az üzembe helyezés során meg kell adnia a ResourceGroupNameFromTemplate értékét.

Biztonsági javaslatok paraméterekhez

  • Mindig használjon paramétereket a felhasználónevekhez és jelszavakhoz (vagy titkos kulcsokhoz).

  • Minden securestring jelszóhoz és titkos hez használható. Ha bizalmas adatokat ad át egy JSON-objektumban, használja a secureObject típust. A biztonságos sztringet vagy biztonságos objektumtípusokat kezelő sablonparaméterek nem olvashatók az erőforrások üzembe helyezése után.

    "parameters": {
      "secretValue": {
        "type": "securestring",
        "metadata": {
          "description": "The value of the secret to store in the vault."
        }
      }
    }
    
  • Ne adjon meg alapértelmezett értékeket a felhasználónevekhez, jelszavakhoz vagy bármilyen típust igénylő secureString értékhez.

  • Ne adjon meg alapértelmezett értékeket olyan tulajdonságokhoz, amelyek növelik az alkalmazás támadási felületét.

Paraméterek helyével kapcsolatos javaslatok

  • Egy paraméterrel adja meg az erőforrások helyét, és állítsa az alapértelmezett értéket resourceGroup().location értékre. A helyparaméter megadásával a sablon felhasználói megadhatnak egy helyet, ahol jogosultsággal rendelkezik az erőforrások üzembe helyezéséhez.

    "parameters": {
       "location": {
         "type": "string",
         "defaultValue": "[resourceGroup().location]",
         "metadata": {
           "description": "The location in which the resources should be deployed."
         }
       }
    }
    
  • Ne adja meg a allowedValues értéket a location paraméterhez. Előfordulhat, hogy a megadott helyek nem minden felhőben érhetők el.

  • Használja a location paraméter értékét az olyan erőforrásokhoz, amelyek valószínűleg ugyanazon a helyen lesznek. Ez a megközelítés minimálisra csökkenti, hogy a felhasználók hányszor kell adatokat adniuk a helyinformációknak.

  • Az olyan erőforrásokhoz, amelyek nem érhetők el minden helyen, használjon külön paramétert, vagy adjon meg egy literális helyértéket.

Változók

Az alábbi információk hasznosak lehetnek a változók esetében:

  • Használja a camel case változóneveket.

  • Használjon változókat olyan értékekhez, amelyek egy sablonban egynél többet kell használnia. Ha egy értéket csak egyszer használ, a nem kódolt érték megkönnyíti a sablon olvasását.

  • A sablonfunkciók összetett elrendezése alapján létrehozott értékekhez használjon változókat. A sablon könnyebben olvasható, ha az összetett kifejezés csak változókban jelenik meg.

  • A referencia függvény nem használható a sablon variables szakaszában. A függvény az erőforrás futásidejű állapotából reference származtatja az értékét. A változók feloldása azonban a sablon első elemezéskor meg is oldható. Olyan értékeket is felépít, amelyekhez közvetlenül a sablon vagy szakaszában van szükség reference resources a outputs függvényre.

  • Egyedinek kell lennie az erőforrásnevek változóinak.

  • A változókban lévő másolási hurok használatával ismétlődő JSON-objektumokat hozhat létre.

  • Távolítsa el a nem használt változókat.

API-verzió

Állítsa apiVersion a tulajdonságot egy nem szoftveres API-verzióra az erőforrástípushoz. Új sablon létrehozásakor javasoljuk, hogy erőforrástípusként a legújabb API-verziót használja. Az elérhető értékek meghatározásához tekintse meg a sablonreferenciát.

Ha a sablon a várt módon működik, javasoljuk, hogy továbbra is ugyanazt az API-verziót használja. Ha ugyanazt az API-verziót használja, nem kell aggódnia a későbbi verziókban esetleg bevezetett használjjó változások miatt.

Ne használjon paramétert az API-verzióhoz. Az erőforrás tulajdonságai és értékei API-verziónként eltérőek lehetnek. A kódszerkesztőben az IntelliSense nem tudja meghatározni a megfelelő sémát, ha az API-verzió paraméterre van beállítva. Ha olyan API-verziót ad meg, amely nem egyezik a sablonban elérhető tulajdonságokkal, az üzembe helyezés sikertelen lesz.

Ne használjon változókat az API-verzióhoz.

Erőforrás-függőségek

Amikor eldönti, hogy milyen függőségeket kell beállítania, használja az alábbi irányelveket:

  • Használja a függvényt, és adja meg az erőforrás nevét egy implicit függőség beállítására az olyan erőforrások között, amelyek meg kell reference osztaniuk egy tulajdonságot. Ne adjon hozzá explicit dependsOn elemet, ha már definiált egy implicit függőséget. Ez a megközelítés csökkenti a szükségtelen függőségek kockázatát. Az implicit függőség beállítására példát a referencia- és listaf függvények között láthat.

  • Állítson be egy gyermekerőforrást a szülőerőforrástól függően.

  • Azok az erőforrások, amelyek feltételeleme false (hamis) értéket ad meg, automatikusan törlődnek a függőségi sorrendből. Állítsa be a függőségeket úgy, mintha az erőforrás mindig üzembe lenne állítva.

  • Hagyja, hogy a függőségek kaszkádoltak explicit beállítás nélkül. A virtuális gép például egy virtuális hálózati adaptertől, a virtuális hálózati adapter pedig egy virtuális hálózattól és egy nyilvános IP-címtől függ. Ezért a virtuális gép mindhárom erőforrás után üzembe lesz állítva, de ne állítsa be explicit módon, hogy az mindhárom erőforrástól függ. Ez a megközelítés tisztázza a függőségek sorrendjét, és megkönnyíti a sablon későbbi módosítása.

  • Ha az üzembe helyezés előtt meg lehet határozni egy értéket, próbálja meg függőség nélkül üzembe helyezni az erőforrást. Ha például egy konfigurációs értéknek szüksége van egy másik erőforrás nevére, előfordulhat, hogy nincs szüksége függőségre. Ez az útmutató nem mindig működik, mert egyes erőforrások ellenőrzik a másik erőforrás meglétét. Ha hibaüzenetet kap, adjon hozzá egy függőséget.

Források

Az alábbi információk hasznosak lehetnek az erőforrásokkal való munka során:

  • Annak érdekében, hogy más közreműködők megértsék az erőforrás célját, adja meg a comments sablonban az egyes erőforrásokat.

    "resources": [
      {
        "name": "[variables('storageAccountName')]",
        "type": "Microsoft.Storage/storageAccounts",
        "apiVersion": "2019-06-01",
        "location": "[resourceGroup().location]",
        "comments": "This storage account is used to store the VM disks.",
          ...
      }
    ]
    
  • Ha nyilvános végpontot használ a sablonban (például egy Nyilvános Azure Blob Storage-végpontot), ne kódolta a névteret. A reference névtér dinamikus lekérése a függvény használatával. Ezzel a módszersel különböző nyilvános névtérkörnyezetekben helyezheti üzembe a sablont anélkül, hogy manuálisan módosítja a végpontot a sablonban. Állítsa az API-verziót arra a verzióra, amit a sablonban használt tárfiókhoz használ.

    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": "true",
        "storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').primaryEndpoints.blob]"
      }
    }
    

    Ha a tárfiók ugyanabban a sablonban van telepítve, mint amit létrehoz, és a tárfiók neve nincs megosztva a sablon egy másik erőforrásával, nem kell megadnia a szolgáltatói névteret vagy a nevet, amikor az erőforrásra apiVersion hivatkozik. Az alábbi példa az egyszerűsített szintaxist mutatja be.

    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": "true",
        "storageUri": "[reference(variables('storageAccountName')).primaryEndpoints.blob]"
      }
    }
    

    Hivatkozhat egy másik erőforráscsoportban lévő meglévő tárfiókra is.

    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": "true",
        "storageUri": "[reference(resourceId(parameters('existingResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('existingStorageAccountName')), '2019-06-01').primaryEndpoints.blob]"
      }
    }
    
  • Nyilvános IP-címeket csak akkor rendeljen hozzá egy virtuális géphez, ha egy alkalmazás ezt igényli. Egy virtuális géphez (VM) való csatlakozáshoz hibakeresés céljából, illetve felügyeleti vagy rendszergazdai célokra használjon bejövő NAT-szabályokat, virtuális hálózati átjárót vagy jumpboxot.

    További információ a virtuális gépekhez való csatlakozásról:

  • A domainNameLabel nyilvános IP-címek tulajdonságának egyedinek kell lennie. Az domainNameLabel értéknek 3–63 karakter hosszúságúnak kell lennie, és követnie kell a reguláris kifejezésben megadott szabályokat: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$ . Mivel a függvény 13 karakter hosszúságú sztringet hoz létre, a paraméter uniqueString dnsPrefixString legfeljebb 50 karakterből állhat.

    "parameters": {
      "dnsPrefixString": {
        "type": "string",
        "maxLength": 50,
        "metadata": {
          "description": "The DNS label for the public IP address. It must be lowercase. It should match the following regular expression, or it will raise an error: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$"
        }
      }
    },
    "variables": {
      "dnsPrefix": "[concat(parameters('dnsPrefixString'),uniquestring(resourceGroup().id))]"
    }
    
  • Amikor jelszót ad hozzá egy egyéni szkriptbővítményhez, használja a commandToExecute tulajdonság protectedSettings tulajdonságát.

    "properties": {
      "publisher": "Microsoft.Azure.Extensions",
      "type": "CustomScript",
      "typeHandlerVersion": "2.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
        "fileUris": [
          "[concat(variables('template').assets, '/lamp-app/install_lamp.sh')]"
        ]
      },
      "protectedSettings": {
        "commandToExecute": "[concat('sh install_lamp.sh ', parameters('mySqlPassword'))]"
      }
    }
    

    Megjegyzés

    Annak érdekében, hogy a titkos kulcsok titkosítva legyenek, amikor paraméterekként vannak átküldve a virtuális gépeknek és bővítményeknek, használja a megfelelő protectedSettings bővítmények tulajdonságát.

  • Adjon meg explicit értékeket az olyan tulajdonságokhoz, amelyek alapértelmezett értékei idővel változhatnak. Ha például egy AKS-fürtöt helyez üzembe, megadhatja vagy kihagyhatja a kubernetesVersion tulajdonságot. Ha nem adja meg, akkor a fürt alapértelmezett verziója az N-1 alverzióés a legújabb javítás. Ha ARM-sablonnal telepíti a fürtöt, előfordulhat, hogy ez az alapértelmezett viselkedés nem a várt működés. A sablon újratelepítése azt eredményezheti, hogy a fürtöt váratlanul új Kubernetes-verzióra frissíti a rendszer. Ehelyett érdemes lehet megadni egy explicit verziószámot, majd manuálisan megváltoztatni, amikor készen áll a fürt frissítéséhez.

Tesztelési eszközkészlet használata

Az ARM-sablonteszt eszközkészlet egy szkript, amely ellenőrzi, hogy a sablon az ajánlott eljárásokat használja-e. Ha a sablon nem felel meg az ajánlott eljárásoknak, a javasolt módosításokkal kapcsolatos figyelmeztetések listáját adja vissza. A tesztelési eszközkészlet segítségével megtudhatja, hogyan implementálja az ajánlott eljárásokat a sablonban.

Miután befejezte a sablont, futtassa a tesztelési eszközkészletet, és ellenőrizze, hogy van-e mód az implementáció javítására. További információ: AZ ARM-sablonteszt eszközkészlet használata.

Következő lépések