DynamoDB Streams com lambda

DynamoDB Streams com lambda
DynamoDB Streams é um recurso no Amazon DynamoDB que permite obter um fluxo em tempo real de alterações ou alterações de dados que são feitas em suas tabelas de dynamoDB. Você pode usar esse recurso para criar os aplicativos que reagem a alterações de dados em tabelas do DynamoDB, como atualizar caches e enviar notificações.

Obviamente, você também pode usar os fluxos do DynamoDB para acionar os processos e funções da AWS Lambda a jusante. Lambda, por definição, é um serviço de computação sem servidor que executa seu código em resposta a eventos e gerencia automaticamente os recursos de computação para você.

Você pode usar o Lambda para escrever o código no nó.JS, Python, Java ou C# para processar os registros do fluxo e tomar ações apropriadas. O principal benefício de integrar os fluxos do DynamoDB com a Lambda é que o Lambda permite que você execute os serviços apoiados ou códigos de aplicativo sem a necessidade de administração.

Como usar os fluxos da AWS DynamoDB com Lambda

Embora seja possível criar uma função Lambda que consome os eventos e ocorrências de um fluxo de dynamoDB, o processo pode ser bastante instantâneo, principalmente em sua primeira tentativa. As etapas a seguir ajudarão:

Etapa 1: Verifique se o seu sistema atende aos pré -requisitos

Este procedimento só será bem -sucedido se você souber as operações e processos básicos do Lambda. Assim, este deve ser o primeiro a garantir que sua compreensão do lambda esteja acima da média.

O segundo pré -requisito que vale a pena considerar está confirmando a versão AWS do seu sistema. Você pode usar o seguinte comando:

AWS -VERSION

O resultado do comando fornecido deve ficar assim:

AWS-CLI/2.x.x python/3.x.x Linux/4.x.X-XXX-STD Botocore/2.x.x

A resposta de amostra fornecida contém a versão instalada da AWS CLI (AWS-CLI/2.x.x), a versão python (Python/3.x.x) e o sistema operacional (Linux/4.x.X-XXX-STD). A parte final da resposta define a versão da biblioteca Botocore em que sua CLI da AWS é executada (botocore/2.x.x).

Você, portanto, acabará com algo assim:

Etapa 2: Crie uma função de execução

O próximo passo é criar uma função de execução na AWS CLI. Uma função de execução é uma função de identidade e gerenciamento de acesso da AWS (IAM) assumida por um serviço da AWS para executar as tarefas em seu nome. Ele fornece acesso aos recursos da AWS que você precisará ao longo do caminho.

Você pode criar uma função usando o seguinte comando:

AWS IAM CREATE-MOLE \
--Role-name lambdadynamodbexecutionRole \
--assume role-policy-document Arquivo: // assume-role-policy.JSON \
--Descrição "awslambdadynamodbexecutionRole" \
--Nome de serviço Lambda.Amazonaws.com

O comando anterior é um comando da AWS CLI para criar uma função. Você também pode usar o console de gerenciamento da Amazon para criar uma função. Depois de estar no console do IAM, abra o Papéis página e clique no Criar papel botão.

Prossiga para entrar no seguinte:

  • Entidade confiável: Lambda
  • Nome do papel: Lambda-dynamodb-colar
  • Permissões: awslambdadynamodbexecutionRole

Você também pode usar o Python instalando o SDK da AWS para Python:

PIP Instale o BOTO3

Etapa 3: Ative os fluxos do DynamoDB em sua mesa

Você precisa ativar os fluxos do DynamoDB em sua mesa. Para esta ilustração, usamos o BOTO3, AWS SDK para Python. O seguinte comando ajudará:

Importar BOTO3
# Conecte -se ao serviço DynamoDB
DynamoDB = BOTO3.Client ('DynamoDB')
# Ativar fluxos de dynamoDB na tabela 'minha mesa'
Resposta = DynamoDB.update_table (
TableName = 'myTable',
Streamspecification =
'Fieldabled': verdadeiro,
'StreamViewType': 'new_and_old_images'

)
# Verifique a resposta para garantir que o fluxo tenha sido ativado com sucesso
Se a resposta ['streamspecification'] ['sigLameNabled']:
Print ("DynamoDB Stream ativado com sucesso")
outro:
print ("Erro ativando o DynamoDB Stream")

Este código permite o fluxo do dynamoDB na tabela "myTable" que transmite as imagens novas e antigas de itens assim que ocorrerem mudanças. Você pode optar por transmitir apenas as novas imagens assim que o StreamViewType para "new_image".

Notavelmente, executar este código só pode ativar os fluxos em suas mesas depois de um tempo. Em vez disso, o processo pode levar algum tempo. Você pode usar o método descreve_table para verificar o status do fluxo.

Etapa 4: Crie a função Lambda

O próximo passo é criar uma função Lambda que aciona o fluxo do dynamoDB. As etapas a seguir devem ajudar:

  • Abra o console da AWS Lambda e clique na guia "Criar função". Na página "Criar função", escolha "Autor do zero" e insira um nome para sua função. Você também precisa entrar no seu tempo de execução neste momento. Selecionamos Python para esta ilustração.
  • Em "Escolha ou crie uma função de execução", selecione "Crie uma nova função com permissões básicas de lambda" para criar uma função de IAM com as permissões necessárias para sua função Lambda.
  • Clique no botão "Criar função" para criar sua função Lambda.
  • Na página "Configuração" da sua função, role para baixo até a seção "Designer" e clique na guia "Adicionar gatilho".
  • Na caixa "Configuração do gatilho" que aparece, selecione "DynamoDB" no menu suspenso "Trigger".
  • Selecione a tabela DynamoDB que você deseja usar para acionar a função. Uma vez feito, escolha se você deseja que a função seja acionada em todas as atualizações da tabela ou apenas em atualizações específicas (como atualizações em colunas específicas).
  • Clique no botão "Adicionar" para criar o gatilho.
  • No editor "Código da função", escreva o código Python para sua função. Você pode usar o objeto de evento que é passado para sua função para acessar os dados que desencadeiam a função.
  • Clique no botão "Salvar" para economizar a função.

Isso é tudo o que acontece ao criar uma função lambda! Sua função agora é acionada sempre que há atualizações para a tabela DynamoDB especificada.

Aqui está um exemplo de uma simples função python que o fluxo do DynamoDB pode acionar:

def lambda_handler (evento, contexto):
para registro em evento ['registros']:
print (registro ['DynamoDB'] ['newImage'])

Esta função itera através dos registros no objeto de eventos e imprime a nova imagem do item na tabela DynamoDB que desencadeia a função.

Etapa 5: teste a função Lambda

Para testar uma função lambda que um fluxo de dynamoDB pode acionar, você pode usar o BOTO3 biblioteca para acessar a API do DynamoDB e a invocar Método do Lambda cliente para acionar a função.

Aqui está um exemplo de como fazer isso:

Importar BOTO3
# Conecte -se ao serviço DynamoDB
DynamoDB = BOTO3.Client ('DynamoDB')
# Conecte -se ao serviço Lambda
lambda_client = BOTO3.cliente ('lambda')
# Insira um item na tabela 'minha mesa'
Resposta = DynamoDB.put_item (
TableName = 'myTable',
Item =
'id': 'n': '123',
'Nome': 'S': 'Joel Austin,
'Age': 'n': '34'

)
# Verifique a resposta para garantir que o item tenha sido inserido com sucesso
Se resposta ['Responsemetadata'] ['httpstatuscode'] == 200:
Imprimir ("Item inserido com sucesso")
outro:
print ("Item de inserção de erro")
# Trigger a função Lambda que é subscrita à tabela 'My-Table'
resposta = lambda_client.invocar(
FunctionName = 'MyFunction',
InvocationType = 'Evento',
LogType = 'Tail',
Payload = '"Records": ["Dynamodb": "newImage": "id": "n": "123", "nome": "s": "Joel Austin", " idade ": " n ":" 34 "] ''
)
# Verifique a resposta para garantir que a função tenha sido acionada com sucesso
Se resposta ['statusCode'] == 202:
Print ("Função Lambda acionada com sucesso")
outro:
print ("Erro acionando a função lambda")

Este código primeiro insere um item no minha mesa mesa e depois desencadeia o MyFunction Função lambda enviando uma carga útil de eventos para a função usando o invocar método. A carga útil do evento simula um evento DynamoDB Stream que inclui a nova imagem do item que foi inserida.

Você pode verificar os registros da função Lambda para ver se ela acionou e processou os dados do evento com sucesso.

Conclusão

É vital observar que você pode invocar várias vezes para o mesmo registro de fluxo que um fluxo de dynamoDB pode desencadear uma função lambda. A principal razão por trás disso é que os registros do fluxo são eventualmente consistentes e é possível processar o mesmo registro várias vezes pela função Lambda. É crucial projetar sua função lambda para lidar com este caso corretamente.