Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure İşlevleri için Azure Event Hubs bağlamalarıyla çalışma açıklanmaktadır. Azure İşlevleri, Event Hubs için tetikleyici ve çıkış bağlamalarını destekler.
Kurulum ve yapılandırma ayrıntıları hakkında bilgi için genel bakışa bakın.
Olay akışına olay yazmak için Event Hubs çıkış bağlamasını kullanın. Olay yazmak için ilgili olay hub'ında gönderme iznine sahip olmanız gerekir.
Bir çıkış bağlaması uygulamaya çalışmadan önce gerekli paket başvurularının yerinde olduğundan emin olun.
Ö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ızı sağlar. Daha fazla bilgi için bkz. Python geliştirici kılavuzu.
Bu makale her iki programlama modelini de destekler.
Örnek
Aşağıdaki örnekte, yöntem dönüş değerini çıkış olarak kullanarak bir olay hub'ına ileti dizesi yazan bir C# işlevi gösterilmektedir:
[Function(nameof(EventHubFunction))]
[FixedDelayRetry(5, "00:00:10")]
[EventHubOutput("dest", Connection = "EventHubConnection")]
public string EventHubFunction(
[EventHubTrigger("src", Connection = "EventHubConnection")] string[] input,
FunctionContext context)
{
_logger.LogInformation("First Event Hubs triggered message: {msg}", input[0]);
var message = $"Output message created at {DateTime.Now}";
return message;
}
Aşağıdaki örnekte, bir olay hub'ına tek bir ileti gönderen zamanlayıcı ile tetiklenen TypeScript işlevi gösterilmektedir:
import { app, InvocationContext, output, Timer } from '@azure/functions';
export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<string> {
const timeStamp = new Date().toISOString();
return `Message created at: ${timeStamp}`;
}
app.timer('timerTrigger1', {
schedule: '0 */5 * * * *',
return: output.eventHub({
eventHubName: 'myeventhub',
connection: 'MyEventHubSendAppSetting',
}),
handler: timerTrigger1,
});
Birden çok iletinin çıktısını almak için tek bir nesne yerine bir dizi döndürebilirsiniz. Örneğin:
const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];
Aşağıdaki örnekte, bir olay hub'ına tek bir ileti gönderen süreölçer tarafından tetiklenen JavaScript işlevi gösterilmektedir :
const { app, output } = require('@azure/functions');
const eventHubOutput = output.eventHub({
eventHubName: 'myeventhub',
connection: 'MyEventHubSendAppSetting',
});
app.timer('timerTrigger1', {
schedule: '0 */5 * * * *',
return: eventHubOutput,
handler: (myTimer, context) => {
const timeStamp = new Date().toISOString();
return `Message created at: ${timeStamp}`;
},
});
Birden çok iletinin çıktısını almak için tek bir nesne yerine bir dizi döndürebilirsiniz. Örneğin:
const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];
Tam PowerShell örnekleri beklemede.
Aşağıdaki örnekte bir olay hub'ı tetikleyici bağlaması ve bağlamayı kullanan bir Python işlevi gösterilmektedir. işlevi bir olay hub'ına bir ileti yazar. Örnek, v1 veya v2 Python programlama modelini mi kullandığınıza bağlıdır.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
event_hub_name="<EVENT_HUB_NAME>",
connection="<CONNECTION_SETTING>")
def eventhub_output(req: func.HttpRequest, event: func.Out[str]):
body = req.get_body()
if body is not None:
event.set(body.decode('utf-8'))
else:
logging.info('req body is none')
return 'ok'
Birden çok ileti gönderen Python kodu aşağıda bulabilirsiniz:
import logging
import azure.functions as func
from typing import List
app = func.FunctionApp()
@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
event_hub_name="<EVENT_HUB_NAME>",
connection="<CONNECTION_SETTING>")
def eventhub_output(req: func.HttpRequest, event: func.Out[List[str]]) -> func.HttpResponse:
my_messages=["message1", "message2","message3"]
event.set(my_messages)
return func.HttpResponse(f"Messages sent")
Aşağıdaki örnekte, bir olay hub'ına geçerli saati içeren bir ileti yazan bir Java işlevi gösterilmektedir.
@FunctionName("sendTime")
@EventHubOutput(name = "event", eventHubName = "samples-workitems", connection = "AzureEventHubConnection")
public String sendTime(
@TimerTrigger(name = "sendTimeTrigger", schedule = "0 */5 * * * *") String timerInfo) {
return LocalDateTime.now().toString();
}
Java işlevleri çalışma zamanı kitaplığında değeri Event Hubs'da yayımlanacak parametrelerde @EventHubOutput ek açıklamasını kullanın. parametresi OutputBinding<T> türünde olmalıdır; burada T bir POJO veya herhangi bir yerel Java türüdür.
Ö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.
Aşağıdaki özellikleri destekleyen bir olay hub'ına çıkış bağlaması tanımlamak için [EventHubOutputAttribute] kullanın.
| Parametreler | Açıklama |
|---|---|
| EventHubName | Olay hub'ının adı. olay hub'ı adı da bağlantı dizesi mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar. |
| Bağlantı | Event Hubs'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
Dekoratörler
Dekoratör kullanılarak tanımlanan Python v2 işlevleri için bu özellikler event_hub_output için desteklenir:
| Özellik | Açıklama |
|---|---|
arg_name |
Olayı temsil eden işlev kodunda kullanılan değişken adı. |
event_hub_name |
olay hub'ının adıdır. olay hub'ı adı da bağlantı dizesi mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar. |
connection |
Event Hubs'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
function.json kullanılarak tanımlanan Python işlevleri için Configuration bölümüne bakın.
Ek Açıklamalar
Java işlevleri çalışma zamanı kitaplığında değeri Event Hubs'a yayımlanacak parametrelerde EventHubOutput ek açıklamasını kullanın. Ek açıklama üzerinde aşağıdaki ayarlar desteklenir:
Yapılandırma
Aşağıdaki tabloda, yöntemine geçirilen options nesnede output.eventHub() ayarlayabileceğiniz özellikler açıklanmaktadır.
| Özellik | Açıklama |
|---|---|
| eventHubName | Olay hub'ının adı. olay hub'ı adı da bağlantı dizesi mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar. |
| bağlantı | Event Hubs'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
Aşağıdaki tabloda, çalışma zamanı sürümüne göre farklılık gösteren function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
| function.json özelliği | Açıklama |
|---|---|
| türü | olarak ayarlanmalıdır eventHub. |
| yön | 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ı. |
| eventHubName | İşlevler 2.x ve üzeri. Olay hub'ının adı. olay hub'ı adı da bağlantı dizesi mevcut olduğunda, bu değer çalışma zamanında bu özelliği geçersiz kılar. |
| bağlantı | Event Hubs'a nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Daha fazla bilgi için bkz . Bağlantılar. |
Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasınaValues ekleyin.
Kullanım
Event Hubs çı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 Hubs çıkış bağlaması aşağıdaki türlere bağlanabilir:
| Türü | Açıklama |
|---|---|
string |
Dize olarak olay. Olay basit bir metin olduğunda kullanın. |
byte[] |
Olayın baytları. |
| JSON serileştirilebilir türler | Olayı temsil eden bir 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 Hubs çıkış bağlaması aşağıdaki türlere bağlanabilir:
| Türü | 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, Azure'den diğer türlerle EventHubProducerClient oluşturun ve kullanın. Messaging.EventHubs doğrudan. Azure SDK bir istemci türü oluşturmak için bağımlılık ekleme kullanma örneği için bkz. >Azure istemcilerini kaydetme.
EventHubOutput ek açıklamasını kullanarak bir işlevden Event Hubs iletisi çıkarmak için iki seçenek vardır:
Dönüş değeri: Ek açıklamayı işlevin kendisine uygulayarak işlevin dönüş değeri Event Hubs iletisi olarak kalıcı hale getirilir.
Imperative: İleti değerini açıkça ayarlamak için ek açıklamayı
OutputBinding<T>türünün belirli bir parametresine uygulayın; buradaTbir POJO veya herhangi bir yerel Java türüdür. Bu yapılandırmayla, yönteminesetValuebir değer geçirilmesi, değerin Event Hubs iletisi olarak kalıcı olmasını sağlar.
Tam PowerShell örnekleri beklemede.
Bir işlevden Event Hubs iletisi çıkarmak için iki seçenek vardır:
Dönüş değeri: function.json
nameolarak ayarlayın$return. Bu yapılandırmayla işlevin dönüş değeri Event Hubs iletisi olarak kalıcı hale getirilir.Kesinlik: Out türü olarak bildirilen parametrenin set yöntemine bir değer geçirin. 'a
setgeçirilen değer, Event Hubs iletisi olarak kalıcıdır.
Çıkış işlevi parametresi veya func.Out[func.EventHubEvent]olarak func.Out[List[func.EventHubEvent]] tanımlanmalıdır. Ayrıntılar için çıkış örneğine bakın.
Bağlantılar
connection özelliği, uygulamanın Event Hubs'a 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 birlikte yönetilen kimlik bağlantısı 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.
Tavsiye
Gelişmiş güvenlik için bağlantı dizeleri üzerinden yönetilen kimlik bağlantıları önerilir. Bağlantı dizeleri kullanıma sunulan kimlik bilgilerini içerirken yönetilen kimlikler gizli dizileri yönetme gereksinimini ortadan kaldırır.
Uzantının version 5.x veya üzerini kullanıyorsanız gizli diziyle bağlantı dizesi kullanmak yerine uygulamanın Microsoft Entra kimliği kullanmasını sağlayabilirsiniz. Bunu yapmak için, tetikleyici ve bağlama yapılandırmasındaki özelliğiyle connection eşlenen ortak bir ön ekin altında ayarlar tanımlayabilirsiniz.
Bu modda, uzantı aşağıdaki uygulama ayarlarını gerektirir:
| Şablon tabanlı ayar | Açıklama | Kimlik türü |
|---|---|---|
<CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace |
Tam Event Hubs ad alanı. | Sistem tarafından atanan veya kullanıcı tarafından atanan |
<CONNECTION_NAME_PREFIX>__credential |
olarak ayarlanmalıdır managedidentity. |
Kullanıcı tarafından atanan |
<CONNECTION_NAME_PREFIX>__clientId |
Kullanıcıya atanmış yönetilen kimliğin istemci ID'si. | Kullanıcı tarafından atanan |
ile değiştirdiğiniz <CONNECTION_NAME_PREFIX> değer, bağlama uzantısı tarafından bağlantı ayarının adı olarak değerlendirilir.
Örneğin, bağlama yapılandırmanız kullanıcı tarafından atanan yönetilen kimlikle belirtiliyorsa connection = "EventHubConnection" aşağıdaki uygulama ayarlarını yapılandırabilirsiniz:
{
"EventHubConnection__fullyQualifiedNamespace": "myeventhubns.servicebus.windows.net",
"EventHubConnection__credential": "managedidentity",
"EventHubConnection__clientId": "00000000-0000-0000-0000-000000000000"
}
Tavsiye
Birden çok kaynakta kimlik izinleri üzerinde ayrıntılı denetime ihtiyacınız olan üretim senaryoları için kullanıcı tarafından atanan yönetilen kimlikleri kullanın.
Bağlantıyı daha fazla özelleştirmek için şablondaki ek ayarları kullanabilirsiniz. Bkz. Kimlik tabanlı bağlantılar için ortak özellikler.
Not
Yönetilen Kimlik bağlantılarının ayarlarını sağlamak için Azure Uygulama Yapılandırması veya Key Vault kullanırken, adların doğru çözümlendiğinden emin olmak için adların doğru çözümlendiğinden emin olmak için : yerine / veya __ gibi geçerli bir anahtar ayırıcısı kullanılmalıdır.
Örneğin: EventHubConnection:fullyQualifiedNamespace
Azure İşlevleri hizmetinde barındırıldığında, kimlik tabanlı bağlantılar managed identity kullanır. Ve özellikleriyle credentialclientID 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 hizmet için bu, bu izinleri sağlayan yerleşik veya özel rolleri kullanarak Azure RBAC
Ö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 olay hub'ınıza erişim sağlayan bir rol ataması oluşturmanız gerekir. Rol atamasının kapsamı bir Event Hubs ad alanı veya olay hub'ının kendisi için olabilir. 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 |
|---|---|
| Tetikleyici | Azure Event Hubs Veri Alıcısı, Azure Event Hubs Veri Sahibi |
| Çıkış bağlaması | Azure Event Hubs Veri Gönderen |
Özel durumlar ve dönüş kodları
| Bağlama | Başvuru |
|---|---|
| Event Hubs | İşlemler Kılavuzu |