Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este inicio rápido, usará las herramientas de línea de comandos de Azure Developer para crear una API web escalable con puntos de conexión de función que respondan a solicitudes HTTP. Después de probar el código localmente, se implementa en una nueva aplicación de funciones sin servidor que se crea en ejecución en un plan de consumo flexible en Azure Functions.
El origen del proyecto usa la Azure Developer CLI (azd) para simplificar la implementación del código en Azure. Esta implementación sigue los procedimientos recomendados actuales para implementaciones seguras y escalables de Azure Functions.
De forma predeterminada, el plan Flex Consumption sigue un modelo de facturación de pago por uso, lo que implica que completar esta iniciación rápida conllevará un pequeño costo de unos pocos centavos de dólar estadounidense o menos en su cuenta de Azure.
Prerequisites
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
SDK de .NET 8.0
-
Kit para desarrolladores de Java 17
- Si usa otra versión compatible de Java, debe actualizar el archivo pom.xml del proyecto.
- La
JAVA_HOMEvariable de entorno debe establecerse en la ubicación de instalación de la versión correcta del Kit de desarrollo de Java (JDK).
- Apache Maven 3.8.x
- Una herramienta de prueba HTTP segura para enviar solicitudes con cargas JSON a los puntos de conexión de función. En este artículo se usa
curl.
Inicialización del proyecto
Use el azd init comando para crear un proyecto de código local de Azure Functions a partir de una plantilla.
En el terminal local o el símbolo del sistema, ejecute este comando
azd initen una carpeta vacía:azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnetEste comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta actual. La marca
-eestablece un nombre para el entorno actual. Enazd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. También se usa en el nombre del grupo de recursos que crea en Azure.Ejecute este comando para ir a la carpeta de la
httpaplicación:cd httpCree un archivo denominado local.settings.json en la
httpcarpeta que contiene estos datos JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }Este archivo es necesario cuando se ejecuta localmente.
En el terminal local o el símbolo del sistema, ejecute este comando
azd initen una carpeta vacía:azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-javaEste comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta actual. La marca
-eestablece un nombre para el entorno actual. Enazd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. También se usa en el nombre del grupo de recursos que crea en Azure.Ejecute este comando para ir a la carpeta de la
httpaplicación:cd httpCree un archivo denominado local.settings.json en la
httpcarpeta que contiene estos datos JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }Este archivo es necesario cuando se ejecuta localmente.
En el terminal local o el símbolo del sistema, ejecute este comando
azd initen una carpeta vacía:azd init --template functions-quickstart-javascript-azd -e httpendpoint-jsEste comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta raíz. La marca
-eestablece un nombre para el entorno actual. Enazd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. También se usa en el nombre del grupo de recursos que crea en Azure.Cree un archivo denominado local.settings.json en la carpeta raíz que contiene estos datos JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Este archivo es necesario cuando se ejecuta localmente.
En el terminal local o el símbolo del sistema, ejecute este comando
azd initen una carpeta vacía:azd init --template functions-quickstart-powershell-azd -e httpendpoint-psEste comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta raíz. La marca
-eestablece un nombre para el entorno actual. Enazd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. También se usa en el nombre del grupo de recursos que crea en Azure.Ejecute este comando para ir a la carpeta de la
srcaplicación:cd srcCree un archivo denominado local.settings.json en la
srccarpeta que contiene estos datos JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }Este archivo es necesario cuando se ejecuta localmente.
En el terminal local o el símbolo del sistema, ejecute este comando
azd initen una carpeta vacía:azd init --template functions-quickstart-typescript-azd -e httpendpoint-tsEste comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta raíz. La marca
-eestablece un nombre para el entorno actual. Enazd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. El nombre del entorno también se usa en el nombre del grupo de recursos que crea en Azure.Cree un archivo denominado local.settings.json en la carpeta raíz que contiene estos datos JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Este archivo es necesario cuando se ejecuta localmente.
En el terminal local o el símbolo del sistema, ejecute este comando
azd initen una carpeta vacía:azd init --template functions-quickstart-python-http-azd -e httpendpoint-pyEste comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta raíz. La marca
-eestablece un nombre para el entorno actual. Enazd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. El nombre del entorno también se usa en el nombre del grupo de recursos que crea en Azure.Cree un archivo denominado local.settings.json en la carpeta raíz que contiene estos datos JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python" } }Este archivo es necesario cuando se ejecuta localmente.
Creación y activación de un entorno virtual
En la carpeta raíz, ejecute estos comandos para crear y activar un entorno virtual denominado .venv:
python3 -m venv .venv
source .venv/bin/activate
Si Python no instala el paquete venv en la distribución de Linux, ejecute el siguiente comando:
sudo apt-get install python3-venv
Ejecución en el entorno local
Ejecute este comando desde la carpeta de la aplicación en un terminal o símbolo del sistema:
func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm startCuando el host de Functions se inicia en la carpeta del proyecto local, escribe los puntos de conexión de dirección URL de las funciones desencadenadas por HTTP en la salida del terminal.
Note
Dado que la autorización de clave de acceso no se aplica cuando se ejecuta localmente, la dirección URL de la función devuelta no incluye el valor de la clave de acceso y no es necesario llamar a la función.
En su navegador, vaya al
httpgetendpoint, y debería verse como esta URL:Desde una nueva ventana del terminal o del símbolo del sistema, ejecute este
curlcomando para enviar una solicitud POST con una carga JSON al punto de conexiónhttppost:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.jsoncurl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"Este comando lee los datos de carga JSON del archivo de proyecto de
testdata.json. Puede encontrar ejemplos de ambas solicitudes HTTP en el archivo de proyectotest.http.Cuando haya terminado, presione Ctrl+C en la ventana del terminal para detener el proceso de host de
func.exe.
- Ejecute
deactivatepara apagar el entorno virtual.
Revisión del código (opcional)
Puede revisar el código que define los dos puntos de conexión de función del desencadenador HTTP:
[Function("httpget")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
HttpRequest req,
string name)
{
var returnValue = string.IsNullOrEmpty(name)
? "Hello, World."
: $"Hello, {name}.";
_logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");
return new OkObjectResult(returnValue);
}
@FunctionName("httpget")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.FUNCTION)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
}
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
};
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: httpGetFunction
});
Este archivo function.json define la función httpget:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get"
],
"route": "httpget"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
Este archivo run.ps1 implementa el código de función:
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters
$name = $Request.Query.name
$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "World")
logging.info(f"Processing GET request. Name: {name}")
return func.HttpResponse(f"Hello, {name}!")
Puede revisar el proyecto de plantilla completo aquí.
Puede revisar el proyecto de plantilla completo aquí.
Puede revisar el proyecto de plantilla completo aquí.
Puede revisar el proyecto de plantilla completo aquí.
Puede revisar el proyecto de plantilla completo aquí.
Puede revisar el proyecto de plantilla completo aquí.
Después de comprobar las funciones localmente, es el momento de publicarlas en Azure.
Implementación en Azure
Este proyecto está configurado para usar el comando azd up para implementar este proyecto en una nueva aplicación de funciones en un Plan de consumo flexible en Azure.
Tip
El proyecto incluye un conjunto de archivos de Bicep (en la infra carpeta) que azd utiliza para crear una implementación segura en un plan de consumo Flex que sigue las mejores prácticas.
Ejecute este comando para que
azdcree los recursos de Azure necesarios en Azure e implemente el proyecto de código en la nueva aplicación de funciones:azd upLa carpeta raíz contiene el
azure.yamlarchivo de definición de requerido porazd.Si aún no ha iniciado sesión, se le pedirá que se autentique con su cuenta de Azure.
Cuando se le solicite, proporcione estos parámetros de implementación necesarios:
Parameter Description Suscripción a Azure Suscripción en la que se crean los recursos. Ubicación de Azure Región de Azure en la que se va a crear el grupo de recursos que contiene los nuevos recursos de Azure. Solo se muestran las regiones que admiten actualmente el plan de consumo flexible. vnetEnabled Elija False. Cuando se establece en True , la implementación crea la aplicación de funciones en una nueva red virtual. El
azd upcomando usa las respuestas a estos mensajes con los archivos de configuración de Bicep para completar estas tareas de implementación:Cree y configure estos recursos de Azure necesarios (equivalente a
azd provision):- Plan de consumo flexible y aplicación de funciones
- Azure Storage (obligatorio) y Application Insights (recomendado)
- Directivas y roles de acceso para la cuenta
- Conexiones de servicio a servicio mediante identidades administradas (en lugar de cadenas de conexión almacenadas)
- (Opción) Red virtual para ejecutar de forma segura tanto la aplicación de funciones como los demás recursos de Azure
Empaquete e implemente el código en el contenedor de implementación (equivalente a
azd deploy). A continuación, la aplicación se inicia y se ejecuta en el paquete implementado.
Una vez que el comando se complete correctamente, verá vínculos a los recursos que creó.
Invocación de la función en Azure
Ahora puede invocar los puntos de conexión de función en Azure realizando solicitudes HTTP a sus direcciones URL mediante la herramienta de prueba HTTP o desde el explorador (para solicitudes GET). Cuando las funciones se ejecutan en Azure, se aplica la autorización de clave de acceso y debe proporcionar una clave de acceso de función con la solicitud.
Puede usar Core Tools para obtener los puntos de conexión de dirección URL de las funciones que se ejecutan en Azure.
En el terminal local o el símbolo del sistema, ejecute estos comandos para obtener los valores del punto de conexión de dirección URL:
$APP_NAME = azd env get-value AZURE_FUNCTION_NAME func azure functionapp list-functions $APP_NAME --show-keysEl comando
azd env get-valueobtiene el nombre de la aplicación de funciones del entorno local. Cuando se usa la--show-keysopción confunc azure functionapp list-functions, el valor de Invoke URL: devuelto para cada punto de conexión incluye una clave de acceso de nivel de función.Como antes, use la herramienta de prueba HTTP para validar estas direcciones URL en la aplicación de funciones que se ejecuta en Azure.
Reimplementación del código
Ejecute el azd up comando tantas veces como sea necesario aprovisionar los recursos de Azure e implementar actualizaciones de código en la aplicación de funciones.
Note
El paquete de implementación más reciente siempre sobrescribe los archivos de código implementados.
Las respuestas iniciales a azd mensajes y las variables de entorno generadas por azd se almacenan localmente en el entorno con nombre. Use el azd env get-values comando para revisar todas las variables del entorno que usó al crear recursos de Azure.
Limpieza de recursos
Cuando haya terminado de trabajar con la aplicación de funciones y los recursos relacionados, use este comando para eliminar la aplicación de funciones y sus recursos relacionados de Azure y evitar incurrir en costos adicionales:
azd down --no-prompt
Note
La --no-prompt opción indica azd que elimine el grupo de recursos sin una confirmación de usted.
Este comando no afecta al proyecto de código local.