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
, , tableName
partitionKey
ve connection
değerleri atayarak name
function.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:
- bağlantı dizesi içeren bir uygulama ayarının adı
- Birden çok uygulama ayarı için paylaşılan ön ekin adı ve kimlik tabanlı bağlantı tanımlama
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ı AzureWebJobsStorage
uygulama 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>__tableServiceUri 1 |
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 TableEntity eşlik edebilirsiniz. |
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 $return ayarlayı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 |