Compartir a través de


Biblioteca cliente de tablas de Azure WebJobs para .NET: versión 1.2.0

Esta extensión proporciona funcionalidad para acceder a tablas de Azure en Azure Functions.

Introducción

Instalar el paquete

Instale la extensión Tables con NuGet:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Tables

Requisitos previos

Necesita una suscripción de Azure y una cuenta de almacenamiento o una cuenta de tablas de Cosmos para usar este paquete.

Uso de tablas de almacenamiento

Para crear una cuenta de almacenamiento, puede usar Azure Portal, Azure PowerShell o la CLI de Azure. A continuación se facilita un ejemplo mediante el uso de la CLI de Azure:

az storage account create --name <your-resource-name> --resource-group <your-resource-group-name> --location westus --sku Standard_LRS

Uso de tablas de Cosmos

Para crear tablas de Cosmos, puede usar Azure Portal, Azure PowerShell o la CLI de Azure.

Autenticar el cliente

Connection representa un conjunto de información necesaria para conectarse a table service. Puede contener una cadena de conexión, un punto de conexión, una credencial de token o una clave compartida.

La Connection propiedad de TableAttribute define qué conexión se usa para el acceso a Table Service. Por ejemplo, [Tables(Connection="MyTableService")] va a usar MyTableService la conexión.

La información de conexión se puede establecer en o en local.settings.jsonla configuración de la aplicación en Azure Portal.

Al agregar una configuración a local.settings.json colóquela en la Values propiedad :

{
  "IsEncrypted": false,
  "Values": {
    "MyTableService": "..."
  }
}

Al agregar una configuración a la configuración de la aplicación en Azure Portal use el nombre proporcionado directamente:

MyTableService = ...

La extensión Tables usa el AzureWebJobsStorage nombre de conexión de forma predeterminada.

Cadena de conexión

Para usar la autenticación de cadenas de conexión, asigne el valor de cadena de conexión directamente a la configuración de conexión.

<ConnectionName> = DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net

Uso de la credencial de punto de conexión y token

NOTA: La autenticación de credenciales de token solo se admite para las tablas de almacenamiento.

<ConnectionName>__endpoint = https://...table.core.windows.net

Si no se proporciona información de credenciales, se usa .DefaultAzureCredential

Al usar la identidad administrada asignada por el usuario, es necesario proporcionar la clientId configuración y credential :

<ConnectionName>__credential = managedidentity

<ConnectionName>__clientId = <user-assigned client id>

Uso de credenciales de clave compartida

Al usar la autenticación de clave compartida, endpointaccountKey es necesario proporcionar y accountName .

<ConnectionName>__endpoint = https://...table.core.windows.net

<ConnectionName>__credential__accountName = <account name>

<ConnectionName>__credential__accountKey = <account key>

Conceptos clave

El enlace de entrada permite leer la tabla como entrada en una función de Azure. El enlace de salida permite modificar y eliminar filas de tabla en una función de Azure.

Siga el tutorial de enlace de entrada y el tutorial de enlace de salida para obtener información sobre el uso de esta extensión para acceder a Table Service.

Ejemplos

Las extensiones de tablas solo proporcionan enlaces. Los enlaces por sí mismos no pueden desencadenar una función. Solo puede leer o escribir entradas en la tabla.

En el ejemplo siguiente se usa el desencadenador HTTP para invocar la función .

Enlace a una sola entidad

public class InputSingle
{
    [FunctionName("InputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] TableEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
    }
}

Enlace a una sola entidad mediante el tipo de modelo

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class InputSingleModel
{
    [FunctionName("InputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] MyEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity.Text}");
    }
}

Enlace a varias entidades con filtro

public class InputMultipleEntitiesFilter
{
    [FunctionName("InputMultipleEntitiesFilter")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", Filter = "Text ne ''")] IEnumerable<TableEntity> entities, ILogger log)
    {
        foreach (var entity in entities)
        {
            log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
        }
    }
}

Creación de una sola entidad

public class OutputSingle
{
    [FunctionName("OutputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out TableEntity entity)
    {
        entity = new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = "Hello"
        };
    }
}

Creación de una sola entidad mediante el modelo

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputSingleModel
{
    [FunctionName("OutputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out MyEntity entity)
    {
        entity = new MyEntity()
        {
            PartitionKey = "<PartitionKey>",
            RowKey = "<RowKey>",
            Text = "Hello"
        };
    }
}

Creación de varias entidades

public class OutputMultiple
{
    [FunctionName("OutputMultiple")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<TableEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new TableEntity("<PartitionKey>", i.ToString())
            {
                ["Text"] = i.ToString()
            });
        }
    }
}

Creación de varias entidades mediante el modelo

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputMultipleModel
{
    [FunctionName("OutputMultipleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<MyEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new MyEntity()
            {
                PartitionKey = "<PartitionKey>",
                RowKey = i.ToString(),
                Text = i.ToString()
            });
        }
    }
}

Enlace al tipo TableClient del SDK

Use un parámetro de método TableClient para acceder a la tabla mediante el SDK de Tablas de Azure.

public class BindTableClient
{
    [FunctionName("BindTableClient")]
    public static async Task Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] TableClient client)
    {
        await client.AddEntityAsync(new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = request.GetEncodedPathAndQuery()
        });
    }
}

Solución de problemas

Consulte Monitor Azure Functions para obtener instrucciones de solución de problemas.

Pasos siguientes

Lea la introducción a La función de Azure o cree una guía de funciones de Azure.

Contribuciones

Consulte la CONTRIBUTING.md para obtener más información sobre la compilación, las pruebas y la contribución a esta biblioteca.

Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más información, visite cla.microsoft.com.

Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.

Impresiones