

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Inscrever-se em eventos em um ônibus de eventos personalizado
<a name="eb-custom-bus-subscribers"></a>

Um assinante é um recurso que diz quais eventos você deseja e para onde enviá-los. Você o cria com`CreateSubscriber`, nomeando o ônibus, os filtros e um alvo. Ele observa aquele ônibus, guarda os eventos que correspondem aos seus filtros, transforma opcionalmente cada um deles e o entrega exatamente a um alvo. Para distribuir um evento para vários destinos, crie um assinante para cada alvo no mesmo ônibus.

EventBridge aplica uma criação ou exclusão de um assinante por vez em um determinado ônibus, qualquer que seja a conta que ligar. Um segundo `CreateSubscriber` ou `DeleteSubscriber` no mesmo ônibus enquanto um está em andamento falha com`ConcurrentModificationException`; tente novamente. [Cotas personalizadas do Event Bus](eb-quota.md#eb-custom-bus-quotas)Portanto, as tarifas de criação e exclusão são aplicadas por ônibus.

## Filtrando quais eventos atingem o alvo
<a name="eb-custom-bus-subscribers-filter"></a>

`FilterConfiguration`contém uma lista de`Filters`. Cada filtro tem uma `Pattern` sintaxe de padrão de EventBridge eventos e uma`Scope`. Você pode ter no máximo um filtro por escopo e EventBridge entregar um evento somente se ele corresponder a todos os filtros da lista. Um assinante sem um `FilterConfiguration` recebe todos os eventos no ônibus.
+ `DATA`: corresponde à carga útil. Escreva o padrão contra a forma descrita em[Estrutura do evento: dados, metadados e metadados do sistema](eb-custom-bus-addressing.md).
+ `METADATA`: corresponde aos pares de valores-chave com os quais um produtor definiu`PutRawEvents`, somente correspondência exata.
+ `SYSTEM_METADATA`: corresponde aos EventBridge conjuntos de campos, como `aws:Source` ou`EventGroupId`.

Para obter a sintaxe do padrão, as regras de escopo e os exemplos, consulte[Filtrando eventos para um assinante](eb-custom-bus-filtering.md).

## Transformando a carga útil
<a name="eb-custom-bus-subscribers-transform"></a>

`Transformer.Type`seleciona o que o alvo recebe. Um alvo universal não o usa; veja[Alvos universais para um barramento de eventos personalizado](eb-custom-bus-universal-targets.md).
+ `RAW`, o padrão. Somente a carga útil.
+ `WITH_METADATA`. O evento completo: `Data``Metadata`,, `SystemMetadata` e.
+ `JSONATA`. O resultado da expressão JSOnata em`JsonataConfiguration.Expression`, agrupada em `{% %}` delimitadores, com o evento disponível como. `$events`

EventBridge verifica a sintaxe de uma expressão ao criar o assinante e a avalia no momento da entrega. Uma expressão que gera, ou que não produz nenhum valor, falha na entrega desse evento. Teste expressões em relação a eventos reais antes de depender delas. Para saber o que `$events` vale, as funções extras e os limites, consulte[Transformando eventos com JSonata](eb-custom-bus-transform.md).

## Entregando para um alvo
<a name="eb-custom-bus-subscribers-deliver"></a>

`InvokeConfiguration`carrega o`TargetArn`, o `RoleArn` que EventBridge presume invocar o alvo e, no máximo, um bloco de parâmetros que corresponda ao tipo de alvo. A maioria dos valores de parâmetros aceita uma expressão JSonata, portanto, um valor pode vir do evento. A tabela a seguir lista os tipos de alvos personalizados e seu bloco de parâmetros; cada um tem sua própria página abaixo. [Alvos para um assinante do Custom Event Bus](eb-custom-bus-targets.md)


| Destino | Bloco de parâmetros | 
| --- | --- | 
| Fila do Amazon SQS | SqsParameters | 
| Função do Lambda | LambdaParameters | 
| Fluxo do Kinesis | KinesisParameters | 
| Máquina de estado do Step Functions | StepFunctionsParameters | 
| Tópico do Amazon SNS | SnsParameters | 
| Endpoint HTTP ou destino da API | HttpParameters | 
| Fluxo Firehose | FirehoseParameters | 

Um ônibus de eventos personalizado ou um ônibus de eventos personalizado - clássico também pode ser o alvo: defina o ARN do barramento como`TargetArn`. Para um destino FIFO, como uma fila FIFO do Amazon SQS, defina o próprio identificador de desduplicação do alvo no bloco de parâmetros, por exemplo`SqsParameters.MessageDeduplicationId`, como um valor por mensagem derivado do evento com uma expressão JSOnata. Uma constante faz com que o alvo descarte todas as mensagens após a primeira.

Um alvo * universal * invoca uma ação de AWS API diretamente, sem nenhuma função intermediária. Seu ARN tem o formato`arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}`, por exemplo`arn:aws:events:::aws-sdk:dynamodb:putItem`, e `UniversalTargetParameters.Input` contém a solicitação como JSON ou como uma expressão JSONATA que a produz. Para as regras de nomenclatura, agrupamento e comportamento de falha, consulte. [Alvos universais para um barramento de eventos personalizado](eb-custom-bus-universal-targets.md)

Quando você cria o assinante, EventBridge resolve o tipo de destino do ARN e verifica três coisas: se o bloco de parâmetros corresponde ao tipo de destino, se o ARN pertence à sua conta e se cada expressão é analisada. Se a meta existe, se a função pode alcançá-la e se a API do alvo aceita os valores são verificados na entrega, então confirme a primeira entrega na meta.

## Tentativas e filas de cartas mortas
<a name="eb-custom-bus-subscribers-retry"></a>

`RetryPolicy`define por quanto tempo uma entrega falhada EventBridge se repete, por padrão, 5 tentativas em 300 segundos, e `OnFailureConfiguration.Arn` nomeia a fila do Amazon SQS que recebe um registro para cada evento que esgotou suas novas tentativas. Defina ambos ao criar o assinante. Para saber os limites, o formato do registro e como redirecionar, consulte[Políticas de repetição e filas de cartas mortas](eb-custom-bus-retry.md).

## A função de entrega
<a name="eb-custom-bus-subscribers-role"></a>

A função em `RoleArn` deve pertencer à sua conta e confiar no diretor do `events.amazonaws.com` serviço. Seu chamador precisa da função para criar o assinante ou EventBridge nega a solicitação antes de verificar o `iam:PassRole` ARN de destino. A política de permissões da função precisa de duas concessões.
+ A ação que o alvo exige, por exemplo, `sqs:SendMessage` em uma fila, `lambda:InvokeFunction` em uma função, `sns:Publish` em um tópico ou `kinesis:PutRecords` em um stream.
+ `sqs:SendMessage`na fila de entrada de cartas mortas. `OnFailureConfiguration.Arn` Sem isso, uma entrega falhada não tem onde se registrar e esses eventos são perdidos sem nenhum sinal.

A política de confiança a seguir EventBridge permite assumir a função.

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

A política de permissões a seguir é entregue para uma fila do Amazon SQS e cartas mortas para uma segunda fila.

```
{
    "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"
        }
    ]
}
```

## Exemplo: entregar pedidos grandes em uma fila
<a name="eb-custom-bus-subscribers-example"></a>

O comando a seguir cria um assinante que entrega pedidos acima de 500 para uma fila do Amazon SQS, para eventos publicados com`PutEvents`, e envia falhas para uma fila de cartas mortas.

```
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" }'
```

## Solução de problemas: você publicou e nada chegou ao alvo
<a name="eb-custom-bus-subscribers-nothing-arrived"></a>

Uma resposta publicada diz apenas que o ônibus aceitou e armazenou o evento; nunca confirma a entrega. Execute as seguintes verificações em ordem.

Sintomas  
A chamada de publicação retornou HTTP 200 sem falhas nas entradas, e o alvo não recebeu nada após alguns minutos.

Causa  
Uma das cinco coisas, em ordem de frequência: a entrega ainda está sendo repetida; o assinante está `STOPPED` ou foi revogado; o do assinante `StartingPosition` é `LATEST` e o evento foi publicado antes da existência do assinante; o filtro é escrito para a outra API de publicação e não corresponde a nada; ou a função de entrega não pode atingir a meta ou a fila de cartas mortas. `TargetInvocations`informa qual metade do problema você tem. Pontos de dados ativados `TargetInvocations` sem nenhum sinal `EventsDelivered` significam que as entregas são tentadas e falham. A ausência de pontos de dados ativados `TargetInvocations` enquanto os `FilterEvaluated` tiver significa que nenhuma tentativa de entrega foi feita; verifique se o assinante está `RUNNING` e verifique. `EventTransformationFailures`

Solução  

1. Leia o assinante. `State`deve estar `RUNNING` e `Revoked` deve estar ausente; ela aparece somente quando verdadeira. Nota `StartingPosition` e os filtros.

   ```
   aws eventsv2 describe-subscriber \
       --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLE1234567890abcdef
   ```

1. Leia as métricas do assinante em`AWS/EventsV2`. `FilterEvaluated`em zero significa que nenhum evento atingiu esse assinante: o produtor publicou em outro ônibus ou antes que o assinante existisse. `LATEST` `FilterEvaluated`acima de zero com `FilterMatched` zero significa que o filtro não correspondeu a nada; veja[Estrutura do evento: dados, metadados e metadados do sistema](eb-custom-bus-addressing.md). Quando `FilterMatched` tem pontos de dados e `EventsDelivered` não tem, as entregas estão falhando, e qual métrica registra o resultado depende do assinante: `EventsDropped` quando nenhuma fila de cartas mortas está configurada, `OnFailureDestinationDelivered` quando o evento chegou à fila e quando não chegou. `OnFailureDestinationFailed`

1. Ative os registros e reproduza. `LogConfiguration.Level`Defina como `INFO` e `IncludePayload` para`FULL`, transfira uma entrega de log, publique novamente e leia os `EVENT_DELIVERY_ATTEMPT` registros. Cada um carrega o código de erro e a mensagem do próprio alvo`details.target_input`, que é o que EventBridge foi enviado e não o que você pretendia enviar. Consulte [Observabilidade do barramento de eventos personalizado: métricas, registros e CloudTrail](eb-custom-bus-observability.md).

1. Se o filtro for o suspeito, adicione um assinante de diagnóstico no mesmo barramento sem filtro e uma fila que você possua como alvo. `Transformer.Type` `WITH_METADATA` Ele entrega cada evento exatamente como o EventBridge vê`Data`, como`Metadata`, `SystemMetadata` e. Em seguida, simplifique seu filtro, uma condição por vez; a última condição que você remove é a causa.

Verificação  
Publique um evento que deveria coincidir e outro que não deveria. O primeiro chega ao alvo e `EventsDelivered` aumenta em um; o segundo não chega e `FilterEvaluated` incrementa enquanto `FilterMatched` não chega.

**nota**  
As métricas de um assinante estão disponíveis para o proprietário do ônibus e para o proprietário do assinante; seus registros são entregues somente ao proprietário do assinante.