Pengikatan output Tabel Azure untuk Azure Functions

Gunakan pengikatan output Tabel Azure untuk menulis entitas ke tabel di Azure Cosmos DB untuk Tabel atau Azure Table Storage.

Untuk informasi tentang pengaturan dan detail konfigurasi, lihat Ringkasan

Catatan

Pengikatan output ini hanya mendukung pembuatan entitas baru dalam tabel. Jika Anda perlu memperbarui entitas yang ada dari kode fungsi Anda, gunakan SDK Tabel Azure secara langsung.

Penting

Artikel ini menggunakan tab untuk mendukung beberapa versi model pemrograman Node.js. Model v4 umumnya tersedia dan dirancang untuk memiliki pengalaman yang lebih fleksibel dan intuitif untuk pengembang JavaScript dan TypeScript. Untuk detail selengkapnya tentang cara kerja model v4, lihat panduan pengembang Node.js Azure Functions. Untuk mempelajari selengkapnya tentang perbedaan antara v3 dan v4, lihat panduan migrasi.

Contoh

Fungsi C# dapat dibuat dengan menggunakan salah satu mode C# berikut:

  • Model pekerja terisolasi: Fungsi C# terkompilasi yang berjalan dalam proses pekerja yang terisolasi dari runtime. Proses pekerja terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada versi LTS dan non-LTS .NET dan .NET Framework. Ekstensi untuk fungsi proses pekerja yang terisolasi menggunakan Microsoft.Azure.Functions.Worker.Extensions.* namespace layanan.
  • Model dalam proses: Fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime Functions. Dalam variasi model ini, Functions dapat dijalankan menggunakan scripting C#, yang didukung terutama untuk pengeditan portal C#. Ekstensi untuk fungsi dalam proses menggunakan Microsoft.Azure.WebJobs.Extensions.* namespace layanan.

Penting

Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi untuk dukungan penuh.

Kelas MyTableData berikut mewakili baris data dalam tabel:

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

Fungsi berikut, yang dimulai oleh pemicu Queue Storage, menulis entitas MyDataTable baru ke tabel bernama OutputTable.

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

Contoh berikut memperlihatkan fungsi Java yang menggunakan pemicu HTTP untuk menulis satu baris tabel.

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();
    }
}

Contoh berikut memperlihatkan fungsi Java yang menggunakan pemicu HTTP untuk menulis beberapa baris tabel.

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();
    }
}

Contoh berikut menunjukkan pengikatan output tabel yang menulis beberapa entitas tabel.

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 };
    },
});

Contoh berikut menunjukkan cara menulis beberapa entitas ke tabel dari fungsi.

Konfigurasi pengikatan di function.json:

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

Kode PowerShell di run.ps1:

param($InputData, $TriggerMetadata)

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

Contoh berikut adalah cara menggunakan pengikatan output penyimpanan Tabel. Konfigurasikan pengikatan table dalam function.json dengan menetapkan nilai ke name, tableName, partitionKey, dan connection:

{
  "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"
    }
  ]
}

Fungsi berikut menghasilkan UUI unik untuk nilai rowKey dan menyimpan pesan tersebut ke penyimpanan Tabel.

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

Atribut

Pustaka C# proses dalam proses dan terisolasi menggunakan atribut untuk menentukan fungsi. Skrip C# sebagai gantinya menggunakan file konfigurasi function.json seperti yang dijelaskan dalam panduan pembuatan skrip C#.

Pada pustaka kelas C#, TableInputAttribute mendukung properti berikut:

Properti atribut Deskripsi
TableName Nama tabel tempat menulis.
PartitionKey Kunci partisi entitas tabel untuk menulis.
RowKey Tombol baris entitas tabel untuk menulis.
Koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi.

Anotasi

Pada pustaka runtime fungsi Java, gunakan anotasi TableOutput pada parameter untuk menulis nilai ke tabel Anda. Atribut mendukung elemen berikut:

Elemen Deskripsi
nama Nama variabel yang digunakan dalam kode fungsi yang mewakili tabel atau entitas.
dataType Menentukan bagaimana runtime Functions harus memperlakukan nilai parameter. Untuk mempelajari lebih lanjut, lihat dataType.
tableName Nama tabel tempat menulis.
partitionKey Kunci partisi entitas tabel untuk menulis.
rowKey Tombol baris entitas tabel untuk menulis.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi.

Konfigurasi

Tabel berikut menjelaskan properti yang bisa Anda atur pada objek yang options diteruskan ke output.table() metode .

Properti Deskripsi
tableName Nama tabel tempat menulis.
partitionKey Kunci partisi entitas tabel untuk menulis.
rowKey Tombol baris entitas tabel untuk menulis.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi.

Konfigurasi

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diatur ke table. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure.
arah Harus diatur ke out. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure.
nama Nama variabel yang digunakan dalam kode fungsi yang mewakili tabel atau entitas. Atur ke $return untuk mereferensi nilai pengembalian fungsi.
tableName Nama tabel tempat menulis.
partitionKey Kunci partisi entitas tabel untuk menulis.
rowKey Tombol baris entitas tabel untuk menulis.
koneksi Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi.

Ketika Anda mengembangkan secara lokal, tambahkan pengaturan aplikasi di file local.settings.json dalam koleksi Values.

Koneksi

Properti connection adalah referensi ke konfigurasi lingkungan yang menentukan cara aplikasi seharusnya tersambung ke layanan tabel Anda. Ini mungkin menentukan:

Jika nilai yang dikonfigurasi adalah kecocokan persis untuk pengaturan tunggal dan kecocokan awalan untuk pengaturan lainnya, kecocokan persis akan digunakan.

String koneksi

Untuk mendapatkan string koneksi untuk tabel di penyimpanan Azure Table, ikuti langkah-langkah yang ditampilkan di Mengelola kunci akses akun penyimpanan. Untuk mendapatkan string koneksi untuk tabel di Azure Cosmos DB for Table, ikuti langkah-langkah yang ditunjukkan di Tanya Jawab Umum Azure Cosmos DB for Table.

String koneksi ini harus disimpan dalam pengaturan aplikasi dengan nama yang cocok dengan nilai yang ditentukan oleh properti connection konfigurasi pengikatan.

Jika nama pengaturan aplikasi dimulai dengan "AzureWebJobs", Anda hanya dapat menentukan sisa namanya di sini. Misalnya, jika Anda mengatur connection ke "MyStorage", runtime Functions mencari pengaturan aplikasi yang bernama "MyStorage". Jika Anda membiarkan connection kosong, runtime bahasa umum Functions menggunakan string koneksi Storage default di pengaturan aplikasi yang bernama AzureWebJobsStorage.

Koneksi berbasis identitas

Jika Anda menggunakan ekstensi Tables API, alih-alih menggunakan string koneksi dengan rahasia, Anda dapat meminta aplikasi menggunakan identitas Microsoft Entra. Hal ini hanya berlaku saat mengakses tabel di Azure Storage. Untuk menggunakan identitas, Anda menentukan pengaturan di bawah awalan umum yang memetakan ke connection properti dalam konfigurasi pemicu dan pengikatan.

Jika Anda mengatur connection ke "AzureWebJobsStorage", lihat Koneksi untuk menghosting penyimpanan dengan identitas. Untuk semua koneksi lainnya, ekstensi tersebut memerlukan properti berikut:

Properti Templat variabel lingkungan Deskripsi Contoh nilai
URI Layanan Tabel <CONNECTION_NAME_PREFIX>__tableServiceUri1 URI sarana data layanan tabel Azure Storage yang Anda sambungkan, menggunakan skema HTTPS. https://<storage_account_name>.table.core.windows.net

1<CONNECTION_NAME_PREFIX>__serviceUri dapat digunakan sebagai alias. Jika kedua formulir disediakan, tableServiceUri formulir akan digunakan. Formulir serviceUri tidak dapat digunakan saat konfigurasi koneksi keseluruhan akan digunakan di seluruh blob, antrean, dan/atau tabel.

Properti lain mungkin diatur untuk menyesuaikan koneksi. Lihat Properti umum untuk koneksi berbasis identitas.

Formulir serviceUri tidak dapat digunakan saat konfigurasi koneksi keseluruhan akan digunakan di seluruh blob, antrean, dan/atau tabel di Azure Storage. URI hanya dapat menunjuk layanan tabel. Sebagai alternatif, Anda dapat menyediakan URI khusus untuk setiap layanan dengan awalan yang sama, memungkinkan satu koneksi untuk digunakan.

Saat dihosting di layanan Azure Functions, koneksi berbasis identitas menggunakan identitas terkelola. Identitas yang ditetapkan sistem digunakan secara default, meskipun identitas yang ditetapkan pengguna dapat ditentukan dengan credential dan clientID properti. Perhatikan bahwa mengonfigurasi identitas yang ditetapkan oleh pengguna dengan ID sumber daya tidak didukung. Saat dijalankan dalam konteks lain, seperti pengembangan lokal, identitas pengembang Anda digunakan sebagai gantinya, meskipun ini dapat dikustomisasi. Lihat Pengembangan lokal dengan koneksi berbasis identitas.

Memberikan izin kepada identitas

Identitas apa pun yang digunakan harus memiliki izin untuk melakukan tindakan yang dimaksudkan. Untuk sebagian besar layanan Azure, ini berarti Anda perlu menetapkan peran di Azure RBAC, menggunakan peran bawaan atau kustom yang menyediakan izin tersebut.

Penting

Beberapa izin mungkin diekspos oleh layanan target yang tidak diperlukan untuk semua konteks. Jika memungkinkan, patuhi prinsip hak istimewa paling rendah, dengan memberikan identitas hanya hak istimewa yang diperlukan. Misalnya, jika aplikasi hanya perlu dapat membaca dari sumber data, gunakan peran yang hanya memiliki izin untuk membaca. Tidak pantas untuk menetapkan peran yang juga memungkinkan menulis ke layanan itu, karena ini akan menjadi izin yang berlebihan untuk operasi baca. Demikian pula, Anda ingin memastikan penetapan peran hanya mencakup sumber daya yang perlu dibaca.

Anda harus membuat penetapan peran yang menyediakan akses ke layanan tabel Azure Storage Anda saat runtime. Peran manajemen seperti Pemilik tidak cukup. Tabel berikut ini memperlihatkan peran bawaan yang direkomendasikan saat menggunakan ekstensi Azure Tables terhadap Azure Storage dalam operasi normal. Aplikasi Anda mungkin memerlukan izin tambahan berdasarkan kode yang Anda tulis.

Jenis pengikatan Contoh peran bawaan (Azure Storage1)
Pengikatan masukan Pembaca Data Tabel Penyimpanan
Pengikatan output Kontributor Data Tabel Penyimpanan

1 Jika aplikasi Anda tersambung ke tabel di Azure Cosmos DB for Table, menggunakan identitas tidak didukung dan koneksi harus menggunakan string koneksi.

Penggunaan

Penggunaan pengikatan tergantung pada versi paket ekstensi, dan modalitas C# yang digunakan dalam aplikasi fungsi Anda, yang dapat berupa salah satu hal berikut:

Pustaka kelas proses pekerja terisolasi yang dikompilasi fungsi C# berjalan dalam proses yang diisolasi dari runtime.

Pilih versi guna melihat detail penggunaan untuk mode dan versi.

Saat Anda ingin fungsi menulis ke satu entitas, pengikatan output Tabel Azure dapat mengikat ke jenis berikut:

Tipe Deskripsi
Jenis JSON yang dapat diserialisasi yang mengimplementasikan [ITableEntity] Fungsi mencoba untuk menserialisasikan jenis objek CLR (POCO) biasa-lama sebagai entitas. Jenis harus mengimplementasikan [ITableEntity] atau memiliki properti string RowKey dan properti string PartitionKey .

Saat Anda ingin fungsi menulis ke beberapa entitas, pengikatan output Tabel Azure dapat mengikat ke jenis berikut:

Tipe Deskripsi
T[] di mana T adalah salah satu jenis entitas tunggal Array yang berisi beberapa entitas. Setiap entri mewakili satu entitas.

Untuk skenario output lainnya, buat dan gunakan jenis dari Azure.Data.Tables secara langsung.

Ada dua opsi untuk menghasilkan baris penyimpanan Tabel dari fungsi menggunakan anotasi TableStorageOutput:

Opsi Deskripsi
Nilai hasil Dengan menerapkan anotasi ke fungsi itu sendiri, nilai hasil dari fungsi dinyatakan sebagai baris penyimpanan Tabel.
Imperatif Untuk secara eksplisit mengatur baris tabel, terapkan anotasi ke parameter tertentu dari jenis OutputBinding<T>, di mana T mencakup properti PartitionKey dan RowKey. Anda dapat menyertai properti ini dengan menerapkan ITableEntity atau mewariskan TableEntity.

Atur data baris output dengan mengembalikan nilai atau menggunakan context.extraOutputs.set().

Untuk menulis ke data tabel, gunakan Push-OutputBinding cmdlet, atur parameter -Name TableBinding dan parameter -Value yang sama dengan data baris. Lihat contoh PowerShell untuk detail selengkapnya.

Ada dua opsi untuk menghasilkan pesan baris penyimpanan Tabel dari fungsi:

Opsi Deskripsi
Nilai hasil Atur properti name di function.json menjadi $return. Dengan konfigurasi ini, nilai hasil fungsi dinyatakan sebagai baris penyimpanan Tabel.
Imperatif Teruskan nilai ke metode set parameter yang dinyatakan sebagai jenis Keluar. Nilai yang diteruskan ke set dipertahankan sebagai baris tabel.

Untuk detail penggunaan tertentu, lihat Contoh.

Kode pengecualian dan pengembalian

Pengikatan Referensi
Tabel Kode Kesalahan Tabel
Blob, Tabel, Antrean Kode Kesalahan Penyimpanan
Blob, Tabel, Antrean Pemecahan Masalah

Langkah berikutnya