Ejercicio: Ejecutar y probar una función de Azure de forma local
En unidades anteriores, ha aprendido a crear un servicio web sin servidor de Azure Function a partir de un arquetipo de Maven. También ha aprendido a compilar y ejecutar la función en Cloud Shell y a configurar el entorno de shell para probar la función.
En este ejercicio, aplicará lo aprendido para abrir un puerto HTTP en Cloud Shell para probar la función. A continuación, compile y ejecute la función en Cloud Shell y cree una dirección URL de API para probar la función mediante un explorador web.
Apertura de un puerto HTTP para pruebas
Para poder probar la función de forma remota, debe abrir un puerto para que las solicitudes HTTP se asignen a la función. Esta acción genera una dirección URL pública que se usa más adelante en este ejercicio para probar la función.
En Azure Cloud Shell, use el siguiente comando cURL para abrir un puerto HTTP para las pruebas:
curl -X POST http://localhost:8888/openPort/7071
Cuando el puerto esté abierto, verá una respuesta JSON similar a la del ejemplo siguiente:
{"message":"Port 7071 is open","url":"https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/"}
La respuesta JSON se concatena en una sola línea, tal y como se muestra en el ejemplo anterior. Sin embargo, en el ejemplo siguiente se muestra el aspecto de la respuesta JSON si se le ha aplicado formato:
{ "message": "Port 7071 is open", "url": "https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/" }
Este ejemplo le ayudará a examinar los datos que contiene la respuesta.
Copie la dirección URL de la respuesta JSON en la instancia de Cloud Shell. Más adelante en este ejercicio, usará esa dirección URL para probar la función en un explorador web.
Compilación y ejecución de la función en Cloud Shell
Después de abrir el puerto para realizar pruebas, podrá compilar y ejecutar la función.
En Azure Cloud Shell, vaya a la carpeta raíz de la aplicación. Por ejemplo:
cd ~/event-reporting
Use el siguiente comando de Maven para limpiar el directorio del proyecto y compilar la función:
mvn clean package
Maven muestra un estado en ejecución del proceso de compilación. La primera vez que cree la función, Maven descarga docenas de archivos auxiliares. Estos archivos son las dependencias incluidas en sus archivos pom.xml y host.json. En el siguiente fragmento se muestra un ejemplo abreviado de una compilación correcta:
[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] ------------------------------------------------------------------------
Cuando Maven termina de compilar y empaquetar la función, use el siguiente comando de Maven para ejecutarla:
mvn azure-functions:run
Maven muestra un estado en ejecución del proceso de inicio. En el siguiente fragmento se muestra un ejemplo abreviado de un inicio correcto:
[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
La función sin servidor ahora escucha las solicitudes HTTP.
Copie la sección de la URL que sigue al puerto HTTP; por ejemplo:
/api/HttpExample
Use ese fragmento de la dirección URL en la siguiente sección de este ejercicio para probar la función en un explorador web.
Prueba de la función en un explorador web
Anteriormente en este ejercicio, ha abierto un puerto HTTP para pruebas; este puerto le permite probar la aplicación en un explorador web. Para ello, siga estos pasos.
Construya la dirección URL de la API de su función:
Recupere la dirección URL que ha copiado anteriormente en la sección Apertura de un puerto HTTP para pruebas de este ejercicio; por ejemplo:
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/
Anexe el fragmento de la dirección URL de la API de su función que ha copiado anteriormente en la sección Compilación y ejecución de la función en Cloud Shell de este ejercicio; por ejemplo:
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample
Anexe una cadena de consulta que pase un nombre a la dirección URL de la API; por ejemplo:
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample?name=Bob
Copie esta dirección URL completa para usarla en los pasos siguientes.
Abra una nueva pestaña en el explorador web y pegue la dirección URL completa de los pasos anteriores en el campo de dirección.
Cuando indique al explorador web que solicite la dirección URL, se devolverá al explorador un mensaje de texto no cifrado personalizado con el nombre que pasó en la cadena de consulta. Por ejemplo:
Hello, Bob
En Azure Cloud Shell, debería ver un mensaje de estado similar al ejemplo siguiente, que indica que la solicitud se ha procesado correctamente:
[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] }
Si no ve ningún error, ha probado correctamente la función localmente.
Antes de continuar, vuelva a Cloud Shell y presione Ctrl+C para cerrar el servidor de prueba.
En la siguiente unidad, aprenderá a implementar la función en Azure Functions.