Exercício – Adicionar parâmetros e saídas ao seu modelo do Azure Resource Manager
Neste exercício, adicione um parâmetro para definir o nome da conta de armazenamento do Azure durante a implantação. Em seguida, adicione um parâmetro para definir quais SKUs de conta de armazenamento são permitidos e define qual usar para esta implantação. Você também adiciona utilidade ao modelo do Azure Resource Manager (modelo do ARM) adicionando uma saída que você pode usar mais tarde no processo de implantação.
Criar parâmetros para o modelo do ARM
Aqui, você torna seu modelo do ARM mais flexível adicionando parâmetros que podem ser definidos no runtime. Crie um parâmetro para o valor de storageName
.
No arquivo azuredeploy.json no Visual Studio Code, coloque o cursor dentro das chaves no atributo parameters. Ela tem esta aparência:
"parameters":{},
Selecione Inserir e insira par. Você verá uma lista de snippets de código relacionados. Escolha new-parameter, que adiciona um parâmetro genérico ao modelo. Ela será semelhante a este exemplo:
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
Altere o parâmetro de parameter1 para storageName e deixe o tipo como uma cadeia. Adicione um valor minLength de 3 e um valor maxLength de 24. Adicione o valor de descrição O nome do recurso de armazenamento do Azure.
O bloco de parâmetros deve agora se parecer com este exemplo:
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
Use o novo parâmetro no bloco de
resources
nos valoresname
edisplayName
. O arquivo inteiro se parece com este exemplo de código:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS" } } ], "outputs": {} }
Salve o arquivo.
Implantar o modelo do ARM com parâmetros
Aqui, você altera o nome da implantação para refletir melhor o que essa implantação faz e preenche um valor para o novo parâmetro.
Execute os comandos da CLI do Azure a seguir no terminal. Esse snippet é o mesmo código usado anteriormente, porém o nome da implantação será alterado. Preencha com um nome exclusivo para o parâmetro storageName
. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. É possível usar o nome exclusivo criado na última unidade. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today
az deployment group create \
--name $DeploymentName \
--template-file $templateFile \
--parameters storageName={your-unique-name}
Execute os comandos do Azure PowerShell a seguir no terminal. Esse snippet é o mesmo código usado anteriormente, porém o nome da implantação será alterado. Preencha com um nome exclusivo para o parâmetro storageName
. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. É possível usar o nome exclusivo criado na última unidade. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.
$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
-Name $deploymentName `
-TemplateFile $templateFile `
-storageName {your-unique-name}
Verifique sua implantação
Quando a implantação for concluída, volte para o portal do Azure no navegador. Vá para o grupo de recursos e veja que agora há Três Implantações Bem-Sucedidas. Selecione esse link.
Observe que todas as três implantações estão na lista.
Explore a implantação addnameparameter, conforme feito anteriormente.
Adicione outro parâmetro que limita os valores permitidos
Use aqui parâmetros para limitar os valores permitidos para um parâmetro.
Coloque o cursor após a chave de fechamento do parâmetro
storageName
. Adicione uma vírgula e selecione Inserir.Novamente, insira par e selecione new-parameter.
Altere o novo parâmetro genérico para o seguinte código:
"storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] }
Aqui, você está listando os valores que este parâmetro permite. Se o modelo for executado com um valor que não é permitido, a implantação falhará.
Adicione um comentário a esse parâmetro.
Os modelos do ARM são compatíveis com os comentários
//
e/* */
.Atualize os recursos para usar o parâmetro
storageSKU
. Se você usufruir do IntelliSense no Visual Studio Code, esta etapa ficará mais fácil."sku": { "name": "[parameters('storageSKU')]" }
O arquivo inteiro se parece com este exemplo de código:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } }, "storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "[parameters('storageSKU')]" } } ], "outputs": {} }
Salve o arquivo.
Implantar o modelo do ARM
Aqui, implante com êxito usando um parâmetro storageSKU
que está na lista de permissões. Em seguida, tente implantar o modelo usando um storageSKU
parâmetro que não está na lista permitida. A segunda implantação falha conforme esperado.
Implante o modelo executando os seguintes comandos. Preencha com um nome exclusivo para o parâmetro
storageName
. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_GRS storageName={your-unique-name}
Permita que esta implantação seja concluída. Essa implantação é realizada com sucesso conforme o esperado. Sua lista de valores permitidos impede que os usuários do seu modelo passem valores de parâmetro que não funcionam para o recurso. Vejamos o que acontece quando você fornece uma SKU inválida.
Execute os comandos a seguir para implantar o modelo com um parâmetro que não é permitido. Aqui, você alterou o parâmetro
storageSKU
para Básico. Preencha com um nome exclusivo para o parâmetrostorageName
. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Basic storageName={your-unique-name}
Essa implantação falha. Observe o erro.
Implante o modelo executando os seguintes comandos. Preencha com um nome exclusivo para o parâmetro
storageName
. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_GRS
Permita que esta implantação seja concluída. Essa implantação é realizada com sucesso conforme o esperado. Sua lista de valores permitidos impede que os usuários do seu modelo passem valores de parâmetro que não funcionam para o recurso. Vejamos o que acontece quando você fornece uma SKU inválida.
Execute os comandos a seguir para implantar o modelo com um parâmetro que não é permitido. Aqui, você alterou o parâmetro
storageSKU
para Básico. Preencha com um nome exclusivo para o parâmetrostorageName
. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Basic
Essa implantação falha. Observe o erro.
Adicionar saída ao modelo do ARM
Aqui, adicione à seção outputs
do modelo do ARM a fim de gerar os pontos de extremidade para o recurso de conta de armazenamento.
No arquivo azuredeploy.json no Visual Studio Code, coloque o cursor dentro das chaves no atributo saídas
"outputs":{},
.Pressione Enter e, em seguida, insira out. Você obtém uma lista de snippets relacionados. Selecione new-output. Ele adiciona uma saída genérica ao modelo que se parece com este exemplo:
"outputs": { "output1": { "type": "string", "value": "value" }
Altere "output1" para "storageEndpoint" e, em seguida, altere o valor de
type
para "object". Altere o valor devalue
para "[reference(parameters('storageName')).primaryEndpoints]". Essa expressão é aquela que obtém os dados do ponto de extremidade, descritos na unidade anterior. Como especificamos object como o tipo, ele retorna o objeto no formato JSON."outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
Salve o arquivo.
Implantar o modelo do ARM com uma saída
Aqui, você implanta o modelo e vê a saída dos pontos de extremidade como JSON. Você precisa preencher um nome exclusivo para o parâmetro storageName
. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.
Implante o modelo executando os seguintes comandos. Certifique-se de substituir {seu-nome-exclusivo} por sua cadeia de caracteres exclusiva.
templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addoutputs-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_LRS storageName={your-unique-name}
Observe a saída.
Implante o modelo executando os seguintes comandos. Certifique-se de substituir {seu-nome-exclusivo} por sua cadeia de caracteres exclusiva.
$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addOutputs-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_LRS
Observe a saída.
Verifique sua implantação de saída
No portal do Azure, acesse a implantação addOutputs. Você também pode encontrar a saída lá.