Utilizando o Windows Azure pela linha de comando

Esse post foi migrado do blog antigo. A publicação original foi no dia 05/03/2014

Eu sei que declarei que não sou fã de usar o terminal, mas, existem vários cenários que podem se beneficiar de scripts de criação de vm, scaling e algumas ações que só podem ser feitas via linha de comando, então vale a pena conhecer essa alternativa!

Podemos acessar o Azure via PowerShell ou azure-xplat.

O PowerShell só roda em Windows, depende do Azure SDK e é, basicamente, uma série de cmdlets.

O azure-xplat é uma ferramenta multi-plataforma, desenvolvida em NodeJS e disponível no npm (gerenciador de pacotes do NodeJS).

Vou utilizar o azure-xplat por ser multi-plataforma.

A partir daqui, todos os comandos serão executados dentro do terminal.

Download

Como eu falei, o azure-xplat está disponível no npm e para baixar é muito simples. Como eu uso o chocolatey (apt-get para windows), eu só preciso fazer isso:

cinst nodejs.install

Pronto, você já tem uma instalação do NodeJS completamente configurada na sua máquina.

Para baixar o azure-xplat:

npm instal azure-cli -g

Agora, digitando ‘azure’, temos isso:

PS c:\Users\Luís> azure  
info: Windows Azure: Microsoft's Cloud Platform
info:
info: Tool version 0.7.5
help:
help: Display help for a given command
help: help [options] [command]
help:
help: Open the portal in a browser
help: portal [options]
help:
help: Commands:
help: account Commands to manage your account information and publish settings
help: config Commands to manage your local settings
help: hdinsight Commands to manage your HDInsight accounts
help: mobile Commands to manage your Mobile Services
help: network Commands to manage your Networks
help: sb Commands to manage your Service Bus configuration
help: service Commands to manage your Cloud Services
help: site Commands to manage your Web Sites
help: sql Commands to manage your SQL Server accounts
help: storage Commands to manage your Storage objects
help: vm Commands to manage your Virtual Machines
help:
help: Options:
help: -h, --help output usage information
help: -v, --version output the application version

Todos os comandos possíveis estão aí.

Comandos

Para começar, precisamos entender como os comandos são construídos: A estrutura é assim:

azure    [recurso]   [ação]  [opções]

Alguns exemplos:

azure    site        list    --json  
azure account import
azure vm create

Intuitivo, certo?

Vamos ver na prática!

Importanto sua assinatura

Para começar, vamos configurar nossa assinatura do Azure neste ambiente. Para isso, só precisamos fazer o download do arquivo de configuração e importá-lo:

PS c:\Users\Luís> azure account download  
info: Executing command account download
info: Launching browser to http://go.microsoft.com/fwlink/?LinkId=254432
help: Save the downloaded file, then execute the command
help: account import <file>
info: account download command OK

Isso vai fazer o download de um arquivo de configuração. Para importá-lo, basta executar o seguinte comando:

PS c:\Users\Luís> azure account import "#caminho do arquivo baixado#"  
info: Executing command account import
info: Found subscription: #Sua assinatura vai aparecer aqui#
warn: The "#caminho do arquivo baixado#" file contains sensitive information
warn: Remember to delete it now that it has been imported
info: Account publish settings imported successfully
info: account import command OK

Pronto. Você já pode gerenciar a nuvem pela linha de comando!

Vamos fazer o primeiro teste:

PS c:\Users\Luís> azure vm list  
info: Executing command vm list
+ Getting virtual machines
data: Name Status Location DNS Name
data: --------- --------- -------- ----------------------
data: minha-vm ReadyRole East US minha-vm.cloudapp.net
data: minha-vm2 ReadyRole East US minha-vm2.cloudapp.net
info: vm list command OK

WOW!! Conseguimos listar todas as nossas VM’s e o atual estado delas. Muito bom!

Vamos tentar mais um:

c:\Users\Luís>azure site list  
info: Executing command site list
+ Getting locations
+ Getting sites
data: Name Slot Status Location Mode URL
data: ------------------ ---- ------- ----------- ------ ------------------------------------------------------------------------------
data: luisrudge Running East US Shared luisrudge.azurewebsites.net,luisrudge.net,www.luisrudge.net
data: blog-post Running West US Free blog-post.azurewebsites.net
info: site list command OK

Interessante, e se eu quiser o resultado em json?

c:\Users\Luís>azure site list --json  
[
{
"enabledHostNames": [
"luisrudge.azurewebsites.net",
"luisrudge.net",
"luisrudge.scm.azurewebsites.net",
"www.luisrudge.net"
],
"hostNames": [
"luisrudge.azurewebsites.net",
"luisrudge.net",
"www.luisrudge.net"
],
"hostNameSslStates": [],
"sslCertificates": [],
"adminEnabled": true,
"availabilityState": "Normal",
"computeMode": "Shared",
"enabled": true,
"lastModifiedTimeUtc": "2014-03-03T20:41:05.790Z",
"name": "luisrudge",
"repositorySiteName": "luisrudge",
"runtimeAvailabilityState": "Normal",
"uri": "https://[retirado-por-segurança]/sites/luisrudge",
"siteMode": "Basic",
"siteProperties": {
"appSettings": {},
"metadata": {},
"properties": {
"RepositoryUri": "https://luisrudge.scm.azurewebsites.net",
"PublishingUsername": "[usuário]",
"PublishingPassword": "[minha-senha-super-segura]"
}
},
"state": "Running",
"usageState": "Normal",
"webSpace": "eastuswebspace"
},
{
"enabledHostNames": [
"blog-post.azurewebsites.net",
"blog-post.scm.azurewebsites.net"
],
"hostNames": [
"blog-post.azurewebsites.net"
],
"hostNameSslStates": [],
"sslCertificates": [],
"adminEnabled": true,
"availabilityState": "Normal",
"computeMode": "Shared",
"enabled": true,
"lastModifiedTimeUtc": "2013-11-15T21:55:46.837Z",
"name": "blog-post",
"repositorySiteName": "blog-post",
"runtimeAvailabilityState": "Normal",
"uri": "https://[retirado-por-segurança]/sites/blog-post",
"siteMode": "Limited",
"siteProperties": {
"appSettings": {},
"metadata": {},
"properties": {
"RepositoryUri": "https://blog-post.scm.azurewebsites.net",
"PublishingUsername": "[usuário]",
"PublishingPassword": "[minha-senha-super-segura]"
}
},
"state": "Running",
"usageState": "Normal",
"webSpace": "westuswebspace"
}
]
Não estamos limitados a ficar listando nossos recursos na nuvem! Podemos, também, gerenciá-los!

Gerenciamento de recursos

Vou pegar um site que tenho para exemplo de um post:

c:\Users\Luís>azure site show blog-post  
info: Executing command site show
info: Showing details for site
+ Getting site information
+ Getting site config information
+ Getting repository settings
+ Getting diagnostic settings
+ Getting locations
data:
data: Web Site Name: blog-post
data: Site Mode: Free
data: Enabled: true
data: Availability: Normal
data: Last Modified: Mon Mar 03 2014 15:33:19 GMT-0300 (E. South America Standard Time)
data: Location: West US
data:
data: Host Name
data: ---------------------------
data: blog-post.azurewebsites.net
[...]
info: site show command OK

Este site está configurado para o modo Free. Para escalar o site para o modo Standard, por exemplo, basta digitar:

c:\Users\Luís>azure site scale mode standard blog-post  
info: Executing command site scale mode
+ Updating a site configuration
info: site scale mode command OK

Fácil, né? Agora, se eu exibir as informações novamente, esse site já está no modo Standard.

c:\Users\Luís>azure site show blog-post  
info: Executing command site show
info: Showing details for site
+ Getting site information
+ Getting site config information
+ Getting repository settings
+ Getting diagnostic settings
+ Getting locations
data:
data: Web Site Name: blog-post
data: Site Mode: Standard
data: Enabled: true
data: Availability: Normal
data: Last Modified: Wed Mar 05 2014 22:51:54 GMT-0300 (E. South America Standard Time)
data: Location: West US
data:
data: Host Name
data: ---------------------------
data: blog-post.azurewebsites.net
[...]
info: site show command OK

Concluindo

Automatizar tarefas faz parte do nosso dia-a-dia e, para isso, nada melhor que a linha de comando.

Utilizando o azure-xplat, sempre que você se sentir “perdido”, basta digitar o comando ou recurso que você quer ajuda com -h ou — help no final.
azure vm list -h  
azure vm -h
azure site create -h
azure site -h

Quer saber como criar uma máquina virtual? Vem aqui!