

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á.

# Transformação EventBridge de entradas do Amazon Pipes
<a name="eb-pipes-input-transformation"></a>

O Amazon EventBridge Pipes suporta transformadores de entrada opcionais ao transmitir dados para o enriquecimento e o destino. É possível usar transformadores de entrada para remodelar a carga útil de entrada de eventos JSON para atender às necessidades do serviço de enriquecimento ou de destino. Para o Amazon API Gateway e destinos de API, é assim que você molda o evento de entrada para o RESTful modelo da sua API. Os transformadores de entrada são modelados como um parâmetro `InputTemplate`. Eles podem ser texto livre, um caminho JSON para a carga do evento ou um objeto JSON que inclui caminhos JSON embutidos para a carga do evento. Para enriquecimento, a carga útil do evento vem da origem. Para destinos, a carga útil do evento é o que é retornado do enriquecimento, se estiver configurado no pipe. Além dos dados específicos do serviço na carga útil do evento, é possível usar [variáveis reservadas](#input-transform-reserved) `InputTemplate` para referenciar os dados do seu pipe.

Para acessar itens em uma matriz, use a notação de colchetes.

**nota**  
EventBridge não suporta toda a sintaxe do JSON Path e a avalia em tempo de execução. A sintaxe compatível inclui:   
notação de pontos (por exemplo, `$.detail`)
traços
sublinhados
caracteres alfanuméricos
índices de matriz
curingas (\$1)
barras dianteiras

Os seguintes são parâmetros `InputTemplate` de amostra que fazem referência a uma carga útil de eventos do Amazon SQS:

**String estática**

```
InputTemplate: "Hello, sender"
```

**Caminho JSON**

```
InputTemplate: <$.attributes.SenderId>
```

**String dinâmica**

```
InputTemplate: "Hello, <$.attributes.SenderId>"
```

**JSON estático**

```
InputTemplate: >
{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
}
```

**JSON dinâmico**

```
InputTemplate: >
{
  "key1": "value1"
  "key2": <$.body.key>,
  "d": <aws.pipes.event.ingestion-time>
}
```

Use a notação de colchetes para usar itens em uma matriz:

```
InputTemplate: >
{
  "key1": "value1"
  "key2": <$.body.Records[3]>,
  "d": <aws.pipes.event.ingestion-time>
}
```

**nota**  
EventBridge substitui os transformadores de entrada em tempo de execução para garantir uma saída JSON válida. Por isso, coloque aspas nas variáveis que se referem aos parâmetros de caminho JSON, mas não coloque aspas nas variáveis que se referem a objetos ou matrizes JSON.

## Variáveis reservadas
<a name="input-transform-reserved"></a>

Os modelos de entrada podem usar as seguintes variáveis reservadas:
+ `<aws.pipes.pipe-arn>`: o nome do recurso da Amazon (ARN) do pipe.
+ `<aws.pipes.pipe-name>`: o nome do pipe.
+ `<aws.pipes.source-arn>`: o ARN de origem de evento do pipe.
+ `<aws.pipes.enrichment-arn>`: o ARN de enriquecimento do pipe.
+ `<aws.pipes.target-arn>`: o ARN de destino do pipe.
+ `<aws.pipes.event.ingestion-time>`: o momento em que o evento foi recebido pelo transformador de entrada. Este é um carimbo de data/hora ISO 8601. Este tempo é diferente para o transformador de entrada de enriquecimento e o transformador de entrada de destino, dependendo de quando o enriquecimento concluiu o processamento do evento.
+ `<aws.pipes.event>`: o evento conforme recebido pelo transformador de entrada.

  Para um transformador de entrada de enriquecimento, esse é o evento da origem. Ele contém a carga original da origem, além de metadados específicos do serviço adicionais. Para obter exemplos específicos deste serviço, consulte [Fontes da Amazon EventBridge Pipes](eb-pipes-event-source.md).

  Para um transformador de entrada de destino, esse é o evento retornado pelo enriquecimento, se um estiver configurado, sem metadados adicionais. Dessa forma, uma carga útil retornada por enriquecimento pode não ser JSON. Se nenhum enriquecimento estiver configurado no pipe, esse é o evento da origem com metadados.
+ `<aws.pipes.event.json>`: o mesmo que `aws.pipes.event`, mas a variável só tem um valor se a carga original, da origem ou retornada pelo enriquecimento, for JSON. Se o pipe tiver um campo codificado, como o campo `body` do Amazon SQS ou os `data` do Kinesis, esses campos serão decodificados e transformados em JSON válido. Como não passou por um escape, a variável só pode ser usada como um valor para um campo JSON. Para obter mais informações, consulte [Análise implícita de dados do corpo](#input-transform-implicit).

## Exemplo de transformação de entrada
<a name="input-transform-example"></a>

Veja a seguir um exemplo de evento do Amazon EC2 que podemos usar como nosso *exemplo de evento*.

```
{
  "version": "0",
  "id": "7bf73129-1428-4cd3-a780-95db273d1602",
  "detail-type": "EC2 Instance State-change Notification",
  "source": "aws.ec2",
  "account": "123456789012",
  "time": "2015-11-11T21:29:54Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"
  ],
  "detail": {
    "instance-id": "i-0123456789",
    "state": "RUNNING"
  }
}
```

Vamos usar o seguinte JSON como nosso *Transformador*.

```
{
  "instance" : <$.detail.instance-id>,
  "state": <$.detail.state>,
  "pipeArn" : <aws.pipes.pipe-arn>,
  "pipeName" : <aws.pipes.pipe-name>,
  "originalEvent" : <aws.pipes.event.json>
}
```

A seguir estárá a *Saída* resultante:

```
{
  "instance" : "i-0123456789",
  "state": "RUNNING",
  "pipeArn" : "arn:aws:pipe:us-east-1:123456789012:pipe/example",
  "pipeName" : "example",
  "originalEvent" : {
    ... // commented for brevity
  }
}
```

## Análise implícita de dados do corpo
<a name="input-transform-implicit"></a>

Os campos a seguir na carga de entrada podem ser escapados por JSON, como o objeto `body` do Amazon SQS, ou codificados em base64, como o objeto `data` do Kinesis. Tanto para [filtragem](eb-pipes-event-filtering.md) quanto para transformação de entrada, EventBridge transforma esses campos em JSON válido para que os subvalores possam ser referenciados diretamente. Por exemplo, `<$.data.someKey>` para o Kinesis.

Para que o destino receba a carga original sem nenhum metadado adicional, use um transformador de entrada com esses dados do corpo, específicos da origem. Por exemplo, `<$.body>` para o Amazon SQS ou `<$.data>` para o Kinesis. Se a carga original for uma string JSON válida (por exemplo, `{"key": "value"}`), o uso do transformador de entrada com dados específicos do corpo da origem resultará na remoção das aspas dentro da carga da origem original. Por exemplo, `{"key": "value"}` se tornará `"{key: value}"` quando for entregue ao destino. Se seu destino exigir cargas JSON válidas (por exemplo, EventBridge Lambda ou Step Functions), isso causará falha na entrega. Para que o destino receba os dados de origem originais sem gerar JSON inválido, envolva o transformador de entrada de dados do corpo de origem em JSON. Por exemplo, .`{"data": <$.data>}`

A análise implícita do corpo também pode ser usada para preencher dinamicamente os valores da maioria dos parâmetros de enriquecimento ou destino do pipe. Para obter mais informações, consulte [Parâmetros dinâmicos do caminho](eb-pipes-event-target.md#pipes-targets-dynamic-parms).

**nota**  
Se a carga original for um JSON válido, este campo conterá o JSON sem escape e sem codificação em base64. No entanto, se a carga não for um JSON válido, EventBridge base64 codifica os campos listados abaixo, com exceção do Amazon SQS.
+ **MQ ativo**: `data`
+ **Kinesis**: `data`
+ **Amazon MSK**: `key` e `value`
+ **Rabbit MQ**: `data`
+ **Apache Kafka autogerenciado**: `key` e `value`
+ **Amazon SQS**: `body`

## Problemas comuns com a transformação de entrada
<a name="eb-pipes-transform-input-issues"></a>

Estes são alguns problemas comuns ao transformar a entrada em EventBridge tubos:
+  Para strings, as aspas são necessárias.
+  Não há validação ao criar o caminho JSON para o modelo.
+  Se especificar uma variável para corresponder a um caminho JSON que não existe no evento, essa variável não será criada e não aparecerá na saída.
+ Propriedades JSON, como `aws.pipes.event.json`, só podem ser usadas como o valor de um campo JSON, não embutidas em outras strings.
+  EventBridge não escapa dos valores extraídos pelo *caminho de entrada*, ao preencher o *modelo de entrada de* um destino.
+ Se um caminho JSON fizer referência a um objeto ou matriz JSON, mas a variável for referenciada em uma string, EventBridge removerá todas as aspas internas para garantir uma string válida. Por exemplo, “Body is <\$1.body>” resultaria na EventBridge remoção de aspas do objeto. 

  Portanto, se quiser gerar um objeto JSON com base em uma única variável de caminho JSON, deverá colocá-lo como uma chave. Neste exemplo, `{"body": <$.body>}`.
+ As aspas não são necessárias para variáveis que representam cadeias de caracteres. Eles são permitidos, mas o EventBridge Pipes adiciona automaticamente aspas aos valores das variáveis de string durante a transformação, para garantir que a saída da transformação seja um JSON válido. EventBridge O Pipes não adiciona aspas às variáveis que representam objetos ou matrizes JSON. Não adicione aspas para variáveis que representem objetos ou matrizes JSON.

  Por exemplo, o seguinte modelo de entrada inclui variáveis que representam cadeias de caracteres e objetos JSON:

  ```
  {
    "pipeArn" : <aws.pipes.pipe-arn>,
    "pipeName" : <aws.pipes.pipe-name>,
    "originalEvent" : <aws.pipes.event.json>
  }
  ```

  Resultando em JSON válido com cotação adequada:

  ```
  {
    "pipeArn" : "arn:aws:events:us-east-2:123456789012:pipe/example",
    "pipeName" : "example",
    "originalEvent" : {
      ... // commented for brevity
    }
  }
  ```
+ Para enriquecimentos ou destinos do Lambda ou Step Functions, os lotes são entregues ao destino como matrizes JSON, mesmo que o tamanho do lote seja 1. No entanto, os transformadores de entrada ainda serão aplicados a registros individuais na matriz JSON, não à matriz como um todo. Para obter mais informações, consulte [Lotes e simultaneidade do Amazon EventBridge Pipes](eb-pipes-batching-concurrency.md).
+ Os transformadores de entrada e a filtragem podem extrair valores JSON que foram codificados em string uma vez, mas não valores que foram codificados em string duas vezes. Isso geralmente ocorre quando uma mensagem do Amazon SNS é enviada para o Amazon SQS. Quando o Amazon SQS recebe a mensagem do Amazon SNS, ele stringifica a mensagem inteira. Quando o Pipes recebe essa mensagem do Amazon SQS, o conteúdo da mensagem do Amazon SNS aparece `body` no campo e fica acessível. No entanto, se o próprio `Message` campo Amazon SNS contiver JSON stringificado, esse conteúdo aninhado será codificado duas vezes e não poderá ser acessado por transformadores ou filtros de entrada. Por exemplo, `<$.body.TopicArn>` está acessível, mas não `<$.body.Message.operation>` está se o `Message` campo contiver JSON em sequência de caracteres, como. `"{\\\"operation\\\":\\\"UPDATE\\\",\\\"email\\\":\\\"user@example.com\\\"}"`

  Para contornar essa limitação, use uma etapa de enriquecimento com uma função Lambda para analisar o conteúdo codificado duas vezes e extrair os valores aninhados. Para obter mais informações sobre enriquecimento, consulte[Enriquecimento](pipes-enrichment.md).