View a markdown version of this page

Iscrizione agli eventi su un Event Bus personalizzato - Amazon EventBridge

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Iscrizione agli eventi su un Event Bus personalizzato

Un abbonato è una risorsa che indica quali eventi desideri e dove inviarli. Lo crei con CreateSubscriber un nome al bus, ai filtri e a un obiettivo. Controlla quel bus, mantiene gli eventi che corrispondono ai suoi filtri, opzionalmente trasforma ciascuno di essi e lo consegna esattamente a un bersaglio. Per estendere un evento a più target, create un abbonato per ogni target sullo stesso bus.

EventBridge applica la creazione o l'eliminazione di un abbonato alla volta su un determinato bus, a seconda dell'account chiamato. Un secondo bus CreateSubscriber o DeleteSubscriber sullo stesso bus mentre uno è in corso fallisceConcurrentModificationException; riprova. Le tariffe di creazione ed eliminazione si applicano Quote personalizzate per gli Event Bus quindi per bus.

Filtrare quali eventi raggiungono l'obiettivo

FilterConfigurationcontiene un elenco di. Filters Ogni filtro ha una sintassiPattern, in EventBridge event pattern, e unaScope. È possibile avere al massimo un filtro per ambito e EventBridge genera un evento solo se corrisponde a tutti i filtri dell'elenco. Un abbonato senza un FilterConfiguration riceve tutti gli eventi sul bus.

  • DATA: corrisponde al payload. Scrivi il motivo sulla forma descritta inStruttura degli eventi: dati, metadati e metadati di sistema.

  • METADATA: corrisponde alle coppie chiave-valore con cui un set di produzione è impostatoPutRawEvents, solo corrispondenza esatta.

  • SYSTEM_METADATA: corrisponde ai EventBridge set di campi, ad esempio aws:Source o. EventGroupId

Per la sintassi del modello, le regole di ambito e gli esempi, vediFiltrare gli eventi per un abbonato.

Trasformazione del payload

Transformer.Typeseleziona ciò che riceve il bersaglio. Un bersaglio universale non lo usa; vediObiettivi universali per un bus eventi personalizzato.

  • RAW, l'impostazione predefinita. Solo il payload.

  • WITH_METADATA. L'evento completo:Data,Metadata, eSystemMetadata.

  • JSONATA. Il risultato dell'espressione JSonata inJsonataConfiguration.Expression, racchiuso in {% %} delimitatori, con l'evento disponibile come. $events

EventBridge verifica la sintassi di un'espressione al momento della creazione del sottoscrittore e la valuta al momento della consegna. Un'espressione che genera o non produce alcun valore non riesce a fornire quell'evento. Testa le espressioni rispetto a eventi reali prima di dipendere da essi. Per sapere cosa $events vale, le funzioni extra e i limiti, consultateTrasformare gli eventi con JSonata.

Consegnare a un obiettivo

InvokeConfigurationcontiene ilTargetArn, il RoleArn che EventBridge presuppone di richiamare il target e al massimo un blocco di parametri che corrisponde al tipo di destinazione. La maggior parte dei valori dei parametri accetta un'espressione JSonata, quindi un valore può derivare dall'evento. La tabella seguente elenca i tipi di target personalizzati e il relativo blocco di parametri; ognuno ha una propria pagina sotto. Obiettivi per un abbonato a Custom Event Bus

TargetBlocco di parametri
Coda Amazon SQSSqsParameters
funzione LambdaLambdaParameters
Flusso di KinesisKinesisParameters
Macchina a stati di Step FunctionsStepFunctionsParameters
Argomento Amazon SNSSnsParameters
Endpoint HTTP o destinazione APIHttpParameters
Flusso FirehoseFirehoseParameters

L'obiettivo può essere anche un Custom Event Bus o un Custom Event Bus - Classic: imposta l'ARN del bus come. TargetArn Per un target FIFO come una coda FIFO di Amazon SQS, imposta l'identificatore di deduplicazione del target nel blocco di parametri, ad esempioSqsParameters.MessageDeduplicationId, su un valore per messaggio derivato dall'evento con un'espressione JSONata. Una costante fa sì che il bersaglio scarti tutti i messaggi dopo il primo.

Un target universale richiama direttamente un'azione AWS API, senza alcuna funzione intermedia. Il suo ARN ha la formaarn:aws:events:::aws-sdk:service:apiAction, ad esempioarn:aws:events:::aws-sdk:dynamodb:putItem, e UniversalTargetParameters.Input contiene la richiesta come JSON o come espressione JSONata che la produce. Per le regole di denominazione, il batch e il comportamento in caso di errore, vedi. Obiettivi universali per un bus eventi personalizzato

Quando create il sottoscrittore, EventBridge risolve il tipo di destinazione dall'ARN e verifica tre elementi: che il blocco di parametri corrisponda al tipo di destinazione, che l'ARN appartenga al vostro account e che ogni espressione venga analizzata. Se il target esiste, se il ruolo può raggiungerlo e se l'API del target accetta i valori vengono verificati al momento della consegna, quindi confermate la prima consegna al target.

Ritentativi e code per le lettere morte

RetryPolicyimposta la durata EventBridge dei tentativi di consegna fallita, per impostazione predefinita 5 tentativi entro 300 secondi, e OnFailureConfiguration.Arn nomina la coda Amazon SQS che riceve un record per ogni evento che ha esaurito i tentativi. Imposta entrambi quando crei l'abbonato. Per i limiti, il formato di registrazione e le modalità di redrive, consulta. Criteri di riprova e code per lettere morte

Il ruolo di consegna

Il ruolo in RoleArn deve appartenere al tuo account e fidarsi del responsabile del events.amazonaws.com servizio. Il chiamante deve conoscere iam:PassRole il ruolo per creare l'abbonato oppure EventBridge rifiuta la richiesta prima di verificare l'ARN di destinazione. La politica delle autorizzazioni del ruolo richiede due concessioni.

  • L'azione richiesta dal target, ad esempio sqs:SendMessage su una coda, lambda:InvokeFunction su una funzione, su un argomento o sns:Publish kinesis:PutRecords su uno stream.

  • sqs:SendMessagein coda per le lettere morte. OnFailureConfiguration.Arn Senza di esso, una consegna fallita non ha nessun posto dove registrarsi e quegli eventi vengono persi senza alcun segnale.

La seguente politica di fiducia consente di EventBridge assumere il ruolo.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

La seguente politica di autorizzazioni reindirizza a una coda Amazon SQS e le lettere morte a una seconda coda.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InvokeTheTarget", "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders" }, { "Sid": "WriteToTheDeadLetterQueue", "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq" } ] }

Esempio: consegna di ordini di grandi dimensioni a una coda

Il comando seguente crea un abbonato che consegna gli ordini superiori a 500 a una coda Amazon SQS, per gli eventi pubblicati conPutEvents, e invia gli errori a una coda di lettere morte.

aws eventsv2 create-subscriber \ --name large-orders \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --filter-configuration '{ "Filters": [ { "Scope": "DATA", "Pattern": "{\"detail\":{\"total\":[{\"numeric\":[\">\",500]}]}}" } ] }' \ --invoke-configuration '{ "TargetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders", "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole" }' \ --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq" }'

Risoluzione dei problemi: hai pubblicato e nulla è arrivato a destinazione

Una risposta pubblicata dice solo che il bus ha accettato e memorizzato l'evento; non conferma mai la consegna. Esegui i seguenti controlli in ordine.

Caratteristiche

La chiamata di pubblicazione ha restituito HTTP 200 senza errori e la destinazione non ha ricevuto nulla dopo diversi minuti.

Causa

Una delle cinque cose, in ordine di frequenza: la consegna è ancora in fase di ritentativo; l'abbonato è STOPPED o è stato revocato; il nome dell'abbonato StartingPosition è LATEST e l'evento è stato pubblicato prima che il sottoscrittore esistesse; il filtro è stato scritto per l'altra API di pubblicazione e non corrisponde a nulla; oppure il ruolo di consegna non può raggiungere la destinazione o la coda delle lettere morte. TargetInvocationsti dice quale metà del problema hai. Se i dati sono accesi e nessuno è TargetInvocations acceso, le consegne sono state EventsDelivered tentate e non sono riuscite. TargetInvocationsSe nessun dato è attivo, significa che non FilterEvaluated è stato effettuato alcun tentativo di consegna; verifica che l'abbonato sia presente e controlla. RUNNING EventTransformationFailures

Soluzione
  1. Leggi l'abbonato. Statedeve essere RUNNING e Revoked deve essere assente; appare solo quando è vero. Nota StartingPosition e filtri.

    aws eventsv2 describe-subscriber \ --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLE1234567890abcdef
  2. Leggi le metriche dell'abbonato in. AWS/EventsV2 FilterEvaluatedpari a zero significa che nessun evento ha raggiunto questo abbonato: il produttore ha pubblicato su un altro bus o prima che l'abbonato esistesse. LATEST FilterEvaluatedsuperiore FilterMatched a zero con zero significa che il filtro non corrisponde a nulla; vedi. Struttura degli eventi: dati, metadati e metadati di sistema Se FilterMatched ha punti dati e non li ha, le consegne EventsDelivered non vanno a buon fine e la metrica che registra il risultato dipende dal sottoscrittore: EventsDropped quando non è configurata alcuna coda di lettere morte, quando l'evento ha raggiunto la coda e OnFailureDestinationDelivered quando no. OnFailureDestinationFailed

  3. Attiva i log e riproduci. Imposta su INFO e LogConfiguration.Level IncludePayload versoFULL, invia un registro, pubblica nuovamente e leggi i EVENT_DELIVERY_ATTEMPT record. Ciascuno contiene il codice di errore e il messaggio del destinatariodetails.target_input, ovvero ciò che è EventBridge stato inviato anziché ciò che intendevi inviare. Consulta Osservabilità per il Custom Event Bus: metriche, registri e CloudTrail.

  4. Se il filtro è il sospetto, aggiungete un destinatario diagnostico sullo stesso bus senza filtro e una coda di vostra proprietà come bersaglio. Transformer.Type WITH_METADATA Fornisce ogni evento esattamente come lo EventBridge vede, comeData, e. Metadata SystemMetadata Quindi semplifica il filtro una condizione alla volta; l'ultima condizione che rimuovi è la causa.

Verifica

Pubblica un evento che dovrebbe corrispondere e uno che non dovrebbe. Il primo arriva all'obiettivo e EventsDelivered incrementa di uno; il secondo non arriva e FilterEvaluated incrementa mentre non FilterMatched lo fa.

Nota

Le metriche di un abbonato sono disponibili al proprietario dell'autobus e al proprietario dell'abbonato; i relativi registri vengono consegnati solo al proprietario dell'abbonato.