Azure'da Linux sanal makine görüntüleri oluşturmak için Packer kullanmaHow to use Packer to create Linux virtual machine images in Azure

Azure'daki her sanal makine (VM) Linux dağıtımına ve işletim sistemi sürümünü tanımlayan bir görüntüden oluşturulur.Each virtual machine (VM) in Azure is created from an image that defines the Linux distribution and OS version. Görüntüleri, önceden yüklenmiş uygulamalar ve yapılandırmalar içerebilir.Images can include pre-installed applications and configurations. Azure marketi, en yaygın dağıtım ve uygulama ortamları için birinci ve üçüncü taraf çok sayıda görüntü sağlar veya uygulamanızın ihtiyaçlarına yönelik kendi özel görüntülerinizi oluşturabilir.The Azure Marketplace provides many first and third-party images for most common distributions and application environments, or you can create your own custom images tailored to your needs. Bu makalede, açık kaynak aracı kullanma ayrıntılı Packer tanımlama ve azure'da özel görüntü oluşturma.This article details how to use the open source tool Packer to define and build custom images in Azure.

Not

Azure artık Azure Görüntü Oluşturucu (Önizleme) bir hizmet tanımlama ve kendi özel görüntülerinizi oluşturmak için var.Azure now has a service, Azure Image Builder (preview), for defining and creating your own custom images. Hatta mevcut Packer Kabuk sağlayıcısı betiklerinizi ile kullanabilmesi için azure Görüntü Oluşturucu Packer üzerinde oluşturulmuştur.Azure Image Builder is built on Packer, so you can even use your existing Packer shell provisioner scripts with it. Azure Görüntü Oluşturucu ile çalışmaya başlamak için bkz. Azure Görüntü Oluşturucu ile Linux VM oluşturma.To get started with Azure Image Builder, see Create a Linux VM with Azure Image Builder.

Azure kaynak grubu oluşturunCreate Azure resource group

Kaynak VM oluştururken derleme işlemi sırasında geçici Azure kaynaklarını Packer oluşturur.During the build process, Packer creates temporary Azure resources as it builds the source VM. Bir görüntü olarak kullanmak için kaynak VM yakalamak için bir kaynak grubu tanımlamanız gerekir.To capture that source VM for use as an image, you must define a resource group. Packer yapı işleminin çıktısı, bu kaynak grubunda depolanır.The output from the Packer build process is stored in this resource group.

az group create ile bir kaynak grubu oluşturun.Create a resource group with az group create. Aşağıdaki örnek eastus konumunda myResourceGroup adlı bir kaynak grubu oluşturur:The following example creates a resource group named myResourceGroup in the eastus location:

az group create -n myResourceGroup -l eastus

Azure kimlik bilgilerini oluşturmaCreate Azure credentials

Packer ile Azure hizmet sorumlusu kullanarak kimliğini doğrular.Packer authenticates with Azure using a service principal. Bir Azure hizmet sorumlusu, uygulamaları, hizmetleri ve Packer gibi Otomasyon araçları ile kullanabileceğiniz bir güvenlik kimliğidir.An Azure service principal is a security identity that you can use with apps, services, and automation tools like Packer. Denetim ve hizmet sorumlusu Azure'da gerçekleştirebilirsiniz ne gibi işlemler için izinler tanımlayın.You control and define the permissions as to what operations the service principal can perform in Azure.

Bir hizmet sorumlusu oluşturma az ad sp create-for-rbac ve Packer gereken kimlik bilgilerini çıktı:Create a service principal with az ad sp create-for-rbac and output the credentials that Packer needs:

az ad sp create-for-rbac --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"

Yukarıdaki komutlarda bir örnek çıktı aşağıdaki gibidir:An example of the output from the preceding commands is as follows:

{
    "client_id": "f5b6a5cf-fbdf-4a9f-b3b8-3c2cd00225a4",
    "client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
    "tenant_id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}

Azure'da kimlik doğrulamak için Azure abonelik Kimliğinizi elde etmeniz az hesabı show:To authenticate to Azure, you also need to obtain your Azure subscription ID with az account show:

az account show --query "{ subscription_id: id }"

Sonraki adımda bu iki komut çıktısı kullanırsınız.You use the output from these two commands in the next step.

Packer şablonu tanımlamaDefine Packer template

Görüntüleri oluşturmak için bir şablon bir JSON dosyası oluşturun.To build images, you create a template as a JSON file. Şablonda, Oluşturucular ve gerçek derleme işlemini gerçekleştirmek provisioners siz tanımlarsınız.In the template, you define builders and provisioners that carry out the actual build process. Packer sahip bir Azure sağlayıcısı sağlayan Azure kaynakları tanımlamak adım önceki oluşturulan hizmet sorumlusu kimlik bilgileri gibi.Packer has a provisioner for Azure that allows you to define Azure resources, such as the service principal credentials created in the preceding step.

Adlı bir dosya oluşturun ubuntu.json ve aşağıdaki içeriği yapıştırın.Create a file named ubuntu.json and paste the following content. Aşağıdakiler için kendi değerlerinizi girin:Enter your own values for the following:

ParametreParameter NeredenWhere to obtain
client_idclient_id İlk satırı çıktısı az ad sp create komutu - AppIDFirst line of output from az ad sp create command - appId
client_secretclient_secret İkinci satırı çıktısı az ad sp create komutu - parolaSecond line of output from az ad sp create command - password
Kiracıtenant_id Üçüncü satır çıktısı az ad sp create komutu - KiracıThird line of output from az ad sp create command - tenant
subscription_idsubscription_id Çıktı az account show komutuOutput from az account show command
managed_image_resource_group_namemanaged_image_resource_group_name İlk adımda oluşturduğunuz kaynak grubunun adıName of resource group you created in the first step
managed_image_namemanaged_image_name Oluşturulan yönetilen disk görüntüsü için adName for the managed disk image that is created
{
  "builders": [{
    "type": "azure-arm",

    "client_id": "f5b6a5cf-fbdf-4a9f-b3b8-3c2cd00225a4",
    "client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
    "tenant_id": "72f988bf-86f1-41af-91ab-2d7cd011db47",
    "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": "UbuntuServer",
    "image_sku": "16.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"
  }]
}

Bu şablon bir Ubuntu 16.04 LTS görüntüsüne oluşturur, NGINX'i yükleyen ve ardından VM deprovisions.This template builds an Ubuntu 16.04 LTS image, installs NGINX, then deprovisions the VM.

Not

Bu şablona sağlama kullanıcı kimlik bilgilerini genişletirseniz, okuma için Azure aracısıyla deprovisions sağlayıcısı komutu ayarlamak -deprovision yerine deprovision+user.If you expand on this template to provision user credentials, adjust the provisioner command that deprovisions the Azure agent to read -deprovision rather than deprovision+user. +user Bayrağı tüm kullanıcı hesaplarının kaynak sanal makineden kaldırır.The +user flag removes all user accounts from the source VM.

Packer görüntü oluşturmaBuild Packer image

Yerel makinenizde yüklü Packer yoksa Packer yükleme yönergelerini izleyin.If you don't already have Packer installed on your local machine, follow the Packer installation instructions.

Görüntü, Packer belirterek şablon dosyası şu şekilde oluşturun:Build the image by specifying your Packer template file as follows:

./packer build ubuntu.json

Yukarıdaki komutlarda bir örnek çıktı aşağıdaki gibidir:An example of the output from the preceding commands is as follows:

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

VM oluşturmak için provisioners çalıştırıp dağıtımını temizleme Packer birkaç dakika sürer.It takes a few minutes for Packer to build the VM, run the provisioners, and clean up the deployment.

Azure görüntüsünden VM oluşturmaCreate VM from Azure Image

Artık bir VM ile görüntüsünden oluşturabilirsiniz az vm oluşturma.You can now create a VM from your Image with az vm create. İle oluşturduğunuz görüntüsünü belirtin --image parametresi.Specify the Image you created with the --image parameter. Aşağıdaki örnekte adlı bir VM oluşturur myVM gelen myPackerImage ve zaten mevcut değilse SSH anahtarlarını oluşturur:The following example creates a VM named myVM from myPackerImage and generates SSH keys if they do not already exist:

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image myPackerImage \
    --admin-username azureuser \
    --generate-ssh-keys

Farklı kaynak grubuna ya da, Packer görüntü bölgesinden Vm'leri oluşturmak istiyorsanız, görüntü adı yerine görüntü kimliği belirtin.If you wish to create VMs in a different resource group or region than your Packer image, specify the image ID rather than image name. Görüntü kimliği ile edinebilirsiniz az resmi Göster.You can obtain the image ID with az image show.

VM'nin oluşturulması birkaç dakika sürer.It takes a few minutes to create the VM. VM oluşturulduktan sonra Not publicIpAddress Azure CLI tarafından görüntülenen.Once the VM has been created, take note of the publicIpAddress displayed by the Azure CLI. Bu adres, bir web tarayıcısı üzerinden NGINX siteye erişmek için kullanılır.This address is used to access the NGINX site via a web browser.

Web trafiğinin VM’nize erişmesine izin vermek için, az vm open-port komutuyla İnternet’te 80 numaralı bağlantı noktasını açın:To allow web traffic to reach your VM, open port 80 from the Internet with az vm open-port:

az vm open-port \
    --resource-group myResourceGroup \
    --name myVM \
    --port 80

VM ve NGINX testTest VM and NGINX

Artık bir web tarayıcısı açıp adres çubuğuna http://publicIpAddress ifadesini girebilirsiniz.Now you can open a web browser and enter http://publicIpAddress in the address bar. VM oluşturma işleminden kendi herkese açık IP adresinizi sağlayın.Provide your own public IP address from the VM create process. NGINX varsayılan sayfası aşağıdaki örnekte olduğu gibi görüntülenir:The default NGINX page is displayed as in the following example:

Varsayılan NGINX sitesi

Sonraki adımlarNext steps

Mevcut Packer sağlayıcısı betiklerle kullanabilirsiniz Azure Görüntü Oluşturucu.You can also use existing Packer provisioner scripts with Azure Image Builder.