Exercício - Implantar e exportar um fluxo de trabalho de Aplicativos Lógicos do Azure usando um modelo ARM

Concluído

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

  1. Copie o modelo básico que usamos no exercício anterior com o seguinte cp comando:

    cp basic-template.json template-with-params.json
    
  2. 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.

  3. 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, o location é opcional, pois fornecemos um valor padrão.

    O valor padrão para o parâmetro é o local do grupo de recursos no qual o location aplicativo é implantado. Obtemos esse valor ao referenciar a propriedade location do grupo de recursos devolvido pela função do modelo resourceGroup(). 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.

  4. Substitua os name campos e location 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')]",
    
  5. Substitua a secção outputs na parte inferior do modelo pelo código seguinte. Estamos atualizando o logicAppUrl valor da variável de modelo para também usar o logicAppName 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]"
        }
     }
    
  6. Pressione Ctrl + S para salvar todas 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 transmitir um URI de um ficheiro de parâmetros remoto ou o nome de um ficheiro local. Vamos utilizar um ficheiro local.

Criar um ficheiro JSON de parâmetros

  1. Crie um novo arquivo chamado params.json no editor de código interno com o seguinte comando:

    code params.json
    
  2. Cole o JSON a seguir no params.json e pressione Ctrl + S para salvar as alterações.

    { 
        "logicAppName": { 
            "value": "myLogicApp" 
        } 
    }
    

Validar o nosso modelo

  1. 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

  1. 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 parâmetro não é definido, portanto, o location 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 valor Succeeded.

  2. 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.

  1. 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 valor Succeeded.

  2. 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! .

  3. 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 três 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.

  1. Abra o template-with-params.json no editor integrado executando o seguinte comando no Cloud Shell:

    code template-with-params.json
    
  2. 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.

  3. 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() a mul() função de conversão.

  4. Pressione Ctrl + S para salvar todas as alterações no template-with-params.json.

  5. 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"}}'
    
  6. 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 parâmetro e apenas usar o location 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 valor Succeeded.

  7. 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.

  8. 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:

    Sceenshot of web browser displaying response from our app called calculate area.

  9. 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. Fornecemos esses parâmetros na linha de comandos e através de um ficheiro local. Também atualizámos a ação que o nosso fluxo de trabalho simples executa, alterando diretamente o body da resposta que devolvemos.

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