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

Concluído

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

Neste exercício, você aplicará 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.

Abertura de 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ê usará posteriormente neste exercício para testar sua função.

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

    curl -X POST http://localhost:8888/openPort/7071
    
  2. Quando a porta estiver aberta, você verá 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 exemplo a seguir demonstra com seria a resposta JSON se ela estivesse formatada:

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

    Este exemplo deve ajudar você a examinar os dados contidos na resposta.

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

Compilação e execução da sua função no Cloud Shell

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

  1. No Azure Cloud Shell, altere para a pasta raiz do seu aplicativo. Por exemplo:

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

    mvn clean package
    

    O Maven exibe um status de execução do processo de compilação. Na primeira vez em que você compila sua função, o Maven faz o download de dezenas de arquivos de suporte; esses arquivos são as dependências listadas nos arquivos pom.xml e host.json. O seguinte trecho mostra um exemplo abreviado de uma compilação bem-sucedida:

    [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 compilar 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 trecho mostra um exemplo abreviado de uma inicialização bem-sucedida:

    [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
    
    

    Sua função sem servidor agora está escutando as solicitações HTTP.

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

    /api/HttpExample
    

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

Teste da função em seu navegador da Web

No início deste exercício, você abriu uma porta HTTP para testes; essa porta permite testar o aplicativo em um navegador da Web. Para fazer isso, execute as etapas a seguir.

  1. Construir a URL da API da sua função:

    1. Recupere a URL que você copiou anteriormente na seção Abertura de uma porta HTTP para testar deste exercício; por exemplo:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/
      
    2. Acrescente o trecho da URL da API da função que você copiou anteriormente na seção Compilação e execução da sua 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. Acrescente uma cadeia de caracteres de consulta que passa um nome para a URL da API; por exemplo:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample?name=Bob
      
    4. Copie essa URL totalmente formada para uso nas etapas a seguir.

  2. Abra uma nova guia no navegador da Web e cole a URL totalmente formada das etapas anteriores no campo de endereço.

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

    Hello, Bob
    

    No Azure Cloud Shell, você deve ver uma mensagem de status semelhante ao exemplo a seguir, que indica que a solicitação foi processada com sucesso:

    [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 não houver nenhum erro, você testou sua função localmente com êxito!

Antes de continuar, volte para o Cloud Shell e pressione CTRL+C para fechar o servidor de teste.

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