

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
<a name="eb-custom-bus-subscribers"></a>

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 fallisce`ConcurrentModificationException`; riprova. Le tariffe di creazione ed eliminazione si applicano [Quote personalizzate per gli Event Bus](eb-quota.md#eb-custom-bus-quotas) quindi per bus.

## Filtrare quali eventi raggiungono l'obiettivo
<a name="eb-custom-bus-subscribers-filter"></a>

`FilterConfiguration`contiene un elenco di. `Filters` Ogni filtro ha una sintassi`Pattern`, in EventBridge event pattern, e una`Scope`. È 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 in[Struttura degli eventi: dati, metadati e metadati di sistema](eb-custom-bus-addressing.md).
+ `METADATA`: corrisponde alle coppie chiave-valore con cui un set di produzione è impostato`PutRawEvents`, 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, vedi[Filtrare gli eventi per un abbonato](eb-custom-bus-filtering.md).

## Trasformazione del payload
<a name="eb-custom-bus-subscribers-transform"></a>

`Transformer.Type`seleziona ciò che riceve il bersaglio. Un bersaglio universale non lo usa; vedi[Obiettivi universali per un bus eventi personalizzato](eb-custom-bus-universal-targets.md).
+ `RAW`, l'impostazione predefinita. Solo il payload.
+ `WITH_METADATA`. L'evento completo:`Data`,`Metadata`, e`SystemMetadata`.
+ `JSONATA`. Il risultato dell'espressione JSonata in`JsonataConfiguration.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, consultate[Trasformare gli eventi con JSonata](eb-custom-bus-transform.md).

## Consegnare a un obiettivo
<a name="eb-custom-bus-subscribers-deliver"></a>

`InvokeConfiguration`contiene il`TargetArn`, 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](eb-custom-bus-targets.md)


| Target | Blocco di parametri | 
| --- | --- | 
| Coda Amazon SQS | SqsParameters | 
| funzione Lambda | LambdaParameters | 
| Flusso di Kinesis | KinesisParameters | 
| Macchina a stati di Step Functions | StepFunctionsParameters | 
| Argomento Amazon SNS | SnsParameters | 
| Endpoint HTTP o destinazione API | HttpParameters | 
| Flusso Firehose | FirehoseParameters | 

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 esempio`SqsParameters.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 forma`arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}`, ad esempio`arn: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](eb-custom-bus-universal-targets.md)

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
<a name="eb-custom-bus-subscribers-retry"></a>

`RetryPolicy`imposta 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](eb-custom-bus-retry.md)

## Il ruolo di consegna
<a name="eb-custom-bus-subscribers-role"></a>

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:SendMessage`in 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
<a name="eb-custom-bus-subscribers-example"></a>

Il comando seguente crea un abbonato che consegna gli ordini superiori a 500 a una coda Amazon SQS, per gli eventi pubblicati con`PutEvents`, 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
<a name="eb-custom-bus-subscribers-nothing-arrived"></a>

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. `TargetInvocations`ti 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. `TargetInvocations`Se 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. `State`deve 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
   ```

1. Leggi le metriche dell'abbonato in. `AWS/EventsV2` `FilterEvaluated`pari 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` `FilterEvaluated`superiore `FilterMatched` a zero con zero significa che il filtro non corrisponde a nulla; vedi. [Struttura degli eventi: dati, metadati e metadati di sistema](eb-custom-bus-addressing.md) 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`

1. Attiva i log e riproduci. Imposta su `INFO` e `LogConfiguration.Level` `IncludePayload` verso`FULL`, invia un registro, pubblica nuovamente e leggi i `EVENT_DELIVERY_ATTEMPT` record. Ciascuno contiene il codice di errore e il messaggio del destinatario`details.target_input`, ovvero ciò che è EventBridge stato inviato anziché ciò che intendevi inviare. Consulta [Osservabilità per il Custom Event Bus: metriche, registri e CloudTrail](eb-custom-bus-observability.md).

1. 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, come`Data`, 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.