Exercício – Implantar e exportar um fluxo de trabalho dos Aplicativos Lógicos do Azure usando um modelo do ARM
No exercício anterior, implantamos um aplicativo usando um modelo básico do Azure Resource Manager. O modelo era inflexível, pois tudo estava embutido em código. Por exemplo, para alterar o nome do fluxo de trabalho ou o local de implantação do aplicativo, era necessário editar o modelo. Em cenários em que você faz várias implantações em um ambiente de script, é complicado editar o modelo manualmente. Uma abordagem melhor é fornecer valores como parâmetros para personalizar a implantação do recurso.
Atualizar nosso modelo para usar parâmetros de modelo
Faça uma cópia do modelo básico usado no exercício anterior com o seguinte comando
cp
:cp basic-template.json template-with-params.json
Abra o modelo no editor interno com o seguinte comando
code
:code template-with-params.json
A primeira etapa é adicionar parâmetros para personalizar facilmente o nome do aplicativo e o local em que ele é executado.
Substitua a seção
parameters
no modelo pelo seguinte snippet de código, que adiciona dois novos parâmetros,logicAppName
elocation
:"parameters": { "logicAppName": { "type": "string", "metadata": { "description": "The name of the logic app to create." } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } },
Os dois parâmetros são cadeias de caracteres. Não fornecemos um valor padrão para o parâmetro
logicAppName
, o que significa que você precisa fornecer um no momento da implantação. Por outro lado, olocation
é opcional, pois fornecemos um valor padrão.O valor padrão do parâmetro
location
é o local do grupo de recursos no qual o aplicativo é implantado. Obtemos esse valor referenciando a propriedade location do grupo de recursos retornado pela função de modeloresourceGroup()
. As expressões começam e terminam com colchetes esquerdo e direito ([ ]
) respectivamente. O valor da expressão é avaliado quando o modelo conclui a implantação. Uma expressão pode retornar uma cadeia de caracteres, um inteiro, um booliano, uma matriz ou um objeto. Em um modelo, você pode definir 256 parâmetros no máximo.Agora que definimos dois novos parâmetros, iremos usá-los no modelo, substituindo os valores codificados por referências aos novos parâmetros.
Substitua os campos
name
elocation
na seção de recursos do modelo para usar nossos novos parâmetros, conforme mostrado no snippet a seguir:"name": "[parameters('logicAppName')]", "location": "[parameters('location')]",
Substitua a seção
outputs
na parte inferior do modelo pelo código a seguir. Estamos atualizando o valor da variável de modelologicAppUrl
para usar também o parâmetrologicAppName
, como é mostrado no seguinte snippet:"outputs": { "logicAppUrl": { "type": "string", "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]" } }
Pressione Ctrl + S para salvar suas alterações em template-with-params.json.
Implantar o recurso de aplicativo lógico com o modelo parametrizado
Há duas maneiras de fornecer parâmetros ao nosso modelo durante a implantação usando o sinalizador --parameters
no comando az deployment group create
. Podemos passar um URI de um arquivo de parâmetros remoto ou o nome de um arquivo local. Vamos usar um arquivo local.
Criar um arquivo JSON de parâmetros
Crie um arquivo chamado
params.json
no editor de código interno com o seguinte comando:code params.json
Cole o seguinte JSON em params.json e pressione Ctrl + S para salvar suas alterações.
{ "logicAppName": { "value": "myLogicApp" } }
Validar nosso modelo
No Cloud Shell, execute
az deployment group validate
para validar o modelo:az deployment group validate \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters @params.json
O argumento
--template-file
aponta para o modelo local. O nome do arquivo do modelo é template-with-params.json.Você verá um grande bloco JSON como saída, o que lhe informa que o modelo passou na validação.
O Azure Resource Manager preenche os parâmetros de modelo e verifica se o modelo seria executado com êxito em sua assinatura.
Se a validação falhasse, você veria uma descrição detalhada da falha na saída.
Implantar modelo com parâmetro de um arquivo local
Execute comando a seguir no Cloud Shell para implantar o recurso de aplicativo lógico com o nome do aplicativo extraído do arquivo params.json. No arquivo params.json, o
location
parâmetro não está definido, portanto, o padrão é usado.az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters @params.json
A implantação levará alguns instantes, e você poderá observar o progresso na linha de comando do Cloud Shell. Quando a implantação for concluída, você deverá ver
provisioningState
no resultado JSON com o valorSucceeded
.Para ver o aplicativo em ação, localize o valor logicAppUrl no resultado JSON. Selecione a URL e ou copie-a e cole-a em uma nova janela do navegador. A página exibirá a mensagem Hello Azure Logic Apps Template!.
Implantar modelo com parâmetros da linha de comando
Em vez de editar um arquivo de parâmetros sempre que queremos implantar com base na linha de comando, podemos fornecer os parâmetros em uma cadeia de caracteres JSON na linha de comando.
Execute o comando a seguir no Cloud Shell para implantar o recurso de aplicativo lógico com o nome do aplicativo e sua localização enviados como uma cadeia de caracteres JSON na linha de comando:
az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"MyLogicApp2"}, "location": {"value":"East US"}}'
A implantação levará alguns instantes, e você poderá observar o progresso na linha de comando do Cloud Shell. Quando a implantação for concluída, você deverá ver
provisioningState
no resultado JSON com o valorSucceeded
.Para ver o aplicativo em ação, localize o valor logicAppUrl no resultado JSON. Selecione a URL e cole-a em uma nova janela do navegador. A página exibirá a mensagem Hello Azure Logic Apps Template!.
Execute o comando a seguir para listar todos os fluxos de trabalho de Aplicativos Lógicos do Azure implantados até agora:
az resource list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
Esse comando lista os dois fluxos de trabalho dos Aplicativos Lógicos do Azure que implantamos até agora, todos a partir de um modelo.
Atualizar a ação do aplicativo no modelo do Azure Resource
Agora vamos voltar nossas atenções para fazer nosso aplicativo realizar mais do que apenas enviar uma mensagem estática de volta para nós. Manteremos o aplicativo como um fluxo de trabalho disparado por HTTP e ele ainda retornará uma resposta HTTP. Vamos passar alguns valores com a solicitação e fazer o aplicativo efetuar um cálculo para nós. Efetuaremos um cálculo de área simples. Supondo que as entradas passadas são altura e largura de um retângulo, retornaremos a área. Depois, implantaremos o novo aplicativo e o veremos em execução.
Abra template-with-params.json no editor interno executando o seguinte comando no Cloud Shell:
code template-with-params.json
Adicione o campo
relativePath
à seção de entradas do nosso gatilho de solicitação HTTP conforme mostrado no snippet a seguir:"inputs": { "method": "GET", "relativePath": "{width}/{height}", "schema": {} }
A entrada
relativePath
especifica os parâmetros que queremos que nossa URL de ponto de extremidade HTTP aceite. Nesse caso, definimos dois parâmetros, largura e altura. Usaremos esses valores desses parâmetros para calcular uma área e retornar o resultado.Atualize o corpo da ação Response com a seguinte linha:
"body": "Response from @{workflow().name} Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height']) , int(triggerOutputs()['relativePathParameters']['width']) )}",
A resposta atualizada executa as seguintes tarefas:
Imprime o nome do recurso de aplicativo lógico. A resposta chama a função
workflow()
para retornar informações sobre o fluxo de trabalho. Desse resultado, fazemos referência à propriedade de nome.Retorna o produto dos equivalentes inteiros dos valores de cadeia de caracteres de altura e largura dos parâmetros de URL. Essa tarefa usa a função
mul()
e a função de conversãoint()
.
Pressione Ctrl + S para salvar suas alterações em template-with-params.json.
Validar nosso modelo após essas alterações com o comando
az deployment group validate
no Cloud Shell. Neste exemplo, vamos definir o nome do aplicativo como CalculateArea usando um parâmetro embutido.az deployment group validate \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
Execute o comando a seguir para implantar nossas alterações em um aplicativo lógico chamado CalculateArea. Omitiremos um valor para o parâmetro
location
e apenas usaremos o padrão.az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
A implantação levará alguns segundos, e você poderá observar o progresso na linha de comando do Cloud Shell. Quando a implantação for concluída, você deverá ver
provisioningState
no resultado JSON com o valorSucceeded
.Para ver o aplicativo em ação, localize o valor logicAppUrl no resultado JSON. Selecione a URL e cole-a em uma nova janela do navegador.
Atualize a URL no navegador, alterando
/triggers/manual/paths/invoke?api
para/triggers/manual/paths/invoke/{width}/{height}?api
, em que {width} e {height} são valores inteiros para a largura e a altura da área que queremos calcular. Por exemplo,/triggers/manual/paths/invoke/6/7?api
. A resposta do aplicativo listará o nome do fluxo de trabalho e a área calculada, conforme mostrado na captura de tela a seguir:Observação
Certifique-se de substituir apenas as partes referenciadas do URL na etapa anterior. Deixe todo o texto de cada lado como está.
Execute o comando a seguir para listar todos os fluxos de trabalho de Aplicativos Lógicos do Azure implantados até agora:
az resource list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
Neste exercício, introduzimos mais flexibilidade ao nosso modelo com parâmetros. Fornecemos esses parâmetros na linha de comando e usando um arquivo local. Também atualizamos a ação que nosso fluxo de trabalho simples executa alterando diretamente o body
da resposta que enviamos de volta.
É possível baixar os parâmetros e os arquivos de modelo do GitHub com os comandos curl
a seguir no Cloud Shell.
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/params.json > params-final.json
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/template.json > template-with-params-final.json