Automazione della distribuzione delle macchine virtuali di Azure con ChefAutomating Azure virtual machine deployment with Chef

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica.Azure has two different deployment models for creating and working with resources: Resource Manager and classic. In questo articolo viene illustrato l'utilizzo di entrambi i modelli, ma Microsoft indica che le distribuzioni più nuove utilizzano il modello di gestione delle risorse.This article covers using both models, but Microsoft recommends that most new deployments use the Resource Manager model.

Chef rappresenta uno strumento molto utile che fornisce soluzioni automatizzate e configurazioni di stato personalizzate.Chef is a great tool for delivering automation and desired state configurations.

Api del cloud con la versione più recente versione Chef fornisce un'integrazione perfetta con Azure, offrendo la possibilità di effettuare il provisioning e distribuire gli stati di configurazione con un unico comando.With the latest cloud api release, Chef provides seamless integration with Azure, giving you the ability to provision and deploy configuration states through a single command.

In questo articolo, impostare l'ambiente Chef da eseguire il provisioning di macchine virtuali di Azure e illustrata la creazione di un criterio o "Guida di riferimento" e quindi distribuire questo cookbook a una macchina virtuale di Azure.In this article, you set up your Chef environment to provision Azure virtual machines and walk through creating a policy or “CookBook” and then deploying this cookbook to an Azure virtual machine.

Verranno ora illustrate alcune nozioni di base su Chef.Let’s begin!

Nozioni di base su ChefChef basics

Prima di iniziare, rivedere i concetti di base di Chef.Before you begin, review the basic concepts of Chef.

Il seguente diagramma illustra l'architettura di alto livello di Chef.The following diagram depicts the high-level Chef architecture.

Chef ha tre componenti principali dell'architettura: Chef Workstation, Chef Server e Chef Client (nodo).Chef has three main architectural components: Chef Server, Chef Client (node), and Chef Workstation.

Il Chef Server è il punto di gestione e sono disponibili due opzioni per il Chef Server: una soluzione ospitata o una soluzione locale.The Chef Server is the management point and there are two options for the Chef Server: a hosted solution or an on-premises solution. Si utilizzerà una soluzione in hosting.We will be using a hosted solution.

Il client Chef (nodo) rappresenta l'agente che risiede nei server gestiti.The Chef Client (node) is the agent that sits on the servers you are managing.

La Chef Workstation è la workstation di amministrazione in cui è creare i criteri e di eseguire i comandi di gestione.The Chef Workstation is the admin workstation where we create policies and execute management commands. Eseguire il knife comando dalla Chef Workstation per gestire l'infrastruttura.We run the knife command from the Chef Workstation to manage the infrastructure.

I "cookbook" e i "recipe"There is also the concept of “Cookbooks” and “Recipes”. Si tratta in modo efficace i criteri è definire e applicare ai server.These are effectively the policies we define and apply to the servers.

Predisposizione della workstationPreparing the workstation

In primo luogo, è necessario predisporre la workstation.First, lets prep the workstation. Nel seguente esempio viene utilizzata una workstation Windows standard.I’m using a standard Windows workstation. È necessario creare una directory per archiviare i file di configurazione e guide.We need to create a directory to store the config files and cookbooks.

Creare innanzitutto una directory denominata C:\chef.First create a directory called C:\chef.

Creare quindi una seconda directory denominata c:\chef\cookbooks.Then create a second directory called c:\chef\cookbooks.

È ora necessario scaricare il file di impostazioni di Azure affinché Chef possa comunicare con la sottoscrizione di Azure.We now need to download the Azure settings file so Chef can communicate with the Azure subscription.

Scaricare le impostazioni di pubblicazione tramite il comando di Azure PowerShell Get-AzurePublishSettingsFile.Download your publish settings using the PowerShell Azure Get-AzurePublishSettingsFile command.

Salvare il file delle impostazioni di pubblicazione in C:\chef.Save the publish settings file in C:\chef.

Creazione di un account Chef gestitoCreating a managed Chef account

Iscriversi per ottenere un account Chef ospitato quiSign up for a hosted Chef account here.

Durante il processo di iscrizione, verrà richiesto di creare una nuova organizzazione.During the signup process, you will be asked to create a new organization.

Una volta creata l'organizzazione, scaricare lo Starter Kit.Once your organization is created, download the starter kit.

Nota

Se viene visualizzato un messaggio di avviso che indica che le chiavi verranno reimpostate, è comunque possibile proseguire, in quanto non è stata ancora configurata alcuna infrastruttura.If you receive a prompt warning you that your keys will be reset, it’s ok to proceed as we have no existing infrastructure configured as yet.

Il file ZIP dello Starter Kit contiene i file di configurazione e le chiavi dell'organizzazione.This starter kit zip file contains your organization config files and keys.

Configurazione della workstation ChefConfiguring the Chef workstation

Estrarre il contenuto del file chef-starter.zip in C:\chef.Extract the content of the chef-starter.zip to C:\chef.

Copiare tutti i file presenti nella directory chef-starter\chef-repo.chef to your c:\chef.Copy all files under chef-starter\chef-repo.chef to your c:\chef directory.

La directory avrà ora un aspetto analogo al seguente esempio:Your directory should now look something like the following example.

Dovrebbero essere presenti quattro file, incluso il file di pubblicazione di Azure nella cartella c:\chef.You should now have four files including the Azure publishing file in the root of c:\chef.

I file PEM contengono le chiavi private dell'organizzazione e amministrative per la comunicazione, mentre il file knife.rb contiene la configurazione Knife.The PEM files contain your organization and admin private keys for communication while the knife.rb file contains your knife configuration. È necessario modificare il file knife.rb.We will need to edit the knife.rb file.

Aprire il file in un editor di testo e modificare la voce "cookbook_path" rimuovendo i caratteri /../ dal percorso. L'aspetto della riga dovrebbe essere simile al seguente:Open the file in your editor of choice and modify the “cookbook_path” by removing the /../ from the path so it appears as shown next.

cookbook_path  ["#{current_dir}/cookbooks"]

Aggiungere inoltre la seguente riga, in cui è necessario specificare il nome del file delle impostazioni di pubblicazione di Azure.Also add the following line reflecting the name of your Azure publish settings file.

knife[:azure_publish_settings_file] = "yourfilename.publishsettings"

Il file knife.rb dovrebbe avere un aspetto simile al seguente esempio:Your knife.rb file should now look similar to the following example.

Queste righe sono necessarie per garantire la presenza di riferimenti Knife nella directory di cookbook c:\chef\cookbooks e per usare il file delle impostazioni di pubblicazione di Azure durante le operazioni con Azure.These lines will ensure that Knife references the cookbooks directory under c:\chef\cookbooks, and also uses our Azure Publish Settings file during Azure operations.

Installazione di Chef Development KitInstalling the Chef Development Kit

A questo punto, scaricare e installare il ChefDK (Chef Development Kit) per configurare la workstation Chef.Next download and install the ChefDK (Chef Development Kit) to set up your Chef Workstation.

Installare nel percorso predefinito c:\opscode.Install in the default location of c:\opscode. L'installazione richiederà all'incirca 10 minuti.This install will take around 10 minutes.

Verificare che la variabile PATH contenga voci relative ai percorsi C:\opscode\chefdk\bin;C:\opscode\chefdk\embedded\bin;c:\users\yourusername.chefdk\gem\ruby\2.0.0\binConfirm your PATH variable contains entries for C:\opscode\chefdk\bin;C:\opscode\chefdk\embedded\bin;c:\users\yourusername.chefdk\gem\ruby\2.0.0\bin

Se questi percorsi non sono presenti, assicurarsi di aggiungerli.If they are not there, make sure you add these paths!

CONSIDERARE CHE L'ORDINE DEL PERCORSO È IMPORTANTE.NOTE THE ORDER OF THE PATH IS IMPORTANT! Se i percorsi opscode non sono presenti nell'ordine corretto, si verificheranno dei problemi.If your opscode paths are not in the correct order you will have issues.

Prima di continuare, riavviare la workstation.Reboot your workstation before you continue.

Il passaggio successivo prevede l'installazione dell'estensione Knife di Azure,Next, we will install the Knife Azure extension. che fornisce il "plug-in Azure" a Knife.This provides Knife with the “Azure Plugin”.

Eseguire il comando indicato di seguito.Run the following command.

chef gem install knife-azure ––pre

Nota

L'argomento "-pre" assicura che si riceverà la versione RC più recente del plug-in Azure di Knife, che fornisce l'accesso al set di API più recente.The –pre argument ensures you are receiving the latest RC version of the Knife Azure Plugin which provides access to the latest set of APIs.

È probabile che durante l'installazione verranno installate anche diverse dipendenze.It’s likely that a number of dependencies will also be installed at the same time.

Per assicurarsi che tutto sia configurato correttamente, eseguire il seguente comando:To ensure everything is configured correctly, run the following command.

knife azure image list

Se tutto è stato configurato correttamente, verrà visualizzato un elenco delle immagini di Azure disponibili.If everything is configured correctly, you will see a list of available Azure images scroll through.

A questo puntoCongratulations. La workstation è impostata.The workstation is set up!

Creazione di un cookbookCreating a Cookbook

Chef usa i cookbook per definire i set di comandi che si desidera eseguire nel client gestito.A Cookbook is used by Chef to define a set of commands that you wish to execute on your managed client. Creare un Cookbook è semplice e viene usato il chef generare cookbook comando per generare il modello di Guida di riferimento.Creating a Cookbook is straightforward and we use the chef generate cookbook command to generate the Cookbook template. In questo esempio il cookbook verrà denominato webserver, in quanto si desidera creare un criterio che distribuisca automaticamente IIS.I will be calling my Cookbook web server as I would like a policy that automatically deploys IIS.

Nella directory C:\Chef eseguire il seguente comando.Under your C:\Chef directory run the following command.

chef generate cookbook webserver

Verrà generato un set di file nella directory C:\Chef\cookbooks\webserver.This will generate a set of files under the directory C:\Chef\cookbooks\webserver. È ora necessario definire il set di comandi che desideriamo il client Chef per l'esecuzione nella macchina virtuale gestita.We now need to define the set of commands we would like the Chef client to execute on the managed virtual machine.

I comandi vengono archiviati nel file default.rb.The commands are stored in the file default.rb. In questo file verrà definito un set di comandi che consente di installare IIS, avviare IIS e copiare un file di modello nella cartella wwwroot.In this file, I’ll be defining a set of commands that installs IIS, starts IIS and copies a template file to the wwwroot folder.

Modificare il file C:\chef\cookbooks\webserver\recipes\default.rb e aggiungere le seguenti righe:Modify the C:\chef\cookbooks\webserver\recipes\default.rb file and add the following lines.

powershell_script 'Install IIS' do
     action :run
     code 'add-windowsfeature Web-Server'
end

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

template 'c:\inetpub\wwwroot\Default.htm' do
     source 'Default.htm.erb'
     rights :read, 'Everyone'
end

Al termine dell'operazione, salvare il file.Save the file once you are done.

Creazione di un modelloCreating a template

Come accennato in precedenza, è necessario generare un file di modello che verrà utilizzato come pagina default.html.As we mentioned previously, we need to generate a template file which will be used as the default.html page.

Eseguire il seguente comando per generare il modello.Run the following command to generate the template.

chef generate template webserver Default.htm

Selezionare ora il file C:\chef\cookbooks\webserver\templates\default\Default.htm.erb.Now navigate to the C:\chef\cookbooks\webserver\templates\default\Default.htm.erb file. Modificare il file aggiungendo un semplice codice HTML, ad esempio alcune parole di benvenuto, e salvare il file.Edit the file by adding some simple “Hello World” HTML code, and then save the file.

Caricare il cookbook nel server ChefUpload the Cookbook to the Chef Server

In questo passaggio, stiamo richiede una copia della Guida di riferimento che è stata creata nel computer locale e caricarlo nel server di hosting Chef.In this step, we are taking a copy of the Cookbook that we have created on the local machine and uploading it to the Chef Hosted Server. Una volta caricato, il cookbook verrà visualizzato nella scheda dei Criteri .Once uploaded, the Cookbook will appear under the Policy tab.

knife cookbook upload webserver

Distribuzione di una macchina virtuale con il comando Knife AzureDeploy a virtual machine with Knife Azure

Verrà ora distribuire una macchina virtuale di Azure e applicare il Cookbook "Server Web" che consente di installare IIS web predefinito e servizio di pagina web.We will now deploy an Azure virtual machine and apply the “Webserver” Cookbook which will install the IIS web service and default web page.

Per eseguire questa operazione, utilizzare il comando knife azure server create .In order to do this, use the knife azure server create command.

Un esempio del comando è visualizzato qui di seguito.Am example of the command appears next.

knife azure server create --azure-dns-name 'diegotest01' --azure-vm-name 'testserver01' --azure-vm-size 'Small' --azure-storage-account 'portalvhdsxxxx' --bootstrap-protocol 'cloud-api' --azure-source-image 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201411.01-en.us-127GB.vhd' --azure-service-location 'Southeast Asia' --winrm-user azureuser --winrm-password 'myPassword123' --tcp-endpoints 80,3389 --r 'recipe[webserver]'

La funzione dei parametri è facilmente comprensibile.The parameters are self-explanatory. Sostituire le variabili desiderate ed eseguire il comando.Substitute your particular variables and run.

Nota

Nella riga di comando sono state automatizzate anche le regole di filtro per la rete degli endpoint mediante il parametro –tcp-endpoints.Through the the command line, I’m also automating my endpoint network filter rules by using the –tcp-endpoints parameter. Sono state aperte le porte 80 e 3389 per fornire l'accesso per la pagina Web e la sessione RDP.I’ve opened up ports 80 and 3389 to provide access to my web page and RDP session.

Una volta eseguito il comando, passare al portale di Azure, dove il computer inizia già a eseguire il provisioning.Once you run the command, go to the Azure portal and you will see your machine begin to provision.

Di seguito viene visualizzato il prompt dei comandi.The command prompt appears next.

Una volta completata la distribuzione, dovrebbe essere possibile connettersi al servizio Web attraverso la porta 80, che è stata aperta quando è stato eseguito il provisioning della macchina virtuale con il comando knife azure.Once the deployment is complete, we should be able to connect to the web service over port 80 as we had opened the port when we provisioned the virtual machine with the Knife Azure command. Dal momento che questa macchina virtuale è l'unica macchina virtuale presente nel servizio cloud di questo esempio, verrà connessa con l'URL del servizio cloud.As this virtual machine is the only virtual machine in my cloud service, I’ll connect it with the cloud service url.

In questo esempio è stata impiegata una certa dose di creatività nell'uso del codice HTML.As you can see, I got creative with my HTML code.

Tenere anche presente che è anche possibile connettersi tramite una sessione RDP dal Portale di Azure attraverso la porta 3389.Don’t forget we can also connect through an RDP session from the Azure portal via port 3389.

Si spera che questa guida sia stata utile.I hope this has been helpful! Ora è possibile avviare l'infrastruttura come percorso di codice con Azure.Go and start your infrastructure as code journey with Azure today!