Exercício – Adicionar lógica condicional ao modelo do ARM
Nos exercícios anteriores, trabalhou com máquinas virtuais do Linux. Aqui, vai ser um pouco diferente e vai centrar-se na gestão das contas de armazenamento.
Digamos que você tenha três ambientes nos quais precisa implantar: Desenvolvimento, Preparação e Produção.
- O ambiente Dev é o primeiro lugar onde tudo o que a aplicação precisa é reunido. Este ambiente pode incluir servidores Web, um balanceador de carga e uma base de dados.
- O ambiente de Processo de teste é onde o teste final ocorre antes de as novas funcionalidades da aplicação serem lançadas para os utilizadores finais.
- O ambiente de Produção é onde os utilizadores finais acedem à aplicação.
Ao passar de Dev para Produção, precisa de uma infraestrutura adicional. Por exemplo, em Produção, é necessária uma conta de armazenamento adicional que não foi necessária nos ambientes anteriores.
Vai utilizar uma condição para controlar quando uma conta de armazenamento é aprovisionada. Este procedimento permite-lhe suportar cada um dos ambientes de infraestruturas no mesmo modelo do ARM.
Criar o modelo ARM
Agora, irá criar um modelo do Azure Resource Manager (ARM) que define um recurso da conta de armazenamento.
O modelo também define dois parâmetros:
environment
: o nome do ambiente atual.storageAccountName
: o nome da conta de armazenamento.
O environment
pode ter um de três valores: dev
, staging
ou production
. A condição aprovisiona a conta de armazenamento apenas quando environment
é igual a production
.
No Visual Studio Code, crie um ficheiro chamado condition.json no mesmo diretório que contém azuredeploy.json.
Adicione estes conteúdos ao condition.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "environment": { "type": "string", "defaultValue": "dev", "allowedValues": [ "dev", "staging", "production" ], "metadata": { "description": "a value that represents the current environment" } }, "storageAccountName": { "type": "string", "metadata": { "description": "a name for the account" } } }, "functions": [], "variables": {}, "resources": [ { "condition": "[equals(parameters('environment'),'production')]", "name": "[parameters('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } } ], "outputs": {} }
Agora, irá utilizar o módulo Az e o PowerShell para implementar um modelo do ARM com uma construção de condição.
Aprovisionar o ambiente Dev
Vai agora implementar o modelo do ARM no ambiente Dev. Para tal, vai definir o parâmetro de modelo environment
como dev
.
Como a condição aprovisiona a conta de armazenamento apenas quando environment
é igual a production
, espera que o modelo não aprovisione a conta de armazenamento. Por outras palavras, espera uma implementação com zero recursos.
Crie uma variável do PowerShell com o nome da conta de armazenamento.
$STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
Os nomes da conta de armazenamento devem ser exclusivos. A parte
Get-Random
garante que o nome da conta de armazenamento termina numa série de números aleatória.Execute o seguinte
New-AzResourceGroupDeployment
comando para implantar o modelo no ambiente de desenvolvimento:New-AzResourceGroupDeployment ` -TemplateFile "./condition.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -environment dev
Verificar a implementação no ambiente Dev
Lembre-se de que espera que o modelo não tenha aprovisionado a conta de armazenamento.
Para verificar este facto, execute o comando Get-AzStorageAccount
para verificar se o nome da conta de armazenamento já está em utilização.
Execute o comando Get-AzStorageAccount
:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
A saída é semelhante ao seguinte:
Get-AzStorageAccount: The Resource 'Microsoft.Storage/storageAccounts/tailwindsa4736629' under resource group '<rgn>name of resource group</rgn>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix
Tal indica que a conta de armazenamento ainda não foi aprovisionada. Espera que tal aconteça porque ainda não implementou no ambiente de Produção.
Aprovisionar o ambiente de Produção
Vai agora implementar o modelo do ARM no ambiente de Produção, à semelhança do que fez para o ambiente Dev.
Para relembrar, esta é a aparência da condição no modelo:
"condition": "[equals(parameters('environment'),'production')]"
Para acionar esta condição, deve definir o parâmetro de modelo environment
como production
.
Execute o seguinte New-AzResourceGroupDeployment
comando para implantar o modelo no ambiente de produção:
New-AzResourceGroupDeployment `
-TemplateFile "./condition.json" `
-storageAccountName $STORAGE_ACCT_NAME `
-environment production
Verificar a implementação no ambiente de Produção
Desta vez, espera que o modelo tenha aprovisionado a conta de armazenamento.
Para verificar este facto, execute o comando Get-AzStorageAccount
novamente para verificar se o nome da conta de armazenamento está em utilização.
Execute o seguinte comando Get-AzStorageAccount
:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
Desta vez, obterá uma saída diferente. Em vez de uma mensagem de erro, apresenta esta saída de tabela que mostra informações sobre o recurso da conta de armazenamento:
A saída é semelhante ao seguinte:
Location Name Type Kind
-------- ---- ---- ----
westus tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2
Estes valores informam que a conta de armazenamento foi aprovisionada conforme o esperado.
Embora este seja um exemplo básico, verá como o pode implementar com base numa condição.
Na prática, os ambientes Dev, Processo de teste e Produção incluirão recursos adicionais do Azure para suportar as necessidades de computação, de rede e de armazenamento. Cada ambiente será provavelmente gerido através do seu próprio grupo de recursos para que possa ser aprovisionado e tratado como uma única unidade.
Criar o modelo ARM
Agora, irá criar um modelo do Azure Resource Manager (ARM) que define um recurso da conta de armazenamento.
O modelo também define dois parâmetros:
environment
: o nome do ambiente atual.storageAccountName
: o nome da conta de armazenamento.
O environment
pode ter um de três valores: dev
, staging
ou production
. A condição aprovisiona a conta de armazenamento apenas quando environment
é igual a production
.
No Visual Studio Code, crie um ficheiro chamado condition.json no mesmo diretório que contém azuredeploy.json.
Adicione estes conteúdos ao condition.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "environment": { "type": "string", "defaultValue": "dev", "allowedValues": [ "dev", "staging", "production" ], "metadata": { "description": "a value that represents the current environment" } }, "storageAccountName": { "type": "string", "metadata": { "description": "a name for the account" } } }, "functions": [], "variables": {}, "resources": [ { "condition": "[equals(parameters('environment'),'production')]", "name": "[parameters('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } } ], "outputs": {} }
Aprovisionar o ambiente Dev
Vai agora implementar o modelo do ARM no ambiente Dev. Para tal, vai definir o parâmetro de modelo environment
como dev
.
Como a condição aprovisiona a conta de armazenamento apenas quando environment
é igual a production
, espera que o modelo não aprovisione a conta de armazenamento. Por outras palavras, espera uma implementação com zero recursos.
Crie uma variável Bash com o nome da conta de armazenamento.
STORAGE_ACCT_NAME=tailwindsa$RANDOM
Os nomes da conta de armazenamento devem ser exclusivos. A parte
$RANDOM
garante que o nome da conta de armazenamento termina numa série de números aleatória.Execute o seguinte
az deployment group create
comando para implantar o modelo no ambiente de desenvolvimento:az deployment group create \ --template-file condition.json \ --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
Verificar a implementação no ambiente Dev
Lembre-se de que espera que o modelo não tenha aprovisionado a conta de armazenamento.
Para verificar este facto, execute o comando az storage account check-name
para verificar se o nome da conta de armazenamento já está em utilização.
Execute o seguinte comando az storage account check-name
:
az storage account check-name --name $STORAGE_ACCT_NAME
Verá o seguinte:
{
"message": null,
"nameAvailable": true,
"reason": null
}
O valor de nameAvailable
é true
, o que significa que o nome da conta de armazenamento ainda está disponível e ainda não foi aprovisionado. Espera que tal aconteça porque ainda não implementou no ambiente de Produção.
Aprovisionar o ambiente de Produção
Aqui, você implanta o modelo ARM no ambiente de produção, semelhante ao que fez para o ambiente de desenvolvimento .
Para relembrar, esta é a aparência da condição no modelo:
"condition": "[equals(parameters('environment'),'production')]"
Para acionar esta condição, deve definir o parâmetro de modelo environment
como production
.
Execute o seguinte az deployment group create
comando para implantar o modelo no ambiente de produção:
az deployment group create \
--template-file condition.json \
--parameters storageAccountName=$STORAGE_ACCT_NAME environment=production
Verificar a implementação no ambiente de Produção
Desta vez, espera que o modelo tenha aprovisionado a conta de armazenamento.
Para verificar este facto, execute o comando az storage account check-name
novamente para verificar se o nome da conta de armazenamento está em utilização.
Execute o seguinte comando az storage account check-name
:
az storage account check-name --name $STORAGE_ACCT_NAME
A saída é semelhante ao seguinte:
{
"message": "The storage account named tailwindsa32100 is already taken.",
"nameAvailable": false,
"reason": "AlreadyExists"
}
Estes valores informam que a conta de armazenamento foi aprovisionada conforme o esperado.
Embora este seja um exemplo básico, verá como o pode implementar com base numa condição.
Na prática, os ambientes Dev, Processo de teste e Produção incluirão recursos adicionais do Azure para suportar as necessidades de computação, de rede e de armazenamento. Cada ambiente será provavelmente gerido através do seu próprio grupo de recursos para que possa ser aprovisionado e tratado como uma única unidade.