Azure İşlevleri için Azure Event Grid çıkış bağlaması
Olayları özel bir konuya yazmak için Event Grid çıkış bağlamasını kullanın. Özel konu için geçerli bir erişim anahtarınız olmalıdır. Event Grid çıkış bağlaması paylaşılan erişim imzası (SAS) belirteçlerini desteklemez.
Kurulum ve yapılandırma ayrıntıları hakkında bilgi için bkz. Azure İşlevleri'da Event Grid tetikleyicileri ve bağlamalarıyla çalışma.
Ö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.
Azure İşlevleri, Python için iki programlama modelini destekler. Bağlamalarınızı tanımlama şekliniz seçtiğiniz programlama modeline bağlıdır.
Python v2 programlama modeli, doğrudan Python işlev kodunuzda dekoratörleri kullanarak bağlamaları tanımlamanıza olanak tanır. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.
Bu makale her iki programlama modelini de destekler.
Önemli
Event Grid çıkış bağlaması yalnızca İşlevler 2.x ve üzeri için kullanılabilir.
Örnek
Event Grid çıkış bağlamasıyla kullanılan çıkış parametresinin türü İşlevler çalışma zamanı sürümüne, bağlama uzantısı sürümüne ve C# işlevinin modalitesine bağlıdır. C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:
- İşlem içi sınıf kitaplığı: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi.
- Yalıtılmış çalışan işlemi sınıf kitaplığı: çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi.
Aşağıdaki örnekte, özel türün hem tetikleyicide hem de Event Grid çıkış bağlamasında nasıl kullanıldığı gösterilmektedir:
using System;
using System.Collections.Generic;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace SampleApp
{
public static class EventGridFunction
{
[Function(nameof(EventGridFunction))]
[EventGridOutput(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
public static MyEventType Run([EventGridTrigger] MyEventType input, FunctionContext context)
{
var logger = context.GetLogger(nameof(EventGridFunction));
logger.LogInformation(input.Data.ToString());
var outputEvent = new MyEventType()
{
Id = "unique-id",
Subject = "abc-subject",
Data = new Dictionary<string, object>
{
{ "myKey", "myValue" }
}
};
return outputEvent;
}
}
public class MyEventType
{
public string Id { get; set; }
public string Topic { get; set; }
public string Subject { get; set; }
public string EventType { get; set; }
public DateTime EventTime { get; set; }
public IDictionary<string, object> Data { get; set; }
}
}
Aşağıdaki örnekte, Event Grid özel konusuna ileti yazan bir Java işlevi gösterilmektedir. işlevi, bir dizenin çıkışını almak için bağlamanın setValue
yöntemini kullanır.
public class Function {
@FunctionName("EventGridTriggerTest")
public void run(@EventGridTrigger(name = "event") String content,
@EventGridOutput(name = "outputEvent", topicEndpointUri = "MyEventGridTopicUriSetting", topicKeySetting = "MyEventGridTopicKeySetting") OutputBinding<String> outputEvent,
final ExecutionContext context) {
context.getLogger().info("Java EventGrid trigger processed a request." + content);
final String eventGridOutputDocument = "{\"id\": \"1807\", \"eventType\": \"recordInserted\", \"subject\": \"myapp/cars/java\", \"eventTime\":\"2017-08-10T21:03:07+00:00\", \"data\": {\"make\": \"Ducati\",\"model\": \"Monster\"}, \"dataVersion\": \"1.0\"}";
outputEvent.setValue(eventGridOutputDocument);
}
}
Event Grid iletileri göndermek için POJO sınıfını da kullanabilirsiniz.
public class Function {
@FunctionName("EventGridTriggerTest")
public void run(@EventGridTrigger(name = "event") String content,
@EventGridOutput(name = "outputEvent", topicEndpointUri = "MyEventGridTopicUriSetting", topicKeySetting = "MyEventGridTopicKeySetting") OutputBinding<EventGridEvent> outputEvent,
final ExecutionContext context) {
context.getLogger().info("Java EventGrid trigger processed a request." + content);
final EventGridEvent eventGridOutputDocument = new EventGridEvent();
eventGridOutputDocument.setId("1807");
eventGridOutputDocument.setEventType("recordInserted");
eventGridOutputDocument.setEventTime("2017-08-10T21:03:07+00:00");
eventGridOutputDocument.setDataVersion("1.0");
eventGridOutputDocument.setSubject("myapp/cars/java");
eventGridOutputDocument.setData("{\"make\": \"Ducati\",\"model\":\"monster\"");
outputEvent.setValue(eventGridOutputDocument);
}
}
class EventGridEvent {
private String id;
private String eventType;
private String subject;
private String eventTime;
private String dataVersion;
private String data;
public String getId() {
return id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getDataVersion() {
return dataVersion;
}
public void setDataVersion(String dataVersion) {
this.dataVersion = dataVersion;
}
public String getEventTime() {
return eventTime;
}
public void setEventTime(String eventTime) {
this.eventTime = eventTime;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getEventType() {
return eventType;
}
public void setEventType(String eventType) {
this.eventType = eventType;
}
public void setId(String id) {
this.id = id;
}
}
Aşağıdaki örnekte tek bir olayın çıkışını veren, zamanlayıcı tarafından tetiklenen TypeScript işlevi gösterilmektedir:
import { app, EventGridPartialEvent, InvocationContext, output, Timer } from '@azure/functions';
export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<EventGridPartialEvent> {
const timeStamp = new Date().toISOString();
return {
id: 'message-id',
subject: 'subject-name',
dataVersion: '1.0',
eventType: 'event-type',
data: {
name: 'John Henry',
},
eventTime: timeStamp,
};
}
app.timer('timerTrigger1', {
schedule: '0 */5 * * * *',
return: output.eventGrid({
topicEndpointUri: 'MyEventGridTopicUriSetting',
topicKeySetting: 'MyEventGridTopicKeySetting',
}),
handler: timerTrigger1,
});
Birden çok olay çıktısı almak için tek bir nesne yerine bir dizi döndürebilirsiniz. Örneğin:
const timeStamp = new Date().toISOString();
return [
{
id: 'message-id',
subject: 'subject-name',
dataVersion: '1.0',
eventType: 'event-type',
data: {
name: 'John Henry',
},
eventTime: timeStamp,
},
{
id: 'message-id-2',
subject: 'subject-name',
dataVersion: '1.0',
eventType: 'event-type',
data: {
name: 'John Doe',
},
eventTime: timeStamp,
},
];
Aşağıdaki örnekte, tek bir olayın çıkışını veren zamanlayıcı tarafından tetiklenen JavaScript işlevi gösterilmektedir:
const { app, output } = require('@azure/functions');
const eventGridOutput = output.eventGrid({
topicEndpointUri: 'MyEventGridTopicUriSetting',
topicKeySetting: 'MyEventGridTopicKeySetting',
});
app.timer('timerTrigger1', {
schedule: '0 */5 * * * *',
return: eventGridOutput,
handler: (myTimer, context) => {
const timeStamp = new Date().toISOString();
return {
id: 'message-id',
subject: 'subject-name',
dataVersion: '1.0',
eventType: 'event-type',
data: {
name: 'John Henry',
},
eventTime: timeStamp,
};
},
});
Birden çok olay çıktısı almak için tek bir nesne yerine bir dizi döndürebilirsiniz. Örneğin:
const timeStamp = new Date().toISOString();
return [
{
id: 'message-id',
subject: 'subject-name',
dataVersion: '1.0',
eventType: 'event-type',
data: {
name: 'John Henry',
},
eventTime: timeStamp,
},
{
id: 'message-id-2',
subject: 'subject-name',
dataVersion: '1.0',
eventType: 'event-type',
data: {
name: 'John Doe',
},
eventTime: timeStamp,
},
];
Aşağıdaki örnekte, Event Grid olay iletisinin çıkışını almak için bir işlevin nasıl yapılandırılır gösterilmektedir. Event Grid çıkış bağlaması oluşturmak için eventGrid
gereken değerleri yapılandıracak şekilde ayarlandığı type
bölüm.
{
"bindings": [
{
"type": "eventGrid",
"name": "outputEvent",
"topicEndpointUri": "MyEventGridTopicUriSetting",
"topicKeySetting": "MyEventGridTopicKeySetting",
"direction": "out"
},
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
İşlevinizde, Event Grid çıkış bağlaması aracılığıyla özel bir konuya olay göndermek için öğesini kullanın Push-OutputBinding
.
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$message = $Request.Query.Message
Push-OutputBinding -Name outputEvent -Value @{
id = "1"
eventType = "testEvent"
subject = "testapp/testPublish"
eventTime = "2020-08-27T21:03:07+00:00"
data = @{
Message = $message
}
dataVersion = "1.0"
}
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = 200
Body = "OK"
})
Aşağıdaki örnekte bir tetikleyici bağlaması ve bağlamayı kullanan bir Python işlevi gösterilmektedir. Ardından, tarafından belirtildiği topicEndpointUri
gibi özel konuya bir olay gönderir. Örnek, v1 veya v2 Python programlama modelini kullanıp kullanmadığınıza bağlıdır.
function_app.py dosyasındaki işlev şu şekildedir:
import logging
import azure.functions as func
import datetime
app = func.FunctionApp()
@app.function_name(name="eventgrid_output")
@app.event_grid_trigger(arg_name="eventGridEvent")
@app.event_grid_output(
arg_name="outputEvent",
topic_endpoint_uri="MyEventGridTopicUriSetting",
topic_key_setting="MyEventGridTopicKeySetting")
def eventgrid_output(eventGridEvent: func.EventGridEvent,
outputEvent: func.Out[func.EventGridOutputEvent]) -> None:
logging.log("eventGridEvent: ", eventGridEvent)
outputEvent.set(
func.EventGridOutputEvent(
id="test-id",
data={"tag1": "value1", "tag2": "value2"},
subject="test-subject",
event_type="test-event-1",
event_time=datetime.datetime.utcnow(),
data_version="1.0"))
Özellikler
Hem işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları bağlamayı yapılandırmak için özniteliğini kullanır. Bunun yerine C# betiği, C# betik kılavuzunda açıklandığı gibi bir function.json yapılandırma dosyası kullanır.
Özniteliğin oluşturucu, özel konunun adını içeren bir uygulama ayarının adını ve konu anahtarını içeren bir uygulama ayarının adını alır.
Aşağıdaki tabloda için parametreleri EventGridOutputAttribute
açıklanmaktadır.
Parametre | Açıklama |
---|---|
TopicEndpointUri | Gibi MyTopicEndpointUri özel konu için URI'yi içeren bir uygulama ayarının adı. |
TopicKeySetting | Özel konu için erişim anahtarı içeren bir uygulama ayarının adı. |
bağlantı* | Konu uç noktası URI'sini içeren ayarın ortak ön ekinin değeri. Bu uygulama ayarının adlandırma biçimi hakkında daha fazla bilgi için bkz . Kimlik tabanlı kimlik doğrulaması. |
Ek Açıklamalar
Java sınıfları için EventGridAttribute özniteliğini kullanın.
Özniteliğin oluşturucu, özel konunun adını içeren bir uygulama ayarının adını ve konu anahtarını içeren bir uygulama ayarının adını alır. Bu ayarlar hakkında daha fazla bilgi için bkz . Çıkış - yapılandırma. İşte bir EventGridOutput
öznitelik örneği:
public class Function {
@FunctionName("EventGridTriggerTest")
public void run(@EventGridTrigger(name = "event") String content,
@EventGridOutput(name = "outputEvent", topicEndpointUri = "MyEventGridTopicUriSetting", topicKeySetting = "MyEventGridTopicKeySetting") OutputBinding<String> outputEvent, final ExecutionContext context) {
...
}
}
Yapılandırma
Aşağıdaki tabloda, yöntemine geçirilen output.eventGrid()
nesnede options
ayarlayabileceğiniz özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
topicEndpointUri | Gibi MyTopicEndpointUri özel konu için URI'yi içeren bir uygulama ayarının adı. |
topicKeySetting | Özel konu için erişim anahtarı içeren bir uygulama ayarının adı. |
bağlantı* | Konu uç noktası URI'sini içeren ayarın ortak ön ekinin değeri. özelliği topicEndpointUri ayarlanırken connection ve topicKeySetting özellikleri ayarlanmamalıdır. Bu uygulama ayarının adlandırma biçimi hakkında daha fazla bilgi için bkz . Kimlik tabanlı kimlik doğrulaması. |
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 eventGrid . |
direction | olarak ayarlanmalıdır out . Bağlamayı Azure portalında oluşturduğunuzda bu parametre otomatik olarak ayarlanır. |
ad | Olayı temsil eden işlev kodunda kullanılan değişken adı. |
topicEndpointUri | Gibi MyTopicEndpointUri özel konu için URI'yi içeren bir uygulama ayarının adı. |
topicKeySetting | Özel konu için erişim anahtarı içeren bir uygulama ayarının adı. |
bağlantı* | Konu uç noktası URI'sini içeren ayarın ortak ön ekinin değeri. Bu uygulama ayarının adlandırma biçimi hakkında daha fazla bilgi için bkz . Kimlik tabanlı kimlik doğrulaması. |
*Kimlik tabanlı bağlantılar için destek için uzantının 3.3.x veya üzeri bir sürümü gerekir.
Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasına Values
ekleyin.
Önemli
değerini TopicEndpointUri
, özel konunun URI'sini içeren bir uygulama ayarının adına ayarladığınızdan emin olun. Özel konunun URI'sini doğrudan bu özellikte belirtmeyin. aynı durum kullanılırken Connection
de geçerlidir.
Tam örnekler için Örnek bölümüne bakın.
Kullanım
Event Grid çıkış bağlaması tarafından desteklenen parametre türü İşlevler çalışma zamanı sürümüne, uzantı paketi sürümüne ve kullanılan C# modalitesine bağlıdır.
İşlevin tek bir olay yazmasını istediğinizde Event Grid çıkış bağlaması aşağıdaki türlere bağlanabilir:
Type | Açıklama |
---|---|
string |
Dize olarak olay. |
byte[] |
Olay iletisinin baytları. |
JSON serileştirilebilir türler | JSON olayını temsil eden nesne. İşlevler, düz eski bir CLR nesnesi (POCO) türünü JSON verilerine seri hale getirmeye çalışır. |
İşlevin birden çok olay yazmasını istediğinizde Event Grid çıkış bağlaması aşağıdaki türlere bağlanabilir:
Type | Açıklama |
---|---|
T[] burada T tek olay türlerinden biridir |
Birden çok olay içeren bir dizi. Her girdi bir olayı temsil eder. |
Diğer çıkış senaryoları için, doğrudan Azure.Messaging.EventGrid'den türler oluşturun ve kullanın.
gibi out EventGridOutput paramName
bir yöntem parametresi çağırarak tek tek iletiler gönderin ve ile ICollector<EventGridOutput>
birden çok ileti yazın.
Event Grid çıkış bağlamasına Push-OutputBinding
bir olay göndermek için cmdlet'ini kullanarak çıkış olayına erişin.
Bir işlevden Event Grid iletisi çıkarmak için iki seçenek vardır:
- Dönüş değeri: function.json özelliğini olarak
$return
ayarlayınname
. Bu yapılandırmayla işlevin dönüş değeri Event Grid iletisi olarak kalıcı hale getirilir. - Kesinlik: Out türü olarak bildirilen parametrenin set yöntemine bir değer geçirin. 'a
set
geçirilen değer event grid iletisi olarak kalıcıdır.
Bağlantılar
Event Grid çıkış bağlamasını kullanırken Event Grid konusunda kimlik doğrulaması yapmanın iki yolu vardır:
Kimlik doğrulama yöntemi | Açıklama |
---|---|
Konu anahtarı kullanma | TopicEndpointUri konu anahtarı kullanma bölümünde açıklandığı gibi ve TopicKeySetting özelliklerini ayarlayın. |
Kimlik kullanma | Connection özelliğini birden çok uygulama ayarı için paylaşılan ön ekin adına ayarlayın ve kimlik tabanlı kimlik doğrulamasını birlikte belirleyin. Bu yöntem, uzantının 3.3.x veya üzeri sürümü kullanılırken desteklenir. |
Konu anahtarı kullanma
Konu anahtarını yapılandırmak için aşağıdaki adımları kullanın:
Event Grid konunuzun konu anahtarını almak için Erişim anahtarlarını alma başlığı altındaki adımları izleyin.
Uygulama ayarlarınızda konu anahtarı değerini tanımlayan bir ayar oluşturun. Bağlamanın özelliği için
TopicKeySetting
bu ayarın adını kullanın.Uygulama ayarlarınızda konu uç noktasını tanımlayan bir ayar oluşturun. Bağlamanın özelliği için
TopicEndpointUri
bu ayarın adını kullanın.
Kimlik tabanlı kimlik doğrulaması
Uzantının 3.3.x veya üzeri bir sürümünü kullanırken, konu anahtarlarını almak ve bunlarla çalışmak zorunda kalmamak için Microsoft Entra kimliğini kullanarak bir Event Grid konusuna bağlanabilirsiniz.
Konu uç noktası URI'sini döndüren bir uygulama ayarı oluşturmanız gerekir. Ayarın adı benzersiz bir ortak ön ekini (örneğin, myawesometopic
) değeriyle __topicEndpointUri
birleştirmelidir. Ardından, bağlamada özelliğini tanımlarken Connection
bu ortak ön eki (bu örnekte, myawesometopic
) kullanmanız gerekir.
Bu modda uzantı aşağıdaki özellikleri gerektirir:
Özellik | Ortam değişkeni şablonu | Açıklama | Örnek değer |
---|---|---|---|
Konu Uç Noktası URI'si | <CONNECTION_NAME_PREFIX>__topicEndpointUri |
Konu uç noktası. | https://<topic-name>.centralus-1.eventgrid.azure.net/api/events |
Bağlantıyı özelleştirmek için daha fazla özellik kullanılabilir. Bkz. Kimlik tabanlı bağlantılar için ortak özellikler.
Not
Yönetilen kimlik tabanlı bağlantılar için ayarlar sağlamak üzere Azure Uygulaması Yapılandırması veya Key Vault kullanılırken, adların doğru çözümlendiğinden __
emin olmak için adların yerine veya /
gibi :
geçerli bir anahtar ayırıcı kullanılmalıdır.
Örneğin, <CONNECTION_NAME_PREFIX>:topicEndpointUri
.
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 Event Grid konunuza erişim sağlayan bir rol ataması oluşturmanız gerekir. Sahip gibi yönetim rolleri yeterli değildir. Aşağıdaki tabloda, Event Hubs uzantısı normal işlemde 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 |
---|---|
Çıkış bağlaması | EventGrid Katkıda Bulunanı, EventGrid Veri Göndereni |