Azure İşlevleri için Azure Tabloları çıkış bağlamaları

Tablo veya Azure Tablo Depolama için Azure Cosmos DB'de bir tabloya varlık yazmak için Azure Tabloları çıkış bağlaması kullanın.

Kurulum ve yapılandırma ayrıntıları hakkında bilgi için bkz. genel bakış

Not

Bu çıkış bağlaması yalnızca tabloda yeni varlıklar oluşturmayı destekler. İşlev kodunuzdan mevcut bir varlığı güncelleştirmeniz gerekiyorsa, bunun yerine doğrudan bir Azure Tabloları SDK'sı kullanın.

Önemli

Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.

Örnek

C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:

  • Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir. Yalıtılmış çalışan işlemi işlevleri için uzantılar ad alanlarını kullanır Microsoft.Azure.Functions.Worker.Extensions.* .
  • İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi. Bu modelin bir varyasyonunda, İşlevler öncelikle C# portalı düzenleme için desteklenen C# betiği kullanılarak çalıştırılabilir. İşlem içi işlevlerin uzantıları ad alanlarını kullanır Microsoft.Azure.WebJobs.Extensions.* .

Önemli

İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.

Aşağıdaki MyTableData sınıf, tablodaki bir veri satırını temsil eder:

public class MyTableData : Azure.Data.Tables.ITableEntity
{
    public string Text { get; set; }

    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public DateTimeOffset? Timestamp { get; set; }
    public ETag ETag { get; set; }
}

Kuyruk Depolama tetikleyicisi tarafından başlatılan aşağıdaki işlev, OutputTable adlı bir tabloya yeni MyDataTable bir varlık yazar.

[Function("TableFunction")]
[TableOutput("OutputTable", Connection = "AzureWebJobsStorage")]
public static MyTableData Run(
    [QueueTrigger("table-items")] string input,
    [TableInput("MyTable", "<PartitionKey>", "{queueTrigger}")] MyTableData tableInput,
    FunctionContext context)
{
    var logger = context.GetLogger("TableFunction");

    logger.LogInformation($"PK={tableInput.PartitionKey}, RK={tableInput.RowKey}, Text={tableInput.Text}");

    return new MyTableData()
    {
        PartitionKey = "queue",
        RowKey = Guid.NewGuid().ToString(),
        Text = $"Output record with rowkey {input} created at {DateTime.Now}"
    };
}

Aşağıdaki örnekte, tek bir tablo satırı yazmak için HTTP tetikleyicisi kullanan bir Java işlevi gösterilmektedir.

public class Person {
    private String PartitionKey;
    private String RowKey;
    private String Name;

    public String getPartitionKey() {return this.PartitionKey;}
    public void setPartitionKey(String key) {this.PartitionKey = key; }
    public String getRowKey() {return this.RowKey;}
    public void setRowKey(String key) {this.RowKey = key; }
    public String getName() {return this.Name;}
    public void setName(String name) {this.Name = name; }
}

public class AddPerson {

    @FunctionName("addPerson")
    public HttpResponseMessage get(
            @HttpTrigger(name = "postPerson", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION, route="persons/{partitionKey}/{rowKey}") HttpRequestMessage<Optional<Person>> request,
            @BindingName("partitionKey") String partitionKey,
            @BindingName("rowKey") String rowKey,
            @TableOutput(name="person", partitionKey="{partitionKey}", rowKey = "{rowKey}", tableName="%MyTableName%", connection="MyConnectionString") OutputBinding<Person> person,
            final ExecutionContext context) {

        Person outPerson = new Person();
        outPerson.setPartitionKey(partitionKey);
        outPerson.setRowKey(rowKey);
        outPerson.setName(request.getBody().get().getName());

        person.setValue(outPerson);

        return request.createResponseBuilder(HttpStatus.OK)
                        .header("Content-Type", "application/json")
                        .body(outPerson)
                        .build();
    }
}

Aşağıdaki örnekte, birden çok tablo satırı yazmak için HTTP tetikleyicisi kullanan bir Java işlevi gösterilmektedir.

public class Person {
    private String PartitionKey;
    private String RowKey;
    private String Name;

    public String getPartitionKey() {return this.PartitionKey;}
    public void setPartitionKey(String key) {this.PartitionKey = key; }
    public String getRowKey() {return this.RowKey;}
    public void setRowKey(String key) {this.RowKey = key; }
    public String getName() {return this.Name;}
    public void setName(String name) {this.Name = name; }
}

public class AddPersons {

    @FunctionName("addPersons")
    public HttpResponseMessage get(
            @HttpTrigger(name = "postPersons", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION, route="persons/") HttpRequestMessage<Optional<Person[]>> request,
            @TableOutput(name="person", tableName="%MyTableName%", connection="MyConnectionString") OutputBinding<Person[]> persons,
            final ExecutionContext context) {

        persons.setValue(request.getBody().get());

        return request.createResponseBuilder(HttpStatus.OK)
                        .header("Content-Type", "application/json")
                        .body(request.getBody().get())
                        .build();
    }
}

Aşağıdaki örnekte, birden çok tablo varlığı yazan bir tablo çıkış bağlaması gösterilmektedir.

import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';

const tableOutput = output.table({
    tableName: 'Person',
    connection: 'MyStorageConnectionAppSetting',
});

interface PersonEntity {
    PartitionKey: string;
    RowKey: string;
    Name: string;
}

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    const rows: PersonEntity[] = [];
    for (let i = 1; i < 10; i++) {
        rows.push({
            PartitionKey: 'Test',
            RowKey: i.toString(),
            Name: `Name ${i}`,
        });
    }
    context.extraOutputs.set(tableOutput, rows);
    return { status: 201 };
}

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [tableOutput],
    handler: httpTrigger1,
});
const { app, output } = require('@azure/functions');

const tableOutput = output.table({
    tableName: 'Person',
    connection: 'MyStorageConnectionAppSetting',
});

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [tableOutput],
    handler: async (request, context) => {
        const rows = [];
        for (let i = 1; i < 10; i++) {
            rows.push({
                PartitionKey: 'Test',
                RowKey: i.toString(),
                Name: `Name ${i}`,
            });
        }
        context.extraOutputs.set(tableOutput, rows);
        return { status: 201 };
    },
});

Aşağıdaki örnek, bir işlevden bir tabloya birden çok varlık yazmayı gösterir.

function.json bağlama yapılandırması:

{
  "bindings": [
    {
      "name": "InputData",
      "type": "manualTrigger",
      "direction": "in"
    },
    {
      "tableName": "Person",
      "connection": "MyStorageConnectionAppSetting",
      "name": "TableBinding",
      "type": "table",
      "direction": "out"
    }
  ],
  "disabled": false
}

run.ps1'de PowerShell kodu:

param($InputData, $TriggerMetadata)

foreach ($i in 1..10) {
    Push-OutputBinding -Name TableBinding -Value @{
        PartitionKey = 'Test'
        RowKey = "$i"
        Name = "Name $i"
    }
}

Aşağıdaki örnekte Tablo depolama çıkış bağlamasının nasıl kullanılacağı gösterilmektedir. table, , tableNamepartitionKeyve connectiondeğerleri atayarak namefunction.json bağlamasını yapılandırın:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "message",
      "type": "table",
      "tableName": "messages",
      "partitionKey": "message",
      "connection": "AzureWebJobsStorage",
      "direction": "out"
    },
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

Aşağıdaki işlev, değer için rowKey benzersiz bir UUI oluşturur ve iletiyi Tablo depolamada kalıcı hale getirmektedir.

import logging
import uuid
import json

import azure.functions as func

def main(req: func.HttpRequest, message: func.Out[str]) -> func.HttpResponse:

    rowKey = str(uuid.uuid4())

    data = {
        "Name": "Output binding message",
        "PartitionKey": "message",
        "RowKey": rowKey
    }

    message.set(json.dumps(data))

    return func.HttpResponse(f"Message created with the rowKey: {rowKey}")

Özellikler

hem işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları işlevi tanımlamak için öznitelikleri kullanır. Bunun yerine C# betiği, C# betik kılavuzunda açıklandığı gibi bir function.json yapılandırma dosyası kullanır.

C# sınıf kitaplıklarında, TableInputAttribute aşağıdaki özellikleri destekler:

Öznitelik özelliği Açıklama
TableName Yazıldığı tablonun adı.
PartitionKey Yazacak tablo varlığının bölüm anahtarı.
RowKey Yazacak tablo varlığının satır anahtarı.
Bağlantı Tablo hizmetine nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar.

Ek Açıklamalar

Java işlevleri çalışma zamanı kitaplığında, tablolarınıza değer yazmak için parametrelerde TableOutput ek açıklamasını kullanın. özniteliği aşağıdaki öğeleri destekler:

Öğe Açıklama
ad Tablo veya varlığı temsil eden işlev kodunda kullanılan değişken adı.
Datatype İşlevler çalışma zamanının parametre değerini nasıl ele alması gerektiğini tanımlar. Daha fazla bilgi için bkz . dataType.
tableName Yazıldığı tablonun adı.
partitionKey Yazacak tablo varlığının bölüm anahtarı.
rowKey Yazacak tablo varlığının satır anahtarı.
bağlantı Tablo hizmetine nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar.

Yapılandırma

Aşağıdaki tabloda, yöntemine geçirilen output.table() nesnede options ayarlayabileceğiniz özellikler açıklanmaktadır.

Özellik Açıklama
tableName Yazıldığı tablonun adı.
partitionKey Yazacak tablo varlığının bölüm anahtarı.
rowKey Yazacak tablo varlığının satır anahtarı.
bağlantı Tablo hizmetine nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar.

Yapılandırma

Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.

function.json özelliği Açıklama
type olarak ayarlanmalıdır table. Bağlamayı Azure portalında oluşturduğunuzda bu özellik otomatik olarak ayarlanır.
direction olarak ayarlanmalıdır out. Bağlamayı Azure portalında oluşturduğunuzda bu özellik otomatik olarak ayarlanır.
ad Tablo veya varlığı temsil eden işlev kodunda kullanılan değişken adı. İşlev dönüş değerine başvurmak $return için olarak ayarlayın.
tableName Yazıldığı tablonun adı.
partitionKey Yazacak tablo varlığının bölüm anahtarı.
rowKey Yazacak tablo varlığının satır anahtarı.
bağlantı Tablo hizmetine nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar.

Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasına Values ekleyin.

Bağlantılar

connection özelliği, uygulamanın tablo hizmetinize nasıl bağlanması gerektiğini belirten bir ortam yapılandırması başvurusudur. Şunları belirtebilir:

Yapılandırılan değer hem tek bir ayar için tam eşleşme hem de diğer ayarlar için bir ön ek eşleşmesiyse, tam eşleşme kullanılır.

Connection string

Azure Tablo depolamadaki tablolar için bağlantı dizesi almak için Depolama hesabı erişim anahtarlarını yönetme bölümünde gösterilen adımları izleyin. Tablo için Azure Cosmos DB'de tablolara yönelik bir bağlantı dizesi edinmek için Tablo için Azure Cosmos DB SSS bölümünde gösterilen adımları izleyin.

Bu bağlantı dizesi, bağlama yapılandırmasının özelliği tarafından connection belirtilen değerle eşleşen bir adla bir uygulama ayarında depolanmalıdır.

Uygulama ayarı adı "AzureWebJobs" ile başlıyorsa, adın yalnızca kalanını burada belirtebilirsiniz. Örneğin, "MyStorage" olarak ayarlarsanız connection , İşlevler çalışma zamanı "AzureWebJobsMyStorage" adlı bir uygulama ayarı arar. Boş bırakırsanızconnection, İşlevler çalışma zamanı adlı AzureWebJobsStorageuygulama ayarında varsayılan Depolama bağlantı dizesi kullanır.

Kimlik tabanlı bağlantılar

Tablolar API'sini kullanıyorsanız, gizli dizi içeren bir bağlantı dizesi kullanmak yerine uygulamanın bir Microsoft Entra kimliği kullanmasını sağlayabilirsiniz. Bu yalnızca Azure Depolama'daki tablolara erişirken geçerlidir. Kimlik kullanmak için, tetikleyici ve bağlama yapılandırmasındaki özelliğiyle connection eşleyen ortak bir ön ek altında ayarları tanımlarsınız.

"AzureWebJobsStorage" olarak ayarlanıyorsanız connection bkz . Kimlikle konak depolamaya bağlanma. Diğer tüm bağlantılar için uzantı aşağıdaki özellikleri gerektirir:

Özellik Ortam değişkeni şablonu Açıklama Örnek değer
Tablo Hizmeti URI'si <CONNECTION_NAME_PREFIX>__tableServiceUri1 HTTPS şemasını kullanarak bağlandığınız Azure Depolama tablo hizmetinin veri düzlemi URI'si. <https:// storage_account_name.table.core.windows.net>

1 <CONNECTION_NAME_PREFIX>__serviceUri diğer ad olarak kullanılabilir. Her iki form da sağlanırsa, tableServiceUri form kullanılır. Genel serviceUri bağlantı yapılandırması bloblar, kuyruklar ve/veya tablolar arasında kullanılacaksa form kullanılamaz.

Bağlantıyı özelleştirmek için diğer özellikler ayarlanabilir. Bkz. Kimlik tabanlı bağlantılar için ortak özellikler.

Genel serviceUri bağlantı yapılandırması Azure Depolama'daki bloblar, kuyruklar ve/veya tablolar arasında kullanılacaksa form kullanılamaz. URI yalnızca tablo hizmetini belirleyebilir. Alternatif olarak, aynı ön ek altındaki her hizmet için özel olarak bir URI sağlayabilir ve tek bir bağlantının kullanılmasına olanak sağlayabilirsiniz.

Azure İşlevleri hizmetinde barındırıldığında, kimlik tabanlı bağlantılar yönetilen kimlik kullanır. Ve özellikleriyle credential clientID kullanıcı tarafından atanan bir kimlik belirtilse de, sistem tarafından atanan kimlik varsayılan olarak kullanılır. Kullanıcı tarafından atanan kimliği kaynak kimliğiyle yapılandırmanın desteklenmediğini unutmayın. Yerel geliştirme gibi diğer bağlamlarda çalıştırıldığında, bunun yerine geliştirici kimliğiniz kullanılır, ancak bu özelleştirilebilir. Bkz. Kimlik tabanlı bağlantılarla yerel geliştirme.

Kimliğe izin verme

Hangi kimlik kullanılıyorsa, hedeflenen eylemleri gerçekleştirmek için izinlere sahip olmalıdır. Çoğu Azure hizmeti için bu, bu izinleri sağlayan yerleşik veya özel rolleri kullanarak Azure RBAC'de bir rol atamanız gerektiği anlamına gelir.

Önemli

Bazı izinler, tüm bağlamlar için gerekli olmayan hedef hizmet tarafından gösterilebilir. Mümkün olduğunda, kimliğe yalnızca gerekli ayrıcalıkları sağlayarak en az ayrıcalık ilkesine uyun. Örneğin, uygulamanın yalnızca bir veri kaynağından okuyabilmesi gerekiyorsa, yalnızca okuma izni olan bir rol kullanın. Okuma işlemi için aşırı izin olduğundan, bu hizmete yazmaya da izin veren bir rol atamak uygun olmaz. Benzer şekilde, rol atamasının kapsamının yalnızca okunması gereken kaynaklara göre ayarlandığından emin olmak istersiniz.

Çalışma zamanında Azure Depolama tablo hizmetinize erişim sağlayan bir rol ataması oluşturmanız gerekir. Sahip gibi yönetim rolleri yeterli değildir. Aşağıdaki tabloda, Normal çalışma sırasında Azure Depolama'ya karşı Azure Tabloları uzantısı kullanılırken önerilen yerleşik roller gösterilmektedir. Uygulamanız, yazdığınız koda göre ek izinler gerektirebilir.

Bağlama türü Örnek yerleşik roller (Azure Depolama1)
Giriş bağlaması Depolama Tablosu Veri Okuyucusu
Çıkış bağlaması Depolama Tablosu Veri Katkıda Bulunanı

1 Uygulamanız bunun yerine Tablo için Azure Cosmos DB'deki tablolara bağlanıyorsa, kimlik kullanımı desteklenmez ve bağlantının bir bağlantı dizesi kullanması gerekir.

Kullanım

Bağlamanın kullanımı uzantı paketi sürümüne ve işlev uygulamanızda kullanılan C# modalitesine bağlıdır ve bu da aşağıdakilerden biri olabilir:

Yalıtılmış çalışan işlem sınıfı kitaplığı derlenmiş C# işlevi çalışma zamanından yalıtılmış bir işlemde çalışır.

Modun ve sürümün kullanım ayrıntılarını görmek için bir sürüm seçin.

İşlevin tek bir varlığa yazmasını istediğinizde, Azure Tabloları çıkış bağlaması aşağıdaki türlere bağlanabilir:

Type Açıklama
[ITableEntity] uygulayan bir JSON serileştirilebilir türü İşlevler, düz eski bir CLR nesnesi (POCO) türünü varlık olarak serileştirmeye çalışır. Türün [ITableEntity] uygulaması veya dize RowKey özelliği ve dize PartitionKey özelliği olmalıdır.

İşlevin birden çok varlığı yazmasını istediğinizde, Azure Tabloları çıkış bağlaması aşağıdaki türlere bağlanabilir:

Type Açıklama
T[] burada T tek varlık türlerinden biridir Birden çok varlık içeren bir dizi. Her girdi bir varlığı temsil eder.

Diğer çıkış senaryoları için, doğrudan Azure.Data.Tables'dan diğer türlerle tableclient oluşturun ve kullanın. Azure SDK'dan bir istemci türü oluşturmak için bağımlılık ekleme kullanma örneği için bkz . Azure istemcilerini kaydetme.

TableStorageOutput ek açıklamasını kullanarak bir işlevden Tablo depolama satırı çıkarmak için iki seçenek vardır:

Seçenekler Açıklama
Dönüş değeri Ek açıklamayı işlevin kendisine uygulayarak işlevin dönüş değeri Tablo depolama satırı olarak kalır.
Kesin Tablo satırını açıkça ayarlamak için, ek açıklamayı ve RowKey özelliklerini içeren türündeki OutputBinding<T>T belirli bir parametreye PartitionKey uygulayın. uygulayarak veya devralarak bu özelliklere ITableEntity TableEntityeşlik edebilirsiniz.

Değerini döndürerek veya kullanarak context.extraOutputs.set()çıkış satırı verilerini ayarlayın.

Tablo verilerine yazmak için cmdlet'ini Push-OutputBinding kullanın, parametresini -Name TableBinding ve -Value parametresini satır verilerine eşit olarak ayarlayın. Daha fazla ayrıntı için Bkz. PowerShell örneği.

bir işlevden Tablo depolama satırı iletisi çıkarmak için iki seçenek vardır:

Seçenekler Açıklama
Dönüş değeri name function.json özelliğini olarak $returnayarlayın. Bu yapılandırmayla işlevin dönüş değeri Tablo depolama satırı olarak kalır.
Kesin Out türü olarak bildirilen parametrenin ayarlanan yöntemine bir değer geçirin. 'a set geçirilen değer tablo satırı olarak kalıcıdır.

Belirli kullanım ayrıntıları için bkz . Örnek.

Özel durumlar ve dönüş kodları

Bağlama Başvuru
Tablo Tablo Hata Kodları
Blob, Tablo, Kuyruk Depolama Hata Kodları
Blob, Tablo, Kuyruk Sorun giderme

Sonraki adımlar