Azure Event Grid klientbibliotek för Python – version 4.16.0
Azure Event Grid är en fullständigt hanterad smart händelsedirigeringstjänst för enhetlig händelsebearbetning med en offentlig prenumerationsmodell.
Källkod | Paket (PyPI) | Paket (Conda) | API-referensdokumentation | Produktdokumentation | Prover | Ändringsloggen
Komma igång
Förutsättningar
- Python 3.7 eller senare krävs för att använda det här paketet.
- Du måste ha en Azure-prenumeration och en Event Grid Topic-resurs för att kunna använda det här paketet. Följ den här stegvisa självstudien för att registrera Event Grid-resursprovidern och skapa Event Grid-ämnen med hjälp av Azure Portal. Det finns en liknande självstudie med Hjälp av Azure CLI.
Installera paketet
Installera Azure Event Grid-klientbiblioteket för Python med pip:
pip install azure-eventgrid
- Ett befintligt Event Grid-ämne eller en befintlig domän krävs. Du kan skapa resursen med hjälp av Azure-portalen eller Azure CLI
Om du använder Azure CLI ersätter <resource-group-name>
du och <resource-name>
med dina egna unika namn.
Skapa ett Event Grid-ämne
az eventgrid topic --create --location <location> --resource-group <resource-group-name> --name <resource-name>
Skapa en Event Grid-domän
az eventgrid domain --create --location <location> --resource-group <resource-group-name> --name <resource-name>
Autentisera klienten
För att kunna interagera med Event Grid-tjänsten måste du skapa en instans av en klient. En slutpunkt och autentiseringsuppgifter krävs för att instansiera klientobjektet.
Använda Azure Active Directory (AAD)
Azure Event Grid tillhandahåller integrering med Azure Active Directory (Azure AD) för identitetsbaserad autentisering av begäranden. Med Azure AD kan du använda rollbaserad åtkomstkontroll (RBAC) för att ge åtkomst till dina Azure Event Grid resurser till användare, grupper eller program.
Om du vill skicka händelser till ett ämne eller en domän med en TokenCredential
ska den autentiserade identiteten ha rollen "EventGrid Data Sender" tilldelad.
Med paketet azure-identity
kan du smidigt auktorisera begäranden i både utvecklings- och produktionsmiljöer. Mer information om Azure Active Directory finns i azure-identity
README.
Du kan till exempel använda DefaultAzureCredential
för att skapa en klient som ska autentisera med Hjälp av Azure Active Directory:
from azure.identity import DefaultAzureCredential
from azure.eventgrid import EventGridPublisherClient, EventGridEvent
default_az_credential = DefaultAzureCredential()
endpoint = os.environ["EVENTGRID_TOPIC_ENDPOINT"]
client = EventGridPublisherClient(endpoint, default_az_credential)
Leta upp slutpunkten
Du hittar ämnesslutpunkten i Event Grid Topic-resursen på Azure Portal. Det här ser ut så här: "https://<event-grid-topic-name>.<topic-location>.eventgrid.azure.net/api/events"
Skapa klienten med AzureKeyCredential
Om du vill använda en åtkomstnyckel som credential
parameter skickar du nyckeln som en sträng till en instans av AzureKeyCredential.
Observera: Åtkomstnyckeln finns på Azure-portalen på menyn "Åtkomstnycklar" i Event Grid-ämnesresursen. De kan också hämtas via azure CLI eller
azure-mgmt-eventgrid
biblioteket. En guide för att hämta åtkomstnycklar finns här.
import os
from azure.eventgrid import EventGridPublisherClient
from azure.core.credentials import AzureKeyCredential
topic_key = os.environ["EVENTGRID_TOPIC_KEY"]
endpoint = os.environ["EVENTGRID_TOPIC_ENDPOINT"]
credential_key = AzureKeyCredential(topic_key)
client = EventGridPublisherClient(endpoint, credential_key)
Observera: En klient kan också autentiseras via SAS-signatur med hjälp av
AzureSasCredential
. Ett exempel som visar detta finns här (async_version).
Observera: Metoden
generate_sas
kan användas för att generera en signatur för delad åtkomst. Ett exempel som visar detta visas här.
Viktiga begrepp
Avsnitt
Ett ämne är en kanal i EventGrid-tjänsten för att skicka händelser. Händelseschemat som ett ämne accepterar bestäms när ämnet skapas. Om händelser av en schematyp skickas till ett ämne som kräver en annan schematyp utlöses fel.
Domain
En händelsedomän är ett hanteringsverktyg för ett stort antal Event Grid-ämnen relaterade till samma program. De gör att du kan publicera händelser i tusentals ämnen. Domäner ger dig också auktorisering och autentiseringskontroll över varje ämne. Mer information finns i Översikt över händelsedomäner.
När du skapar en händelsedomän görs en publiceringsslutpunkt för den här domänen tillgänglig för dig. Den här processen liknar att skapa ett Event Grid-ämne. Den enda skillnaden är att när du publicerar till en domän måste du ange ämnet i domänen som du vill att händelsen ska levereras till.
Händelsescheman
En händelse är den minsta mängd information som helt beskriver något som hände i systemet. När ett anpassat ämne eller en domän skapas måste du ange det schema som ska användas vid publicering av händelser.
Event Grid stöder flera scheman för kodning av händelser.
Event Grid-schema
Du kan konfigurera ämnet så att det använder ett anpassat schema, men det är vanligare att använda det redan definierade Event Grid-schemat. Se specifikationerna och kraven här.
CloudEvents v1.0-schema
Ett annat alternativ är att använda CloudEvents v1.0-schemat. CloudEvents är ett Cloud Native Computing Foundation-projekt som skapar en specifikation för att beskriva händelsedata på ett vanligt sätt. Tjänstsammanfattningen för CloudEvents finns här.
EventGridPublisherClient
EventGridPublisherClient
tillhandahåller åtgärder för att skicka händelsedata till ett ämnesvärdnamn som anges under klientinitieringen.
Oavsett vilket schema som ämnet eller domänen har konfigurerats att använda EventGridPublisherClient
används för att publicera händelser till det. Använd metodpubliceringshändelserna send
.
Följande format för händelser kan skickas:
En lista eller en enda instans av starkt skrivna EventGridEvents.
En diktamensrepresentation av ett serialiserat EventGridEvent-objekt.
En lista eller en enda instans av starkt skrivna CloudEvents.
En diktamensrepresentation av ett serialiserat CloudEvent-objekt.
En diktamensrepresentation av alla anpassade scheman.
Ta en titt på exemplen för detaljerade exempel.
Observera: Det är viktigt att veta om ditt ämne stöder CloudEvents eller EventGridEvents innan du publicerar. Om du skickar till ett ämne som inte stöder schemat för händelsen som du skickar utlöser send() ett undantag.
Systemämnen
Ett systemämne i Event Grid representerar en eller flera händelser som publicerats av Azure-tjänster som Azure Storage eller Azure Event Hubs. Ett systemämne kan till exempel representera alla blobhändelser eller endast händelser för skapande av blobar och borttagning av blobar som publicerats för ett specifikt lagringskonto.
Namnen på de olika händelsetyperna för de systemhändelser som publiceras till Azure Event Grid är tillgängliga i azure.eventgrid.SystemEventNames
.
En fullständig lista över identifierbara systemämnen finns i Systemämnen.
Mer information om viktiga begrepp i Event Grid finns i Begrepp i Azure Event Grid.
Event Grid på Kubernetes med Azure Arc
Event Grid på Kubernetes med Azure Arc är ett erbjudande som gör att du kan köra Event Grid på ditt eget Kubernetes-kluster. Den här funktionen aktiveras med hjälp av Azure Arc-aktiverade Kubernetes. Via Azure Arc-aktiverade Kubernetes ansluter ett Kubernetes-kluster som stöds till Azure. När du är ansluten kan du installera Event Grid på det. Läs mer om den här.
Stöd för CNCF-molnhändelser
Från och med v4.7.0 stöder det här paketet även publicering av en CNCF-molnhändelse från https://pypi.org/project/cloudevents/. Du skulle kunna skicka ett CloudEvent-objekt från det här biblioteket till API:et send
.
from cloudevents.http import CloudEvent
event = CloudEvent(...)
client.send(event)
Exempel
Följande avsnitt innehåller flera kodfragment som täcker några av de vanligaste Event Grid-uppgifterna, inklusive:
- Skicka en Event Grid-händelse
- Skicka en molnhändelse
- Skicka flera händelser
- Skicka händelser som ordlistor
- Använda en nyttolast från lagringskö
- Använda från ServiceBus
Skicka en Event Grid-händelse
Det här exemplet publicerar en Event Grid-händelse.
import os
from azure.core.credentials import AzureKeyCredential
from azure.eventgrid import EventGridPublisherClient, EventGridEvent
key = os.environ["EG_ACCESS_KEY"]
endpoint = os.environ["EG_TOPIC_HOSTNAME"]
event = EventGridEvent(
data={"team": "azure-sdk"},
subject="Door1",
event_type="Azure.Sdk.Demo",
data_version="2.0"
)
credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)
client.send(event)
Skicka en molnhändelse
I det här exemplet publiceras en molnhändelse.
import os
from azure.core.credentials import AzureKeyCredential
from azure.core.messaging import CloudEvent
from azure.eventgrid import EventGridPublisherClient
key = os.environ["CLOUD_ACCESS_KEY"]
endpoint = os.environ["CLOUD_TOPIC_HOSTNAME"]
event = CloudEvent(
type="Azure.Sdk.Sample",
source="https://egsample.dev/sampleevent",
data={"team": "azure-sdk"}
)
credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)
client.send(event)
Skicka flera händelser
Det är möjligt att skicka händelser som en batch när du skickar flera händelser till ett ämne eller en domän. Det här exemplet skickar en lista över CloudEvents med hjälp av send-metoden.
VARNING: När du skickar en lista över flera händelser samtidigt resulterar iterering över och sändning av varje händelse inte i optimala prestanda. För bästa prestanda rekommenderar vi starkt att du skickar en lista över händelser.
import os
from azure.core.credentials import AzureKeyCredential
from azure.core.messaging import CloudEvent
from azure.eventgrid import EventGridPublisherClient
key = os.environ["CLOUD_ACCESS_KEY"]
endpoint = os.environ["CLOUD_TOPIC_HOSTNAME"]
event0 = CloudEvent(
type="Azure.Sdk.Sample",
source="https://egsample.dev/sampleevent",
data={"team": "azure-sdk"}
)
event1 = CloudEvent(
type="Azure.Sdk.Sample",
source="https://egsample.dev/sampleevent",
data={"team2": "azure-eventgrid"}
)
events = [event0, event1]
credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)
client.send(events)
Skicka händelser som ordlistor
En dikteringsrepresentation av respektive serialiserade modeller kan också användas för att publicera CloudEvent(er) eller EventGridEvent(er) förutom de starkt typifierade objekten.
Använd en dict-liknande representation för att skicka till ett ämne med anpassat schema enligt nedan.
import os
import uuid
import datetime as dt
from msrest.serialization import UTC
from azure.core.credentials import AzureKeyCredential
from azure.eventgrid import EventGridPublisherClient
key = os.environ["CUSTOM_SCHEMA_ACCESS_KEY"]
endpoint = os.environ["CUSTOM_SCHEMA_TOPIC_HOSTNAME"]
event = custom_schema_event = {
"customSubject": "sample",
"customEventType": "sample.event",
"customDataVersion": "2.0",
"customId": uuid.uuid4(),
"customEventTime": dt.datetime.now(UTC()).isoformat(),
"customData": "sample data"
}
credential = AzureKeyCredential(key)
client = EventGridPublisherClient(endpoint, credential)
client.send(event)
Använda från lagringskö
Det här exemplet använder ett meddelande som tas emot från lagringskö och deserialiserar det till ett CloudEvent-objekt.
from azure.core.messaging import CloudEvent
from azure.storage.queue import QueueServiceClient, BinaryBase64DecodePolicy
import os
import json
# all types of CloudEvents below produce same DeserializedEvent
connection_str = os.environ['STORAGE_QUEUE_CONN_STR']
queue_name = os.environ['STORAGE_QUEUE_NAME']
with QueueServiceClient.from_connection_string(connection_str) as qsc:
payload = qsc.get_queue_client(
queue=queue_name,
message_decode_policy=BinaryBase64DecodePolicy()
).peek_messages()
## deserialize payload into a list of typed Events
events = [CloudEvent.from_dict(json.loads(msg.content)) for msg in payload]
Använda från servicebus
Det här exemplet använder ett nyttolastmeddelande som tas emot från ServiceBus och deserialiserar det till ett EventGridEvent-objekt.
from azure.eventgrid import EventGridEvent
from azure.servicebus import ServiceBusClient
import os
import json
# all types of EventGridEvents below produce same DeserializedEvent
connection_str = os.environ['SERVICE_BUS_CONN_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connection_str) as sb_client:
payload = sb_client.get_queue_receiver(queue_name).receive_messages()
## deserialize payload into a list of typed Events
events = [EventGridEvent.from_dict(json.loads(next(msg.body).decode('utf-8'))) for msg in payload]
Distribuerad spårning med EventGrid
Du kan använda OpenTelemetry för Python som vanligt med EventGrid eftersom det är kompatibelt med azure-core-spårningsintegrering.
Här är ett exempel på hur du använder OpenTelemetry för att spåra sändning av en CloudEvent.
Ange först OpenTelemetry som aktiverat spårningsplugin för EventGrid.
from azure.core.settings import settings
from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan
settings.tracing_implementation = OpenTelemetrySpan
Regelbunden användning av öppen telemetri härifrån. Mer information finns i OpenTelemetry .
I det här exemplet används en enkel konsolexportör för att exportera spårningarna. Alla exportörer kan användas här, inklusive azure-monitor-opentelemetry-exporter
, jaeger
osv zipkin
.
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
from opentelemetry.sdk.trace.export import SimpleSpanProcessor # this requires opentelemetry >= 1.0.0
# Simple console exporter
exporter = ConsoleSpanExporter()
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
trace.get_tracer_provider().add_span_processor(
SimpleSpanProcessor(exporter)
)
tracer
När och exporter
har angetts följer du exemplet nedan för att börja samla in spårningar när du använder send
metoden från EventGridPublisherClient
för att skicka ett CloudEvent-objekt.
import os
from azure.eventgrid import EventGridPublisherClient
from azure.core.messaging import CloudEvent
from azure.core.credentials import AzureKeyCredential
hostname = os.environ['CLOUD_TOPIC_HOSTNAME']
key = AzureKeyCredential(os.environ['CLOUD_ACCESS_KEY'])
cloud_event = CloudEvent(
source = 'demo',
type = 'sdk.demo',
data = {'test': 'hello'},
)
with tracer.start_as_current_span(name="MyApplication"):
client = EventGridPublisherClient(hostname, key)
client.send(cloud_event)
Felsökning
- Aktivera
azure.eventgrid
loggning för att samla in spårningar från biblioteket.
Allmänt
Event Grid-klientbiblioteket genererar undantag som definierats i Azure Core.
Loggning
Det här biblioteket använder standardloggningsbiblioteket för loggning. Grundläggande information om HTTP-sessioner (URL:er, rubriker osv.) loggas på INFO-nivå.
Valfri konfiguration
Valfria nyckelordsargument kan skickas in på klient- och åtgärdsnivå. Referensdokumentationen för azure-core beskriver tillgängliga konfigurationer för återförsök, loggning, transportprotokoll med mera.
Nästa steg
Följande avsnitt innehåller flera kodfragment som illustrerar vanliga mönster som används i Event Grid Python-API:et.
Mer exempelkod
Dessa kodexempel visar vanliga champion-scenarioåtgärder med Azure Event Grid-klientbiblioteket.
Generera signatur för delad åtkomst: sample_generate_sas.py
Autentisera klienten: sample_authentication.py (async_version)
Publicera händelser till ett ämne med hjälp av SAS: sample_publish_events_to_a_topic_using_sas_credential_async.py (async_version)
Publicera Event Grid-händelser till ett ämne: sample_publish_eg_events_to_a_topic.py (async_version)
Publicera EventGrid-händelser till ett domänämne: sample_publish_eg_events_to_a_domain_topic.py (async_version)
Publicera en molnhändelse: sample_publish_events_using_cloud_events_1.0_schema.py (async_version)
Publicera ett anpassat schema: sample_publish_custom_schema_to_a_topic.py (async_version)
Följande exempel beskriver publicering och användning dict
av representationer av EventGridEvents och CloudEvents.
Publicera EventGridEvent som diktamen som en representation: sample_publish_eg_event_using_dict.py (async_version)
Publicera CloudEvent som diktamen som en representation: sample_publish_cloud_event_using_dict.py (async_version)
Använda en anpassad nyttolast med råa cloudevent-data: sample_consume_custom_payload.py
Fler exempel finns här.
- Fler exempel som rör sändningsscenariot visas här.
- Om du vill se fler exempel som rör användning av en nyttolast från olika meddelandetjänster som ett skrivet objekt kan du gå till Använda exempel
Ytterligare dokumentation
Mer omfattande dokumentation om Azure Event Grid finns i Event Grid-dokumentationen på docs.microsoft.com.
Bidra
Det här projektet välkomnar bidrag och förslag. Merparten av bidragen kräver att du godkänner ett licensavtal för bidrag, där du deklarerar att du har behörighet att bevilja oss rättigheten att använda ditt bidrag, och att du dessutom uttryckligen gör så. Mer information finns i cla.microsoft.com.
När du skickar en pull-förfrågan avgör en CLA-robot automatiskt om du måste tillhandahålla ett licensavtal för bidrag med lämplig PR (t.ex. etikett eller kommentar). Följ bara robotens anvisningar. Du behöver bara göra detta en gång för alla repor som använder vårt licensavtal för bidrag.
Det här projektet använder sig av Microsofts uppförandekod för öppen källkod. Mer information finns i Vanliga frågor och svar om uppförandekoden eller kontakta opencode@microsoft.com med ytterligare frågor eller kommentarer.
Azure SDK for Python
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för