Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Azure Functions permite conectar Azure servicios y otros recursos a funciones sin tener que escribir su propio código de integración. Estos enlaces, que representan la entrada y la salida, se declaran dentro de la definición de función. Los datos de los enlaces se proporcionan a la función como parámetros. Un desencadenador es un tipo especial de enlace de entrada. Si bien una función tiene un único desencadenador, puede tener varios enlaces de entrada y salida. Para obtener más información, consulte conceptos de desencadenadores y enlaces de Azure Functions.
En este artículo se muestra cómo usar Visual Studio Code para conectar Azure SQL Database a la función que creó en el artículo de inicio rápido anterior. El enlace de salida que agrega a esta función escribe datos de la solicitud HTTP en una tabla de Azure SQL Database.
Antes de comenzar, debe completar el quickstart: Crear una función de C# en Azure con Visual Studio Code. Si ya ha limpiado los recursos al final de ese artículo, vuelva a seguir los pasos para volver a crear la aplicación de funciones y los recursos relacionados en Azure.
Antes de empezar, debe completar el quickstart: Crear una función de JavaScript en Azure con Visual Studio Code. Si ya ha limpiado los recursos al final de ese artículo, vuelva a seguir los pasos para volver a crear la aplicación de funciones y los recursos relacionados en Azure.
Antes de empezar, debe completar el quickstart: Creación de una función de Python en Azure mediante Visual Studio Code. Si ya ha limpiado los recursos al final de ese artículo, vuelva a seguir los pasos para volver a crear la aplicación de funciones y los recursos relacionados en Azure.
Encontrará más información sobre la configuración de vinculaciones de Azure SQL y activadores para Azure Functions en su documentación.
Crea tu base de datos Azure SQL
Siga el inicio rápido de creación de Azure SQL Database para crear una base de datos SQL de Azure sin servidor. La base de datos puede estar vacía o creada a partir del conjunto de datos de ejemplo AdventureWorksLT.
Escriba la siguiente información cuando se le indique:
Pronto Selección Grupos de recursos Elija el grupo de recursos en el que creó la aplicación de funciones en el artículo anterior. Nombre de la base de datos Escriba mySampleDatabase.Nombre del servidor Escriba un nombre único para el servidor. No podemos proporcionar un nombre de servidor exacto para usarlo porque los nombres de servidor deben ser únicos globalmente para todos los servidores de Azure, no solo únicos dentro de una suscripción. Método de autenticación Seleccione SQL Server autenticación. Inicio de sesión del administrador del servidor Escriba azureuser.Contraseña Escriba una contraseña que cumpla los requisitos de complejidad. Permitir que los servicios y recursos de Azure accedan a este servidor Seleccione Sí. Importante
En este artículo se muestra actualmente cómo conectarse a Azure SQL Database mediante la autenticación SQL Server. Para obtener la mejor seguridad, debe usar identidades administradas para la conexión Azure SQL Database. Para obtener más información, consulte el Crear un servidor Azure SQL Database con una identidad administrada asignada por el usuario.
Una vez completada la creación, vaya a la hoja de la base de datos en el Azure portal y, en Settings, seleccione Cadenas de conexión. Copie la cadena de conexión de ADO.NET para la autenticación SQL. Pegue el connection string en un documento temporal para su uso posterior.
Cree una tabla para almacenar los datos de la solicitud HTTP. En el Azure portal, vaya a la hoja de la base de datos y seleccione Query editor. Escriba la siguiente consulta para crear una tabla llamada
dbo.ToDo:CREATE TABLE dbo.ToDo ( [Id] UNIQUEIDENTIFIER PRIMARY KEY, [order] INT NULL, [title] NVARCHAR(200) NOT NULL, [url] NVARCHAR(200) NOT NULL, [completed] BIT NOT NULL );Compruebe que la función de Azure podrá acceder al Azure SQL Database mediante la comprobación de la configuración del firewall del servidor. Vaya a la hoja server en el Azure portal y, en Security, seleccione Networking. Se debe comprobar la excepción de Permitir que los servicios y recursos de Azure accedan a este servidor.
Actualización de la configuración de la aplicación de funciones
En el artículo del inicio rápido anterior, creó una aplicación de funciones en Azure. En este artículo, actualizará la aplicación para escribir datos en la base de datos de Azure SQL que acaba de crear. Para conectarse a la Azure SQL Database, debes agregar su connection string a la configuración de la aplicación. A continuación, descargue la nueva configuración en el archivo local.settings.json para que pueda conectarse a la Azure SQL Database cuando se ejecute localmente.
Modifique la cadena de conexión en el documento temporal que creó anteriormente. Reemplace el valor de
Passwordpor la contraseña que usó al crear el Azure SQL Database. Copie la cadena de conexión actualizada.Presione Ctrl/Cmd+mayús+P para abrir la paleta de comandos y, a continuación, busque y ejecute el comando
Azure Functions: Add New Setting....Elija la aplicación de funciones que creó en el artículo anterior. Escriba la siguiente información cuando se le indique:
Pronto Selección Escriba el nombre de la nueva configuración de la aplicación Escriba SqlConnectionString.Escriba el valor de "SqlConnectionString" Pegue el connection string de la Azure SQL Database que acaba de copiar. Esto crea una configuración de aplicación denominada conexión
SqlConnectionStringen la aplicación de funciones de Azure. Ahora, puede descargar esta configuración en el archivo local.settings.json.Presione Ctrl/Cmd+mayús+P de nuevo para abrir la paleta de comandos y, a continuación, busque y ejecute el comando
Azure Functions: Download Remote Settings....Elija la aplicación de funciones que creó en el artículo anterior. Seleccione Sí a todo para sobrescribir la configuración local existente.
Esto descarga toda la configuración de Azure a tu proyecto local, incluida la nueva configuración de la cadena de conexión. La mayoría de la configuración descargada no se usa cuando se ejecuta localmente.
Registro de extensiones de enlace
Dado que usa una vinculación de salida de Azure SQL, debe tener instalada la extensión de vinculaciones correspondiente antes de ejecutar el proyecto.
A excepción de los desencadenadores HTTP y el temporizador, los enlaces se implementan como paquetes de extensión. Ejecute el siguiente comando dotnet add package en la ventana Terminal para agregar el paquete de extensión de Azure SQL al project.
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Sql
El proyecto se ha configurado para usar conjuntos de extensiones, los cuales instalan automáticamente un conjunto predefinido de paquetes de extensión.
El uso de agrupaciones de extensiones está habilitado en el archivo host.json en la raíz del project, que aparece de la siguiente manera:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
}
}
:::
Ahora, puede agregar la vinculación de salida de Azure SQL a su proyecto.
Añade un enlace de salida
En Functions, para cada tipo de enlace es necesario definir los elementos direction, type y un valor único de name en el archivo function.json. La manera de definir estos atributos depende del lenguaje de la aplicación de funciones.
Abra el archivo HttpExample.cs project y agregue la siguiente clase ToDoItem, que define el objeto que se escribe en la base de datos:
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
En un proyecto de biblioteca de clases de C#, los enlaces se definen como atributos de enlace en el método de función. Después se genera automáticamente el archivo function.json, que necesita Functions, en función de estos atributos.
Abra el archivo HttpExample.cs project y agregue la siguiente clase de tipo de salida, que define los objetos combinados que se generarán de nuestra función para la respuesta HTTP y la salida sql:
public static class OutputType
{
[SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
public ToDoItem ToDoItem { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
Agregue una instrucción using a la biblioteca de Microsoft.Azure.Functions.Worker.Extensions.Sql de la parte superior del archivo:
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
Los atributos de enlace se definen directamente en el código. La configuración de salida de Azure SQL describe los campos necesarios para una vinculación de salida de Azure SQL.
Para este escenario MultiResponse, debe agregar un enlace de salida extraOutputs a la función.
app.http('HttpExample', {
methods: ['GET', 'POST'],
extraOutputs: [sendToSql],
handler: async (request, context) => {
Agregue las siguientes propiedades a la configuración de enlace:
const sendToSql = output.sql({
commandText: 'dbo.ToDo',
connectionStringSetting: 'SqlConnectionString',
});
Los atributos de enlace se definen directamente en el archivo function_app.py. Use el decorador generic_output_binding para agregar un enlace de salida de Azure SQL:
@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString"
data_type=DataType.STRING)
En este código, arg_name identifica el parámetro de enlace al que se hace referencia en el código, type denota que el enlace de salida es un enlace de salida SQL, CommandText es la tabla en la que el enlace escribe y ConnectionStringSetting es el nombre de una configuración de aplicación que contiene el Azure SQL connection string. La cadena de conexión está en la configuración SqlConnectionString del archivo local.settings.json.
Agregue código que utilice el enlace de salida
Reemplace el método Run existente por el código siguiente:
[Function("HttpExample")]
public static OutputType Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("HttpExample");
logger.LogInformation("C# HTTP trigger function processed a request.");
var message = "Welcome to Azure Functions!";
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString(message);
// Return a response to both HTTP trigger and Azure SQL output binding.
return new OutputType()
{
ToDoItem = new ToDoItem
{
id = System.Guid.NewGuid().ToString(),
title = message,
completed = false,
url = ""
},
HttpResponse = response
};
}
Agregue código que use el objeto de enlace de salida extraInputs en context para enviar un documento JSON a la función de enlace de salida con nombre, sendToSql. Agregue este código antes de la instrucción return.
const data = JSON.stringify([
{
// create a random ID
Id: crypto.randomUUID(),
title: name,
completed: false,
url: '',
},
]);
// Output to Database
context.extraOutputs.set(sendToSql, data);
Para usar el módulo crypto, agregue la siguiente línea a la parte superior del archivo:
const crypto = require("crypto");
En este momento, la función debe tener el aspecto siguiente:
const { app, output } = require('@azure/functions');
const crypto = require('crypto');
const sendToSql = output.sql({
commandText: 'dbo.ToDo',
connectionStringSetting: 'SqlConnectionString',
});
app.http('HttpExample', {
methods: ['GET', 'POST'],
extraOutputs: [sendToSql],
handler: async (request, context) => {
try {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text());
if (!name) {
return { status: 404, body: 'Missing required data' };
}
// Stringified array of objects to be inserted into the database
const data = JSON.stringify([
{
// create a random ID
Id: crypto.randomUUID(),
title: name,
completed: false,
url: '',
},
]);
// Output to Database
context.extraOutputs.set(sendToSql, data);
const responseMessage = name
? 'Hello, ' +
name +
'. This HTTP triggered function executed successfully.'
: 'This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.';
// Return to HTTP client
return { body: responseMessage };
} catch (error) {
context.log(`Error: ${error}`);
return { status: 500, body: 'Internal Server Error' };
}
},
});
Actualice function_app.py para que coincida con el código siguiente. Agregue el parámetro toDoItems a la definición de la función y toDoItems.set() bajo la instrucción if name::
import azure.functions as func
import logging
from azure.functions.decorators.core import DataType
import uuid
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.FUNCTION)
@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString",data_type=DataType.STRING)
def test_function(req: func.HttpRequest, toDoItems: func.Out[func.SqlRow]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = req.get_json().get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
toDoItems.set(func.SqlRow({"Id": str(uuid.uuid4()), "title": name, "completed": False, "url": ""}))
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
Ejecución local de la función
Visual Studio Code se integra con Azure Functions Core tools para permitirle ejecutar este project en el equipo de desarrollo local antes de publicar en Azure. Si aún no tiene Core Tools instalado localmente, se le pedirá que lo instale la primera vez que ejecute el project.
Para llamar a la función, presione F5 para iniciar el proyecto de aplicación de funciones. El panel Terminal muestra la salida de Core Tools. La aplicación se inicia en el panel Terminal. Puede ver el punto de conexión de la dirección URL de la función desencadenada por HTTP que se ejecuta localmente.
Si aún no tiene Core Tools instalado, seleccione Install para instalar Core Tools cuando se le solicite.
Si tiene problemas para ejecutarse en Windows, asegúrese de que el terminal predeterminado para Visual Studio Code no esté establecido en WSL Bash.Con Core Tools en ejecución, vaya al área Azure: Functions. En Funciones, expanda Local Project>Funciones. Haga clic con el botón derecho (Windows) o Ctrl + clic en (macOS) en la función
HttpExampley elija Execute Function Now... (Ejecutar la función ahora...).
En Escribir el cuerpo de la solicitud, presione la tecla ENTRAR para enviar un mensaje de solicitud a la función.
Cuando la función se ejecuta localmente y devuelve una respuesta, se genera una notificación en Visual Studio Código. La información sobre la ejecución de la función se mostrará en el panel Terminal.
Presione Ctrl + C para detener Core Tools y desconectar el depurador.
Ejecución local de la función
Como en el artículo anterior, presione F5 para iniciar el proyecto de la aplicación de funciones y Core Tools.
Con Core Tools en ejecución, vaya al área Azure: Functions. En Funciones, expanda Local Project>Funciones. Haga clic con el botón derecho (Ctrl + clic en Mac) en la función
HttpExampley elija Execute Function Now... (Ejecutar la función ahora...).
En Introduce el cuerpo de la solicitud puede ver el valor del cuerpo del mensaje de solicitud de
{ "name": "Azure" }. Presione Entrar para enviar este mensaje de solicitud a la función.Una vez que se haya devuelto una respuesta, presione Ctrl + C para detener Core Tools.
Comprobar que la información se ha escrito en la base de datos
En el portal de Azure, regrese a su base de datos Azure SQL y seleccione editor de consultas.
Conéctese a la base de datos y expanda el nodo Tables en object explorer de la izquierda. Haga clic con el botón derecho en la tabla
dbo.ToDoy seleccione Seleccionar las primeras 1000 filas.Compruebe que la nueva información ha sido escrita en la base de datos por el enlace de salida.
Reimplementación y comprobación de la aplicación actualizada
En Visual Studio Código, presione F1 para abrir la paleta de comandos. En la paleta de comandos, busque y seleccione
Azure Functions: Deploy to function app....Elija la aplicación de funciones que creó en el primer artículo. Dado que va a implementar el project en la misma aplicación, seleccione Deploy para descartar la advertencia sobre la sobrescritura de archivos.
Una vez completada la implementación, puede de nuevo usar la función Ejecutar función ahora... para desencadenar la función en Azure. Este comando recupera automáticamente la clave de acceso de función y la utiliza al llamar al punto de conexión del activador HTTP.
De nuevo compruebe los datos escritos en el Azure SQL Database para comprobar que el enlace de salida de nuevo genera un nuevo documento JSON.
Limpieza de recursos
En Azure, resources hacen referencia a aplicaciones de funciones, funciones, cuentas storage, etc. Se agrupan en grupos de recursos y se puede eliminar todo el contenido de un grupo si este se elimina.
Ha creado recursos para completar estas guías de inicio rápido. Es posible que se le facturen estos recursos, en función del estado de su cuenta y de los precios del servicio. Si ya no necesita los recursos, aquí se indica cómo eliminarlos:
En Visual Studio Code, presione F1 para abrir la paleta de comandos. En la paleta de comandos, busque y seleccione
Azure: Open in portal.Elija una aplicación de funciones y presione la tecla ENTRAR. La página de la aplicación de funciones se abre en el Azure portal.
En la pestaña Información general, seleccione el vínculo con nombre junto a Grupo de recursos.
En la página Grupo de recursos, revise la lista de recursos incluidos y compruebe que estos sean los que desea eliminar.
Seleccione Eliminar grupo de recursos y siga las instrucciones.
El proceso de eliminación tardará un par de minutos. Cuando termine, aparece una notificación durante unos segundos. También puede seleccionar el icono de campana en la parte superior de la página para ver la notificación.
Pasos siguientes
Has actualizado tu función activada por HTTP para escribir datos en Azure SQL Database. Ahora puede obtener más información sobre el desarrollo de Funciones mediante Visual Studio Código: