Exercício – Executar e testar uma função do Azure localmente

Concluído

Em unidades anteriores, você aprendeu como criar uma Função do Azure de serviço Web sem servidor a partir de um arquétipo do Maven. Você também aprendeu como criar e executar sua função no Cloud Shell e como configurar seu ambiente de shell para testar sua função.

Neste exercício, você aplica o conhecimento adquirido para abrir uma porta HTTP no Cloud Shell para testar sua função. Em seguida, crie e execute sua função no Cloud Shell e crie uma URL de API para testar sua função usando um navegador da Web.

Abrir uma porta HTTP para teste

Antes de poder testar sua função remotamente, você precisa abrir uma porta para que as solicitações HTTP sejam mapeadas para sua função. Essa ação gera uma URL pública que você usa posteriormente neste exercício para testar sua função.

  1. No Azure Cloud Shell, utilize o seguinte comando cURL para abrir uma porta HTTP para teste:

    curl -X POST http://localhost:8888/openPort/7071
    
  2. Quando a porta está aberta, você vê uma resposta JSON semelhante ao exemplo a seguir:

    {"message":"Port 7071 is open","url":"https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/"}
    

    A resposta JSON é concatenada em uma única linha, conforme ilustrado no exemplo anterior. No entanto, o seguinte exemplo demonstra qual o aspeto da resposta JSON caso a mesma seja formatada:

    {
        "message": "Port 7071 is open",
        "url": "https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/"
    }
    

    Este exemplo deverá ajudá-lo a examinar os dados contidos na resposta.

  3. Copie o URL da resposta JSON na instância do Cloud Shell. Mais adiante neste exercício, você usa essa URL para testar sua função em um navegador da Web.

Compilar e executar a função no Cloud Shell

Depois de abrir a porta para teste, você poderá criar e executar sua função.

  1. No Azure Cloud Shell, altere a pasta raiz da aplicação. Por exemplo:

    cd ~/event-reporting
    
  2. Utilize o seguinte comando do Maven para limpar o diretório do projeto e criar a função:

    mvn clean package
    

    O Maven exibe um status de execução do processo de compilação. Na primeira vez que você cria sua função, o Maven baixa dezenas de arquivos de suporte; Esses arquivos são as dependências listadas em seus arquivos pom.xml e host.json . O seguinte excerto mostra um exemplo abreviado de uma criação com êxito:

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Azure Java Functions 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    . . .
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 8.509 s
    [INFO] Finished at: 2020-01-01T04:55:05+00:00
    [INFO] Final Memory: 57M/306M
    [INFO] ------------------------------------------------------------------------
    
  3. Quando o Maven terminar de criar e empacotar sua função, use o seguinte comando Maven para executar sua função:

    mvn azure-functions:run
    

    O Maven exibe um status de execução do processo de inicialização. O seguinte excerto mostra um exemplo abreviado de um arranque com êxito:

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Azure Java Functions 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- azure-functions-maven-plugin:1.4.1:run (default-cli) @ event-reporting ---
    [INFO] Azure Function App's staging directory found at: /home/user/event-reporting/target/azure-functions/event-reporting-20200101063700664
    [INFO] Azure Functions Core Tools found.
    
                      %%%%%%
                     %%%%%%
                @   %%%%%%    @
              @@   %%%%%%      @@
           @@@    %%%%%%%%%%%    @@@
         @@      %%%%%%%%%%        @@
           @@         %%%%       @@
             @@      %%%       @@
               @@    %%      @@
                    %%
                    %
    
    Azure Functions Core Tools (2.7.2184 Commit hash: 5afacc827c2848e4debc23bb96604f1ffce09cc7)
    Function Runtime Version: 2.0.12961.0
    . . .
    Hosting environment: Production
    Content root path: /home/user/event-reporting/target/azure-functions/event-reporting-20200101063700664
    Now listening on: http://0.0.0.0:7071
    Application started. Press Ctrl+C to shut down.
    
    Http Functions:
    
            HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
    
    

    A função sem servidor está agora a escutar pedidos HTTP.

  4. Copie a secção do URL após a porta HTTP; por exemplo:

    /api/HttpExample
    

    Você usa esse trecho de URL na próxima seção deste exercício para testar sua função em um navegador da Web.

Testar a função no browser

No início deste exercício, você abriu uma porta HTTP para teste; Essa porta permite que você teste seu aplicativo em um navegador da Web. Para isso, utilize os seguintes passos.

  1. Construa o URL da API da função:

    1. Recupere o URL que copiou anteriormente na secção Abrir uma porta HTTP para teste deste exercício; por exemplo:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/
      
    2. Anexe o excerto do URL da API da função que copiou anteriormente na secção Compilar e executar a função no Cloud Shell deste exercício; por exemplo:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample
      
    3. Anexe uma cadeia de consulta que transmita um nome ao URL da API; por exemplo:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample?name=Bob
      
    4. Copie este URL totalmente construído para utilizar nos passos seguintes.

  2. Abra um novo separador no browser e cole o URL totalmente construído dos passos anteriores no campo de endereços.

  3. Quando você instrui seu navegador da Web a solicitar a URL, você verá uma mensagem de texto sem formatação retornada ao navegador da Web que é personalizada para o nome que você passou na cadeia de caracteres de consulta. Por exemplo:

    Hello, Bob
    

    No Azure Cloud Shell, verá uma mensagem de estado semelhante ao seguinte exemplo, que indica que o pedido foi processado com êxito:

    [1/1/20 7:08:11 AM] Executing HTTP request: {
    [1/1/20 7:08:11 AM]   "requestId": "12345678-1234-1234-1234-123456789abc",
    [1/1/20 7:08:11 AM]   "method": "GET",
    [1/1/20 7:08:11 AM]   "uri": "/api/HttpExample"
    [1/1/20 7:08:11 AM] }
    [1/1/20 7:08:12 AM] Executing 'Functions.HttpExample' (Reason='This function was programmatically called via the host APIs.', Id=12345678-1234-1234-1234-123456789abc)
    [1/1/20 7:08:12 AM] Java HTTP trigger processed a request.
    [1/1/20 7:08:12 AM] Function "HttpExample" (Id: 12345678-1234-1234-1234-123456789abc) invoked by Java Worker
    [1/1/20 7:08:12 AM] Host lock lease acquired by instance ID '00000000000000000000000052DF09EB'.
    [1/1/20 7:08:12 AM] Executed 'Functions.HttpExample' (Succeeded, Id=12345678-1234-1234-1234-123456789abc)
    [1/1/20 7:08:13 AM] Executed HTTP request: {
    [1/1/20 7:08:13 AM]   "requestId": "12345678-1234-1234-1234-123456789abc",
    [1/1/20 7:08:13 AM]   "method": "GET",
    [1/1/20 7:08:13 AM]   "uri": "/api/HttpExample",
    [1/1/20 7:08:13 AM]   "identities": [
    [1/1/20 7:08:13 AM]     {
    [1/1/20 7:08:13 AM]       "type": "WebJobsAuthLevel",
    [1/1/20 7:08:13 AM]       "level": "Admin"
    [1/1/20 7:08:13 AM]     }
    [1/1/20 7:08:13 AM]   ],
    [1/1/20 7:08:13 AM]   "status": 200,
    [1/1/20 7:08:13 AM]   "duration": 1759
    [1/1/20 7:08:13 AM] }
    

Se você não vir nenhum erro, então você testou com sucesso sua função localmente!

Antes de continuar, volte ao Cloud Shell e prima Ctrl+C para fechar o servidor de teste.

Na próxima unidade, você aprenderá como implantar sua função no Azure Functions.