Share via


Biblioteca de clientes do Azure WebJobs Tables para .NET – versão 1.2.0

Essa extensão fornece funcionalidade para acessar tabelas do Azure em Azure Functions.

Introdução

Instalar o pacote

Instale a extensão Tabelas com o NuGet:

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

Pré-requisitos

Você precisa de uma assinatura do Azure e uma conta de armazenamento ou uma conta de tabelas do Cosmos para usar esse pacote.

Usando tabelas de armazenamento

Para criar uma nova Conta de Armazenamento, você pode usar o Portal do Azure, Azure PowerShell ou a CLI do Azure. Aqui, está um exemplo usando a CLI do Azure:

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

Usando tabelas do Cosmos

Para criar um novo Cosmos Tables, você pode usar o Portal do Azure, Azure PowerShell ou a CLI do Azure.

Autenticar o cliente

A conexão representa um conjunto de informações necessárias para se conectar a um serviço de tabela. Ele pode conter uma cadeia de conexão, um ponto de extremidade, uma credencial de token ou uma chave compartilhada.

A Connection propriedade de define qual conexão é usada para o acesso ao Serviço de TableAttribute Tabela. Por exemplo, [Tables(Connection="MyTableService")] usará a MyTableService conexão.

As informações de conexão podem ser definidas nas local.settings.jsonconfigurações do aplicativo ou em portal do Azure.

Ao adicionar uma configuração a local.settings.json , coloque-a sob a Values propriedade :

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

Ao adicionar uma configuração às configurações do aplicativo no portal do Azure use o nome fornecido diretamente:

MyTableService = ...

A extensão De tabelas usa o nome da AzureWebJobsStorage conexão por padrão.

Cadeia de conexão

Para usar a autenticação de cadeias de conexão, atribua o valor da cadeia de conexão diretamente à configuração de conexão.

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

Usando o ponto de extremidade e a credencial de token

OBSERVAÇÃO: a autenticação de credencial de token tem suporte apenas para tabelas de armazenamento.

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

Se nenhuma informação de credencial for fornecida, o DefaultAzureCredential será usado.

Ao usar a identidade gerenciada atribuída pelo usuário, as clientId configurações e credential precisam ser fornecidas:

<ConnectionName>__credential = managedidentity

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

Usando a credencial de chave compartilhada

Ao usar a autenticação de chave compartilhada, accountKey o endpointe accountName precisam ser fornecidos.

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

<ConnectionName>__credential__accountName = <account name>

<ConnectionName>__credential__accountKey = <account key>

Principais conceitos

A associação de entrada permite que você leia a tabela como entrada para uma Função do Azure. A associação de saída permite modificar e excluir linhas de tabela em uma Função do Azure.

Siga o tutorial de associação de entrada e o tutorial de associação de saída para saber mais sobre como usar essa extensão para acessar o serviço de tabela.

Exemplos

As extensões de tabelas fornecem apenas associações. As associações por si só não podem disparar uma função. Ele só pode ler ou gravar entradas na tabela.

No exemplo a seguir, usamos o gatilho HTTP para invocar a função.

Associação a uma única entidade

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"]}");
    }
}

Associação a uma única entidade usando o 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}");
    }
}

Associação a várias entidades com 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"]}");
        }
    }
}

Criando uma única entidade

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"
        };
    }
}

Criando uma única entidade usando o 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"
        };
    }
}

Criando várias 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()
            });
        }
    }
}

Criando várias entidades usando o 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()
            });
        }
    }
}

Associação ao tipo TableClient do SDK

Use um parâmetro de método TableClient para acessar a tabela usando o SDK de Tabelas do 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()
        });
    }
}

Solução de problemas

Consulte Monitorar Azure Functions para obter diretrizes de solução de problemas.

Próximas etapas

Leia a introdução ao Azure Function ou crie um guia de funções do Azure.

Participante

Consulte o CONTRIBUTING.md para obter detalhes sobre como criar, testar e contribuir para essa biblioteca.

Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite cla.microsoft.com.

Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.

Impressões