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.json
configuraçõ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 endpoint
e 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.