Exercício – Adicionar parâmetros e saídas ao seu modelo do Azure Resource Manager
Neste exercício, vai adicionar um parâmetro para definir o nome de conta de armazenamento do Azure durante a implementação. Em seguida, você adiciona um parâmetro para definir quais SKUs de conta de armazenamento são permitidos e define qual usar para essa implantação. Você também adiciona utilidade ao modelo do Azure Resource Manager (modelo ARM) adicionando uma saída que pode ser usada posteriormente no processo de implantação.
Criar parâmetros para o modelo do Resource Manager
Aqui, torna o seu modelo do Resource Manager mais flexível ao adicionar parâmetros que poderão ser definidos no runtime. Crie um parâmetro para o valor storageName
.
No arquivo azuredeploy.json no Visual Studio Code, coloque o cursor dentro das chaves no atributo parameters. Tem a seguinte aparência:
"parameters":{},
Selecione Introduzir e, em seguida, introduza par. Verá uma lista de fragmentos relacionados. Escolha new-parameter, que adiciona um parâmetro genérico ao modelo. Este exemplo é parecido com este:
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
Altere o parâmetro de parameter1 para storageName e deixe o tipo como uma cadeia de caracteres. Adicione um valor minLength de 3 e um valor maxLength de 24. Adicione um valor de descrição de O nome do recurso de armazenamento do Azure.
O bloco de parâmetros agora deve se parecer com este exemplo:
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
Utilize o novo parâmetro no bloco
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": {} }
Guarde o ficheiro.
Implementar o modelo do Resource Manager parametrizado
Aqui, pode alterar o nome da implementação para refletir melhor o que esta implementação faz e preencher um valor para o novo parâmetro.
Execute os seguintes comandos da CLI do Azure no terminal. Este fragmento é o código que utilizou anteriormente, mas o nome da implementação foi alterado. Preencha o parâmetro storageName
com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou 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 seguintes comandos do Azure PowerShell no terminal. Este fragmento é o código que utilizou anteriormente, mas o nome da implementação foi alterado. Preencha o parâmetro storageName
com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou 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}
Verificar a implementação
Quando a implantação terminar, volte para o portal do Azure em seu navegador. Vá para o seu grupo de recursos e veja que agora há 3 implantações bem-sucedidas . Selecione esta ligação.
Repare as três implementações se encontram na lista.
Explore a implementação addnameparameter como fez anteriormente.
Adicionar outro parâmetro que limite os valores permitidos
Aqui, vai utilizar parâmetros para limitar os valores permitidos num parâmetro.
Coloque o cursor após a chaveta de fecho do parâmetro
storageName
. Adicione uma vírgula e prima Enter.Novamente, digite par e selecione new-parameter.
Altere o novo parâmetro generic 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 esse parâmetro permite. Se o modelo for executado com um valor que não é permitido, a implantação falhará.
Adicione um comentário a este parâmetro.
Os modelos ARM suportam comentários
//
e/* */
.Atualize resources (recursos) para utilizar o parâmetro
storageSKU
. Se você aproveitar o IntelliSense no Visual Studio Code, essa etapa será 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": {} }
Guarde o ficheiro.
Implementar o modelo do Resource Manager
Aqui, pode implementar com sucesso através de um parâmetro storageSKU
que está na lista permitida. Em seguida, tente implantar o modelo usando um storageSKU
parâmetro que não esteja na lista de permissões. A segunda implantação falha conforme o esperado.
Implante o modelo executando os seguintes comandos. Preencha o parâmetro
storageName
com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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}
Aguarde pela conclusão da implementação. Esta implementação será concluída com êxito conforme esperado. Sua lista de valores permitidos impede que os usuários do modelo passem valores de parâmetro que não funcionam para o recurso. Vamos ver o que acontece quando fornece um SKU inválido.
Execute os seguintes comandos para implementar o modelo com um parâmetro que não é permitido. Aqui, alterou o parâmetro
storageSKU
para Basic. Preencha o parâmetrostorageName
com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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}
Esta implementação irá falhar. Repare no erro.
Implante o modelo executando os seguintes comandos. Preencha o parâmetro
storageName
com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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
Aguarde pela conclusão da implementação. Esta implementação será concluída com êxito conforme esperado. Sua lista de valores permitidos impede que os usuários do modelo passem valores de parâmetro que não funcionam para o recurso. Vamos ver o que acontece quando fornece um SKU inválido.
Execute os seguintes comandos para implementar o modelo com um parâmetro que não é permitido. Aqui, alterou o parâmetro
storageSKU
para Basic. Preencha o parâmetrostorageName
com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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
Esta implementação irá falhar. Repare no erro.
Adicionar saída ao modelo do Resource Manager
Aqui, pode adicionar à secção outputs
do modelo ARM da saída os pontos finais do recurso da conta de armazenamento.
No arquivo azuredeploy.json no Visual Studio Code, coloque o cursor dentro das chaves no atributo
"outputs":{},
outputs .Prima Enter e, em seguida, enter out. Você obtém uma lista de trechos relacionados. Selecione nova saída. 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]". Esta expressão é a que descrevemos na unidade anterior que obtém os dados do ponto final. Como especificamos o objeto como o tipo, ele retorna o objeto no formato JSON."outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
Guarde o ficheiro.
Implementar o modelo ARM com uma saída
Aqui, implementará o modelo e verá a saída dos pontos finais como JSON. Tem de preencher o parâmetro storageName
com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.
Implante o modelo executando os seguintes comandos. Confirme que substitui {your-unique-name} por uma cadeia exclusiva para si.
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}
Repare na saída.
Implante o modelo executando os seguintes comandos. Confirme que substitui {your-unique-name} por uma cadeia exclusiva para si.
$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addOutputs-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_LRS
Repare na saída.
Verificar a implementação da saída
No portal do Azure, aceda à implementação addOutputs. Também pode localizar lá a sua saída.