Megosztás a következőn keresztül:


Infrastruktúra mint kód

Jótanács

Ez a tartalom a „Az Azure-hoz készült natív felhőalapú .NET-alkalmazások tervezése” című eBookból egy részlet, amely elérhető a .NET Docs oldalán, vagy ingyenesen letölthető PDF fájlként, amely offline módban is olvasható.

Azure-szolgáltatásban futó Cloud Native .NET-alkalmazások ebook borítójának miniatűrje.

A natív felhőrendszerek mikroszolgáltatásokat, tárolókat és modern rendszertervezést használnak a sebesség és a rugalmasság elérése érdekében. Automatizált buildelési és kiadási fázisokat biztosítanak a konzisztens és minőségi kód biztosítása érdekében. De ez csak a történet része. Hogyan építheti ki azokat a felhőkörnyezeteket, amelyeken ezek a rendszerek futnak?

A modern felhőalapú natív alkalmazások követik a széles körben elfogadott gyakorlatot, az Infrastruktúra mint Kód, vagy IaC. Az IaC-vel automatizálhatja a platformkiépítést. A DevOps-eljárásokra lényegében olyan szoftverfejlesztési eljárásokat alkalmazhat, mint a tesztelés és a verziószámozás. Az infrastruktúra és a telepítések automatizáltak, következetesek és megismételhetők. Ahogyan a folyamatos teljesítés automatizálta a manuális telepítések hagyományos modelljét, az infrastruktúra mint kód (IaC) is alakítja át az alkalmazáskörnyezetek kezelését.

Az olyan eszközök, mint az Azure Resource Manager (ARM), a Terraform és az Azure Parancssori felület (CLI) lehetővé teszik a szükséges felhőinfrastruktúra deklaratív szkriptjét.

Azure Resource Manager-sablonok

Az ARM az Azure Resource Managert jelöli. Ez egy API-kiépítési motor, amely az Azure-ba van beépítve, és API-szolgáltatásként van közzétéve. Az ARM lehetővé teszi az Azure-erőforráscsoportban található erőforrások egyetlen, összehangolt műveletben történő üzembe helyezését, frissítését, törlését és kezelését. A motornak egy JSON-alapú sablont kell megadnia, amely meghatározza a szükséges erőforrásokat és azok konfigurációját. Az ARM a függőségeket figyelembe véve automatikusan a megfelelő sorrendben vezényli az üzembe helyezést. A motor biztosítja az idempotenciát. Ha egy kívánt erőforrás már létezik ugyanazzal a konfigurációval, a kiépítés figyelmen kívül lesz hagyva.

Az Azure Resource Manager-sablonok JSON-alapú nyelvként definiálnak különböző erőforrásokat az Azure-ban. Az alapséma a 10–14. ábrához hasonlóan néz ki.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "",
  "apiProfile": "",
  "parameters": {  },
  "variables": {  },
  "functions": [  ],
  "resources": [  ],
  "outputs": {  }
}

10–14. ábra – Egy Resource Manager-sablon sémája

Ebben a sablonban definiálhat egy tárolót az erőforrások szakaszon belül, így:

"resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "apiVersion": "2018-07-01",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],

10–15. ábra – Példa egy Resource Manager-sablonban definiált tárfiókra

Az ARM-sablonok dinamikus környezettel és konfigurációs információkkal paraméterezhetők. Ezzel lehetővé teszi a különböző környezetek, például a fejlesztés, a minőségbiztosítási vagy az éles környezetek definiálásának újrafelhasználását. A sablon általában egyetlen Azure-erőforráscsoportban hozza létre az összes erőforrást. Szükség esetén több erőforráscsoportot is meghatározhat egyetlen Resource Manager-sablonban. A környezet összes erőforrását törölheti az erőforráscsoport törlésével. A költségelemzés az erőforráscsoport szintjén is futtatható, így gyorsan elszámolható, hogy az egyes környezetek mennyibe kerülnek.

A GitHubon az Azure Quickstart Templates projektben számos példa érhető el ARM-sablonokra. Segíthetnek felgyorsítani egy új sablon létrehozását vagy egy meglévő módosítását.

A Resource Manager-sablonok számos módon futtathatók. Talán a legegyszerűbb módszer az, ha egyszerűen beilleszti őket az Azure Portalra. A kísérleti üzemelő példányok esetében ez a módszer gyors lehet. Az Azure DevOps buildelési vagy kiadási folyamatának részeként is futtathatók. Vannak olyan feladatok, amelyek a sablonok futtatásához az Azure-beli kapcsolatokat használják. A Resource Manager-sablonok módosításai növekményesen lesznek alkalmazva, ami azt jelenti, hogy új erőforrás hozzáadásához csak hozzá kell adni a sablonhoz. Az eszközkezelés összeegyezteti a jelenlegi erőforrások és a sablonban definiált erőforrások közötti különbségeket. Ezután létrejönnek vagy módosítják az erőforrásokat, hogy azok megfeleljenek a sablonban meghatározottaknak.

Földformálás

A natív felhőalkalmazásokat gyakran úgy állítják össze, hogy azok legyenek cloud agnostic. Ez azt jelenti, hogy az alkalmazás nincs szorosan összekapcsolva egy adott felhőszolgáltatóval, és bármely nyilvános felhőben üzembe helyezhető.

A Terraform egy kereskedelmi célú templating eszköz, amely natív felhőalkalmazásokat képes kiépíteni az összes fő felhőbeli szereplőre: az Azure-ra, a Google Cloud Platformra, az AWS-re és az AliCloudra. Ahelyett, hogy A JSON-t használná sablondefiníciós nyelvként, a HCL -t (Hashicorp konfigurációs nyelv) használja.

Az előző Resource Manager-sablonnal (10–15. ábra) megegyező Terraform-fájl látható a 10–16. ábrán:

provider "azurerm" {
  version = "=1.28.0"
}

resource "azurerm_resource_group" "testrg" {
  name     = "production"
  location = "West US"
}

resource "azurerm_storage_account" "testsa" {
  name                     = "${var.storageAccountName}"
  resource_group_name      = "${azurerm_resource_group.testrg.name}"
  location                 = "${var.region}"
  account_tier             = "${var.tier}"
  account_replication_type = "${var.replicationType}"

}

10–16. ábra – Példa Erőforráskezelő sablonra

A Terraform intuitív hibaüzeneteket is biztosít a problémasablonokhoz. Van egy hasznos ellenőrzési feladat is, amely a buildelési fázisban használható a sablonhibák korai észleléséhez.

A Resource Manager-sablonokhoz hasonlóan parancssori eszközök is elérhetők a Terraform-sablonok üzembe helyezéséhez. Az Azure Pipelinesban vannak olyan, közösség által létrehozott feladatok is, amelyek a Terraform-sablonokat érvényesíthetik és alkalmazhatják.

Néha a Terraform- és ARM-sablonok értelmes értékeket adnak ki, például egy újonnan létrehozott adatbázis kapcsolati sztringje. Ezek az információk rögzíthetők a buildelési folyamatban, és felhasználhatók a későbbi feladatokban.

Azure CLI-szkriptek és feladatok

Végül használhatja az Azure CLI-t a felhőinfrastruktúra deklaratív szkriptjéhez. Az Azure CLI-szkriptek szinte bármilyen Azure-erőforrás kiépítéséhez és konfigurálásához létrehozhatók, megtalálhatók és megoszthatók. A CLI egyszerűen használható gyengéd tanulási görbével. A szkriptek a PowerShellben vagy a Bashben is végrehajthatók. A hibakeresés is egyszerű, különösen arm-sablonokkal összehasonlítva.

Az Azure CLI-szkriptek akkor működnek jól, ha le kell bontania és újra kell üzembe helyeznie az infrastruktúrát. A meglévő környezet frissítése bonyolult lehet. Számos parancssori felületi parancs nem idempotens. Ez azt jelenti, hogy minden futtatáskor újra létrehozzák az erőforrást, még akkor is, ha az erőforrás már létezik. A létrehozás előtt mindig olyan kódot lehet hozzáadni, amely ellenőrzi az egyes erőforrások meglétét. Ezzel azonban a szkript blokádossá és nehezen kezelhetővé válhat.

Ezek a szkriptek az Azure DevOps-folyamatokba is beágyazhatók.Azure CLI tasks A folyamat végrehajtása meghívja a szkriptet.

A 10–17. ábrán egy YAML-kódrészlet látható, amely felsorolja az Azure CLI verzióját és az előfizetés részleteit. Figyelje meg, hogy az Azure CLI-parancsok hogyan szerepelnek a beágyazott szkriptekben.

- task: AzureCLI@2
  displayName: Azure CLI
  inputs:
    azureSubscription: <Name of the Azure Resource Manager service connection>
    scriptType: ps
    scriptLocation: inlineScript
    inlineScript: |
      az --version
      az account show

10–17. ábra – Azure CLI-szkript

A What is Infrastructure as Code című cikkben Sam Guckenheimer szerző a következőt írja le: "Az IaC-t implementáló csapatok gyorsan és nagy méretekben képesek stabil környezeteket biztosítani. A csapatok elkerülik a környezetek kézi konfigurálását és biztosítják a konzisztenciát azáltal, hogy kód segítségével meghatározzák környezetük kívánt állapotát. Az IaC-vel rendelkező infrastruktúra-telepítések megismételhetők, és megakadályozzák a konfigurációs eltérés vagy a hiányzó függőségek által okozott futásidejű problémákat. A DevOps-csapatok egységes gyakorlatokkal és eszközökkel dolgozhatnak együtt az alkalmazások és azok támogató infrastruktúrájának gyors, megbízható és nagy léptékű biztosításához."