Exercício - Implantar e exportar um fluxo de trabalho de Aplicativos Lógicos do Azure usando um modelo ARM
No exercício anterior, implantamos um aplicativo lógico usando um modelo básico do Azure Resource Manager. Este modelo era inflexível, pois tudo era codificado. Por exemplo, para alterar o nome do fluxo de trabalho ou o local de implantação do aplicativo, você teria que editar o modelo. Em cenários em que você tem várias implantações em um ambiente com script, editar manualmente o modelo torna-se complicado. Uma abordagem melhor é fornecer os valores como parâmetros, para personalizar a implementação de recursos.
Atualizar o nosso modelo para utilizar os parâmetros do modelo
Copie o modelo básico que usamos no exercício anterior com o seguinte
cp
comando:cp basic-template.json template-with-params.json
Abra o modelo no editor interno com o seguinte
code
comando:code template-with-params.json
O primeiro passo é adicionar parâmetros para que possamos personalizar facilmente o nome e o local do aplicativo onde o aplicativo é executado.
Substitua a
parameters
seção no modelo pelo seguinte trecho de código, que adiciona dois novos parâmetros elocation
:logicAppName
"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." } } },
Ambos os parâmetros são cadeias de carateres. Não fornecemos um valor padrão para o parâmetro, o que significa que você precisa fornecer um no momento da
logicAppName
implantação. Em contraste, olocation
é opcional, pois fornecemos um valor padrão.O valor padrão para o
location
parâmetro é o local do grupo de recursos no qual o aplicativo é implantado. Obtemos esse valor ao referenciar a propriedade location do grupo de recursos devolvido pela função do 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 devolver: uma cadeia de carateres, um número inteiro, um valor booleano, uma matriz ou um objeto. Em um modelo, você pode definir 256 parâmetros como o máximo.Agora que definimos dois novos parâmetros, vamos usá-los no modelo substituindo valores codificados por referências aos novos parâmetros.
Substitua os
name
campos elocation
na seção de recursos do modelo para usar nossos novos parâmetros, conforme mostrado no trecho a seguir:"name": "[parameters('logicAppName')]", "location": "[parameters('location')]",
Substitua a secção
outputs
na parte inferior do modelo pelo código seguinte. Estamos atualizando ologicAppUrl
valor da variável de modelo para também usar ologicAppName
parâmetro, conforme mostrado no trecho a seguir:"outputs": { "logicAppUrl": { "type": "string", "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]" } }
Pressione Ctrl + S para salvar as alterações no template-with-params.json.
Implantar recurso de aplicativo lógico com o modelo parametrizado
Existem duas formas de fornecer parâmetros para o nosso modelo durante a implementação com o sinalizador --parameters
no comando az deployment group create
. Podemos passar um URI de um arquivo de parâmetros remotos ou o nome de um arquivo local. Vamos utilizar um ficheiro local.
Criar um ficheiro JSON de parâmetros
Crie um novo arquivo chamado
params.json
no editor de código interno com o seguinte comando:code params.json
Cole o JSON a seguir no params.json e pressione Ctrl + S para salvar as alterações.
{ "logicAppName": { "value": "myLogicApp" } }
Validar o 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 de ficheiro do modelo é template-with-params.json.Você verá um grande bloco JSON como saída, que informa que o modelo passou na validação.
O Azure Resource Manager preenche os parâmetros do modelo e verifica se o mesmo seria executado com êxito na sua subscrição.
Se a validação falhar, você verá uma descrição detalhada da falha na saída.
Implementar o modelo com parâmetros de um ficheiro local
No Cloud Shell, execute o seguinte comando para implantar o recurso do aplicativo lógico com o nome do aplicativo retirado do arquivo params.json . No arquivo params.json, o
location
parâmetro não é 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 momentos, e você poderá observar o progresso na linha de comando do Cloud Shell. Quando a implementação estiver concluída, deverá ver
provisioningState
no resultado do JSON com o valorSucceeded
.Para ver a aplicação em ação, localize o valor logicAppUrl no resultado do JSON. Selecione o URL ou copie-o e cole-o em uma nova janela do navegador. A página exibirá a mensagem Hello Azure Logic Apps Template! .
Implementar o modelo com parâmetros de uma linha de comandos
Em vez de editar um ficheiro de parâmetros sempre que pretender fazer implementações a partir da linha de comandos, pode fornecer os parâmetros numa cadeia de carateres JSON na linha de comandos.
Execute o seguinte comando no Cloud Shell para implantar o recurso do aplicativo lógico com o nome do aplicativo e seu local alimentados 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 momentos, e você poderá observar o progresso na linha de comando do Cloud Shell. Quando a implementação estiver concluída, deverá ver
provisioningState
no resultado do JSON com o valorSucceeded
.Para ver a aplicação em ação, localize o valor logicAppUrl no resultado do JSON. Selecione o URL e cole-o numa nova janela do browser. A página exibirá a mensagem Hello Azure Logic Apps Template! .
Execute o seguinte comando para listar todos os fluxos de trabalho dos Aplicativos Lógicos do Azure que implantamos até agora:
az resource list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
Este comando lista os dois fluxos de trabalho dos Aplicativos Lógicos do Azure que implantamos até agora, todos a partir de um modelo.
Utilizar a ação da aplicação no modelo do Azure Resource Manager
Vamos agora focar-nos em fazer com que a nossa aplicação faça um pouco mais do que apenas devolver-nos uma mensagem estática. Manteremos o aplicativo como um fluxo de trabalho acionado por HTTP, que ainda retornará uma resposta HTTP. Vamos passar alguns valores com a solicitação, e fazer com que o aplicativo faça um cálculo para nós. Faremos um cálculo básico da área. Partindo do princípio de que as entradas que transmitimos são a altura e largura de um retângulo, iremos devolver a área. Em seguida, implantaremos o novo aplicativo e o veremos ser executado.
Abra o template-with-params.json no editor integrado executando o seguinte comando no Cloud Shell:
code template-with-params.json
Adicione o
relativePath
campo à seção de entradas do nosso gatilho de solicitação HTTP, conforme mostrado no seguinte trecho:"inputs": { "method": "GET", "relativePath": "{width}/{height}", "schema": {} }
A entrada
relativePath
especifica os parâmetros que queremos que o nosso URL de ponto final HTTP aceite. Neste caso, definimos dois parâmetros, width e height. Usaremos esses valores de parâmetro para calcular uma área e retornar o resultado.Atualize o corpo da ação Resposta com a seguinte linha:
"body": "Response from @{workflow().name} Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height']) , int(triggerOutputs()['relativePathParameters']['width']) )}",
Nossa resposta atualizada executa as seguintes tarefas:
Imprime o nome do recurso do aplicativo lógico. A resposta chama a
workflow()
função para retornar informações sobre o fluxo de trabalho. A partir desse resultado, fazemos referência à propriedade name.Retorna o produto dos equivalentes inteiros para os valores de cadeia de caracteres de altura e largura dos parâmetros de URL. Esta tarefa usa a função e
int()
amul()
função de conversão.
Pressione Ctrl + S para salvar as alterações no template-with-params.json.
Valide o modelo após essas alterações com o
az deployment group validate
comando no Cloud Shell. Neste exemplo, definimos 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 seguinte comando para implementar as nossas alterações numa aplicação lógica com o nome CalculateArea. Vamos omitir um valor para o
location
parâmetro e apenas usar 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 momentos, mas você pode observar o progresso na linha de comando do Cloud Shell. Quando a implementação estiver concluída, deverá ver
provisioningState
no resultado do JSON com o valorSucceeded
.Para ver a aplicação em ação, localize o valor logicAppUrl no resultado do JSON. Selecione o URL e cole-o numa nova janela do browser.
Atualize o URL no browser, alterando
/triggers/manual/paths/invoke?api
para/triggers/manual/paths/invoke/{width}/{height}?api
, em que {width} e {height} são valores em números inteiros para a largura e 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:Nota
Certifique-se de substituir apenas as partes referenciadas do URL na etapa anterior. Deixe todo o texto em ambos os lados como está.
Execute o seguinte comando para listar todos os fluxos de trabalho dos Aplicativos Lógicos do Azure que implantamos 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 no nosso modelo com parâmetros. Nós 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 a body
resposta que enviamos de volta.
Pode transferir os parâmetros e os ficheiros de modelo do GitHub com os seguintes comandos curl
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