Griglia di eventi di Azure libreria client per Python - versione 4.16.0
Griglia di eventi di Azure è un servizio di routing di eventi intelligente completamente gestito che consente un uso degli eventi uniforme tramite un modello di pubblicazione-sottoscrizione.
Codice | sorgentePacchetto (PyPI) | Pacchetto (Conda) | Documentazione di | riferimento sulle APIDocumentazione | del prodottoCampioni | Changelog
Introduzione
Prerequisiti
- Python 3.7 o versione successiva è necessario per usare questo pacchetto.
- Per usare questo pacchetto, è necessario disporre di una sottoscrizione di Azure e di una risorsa Argomento griglia di eventi. Seguire questa esercitazione dettagliata per registrare il provider di risorse griglia di eventi e creare argomenti di Griglia di eventi usando la portale di Azure. È disponibile un'esercitazione simile con l'interfaccia della riga di comando di Azure.
Installare il pacchetto
Installare la libreria client Griglia di eventi di Azure per Python con pip:
pip install azure-eventgrid
- È necessario un argomento o un dominio di Griglia di eventi esistente. È possibile creare la risorsa usando il portale di Azure o l'interfaccia della riga di comando di Azure
Se si usa l'interfaccia della riga di comando di Azure, sostituire <resource-group-name>
e <resource-name>
con i propri nomi univoci.
Creare un argomento di Griglia di eventi
az eventgrid topic --create --location <location> --resource-group <resource-group-name> --name <resource-name>
Creare un dominio di Griglia di eventi
az eventgrid domain --create --location <location> --resource-group <resource-group-name> --name <resource-name>
Autenticare il client
Per interagire con il servizio Griglia di eventi, è necessario creare un'istanza di un client. Un endpoint e le credenziali sono necessari per creare un'istanza dell'oggetto client.
Uso di Azure Active Directory (AAD)
Griglia di eventi di Azure fornisce l'integrazione con Azure Active Directory (Azure AD) per l'autenticazione basata su identità delle richieste. Con Azure AD è possibile usare il controllo degli accessi in base al ruolo per concedere l'accesso alle risorse Griglia di eventi di Azure agli utenti, ai gruppi o alle applicazioni.
Per inviare eventi a un argomento o a un dominio con , TokenCredential
l'identità autenticata deve avere il ruolo "Mittente dati EventGrid" assegnato.
Con il azure-identity
pacchetto è possibile autorizzare facilmente le richieste in ambienti di sviluppo e produzione. Per altre informazioni su Azure Active Directory, vedere azure-identity
README.
Ad esempio, è possibile usare DefaultAzureCredential
per costruire un client che eseguirà l'autenticazione usando 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)
Ricerca dell'endpoint
È possibile trovare l'endpoint dell'argomento nella risorsa Argomento griglia di eventi nella portale di Azure. Questo aspetto sarà simile al seguente: "https://<event-grid-topic-name>.<topic-location>.eventgrid.azure.net/api/events"
Creare il client con AzureKeyCredential
Per usare una chiave di accesso come credential
parametro, passare la chiave come stringa in un'istanza di AzureKeyCredential.
Nota: La chiave di accesso può essere trovata nel portale di Azure nel menu "Chiavi di accesso" della risorsa Argomento griglia di eventi. Possono anche essere ottenuti tramite l'interfaccia della riga di comando di Azure o la
azure-mgmt-eventgrid
libreria. Una guida per ottenere le chiavi di accesso è disponibile qui.
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)
Nota: Un client può anche essere autenticato tramite firma di firma di accesso condiviso usando l'oggetto
AzureSasCredential
. Un esempio che illustra questo, è disponibile qui (async_version).
Nota: Il
generate_sas
metodo può essere usato per generare una firma di accesso condiviso. Un esempio che illustra questa operazione può essere vista qui.
Concetti chiave
Argomento
Un argomento è un canale all'interno del servizio EventGrid per inviare eventi. Lo schema dell'evento accettato da un argomento viene deciso in fase di creazione dell'argomento. Se gli eventi di un tipo di schema vengono inviati a un argomento che richiede un tipo di schema diverso, verranno generati errori.
Dominio
Un dominio di eventi è uno strumento di gestione per un numero elevato di argomenti di Griglia di eventi correlati alla stessa applicazione. Consentono di pubblicare eventi in migliaia di argomenti. I domini forniscono anche l'autorizzazione e il controllo di autenticazione su ogni argomento. Per altre informazioni, visitare Panoramica del dominio eventi.
Quando si crea un dominio di eventi, viene reso disponibile un endpoint di pubblicazione per questo dominio. Questo processo è simile alla creazione di un argomento griglia di eventi. L'unica differenza è che, quando si pubblica in un dominio, è necessario specificare l'argomento all'interno del dominio a cui si vuole che l'evento venga recapitato.
Schemi degli eventi
Un evento è la quantità più piccola di informazioni che descrive completamente qualcosa che è successo nel sistema. Quando viene creato un argomento o un dominio personalizzato, è necessario specificare lo schema che verrà usato durante la pubblicazione di eventi.
Griglia di eventi supporta più schemi per gli eventi di codifica.
Schema di Griglia di eventi
Anche se è possibile configurare l'argomento per usare uno schema personalizzato, è più comune usare lo schema griglia di eventi già definito. Vedere le specifiche e i requisiti qui.
Schema CloudEvents v1.0
Un'altra opzione consiste nell'usare lo schema CloudEvents v1.0. CloudEvents è un progetto Cloud Native Computing Foundation che produce una specifica per descrivere i dati degli eventi in modo comune. Il riepilogo del servizio di CloudEvents è disponibile qui.
EventGridPublisherClient
EventGridPublisherClient
fornisce operazioni per inviare i dati dell'evento a un nome host dell'argomento specificato durante l'inizializzazione client.
Indipendentemente dallo schema configurato per l'uso dell'argomento o del dominio, EventGridPublisherClient
verrà usato per pubblicare gli eventi. Usare gli eventi di pubblicazione dei send
metodi.
I formati seguenti di eventi possono essere inviati:
Elenco o una singola istanza di EventGridEvents fortemente tipizzata.
Rappresentazione dict di un oggetto EventGridEvent serializzato.
Elenco o una singola istanza di CloudEvents fortemente tipizzata.
Rappresentazione dict di un oggetto CloudEvent serializzato.
Rappresentazione dict di qualsiasi schema personalizzato.
Per esempi dettagliati, vedere gli esempi .
Nota: È importante sapere se l'argomento supporta CloudEvents o EventGridEvents prima della pubblicazione. Se si invia a un argomento che non supporta lo schema dell'evento inviato, send() genererà un'eccezione.
Argomenti di sistema
Un argomento di sistema in Griglia di eventi rappresenta uno o più eventi pubblicati dai servizi di Azure, ad esempio Archiviazione di Azure o Hub eventi di Azure. Ad esempio, un argomento di sistema può rappresentare tutti gli eventi BLOB o solo gli eventi di creazione e eliminazione BLOB pubblicati per un account di archiviazione specifico.
I nomi dei vari tipi di evento per gli eventi di sistema pubblicati in Griglia di eventi di Azure sono disponibili in azure.eventgrid.SystemEventNames
.
Per un elenco completo degli argomenti di sistema riconoscibili, visitare Argomenti di sistema.
Per altre informazioni sui concetti chiave di Griglia di eventi, vedere Concetti in Griglia di eventi di Azure.
Griglia di eventi in Kubernetes con Azure Arc
Griglia di eventi in Kubernetes con Azure Arc è un'offerta che consente di eseguire Griglia di eventi nel cluster Kubernetes. Questa funzionalità è abilitata dall'uso di Kubernetes abilitato per Azure Arc. Tramite Kubernetes abilitato per Azure Arc, un cluster Kubernetes supportato si connette ad Azure. Dopo la connessione, è possibile installare Griglia di eventi in esso. Per altre informazioni, vedere qui.
Supporto per gli eventi cloud DI CNF
A partire da v4.7.0, questo pacchetto supporta anche la pubblicazione di un evento cloud CNCF da https://pypi.org/project/cloudevents/. È possibile passare un oggetto CloudEvent da questa libreria all'API send
.
from cloudevents.http import CloudEvent
event = CloudEvent(...)
client.send(event)
Esempio
Le sezioni seguenti forniscono diversi frammenti di codice che coprono alcune delle attività più comuni di Griglia di eventi, tra cui:
- Inviare un evento griglia di eventi
- Inviare un evento cloud
- Inviare più eventi
- Inviare eventi come dizionari
- Usare un payload dalla coda di archiviazione
- Utilizzo da ServiceBus
Inviare un evento griglia di eventi
In questo esempio viene pubblicato un evento Griglia di eventi.
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)
Inviare un evento cloud
In questo esempio viene pubblicato un evento Cloud.
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)
Inviare più eventi
È possibile inviare eventi come batch quando si inviano più eventi a un argomento o a un dominio. In questo esempio viene inviato un elenco di CloudEvents usando il metodo send.
AVVISO: Quando si invia un elenco di più eventi alla volta, l'iterazione e l'invio di ogni evento non comporta prestazioni ottimali. Per ottenere prestazioni ottimali, è consigliabile inviare un elenco di eventi.
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)
Inviare eventi come dizionari
Una rappresentazione dict dei rispettivi modelli serializzati può essere usata anche per pubblicare CloudEvent(s) o EventGridEvent(s) a parte gli oggetti fortemente tipizzati.
Usare una rappresentazione simile a ct per inviare a un argomento con schema personalizzato, come illustrato di seguito.
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)
Usare dalla coda di archiviazione
In questo esempio viene usato un messaggio ricevuto dalla coda di archiviazione e lo deserializza in un oggetto CloudEvent.
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]
Utilizzo dal bus di servizio
In questo esempio viene usato un messaggio di payload ricevuto da ServiceBus e lo deserializza in un oggetto EventGridEvent.
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]
Traccia distribuita con EventGrid
È possibile usare OpenTelemetry per Python come di consueto con EventGrid perché è compatibile con l'integrazione della traccia di azure-core.
Ecco un esempio di uso di OpenTelemetry per tracciare l'invio di un cloudEvent.
Impostare Prima di tutto OpenTelemetry come plug-in di traccia abilitato per EventGrid.
from azure.core.settings import settings
from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan
settings.tracing_implementation = OpenTelemetrySpan
Utilizzo regolare dei dati di telemetria aperti da qui. Per informazioni dettagliate , vedere OpenTelemetry .
In questo esempio viene usato un semplice esportazione della console per esportare le tracce. Qualsiasi esportatrice può essere usata qui, tra cui azure-monitor-opentelemetry-exporter
, jaeger
zipkin
e così via.
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)
)
Dopo aver impostato eexporter
, seguire l'esempio tracer
seguente per iniziare a raccogliere tracce durante l'uso del send
metodo da EventGridPublisherClient
per inviare un oggetto CloudEvent.
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)
Risoluzione dei problemi
- Abilitare
azure.eventgrid
logger per raccogliere tracce dalla libreria.
Generale
La libreria client griglia di eventi genererà eccezioni definite in Azure Core.
Registrazione
Questa libreria usa la libreria di registrazione standard per la registrazione. Le informazioni di base sulle sessioni HTTP (URL, intestazioni e così via) vengono registrate a livello di INFO.
Configurazione facoltativa
Gli argomenti delle parole chiave facoltativi possono essere passati al client e a livello di operazione. La documentazione di riferimento di azure-core descrive le configurazioni disponibili per tentativi, registrazione, protocolli di trasporto e altro ancora.
Passaggi successivi
La sezione seguente fornisce diversi frammenti di codice che illustrano i modelli comuni usati nell'API Python griglia di eventi.
Altro codice di esempio
Questi esempi di codice mostrano operazioni di scenario campione comuni con la libreria client Griglia di eventi di Azure.
Generare la firma di accesso condiviso: sample_generate_sas.py
Autenticare il client: sample_authentication.py (async_version)
Pubblicare eventi in un argomento usando la firma di accesso condiviso: sample_publish_events_to_a_topic_using_sas_credential_async.py (async_version)
Pubblicare eventi griglia di eventi in un argomento: sample_publish_eg_events_to_a_topic.py (async_version)
Pubblicare eventi EventGrid in un argomento di dominio: sample_publish_eg_events_to_a_domain_topic.py (async_version)
Pubblicare un evento cloud: sample_publish_events_using_cloud_events_1.0_schema.py (async_version)
Pubblicare uno schema personalizzato: sample_publish_custom_schema_to_a_topic.py (async_version)
Gli esempi seguenti illustrano la pubblicazione e l'utilizzo dict
di rappresentazioni di EventGridEvents e CloudEvents.
Pubblicare EventGridEvent come rappresentazione simile alla rappresentazione: sample_publish_eg_event_using_dict.py (async_version)
Pubblicare CloudEvent come rappresentazione simile alla rappresentazione: sample_publish_cloud_event_using_dict.py (async_version)
Usare un payload personalizzato di dati cloudevent non elaborati: sample_consume_custom_payload.py
Altri esempi sono disponibili qui.
- Altri esempi correlati allo scenario di invio possono essere visualizzati qui.
- Per visualizzare altri esempi relativi all'utilizzo di un payload da diversi servizi di messaggistica come oggetto tipizzato, vedere Usare esempi
Documentazione aggiuntiva
Per una documentazione più completa su Griglia di eventi di Azure, vedere la documentazione di Griglia di eventi su docs.microsoft.com.
Contributo
In questo progetto sono benvenuti i contributi e i suggerimenti. Per la maggior parte dei contenuti è necessario sottoscrivere un contratto di licenza di collaborazione (CLA, Contributor License Agreement) che stabilisce che l'utente ha il diritto di concedere, e di fatto concede a Microsoft i diritti d'uso del suo contributo. Per informazioni dettagliate, visitare cla.microsoft.com.
Quando si invia una richiesta pull, un bot CLA determina automaticamente se è necessario specificare un contratto CLA e completare la richiesta pull in modo appropriato (ad esempio con un'etichetta e un commento). Seguire le istruzioni specificate dal bot. È sufficiente eseguire questa operazione una sola volta per tutti i repository che usano il contratto CLA Microsoft.
Questo progetto ha adottato il Codice di comportamento di Microsoft per l'open source. Per altre informazioni, vedere Code of Conduct FAQ (Domande frequenti sul Codice di comportamento Open Source di Microsoft) oppure contattare opencode@microsoft.com per eventuali altre domande o commenti.
Azure SDK for Python