Az Azure-beli számítási infrastruktúra kiépítési megoldásainak azonosítása

Befejeződött

Cége ruhákat gyárt, így alkalmazásokra és adatbázisokra van szüksége a termékek kezeléséhez. A cégnek emellett számítási erőforrásokra is szüksége van a számítási feladatok futtatásához. Cége azt szeretné, ha Ön számítási erőforrásokat építene ki az Azure-ban, és automatizált méretezést állítana be a számítási erőforrásokhoz.

A számítási erőforrások kézi létrehozása és kezelése jelentős felügyeleti időt igényel, és repetitív feladat. Amikor a rendszergazdáknak rendszeresen ugyanazt a feladatot kell elvégezniük, hibákat véthetnek. Ön szeretne egy megoldást a számítási erőforrások kiépítésének és felügyeletének automatizálására. Ehhez olyan eszközöket kell találnia, amelyekkel számítási erőforrásokat építhet ki az Azure-ban.

Miért érdemes automatizálni a számítási erőforrások kiépítését?

Számos kiszolgálóval rendelkező architektúra manuális bevezetése hosszú időt igényel. Konfigurálnia kell az operációs rendszert, szoftvert kell telepítenie és konfigurálna, és frissítéseket kell alkalmaznia. Ezeket a feladatokat pedig minden virtuális gépen el kell végezni. Ez összetett folyamat lehet. Amikor sokszor kell összetett folyamatokat elvégeznie, könnyen véthet hibákat.

Emellett előfordulhat, hogy újra üzembe kell helyeznie az architektúrát, például ha egy támadásból vagy katasztrófából kell helyreállnia. Az architektúra szoftvertesztelés támogatását igényelheti, így minden tesztelési ciklushoz újra üzembe kell helyeznie. Ha a manuális üzembe helyezés órákig tart, az nem ideális.

Valahogy automatizálnia kell a virtuális gép üzembe helyezését, hogy megoldja ezeket a problémákat. Az ilyen megoldásnak minden gépen az alábbiakra kell képesnek lennie:

  • A virtuális gép konfigurálása. Az Azure-ban például meg kell adnia egy lemezképet az Azure Marketplace-ről, egy réteget, egy méretet, egy IP-címet, és egyéb értékeket is.
  • A virtuális gép operációs rendszerének konfigurálása. Ha az operációs rendszer például tartalmaz tűzfalat, Önnek be kell tudnia állítani forgalomszűrő tűzfalszabályokat.
  • Szoftver telepítése. Előfordulhat például, hogy webkiszolgálót vagy adatbázis-kiszolgálót kell telepítenie.
  • Frissítések alkalmazása. Előfordulhat például, hogy szervizcsomagokat vagy gyorsjavításokat kell alkalmaznia az operációs rendszeren és a telepített szoftveren.

Az üzembe helyezési konfiguráció összetettségének csökkentése érdekében hozzon létre egy teljes architektúrát szkript vagy konfigurációs fájl formájában. Ezután helyezze üzembe egyetlen műveletben. Ily módon automatizálhatja a konfigurációt a hibák csökkentése és az üzembe helyezés felgyorsítása érdekében, így a szervezet hatékonyabbá és költséghatékonyabbá válik.

Egyéni parancsfájlok

Az egyéni szkriptbővítmény szkripteket tölt le és futtat Azure-beli virtuális gépeken. Az eszköz az üzembe helyezést követő konfiguráció, szoftvertelepítés, illetve bármely konfigurációs vagy felügyeleti feladat végrehajtása során hasznos.

Olyan PowerShell-szkriptet használhat, amely a helyi fájlkiszolgálón, a GitHubon, az Azure Storage-ban vagy más, a virtuális gép számára elérhető helyen található. A bővítmény megkeresi a virtuális gépen futtatandó szkriptet. A rendszer letölti és végrehajtja a szkriptet a célként szolgáló virtuális gépen, és alkalmazza a szkriptben található módosításokat. Egyéni szkriptbővítményt Azure Resource Manager-sablonokkal, a PowerShell-lel vagy az Azure CLI-vel adhat hozzá egy virtuális géphez.

Megjegyzés:

Ügyeljen az olyan esetekre, ahol a konfigurációs vagy felügyeleti feladat újraindítást igényel. Az egyéni szkriptbővítmények nem folytatódnak az újraindítás után.

A következő egyéni szkriptbővítmény-konfigurációt hozzáadhatja egy virtuális gép Azure Resource Manager-sablonjához. A fileUris tulajdonsággal rámutathat a szkriptfájlra.

{
    "apiVersion": "2019-06-01",
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "name": "[concat(variables('virtual machineName'),'/', 'InstallWebServer')]",
    "location": "[parameters('location')]",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/',variables('virtual machineName'))]"
    ],
    "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.7",
        "autoUpgradeMinorVersion":true,
        "settings": {
            "fileUris": [
                "https://your-potential-file-location.com/your-script-file.ps1"
            ],
            "commandToExecute": "powershell.exe -ExecutionPolicy Unrestricted -File your-script-file.ps1"
       		 }
    	}
	}
}

Desired State Configuration-bővítmények

A Desired State Configuration- (DSC-) bővítményekkel olyan infrastruktúrabeli konfigurációkat alkalmazhat, amelyek összetettebb telepítési folyamatokat igényelnek (például újraindítást). A DSC-kkel a gépek állapotbeállítására vonatkozó használati utasítások írása helyett definiálhat egy állapotot a gépeknek. Az állapotkonfigurációk viszonylag könnyen olvashatók és valósíthatók meg.

A virtuális gépekhez definiálható DSC-bővítménykezelővel kényszerítheti az állapotokat. Az állapotok konfigurációi különböző helyeken lehetnek, például az Azure Blob Storage-ban vagy a helyi fájltárolón. A DSC-bővítménykezelő a konfiguráció segítségével megvalósítja az állapotot a célként szolgáló virtuális gépen. Ha újraindításra van szükség a konfigurációhoz, a DSC továbbra is végrehajtja az állapotkonfigurációját az újraindítások befejeződése után.

Az alábbi példa egy Azure Resource Manager-sablonban található virtuális gép DSC-bővítménykezelőjét definiálja. A script tulajdonság a blobtároló egy konfigurációs szkriptjére mutat.

{
	"type": "Microsoft.Compute/virtualMachines/extensions",
	"name": "Microsoft.Powershell.DSC",
	"apiVersion": "2018-06-30",
	"location": "your-region",
	"dependsOn": [
		"[concat('Microsoft.Compute/virtualMachines/', parameters('virtual machineName'))]"
	],
	"properties": {
		"publisher": "Microsoft.Powershell",
		"type": "DSC",
		"typeHandlerVersion": "2.77",
		"autoUpgradeMinorVersion": true,
		"settings": {
			"configuration": {
				"url": "https://demo.blob.core.windows.net/iisinstall.zip",
				"script": "IisInstall.ps1",
				"function": "IISInstall"
			}
		},
		"protectedSettings": {
			"configurationUrlSasToken": "odLPL/U1p9lvcnp..."
		}
	}
}

Chef

A Chef-kiszolgálók egyszerre 10 000 csomópontot (gépet) képesek kezelni. A Cheffel automatizálhatja az infrastruktúra üzembe helyezését és a munkafolyamatokba való beillesztését a helyszínen és a felhőben.

A Chef-kiszolgáló általában szolgáltatásként fut. A Chef a Chef-kiszolgálóval kezeli a recepteket. A receptek egy adott konfiguráció megvalósításához szükséges parancsok. A Chef kés eszközével virtuális gépeket helyezhet üzembe, és ezzel egyidejűleg recepteket alkalmazhat rájuk. A kés eszközt a rendszergazdai munkaállomáson telepítheti, amely a szabályzatok létrehozására és parancsok végrehajtására szolgáló gép. Ezután a késparancsokat a rendszergazdai munkaállomásról futtathatja.

Az alábbi példa bemutatja, hogyan hozható létre egy virtuális gép az Azure-ban egy késparanccsal. A parancs ezzel egyidejűleg egy receptet is alkalmaz, amely telepít egy webkiszolgálót a gépen.

knife azurerm server create `
    --azure-resource-group-name rg-chefdeployment `
    --azure-storage-account store `
    --azure-vm-name chefvm `
    --azure-vm-size 'Standard_DS2_v2' `
    --azure-service-location 'eastus' `
    --azure-image-reference-offer 'WindowsServer' `
    --azure-image-reference-publisher 'MicrosoftWindowsServer' `
    --azure-image-reference-sku '2016-Datacenter' `
    --azure-image-reference-version 'latest' `
    -x myuser `
    -P yourPassword `
    --tcp-endpoints '80,3389' `
    --chef-daemon-interval 1 `
    -r "recipe[webserver]"

A Chef bővítménnyel emellett a célként szolgáló gépeken is alkalmazhat recepteket. Az alábbi példa egy Azure Resource Manager-sablonban található virtuális gép Chef-bővítményét definiálja. A chef_server_url tulajdonsággal mutat egy Chef-kiszolgálóra. Arra a receptre mutat, amely a virtuális gépet a kívánt állapotba helyezi.

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat(variables('virtual machineName'),'/', variables('virtual machineExtensionName'))]",
  "apiVersion": "2015-05-01-preview",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('virtual machineName'))]"
  ],
  "properties": {
    "publisher": "Chef.Bootstrap.WindowsAzure",
    "type": "LinuxChefClient",
    "typeHandlerVersion": "1210.12",
    "settings": {
      "bootstrap_options": {
        "chef_node_name": "chef_node_name",
        "chef_server_url": "chef_server_url",
        "validation_client_name": "validation_client_name"
      },
      "runlist": "recipe[your-recipe]",
      "validation_key_format": "validation_key_format",
      "chef_service_interval": "chef_service_interval",
      "bootstrap_version": "bootstrap_version",
      "bootstrap_channel": "bootstrap_channel",
      "daemon": "service"
    },
    "protectedSettings": {
      "validation_key": "validation_key",
      "secret": "secret"
    }
  }
}

A recept a következőhöz hasonló lehet. A recept telepít egy IIS-webkiszolgálót.

#install IIS on the node.
powershell_script 'Install IIS' do
     action :run
     code 'add-windowsfeature Web-Server'
end

service 'w3svc' do
     action [ :enable, :start ]
end

Terraform

A Terraform egy nyílt forráskódú, kódként szolgáltatott infrastruktúraeszköz. Az infrastruktúrát a Hashicorp által létrehozott nyelv, a Hashicorp Configuration Language (HCL) használatával hozhatja létre. Emellett JSON-t is használhat. A Terraformmal viszonylag könnyen olvasható szkriptsablonokat hozhat létre, amelyek definiálják a létrehozandó erőforrásokat a felhőszolgáltatótól függetlenül. A környezeteket különböző felhőszolgáltatókkal építheti ki, például a Microsoft Azure és az Amazon Web Services (AWS) használatával. Így meggyőződhet arról, hogy a környezetek minden felhőszolgáltató között azonosak. A folyamathoz helyileg vagy az Azure-on telepítenie kell a Terraformot. Ezután a Terraformmal végrehajthat egy Terraform-szkriptet.

A következő Terraform-szkriptpélda egy virtuális gépet épít ki az Azure-ban:

# Configure the Microsoft Azure as a provider
provider "azurerm" {
    subscription_id = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    client_id       = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    client_secret   = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    tenant_id       = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

# Create a resource group
resource "azurerm_resource_group" "myterraformgroup" {
    name     = "myResourceGroup"
    location = "eastus"

    tags = {
        environment = "Terraform Demo"
    }
}
# Create the virtual machine
resource "azurerm_virtual_machine" "myterraformvirtual machine" {
    name                  = "myvirtual machine"
    location              = "eastus"
    resource_group_name   = "${azurerm_resource_group.myterraformgroup.name}"
    network_interface_ids = ["${azurerm_network_interface.myterraformnic.id}"]
    virtual machine_size               = "Standard_DS1_v2"

    storage_os_disk {
        name              = "myOsDisk"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Premium_LRS"
    }

    storage_image_reference {
        publisher = "Canonical"
        offer     = "UbuntuServer"
        sku       = "16.04.0-LTS"
        version   = "latest"
    }

    os_profile {
        computer_name  = "myvirtual machine"
        admin_username = "azureuser"
    }

    os_profile_linux_config {
        disable_password_authentication = true
        ssh_keys {
            path     = "/home/azureuser/.ssh/authorized_keys"
            key_data = "ssh-rsa AAAAB3Nz{snip}hwhaa6h"
        }
    }

    boot_diagnostics {
        enabled     = "true"
        storage_uri = "${azurerm_storage_account.mystorageaccount.primary_blob_endpoint}"
    }

    tags = {
        environment = "Terraform Demo"
    }
}

A szkript használatához futtassa a következő parancsot a Terraformmal:

terraform apply

Az Azure Automation állapotkonfigurációja

Az Azure Automation állapotkonfigurációja az a szolgáltatás, amellyel meggyőződhet arról, hogy a DSC-konfigurációk megfelelően vannak kezelve és üzembe helyezve a csomópontokon (virtuális gépeken). Az Azure Automation állapotkonfigurációja azure-beli virtuális gépekkel és helyszíni gépekkel is működik. Emellett más felhőszolgáltatók gépeivel is használható. Egy intuitív Azure Portalbeli folyamattal minden csomópontra alkalmazhat konfigurációkat.

Screenshot of the State configuration panel in the Azure portal.

Az Azure Automation állapotkonfigurációja lehetővé teszi, hogy minden célgép automatikusan a megfelelő konfigurációkat rendelje hozzá. Emellett a szolgáltatás ügyel arra, hogy minden gép visszajelzést küldjön az aktuális állapotáról, illetve a kívánt állapot eléréséről. Ezeket az információkat továbbküldheti jelentéskészítéshez vagy döntéshozatalhoz. Az Azure Automation állapotkonfigurációját az Azure Portalon vagy az Azure PowerShellen keresztül használhatja.

Azure Resource Manager-sablonok

Az Azure Resource Manager-sablonok olyan JSON-fájlok, amelyekkel objektumjelrendszerekkel definiálhatja az Azure-ban kiépíteni kívánt Azure-erőforrásokat. Így egy teljes infrastruktúrát is definiálhat. A JSON-használat mértékétől függően ezek viszonylag könnyen olvashatók és használhatók.

Az Azure Resource Manager-sablonokkal gondoskodhat arról, az üzembe helyezések konzisztensek maradnak. Meggyőződhet például arról, hogy minden létrehozott virtuális gép ugyanazokkal a tulajdonságokkal rendelkezzen. Emellett bővítményeket is beágyazhat sablonok virtuális gépeibe, hogy meggyőződjön arról, hogy ezek konfigurációja azonos. Az Azure Resource Manager-sablont az Azure PowerShell, az Azure CLI vagy az Azure Portal segítségével helyezheti üzembe. Az üzembe helyezés előtt tesztelje az Azure Resource Manager-sablonokat. Az üzemelő példány tesztelésekor győződjön meg arról, hogy a sablon üzembe helyezhető az Azure-ral, mielőtt valóban üzembe helyezné.

Az alábbi példa egy virtuális gép egy Azure Resource Manager-sablonnal történő definiálását mutatja be. Megtekintheti a virtuális gép típusát, az operációs rendszert, valamint többek között a tárolási adatokat is.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-01",
  "name": "[variables('virtual machineName')]",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],
  "properties": {
    "hardwareProfile": {
      "virtual machinesize": "Standard_A2"
    },
    "osProfile": {
      "computerName": "[variables('virtual machineName')]",
      "adminUsername": "[parameters('adminUsername')]",
      "adminPassword": "[parameters('adminPassword')]"
    },
    "storageProfile": {
      "imageReference": {
        "publisher": "MicrosoftWindowsServer",
        "offer": "WindowsServer",
        "sku": "[parameters('windowsOSVersion')]",
        "version": "latest"
      },
      "osDisk": {
        "createOption": "FromImage"
      },
      "dataDisks": [
        {
          "diskSizeGB": 1023,
          "lun": 0,
          "createOption": "Empty"
        }
      ]
    },
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
        }
      ]
    },
    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": true,
        "storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob]"
      }
    }
  }
}