Üzembe helyezési sorrend szabályozása függőségek megadásával

Befejeződött

Tegyük fel, hogy több erőforrást szeretne üzembe helyezni az Azure-ban, de csak akkor, ha egy másik erőforrás már üzembe van helyezve. Ilyenkor a sablonban kell közölnie, hogy az egyik erőforrás egy másik erőforrástól függ.

Megfontolandók a következő szempontok:

  • Valaminek már meg kell lennie ahhoz, hogy valami mást üzembe lehessen helyezni.

    Tegyük fel, hogy szüksége van egy Azure Key Vault-kulcstartóra, amelyből lekérheti az egy virtuális gépen betöltendő titkos kódokat. Egy kulcstartó üzembe helyezésével egyidejűleg egyetlen sablonon belül a titkos kódot is elhelyezheti. A kulcstartót azonban a titkos kód előtt kell üzembe helyezni. Ezért a titkos kód létezése a kulcstartótól függ. A kulcstartó és a titkos kód egymás után lesz üzembe helyezve, a függőség miatt a kulcstartóval kezdve.

  • Megbízhatom az Azure Resource Manager működésében?

    Amikor ellenőriznie kell egy másik erőforrás meglétét, az első gondolata talán az, hogy az Azure PowerShell, az Azure CLI vagy hasonló eszköz használatával ellenőrzi, megvan-e már az adott erőforrás. Egy jobban automatizált megoldás a Resource Manager beépített idempotenciáját használja ki. Ha a Resource Manager olyan erőforrást észlel, amely a sablonban definiálva van, de már megvan a felhőben, akkor azt nem helyezi újra üzembe. Ahhoz, hogy ez a módszer elfogadható legyen, tisztában kell lenni azzal, hogyan végzi el az Resource Manager az ellenőrzést.

    Megjegyzés:

    Ha meglévő erőforrás-identitások megfelelnek egy sablonban definiáltakkal, az Azure Resource Manager összehasonlítja a tulajdonságokat. Ha a tulajdonságok pontosan egyeznek, az erőforrással nem történik semmi. Ellenkező esetben a motor végrehajtja a módosításokat – akár újra üzembe is helyezi az erőforrást.

  • Az erőforrások beágyazhatók más erőforrásokba.

    Az Azure Resource Manager-sablonokban az erőforrások beágyazhatók más erőforrásokba. Az erőforrások beágyazása egy relációt definiál a beágyazott erőforrások és a szülőerőforrás között.

Hogyan definiálhatók az Azure-erőforrások közötti függőségek?

Tegyük fel, hogy arról szeretne gondoskodni, hogy egy erőforrás (például egy tárfiók) egy azt igénylő másik erőforrás előtt legyen üzembe helyezve. Hogyan ellenőrizhető, hogy a tárfiók függőség már létezik?

Elkezdhetné Azure PowerShell- vagy Azure CLI-parancsok futtatásával vizsgálni az üzembe helyezés aktuális állapotát, hogy ellenőrizze a tárfiók meglétét. Esetleg megnézhetné, hogy van-e olyan Resource Manager-szerkezet, amellyel elvégezheti ugyanezt az ellenőrzést.

A Resource Manager-sablonokban van egy ilyen szerkezet: a dependsOn. Ezen szerkezet használatával várakoztatni lehet az erőforrásokat, amíg a megadott erőforrás üzembe helyezése be nem fejeződik.

Mi az a dependsOn szerkezet?

Egy kulcs-érték pár, amellyel az erőforrások közötti üzembe helyezési sorrend definiálható. Esetenként ellenőrizni kell, hogy valami már megvan valami más előtt. Előfordulhat például, hogy meg kell lennie egy adatbázisnak egy alkalmazás előtt, vagy egy titkos erőforrásnak egy kulcstartó előtt.

A dependsOn szerkezetet el kell helyeznie annál az erőforrásnál, amely más erőforrások előzetes üzembe helyezésétől függ. Egy erőforrás több másiktól is függhet, ezért a szerkezet értékeként az erőforrás-függőségek listája adható meg.

Az alábbi példa bemutatja, hogyan fejezhető ki az ilyen függőség az ARM-sablonon belül JSON formátumban:

"resources": [
  {
    "name": "<name of resource that needs to exist first>"
  },
  {
    "name": "someResource",
    "dependsOn": [
      "<name of resource that needs to exist first>"
    ]
  }
]

Ebben a példában az erőforrás-függőség a nevével van megadva. Csakhogy több erőforrás neve is ugyanaz lehet. Annak érdekében, hogy biztosan a kívánt összehasonlítás történjen meg, használhatja inkább a resourceId() szerkezet az egyedi erőforrás-azonosító beolvasására:

"dependsOn": [
  "resourceId('Microsoft.Network/loadBalancers', variables('nameOfLoadBalancer')))"
]

A fenti JSON-kód a névtér, a típus és egy változónév összefűzésével hoz létre egyedi azonosítót. Így gondoskodhat a helyes erőforrás-függőség megadásáról.

Mik azok a gyermek-erőforrások?

Gyermek-erőforrás az az erőforrás, amely csak egy másik erőforrás környezetében létezik. Erre példa egy virtuális gépi bővítmény, amely nem létezhet virtuális gép nélkül.

A szülő-gyermek viszony tipikus kódja egy sablonban az alábbihoz hasonló:

"resources": [
  {
    "name": "parent-resource",
    "resources": [{
      "name": "child-resource"
    }]
  }
]

Ez a szülő-gyermek függőség nem alkot automatikusan olyan függőséget, amely miatt a szülő a gyermekelem előtt lesz üzembe helyezve. Ezt a függőséget explicit módon meg kell adni.

Ha tehát kifejez egy ilyen kapcsolatot, mindenképpen adjon hozzá egy szerkezetet dependsOn , például az alábbiakat:

"resources": [
  {
    "name": "parent-resource",
    "resources": [{
      "dependsOn": ["parent-resource"],
      "name": "child resource"
    }]
  }
]