

# Processar registros do Amazon Kinesis Data Streams com o Lambda
<a name="services-kinesis-create"></a>

Para processar registros do Amazon Kinesis Data Streams com o Lambda, crie um mapeamento da origem do evento do Lambda. Você pode mapear uma função do Lambda para um iterador padrão ou para um consumidor de fan-out aprimorado. Para obter mais informações, consulte [Fluxos de sondagem e agrupamento em lotes](with-kinesis.md#kinesis-polling-and-batching).

## Criar um mapeamento da origem do evento do Kinesis
<a name="services-kinesis-eventsourcemapping"></a>

Para invocar sua função do Lambda com registros do fluxo de dados, crie um [mapeamento da origem do evento](invocation-eventsourcemapping.md). É possível criar vários mapeamentos de origem de eventos para processar os mesmos dados com várias funções do Lambda ou processar itens de vários fluxos de dados com uma única função. Ao processar itens de vários fluxos, cada lote conterá registros somente de um único fragmento ou transmissão.

Você pode configurar mapeamentos da origem do evento para processar registros de um fluxo em outra Conta da AWS. Para saber mais, consulte [Como criar mapeamentos da origem do evento entre contas](#services-kinesis-eventsourcemapping-cross-account).

Antes de criar um mapeamento da origem do evento, você precisará dar permissão à função do Lambda para ler a partir de um fluxo de dados do Kinesis. O Lambda precisa das permissões a seguir para gerenciar recursos relacionados ao seu fluxo de dados do Kinesis:
+ [kinesis:DescribeStream](https://docs.aws.amazon.com/lambda/latest/api/API_DescribeStream.html)
+ [kinesis:DescribeStreamSummary](https://docs.aws.amazon.com/lambda/latest/api/API_DescribeStreamSummary.html)
+ [kinesis:GetRecords](https://docs.aws.amazon.com/lambda/latest/api/API_GetRecords.html)
+ [kinesis:GetShardIterator](https://docs.aws.amazon.com/lambda/latest/api/API_GetShardIterator.html)
+ [kinesis:ListShards](https://docs.aws.amazon.com/lambda/latest/api/API_ListShards.html)
+ [kinesis:SubscribeToShard](https://docs.aws.amazon.com/lambda/latest/api/API_SubscribeToShard.html)

A política gerenciada da AWS [AWSLambdaKinesisExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaKinesisExecutionRole.html) inclui essas permissões. Adicione essa política gerenciada à sua função, conforme descrito no procedimento a seguir.

**nota**  
Você não precisa da permissão `kinesis:ListStreams` para criar e gerenciar mapeamentos da origem do evento para o Kinesis. No entanto, se você criar um mapeamento da origem do evento no console e não tiver essa permissão, não poderá selecionar um stream do Kinesis em uma lista suspensa e o console exibirá um erro. Para criar o mapeamento da origem do evento, você precisará inserir manualmente o nome do recurso da Amazon (ARN) do seu stream.
O Lambda faz as chamadas de API `kinesis:GetRecords` e `kinesis:GetShardIterator` ao tentar novamente invocações com falha.

------
#### [ Console de gerenciamento da AWS ]

**Para adicionar permissões do Kinesis à sua função**

1. Abra a [página Funções](https://console.aws.amazon.com/lambda/home#/functions) do console do Lambda e selecione a função.

1. Na guia **Configuração**, escolha **Permissões**.

1. No painel **Perfil de execução**, em **Nome do perfil**, escolha o link para o perfil de execução da sua função. Esse link abre a página para esse perfil no console do IAM.

1. No painel **Políticas de permissões**, escolha **Adicionar permissões** e, em seguida, selecione **Anexar políticas**.

1. No campo de pesquisa, digite **AWSLambdaKinesisExecutionRole**.

1. Marque a caixa de seleção próxima à política e escolha **Adicionar permissão**.

------
#### [ AWS CLI ]

**Para adicionar permissões do Kinesis à sua função**
+ Execute o comando da CLI a seguir para adicionar a política `AWSLambdaKinesisExecutionRole` ao perfil de execução da sua função:

  ```
  aws iam attach-role-policy \
  --role-name MyFunctionRole \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaKinesisExecutionRole
  ```

------
#### [ AWS SAM ]

**Para adicionar permissões do Kinesis à sua função**
+ Na definição da sua função, adicione a `Policies` propriedade, conforme mostrado no seguinte exemplo:

  ```
  Resources:
    MyFunction:
      Type: AWS::Serverless::Function
      Properties:
        CodeUri: ./my-function/
        Handler: index.handler
        Runtime: nodejs24.x
        Policies:
          - AWSLambdaKinesisExecutionRole
  ```

------

Depois de configurar as permissões necessárias, crie o mapeamento de origem de eventos.

------
#### [ Console de gerenciamento da AWS ]

**Para criar o mapeamento da origem do evento do Kinesis**

1. Abra a [página Funções](https://console.aws.amazon.com/lambda/home#/functions) do console do Lambda e selecione a função.

1. No painel **Visão geral da função**, escolha **Adicionar gatilho**.

1. Em **Configuração do acionador**, para a origem, selecione **Kinesis**.

1. Selecione o fluxo do Kinesis para o qual você deseja criar o mapeamento da origem do evento e, opcionalmente, um consumidor do seu fluxo.

1. (Opcional) edite o **Tamanho do lote**, a **Posição inicial** e a **Janela do lote** para o mapeamento da origem do evento.

1. Escolha **Adicionar**.

Ao criar seu mapeamento da origem do evento no console, seu perfil do IAM deve ter as permissões [kinesis:ListStreams](https://docs.aws.amazon.com/lambda/latest/api/API_ListStreams.html) e [kinesis:ListStreamConsumers](https://docs.aws.amazon.com/lambda/latest/api/API_ListStreamConsumers.html).

------
#### [ AWS CLI ]

**Para criar o mapeamento da origem do evento do Kinesis**
+ Execute o comando a seguir da CLI para criar um mapeamento da origem do evento do Kinesis. Escolha seu próprio tamanho de lote e posição inicial de acordo com seu caso de uso.

  ```
  aws lambda create-event-source-mapping \
  --function-name MyFunction \
  --event-source-arn arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream \
  --starting-position LATEST \
  --batch-size 100
  ```

Para especificar uma janela de agrupamento em lotes, adicione a opção `--maximum-batching-window-in-seconds`. Para obter mais informações sobre como este e outros parâmetros, consulte [create-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html) na *Referência de comandos da AWS CLI*.

------
#### [ AWS SAM ]

**Para criar o mapeamento da origem do evento do Kinesis**
+ Na definição da sua função, adicione a `KinesisEvent` propriedade, conforme mostrado no seguinte exemplo:

  ```
  Resources:
    MyFunction:
      Type: AWS::Serverless::Function
      Properties:
        CodeUri: ./my-function/
        Handler: index.handler
        Runtime: nodejs24.x
        Policies:
          - AWSLambdaKinesisExecutionRole
        Events:
          KinesisEvent:
            Type: Kinesis
            Properties:
              Stream: !GetAtt MyKinesisStream.Arn
              StartingPosition: LATEST
              BatchSize: 100
  
    MyKinesisStream:
      Type: AWS::Kinesis::Stream
      Properties:
        ShardCount: 1
  ```

Para saber mais sobre como criar um mapeamento de origem de eventos para o Kinesis Data Streams no AWS SAM, consulte [Kinesis](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-kinesis.html) no *Guia do desenvolvedor do AWS Serverless Application Model*.

------

## Posição inicial de sondagem e fluxo
<a name="services-kinesis-stream-start-pos"></a>

Esteja ciente de que a sondagem do fluxo durante a criação e as atualizações do mapeamento da origem do evento é, finalmente, consistente.
+ Durante a criação do mapeamento da origem do evento, pode levar alguns minutos para a sondagem de eventos do fluxo iniciar.
+ Durante as atualizações do mapeamento da origem do evento, pode levar alguns minutos para interromper e reiniciar a sondagem de eventos do fluxo.

Esse comportamento significa que, se você especificar `LATEST` como posição inicial do fluxo, o mapeamento da origem do evento poderá perder eventos durante a criação ou as atualizações. Para garantir que nenhum evento seja perdido, especifique a posição inicial do fluxo como `TRIM_HORIZON` ou `AT_TIMESTAMP`.

## Como criar mapeamentos da origem do evento entre contas
<a name="services-kinesis-eventsourcemapping-cross-account"></a>

O Amazon Kinesis Data Streams permite [políticas baseadas em recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html). Por isso, você pode processar dados ingeridos em um fluxo em uma Conta da AWS com uma função do Lambda em outra conta.

Para criar um mapeamento da origem do evento para sua função do Lambda usando um fluxo do Kinesis em outra Conta da AWS, você deve configurar o fluxo usando uma política baseada em recursos para dar permissão à função do Lambda para ler itens. Para saber como configurar seu fluxo para permitir o acesso entre contas, consulte [Compartilhamento de acesso com funções do AWS Lambda entre contas](https://docs.aws.amazon.com/streams/latest/dev/resource-based-policy-examples.html#Resource-based-policy-examples-lambda) no *Guia do desenvolvedor do Amazon Kinesis Streams*.

Depois de configurar seu fluxo com uma política baseada em recursos que conceda à sua função do Lambda as permissões necessárias, crie o mapeamento da origem do evento usando qualquer um dos métodos descritos na seção anterior.

Se você optar por criar seu mapeamento da origem do evento usando o console Lambda, cole o ARN do seu fluxo diretamente no campo de entrada. Se você quiser especificar um consumidor para seu fluxo, colar o ARN do consumidor preencherá automaticamente o campo do fluxo.