Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️
Każda maszyna wirtualna na platformie Azure jest tworzona na podstawie obrazu definiującego dystrybucję systemu Linux i wersję systemu operacyjnego. Obrazy mogą zawierać wstępnie zainstalowane aplikacje i konfiguracje. Azure Marketplace udostępnia wiele obrazów wewnętrznych i zewnętrznych dla najczęściej używanych dystrybucjach i środowisk aplikacji lub możesz tworzyć własne niestandardowe obrazy dostosowane do Twoich potrzeb. W tym artykule szczegółowo opisano sposób używania narzędzia open source Packer do definiowania i kompilowania obrazów niestandardowych na platformie Azure.
Uwaga
Platforma Azure ma teraz usługę Azure Image Builder do definiowania i tworzenia własnych obrazów niestandardowych. Usługa Azure Image Builder jest oparta na programie Packer, dzięki czemu możesz nawet używać istniejących skryptów aprowizacji powłoki Packer. Aby rozpocząć pracę z usługą Azure Image Builder, zobacz Tworzenie maszyny wirtualnej z systemem Linux przy użyciu narzędzia Azure Image Builder.
Tworzenie grupy zasobów platformy Azure
Podczas procesu kompilacji program Packer tworzy tymczasowe zasoby platformy Azure podczas kompilowania źródłowej maszyny wirtualnej. Aby przechwycić źródłową maszynę wirtualną do użycia jako obraz, należy zdefiniować grupę zasobów. Dane wyjściowe z procesu kompilacji Packer są przechowywane w tej grupie zasobów.
Utwórz grupę zasobów za pomocą az group create. W poniższym przykładzie pokazano tworzenie grupy zasobów o nazwie myResourceGroup w lokalizacji eastus:
az group create -n myResourceGroup -l eastus
Tworzenie poświadczeń platformy Azure
Narzędzie Packer uwierzytelnia się na platformie Azure przy użyciu pryncypału usługi. Zasada usługi Azure to tożsamość zabezpieczeń, której można używać z aplikacjami, usługami i narzędziami automatyzacji, takimi jak Packer. Kontrolujesz i definiujesz uprawnienia dotyczące operacji, które jednostka usługi może wykonywać na platformie Azure.
Utwórz tożsamość usługi za pomocą polecenia az ad sp create-for-rbac i wyprowadź poświadczenia, których potrzebuje Packer.
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription_id> --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
Przykładowe dane wyjściowe z poprzednich poleceń są następujące:
{
"client_id": "00001111-aaaa-2222-bbbb-3333cccc4444",
"client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
"tenant_id": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
Aby uwierzytelnić się na platformie Azure, musisz również uzyskać identyfikator subskrypcji Azure, używając az account show:
az account show --query "{ subscription_id: id }"
Dane wyjściowe z tych dwóch poleceń są używane w następnym kroku.
Definiowanie szablonu programu Packer
Aby utworzyć obrazy, należy utworzyć szablon jako plik JSON. W szablonie definiuje się konstruktorów i aprowizatorów, które wykonują rzeczywisty proces kompilacji. Packer ma provisioner dla platformy Azure, który umożliwia definiowanie zasobów platformy Azure, takich jak poświadczenia obiektu usługi utworzone w poprzednim kroku.
Utwórz plik o nazwie ubuntu.json i wklej następującą zawartość. Wprowadź własne wartości dla następujących parametrów:
| Parametr | Gdzie uzyskać |
|---|---|
| client_id | Pierwszy wiersz danych wyjściowych z az ad sp polecenia create — appId |
| client_secret | Drugi wiersz danych wyjściowych z az ad sp polecenia create — hasło |
| tenant_id | Trzeci wiersz danych wyjściowych z az ad sp polecenia create – tenant |
| subscription_id | Dane wyjściowe polecenia az account show |
| zarządzana_nazwa_grupy_zasobów_obrazu | Nazwa grupy zasobów utworzonej w pierwszym kroku |
| zarządzana_nazwa_obrazu | Nazwa utworzonego obrazu dysku zarządzanego |
{
"builders": [{
"type": "azure-arm",
"client_id": "00001111-aaaa-2222-bbbb-3333cccc4444",
"client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
"tenant_id": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"subscription_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"managed_image_resource_group_name": "myResourceGroup",
"managed_image_name": "myPackerImage",
"os_type": "Linux",
"image_publisher": "canonical",
"image_offer": "0001-com-ubuntu-server-jammy",
"image_sku": "22_04-lts",
"azure_tags": {
"dept": "Engineering",
"task": "Image deployment"
},
"location": "East US",
"vm_size": "Standard_DS2_v2"
}],
"provisioners": [{
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
"inline": [
"apt-get update",
"apt-get upgrade -y",
"apt-get -y install nginx",
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
],
"inline_shebang": "/bin/sh -x",
"type": "shell"
}]
}
Uwaga
Zastąp wartości image_publisher, image_offer, image_sku oraz polecenia inline odpowiednio.
Możesz również utworzyć plik o nazwie ubuntu.pkr.hcl i wkleić poniższą zawartość, zastępując własnymi wartościami tak, jak w powyższej tabeli parametrów.
source "azure-arm" "autogenerated_1" {
azure_tags = {
dept = "Engineering"
task = "Image deployment"
}
client_id = "00001111-aaaa-2222-bbbb-3333cccc4444"
client_secret = "0e760437-bf34-4aad-9f8d-870be799c55d"
image_offer = "0001-com-ubuntu-server-jammy"
image_publisher = "canonical"
image_sku = "22_04-lts"
location = "East US"
managed_image_name = "myPackerImage"
managed_image_resource_group_name = "myResourceGroup"
os_type = "Linux"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
tenant_id = "aaaabbbb-0000-cccc-1111-dddd2222eeee"
vm_size = "Standard_DS2_v2"
}
build {
sources = ["source.azure-arm.autogenerated_1"]
provisioner "shell" {
execute_command = "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'"
inline = ["apt-get update", "apt-get upgrade -y", "apt-get -y install nginx", "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"]
inline_shebang = "/bin/sh -x"
}
}
Ten szablon tworzy obraz systemu Ubuntu 22.04 LTS, instaluje serwer NGINX, a następnie dezaktywuje maszynę wirtualną.
Uwaga
Jeśli rozszerzysz ten szablon, aby aprowizować poświadczenia użytkownika, dostosuj polecenie aprowizacji, które dezaktywuje agenta platformy Azure, aby przedstawić -deprovision zamiast deprovision+user.
Flaga +user usuwa wszystkie konta użytkowników ze źródłowej maszyny wirtualnej.
Obraz programu Build Packer
Jeśli nie masz jeszcze zainstalowanego narzędzia Packer na komputerze lokalnym, postępuj zgodnie z instrukcjami instalacji narzędzia Packer.
Zbuduj obraz, podając plik szablonu Packer w następujący sposób:
sudo ./packer build ubuntu.json
Obraz można również skompilować, określając plik ubuntu.pkr.hcl w następujący sposób:
sudo packer build ubuntu.pkr.hcl
Przykładowe dane wyjściowe z poprzednich poleceń są następujące:
azure-arm output will be in this color.
==> azure-arm: Running builder ...
azure-arm: Creating Azure Resource Manager (ARM) client ...
==> azure-arm: Creating resource group ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> Location : ‘East US’
==> azure-arm: -> Tags :
==> azure-arm: ->> dept : Engineering
==> azure-arm: ->> task : Image deployment
==> azure-arm: Validating deployment template ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> DeploymentName : ‘pkrdpswtxmqm7ly’
==> azure-arm: Deploying deployment template ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> DeploymentName : ‘pkrdpswtxmqm7ly’
==> azure-arm: Getting the VM’s IP address ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> PublicIPAddressName : ‘packerPublicIP’
==> azure-arm: -> NicName : ‘packerNic’
==> azure-arm: -> Network Connection : ‘PublicEndpoint’
==> azure-arm: -> IP Address : ‘40.76.218.147’
==> azure-arm: Waiting for SSH to become available...
==> azure-arm: Connected to SSH!
==> azure-arm: Provisioning with shell script: /var/folders/h1/ymh5bdx15wgdn5hvgj1wc0zh0000gn/T/packer-shell868574263
azure-arm: WARNING! The waagent service will be stopped.
azure-arm: WARNING! Cached DHCP leases will be deleted.
azure-arm: WARNING! root password will be disabled. You will not be able to login as root.
azure-arm: WARNING! /etc/resolvconf/resolv.conf.d/tail and /etc/resolvconf/resolv.conf.d/original will be deleted.
azure-arm: WARNING! packer account and entire home directory will be deleted.
==> azure-arm: Querying the machine’s properties ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> ComputeName : ‘pkrvmswtxmqm7ly’
==> azure-arm: -> Managed OS Disk : ‘/subscriptions/guid/resourceGroups/packer-Resource-Group-swtxmqm7ly/providers/Microsoft.Compute/disks/osdisk’
==> azure-arm: Powering off machine ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> ComputeName : ‘pkrvmswtxmqm7ly’
==> azure-arm: Capturing image ...
==> azure-arm: -> Compute ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> Compute Name : ‘pkrvmswtxmqm7ly’
==> azure-arm: -> Compute Location : ‘East US’
==> azure-arm: -> Image ResourceGroupName : ‘myResourceGroup’
==> azure-arm: -> Image Name : ‘myPackerImage’
==> azure-arm: -> Image Location : ‘eastus’
==> azure-arm: Deleting resource group ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: Deleting the temporary OS disk ...
==> azure-arm: -> OS Disk : skipping, managed disk was used...
Build ‘azure-arm’ finished.
==> Builds finished. The artifacts of successful builds are:
--> azure-arm: Azure.ResourceManagement.VMImage:
ManagedImageResourceGroupName: myResourceGroup
ManagedImageName: myPackerImage
ManagedImageLocation: eastus
Utworzenie maszyny wirtualnej przez Packer, uruchomienie narzędzi konfiguracyjnych i wyczyszczenie wdrożenia trwa kilka minut.
Tworzenie maszyny wirtualnej na podstawie obrazu platformy Azure
Teraz możesz utworzyć maszynę wirtualną z obrazu za pomocą polecenia az vm create. Określ obraz utworzony za pomocą parametru --image . Poniższy przykład tworzy maszynę wirtualną o nazwie myVM na podstawie obrazu myPackerImage i generuje klucze SSH, jeśli jeszcze nie istnieją.
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image myPackerImage \
--admin-username azureuser \
--generate-ssh-keys
Jeśli chcesz utworzyć maszyny wirtualne w innej grupie zasobów lub regionie niż obraz programu Packer, określ identyfikator obrazu, a nie nazwę obrazu. Identyfikator obrazu można uzyskać za pomocą polecenia az image show.
Utworzenie maszyny wirtualnej trwa kilka minut. Po utworzeniu maszyny wirtualnej zanotuj publicIpAddress wartość wyświetlaną przez interfejs wiersza polecenia platformy Azure. Ten adres służy do uzyskiwania dostępu do witryny NGINX za pośrednictwem przeglądarki internetowej.
Aby zezwolić na ruch sieciowy do maszyny wirtualnej, otwórz port 80 dla ruchu z Internetu, używając polecenia az vm open-port:
az vm open-port \
--resource-group myResourceGroup \
--name myVM \
--port 80
Testowanie maszyny wirtualnej i serwera NGINX
Teraz możesz otworzyć przeglądarkę internetową i wprowadzić http://publicIpAddress na pasku adresu. Podaj własny publiczny adres IP z procesu tworzenia maszyny wirtualnej. Domyślna strona NGINX jest wyświetlana w poniższym przykładzie:
Następne kroki
Możesz również użyć istniejących skryptów aprowizatora Packer z narzędziem Azure Image Builder.