Primeiros passos

Instalando o Queue Lambda Debugger

O Queue Lambda Debugger é testado no Python 3.8 ou superior e pode ser instalado pelo pip (ou outra ferramenta de gerenciamento de dependência, como o Poetry). Exemplo:

pip install qldebugger

Criando configuração básica

A configuração do Queue Lambda Debugger fica no arquivo qldebugger.toml dentro do diretório do projeto, ela é escrita no formato TOML v1.0.0. Um exemplo de configuração pode ser criado executando o comando:

qldebugger init

Após isso é necessário ajustar a configuração de acesso a AWS na seção aws dentro do arquivo de configuração. A configuração a baixo é válida para utilizar um mock:

[aws]
access_key_id = "secret"
secret_access_key = "secret"
region = "us-east-1"
endpoint_url = "http://localhost:4566/"

Também é possível remover toda a seção aws do arquivo de configuração para que o Queue Lambda Debugger utilize as credenciais de acesso a AWS já configurada no ambiente.

Um mock da AWS pode ser iniciado executando os comandos a baixo em outra janela:

pip install moto[server]
moto_server -p 4566

Criando filas

As filas no Amazon SQS são configuradas na seção queues do arquivo de configuração, e suas criações no mock podem ser feitas através do CLI com o comando:

qldebugger infra create-queues

Enviando mensagens

Para enviar mensagens para a fila, pode ser utilizado o comando qldebugger msg send <nome-da-fila> <mensagem>. Exemplo:

qldebugger msg send myqueue "test message"

Executando AWS Lambda

A configuração do AWS Lambda é feita na seção lambdas do arquivo de configuração, passando a localização da função Python a ser executada no parâmetro handler. Exemplo:

[lambdas]
print = {handler = "qldebugger.example.lambdas.print_messages"}

Para informar de qual fila as mensagens devem ser recebidas para enviar para o AWS Lambda, isso é feito na seção event_source_mapping do arquivo de configuração, criando um nome que será utilizado para rodar o AWS Lambda e informando o nome da fila e do lambda. Exemplo:

[event_source_mapping]
myrun = {queue = "myqueue", function_name = "print"}

Assim basta executar o comando qldebugger run <nome-do-event-source-mapping>. Exemplo:

qldebugger run myrun

Exemplo de saída no terminal:

INFO:qldebugger:Receved 1 messages from 'myqueue' queue
INFO:qldebugger:Running 'print' lambda...
test message
Total: 1 messages
INFO:qldebugger:Result: None
INFO:qldebugger:Deleted 1 messages from 'myqueue' queue

Executando sua própria função AWS Lambda

A função Python para executar no AWS Lambda pode ser escrita em qualquer módulo Python, nesse exemplo ela foi escrita no arquivo func.py:

def handler(event, context):
    print(event)

Depois disso é necessário configurá-la na seção lambdas no arquivo qldebugger.toml, assim como o event_source_mapping descrevendo de qual fila as mensagens devem ser recebidas:

[lambdas]
mylambda = {handler = "func.handler"}

[event_source_mapping]
myrun = {queue = "myqueue", function_name = "mylambda"}

Após isso é possível enviar mensagens e executar o AWS Lambda. Porém nesse caso, como o módulo Python não está em nenhum pacote instalado no ambiente, pode ser necessário usar a variável de ambiente PYTHONPATH informando ao Python onde ele deve procurar os módulos a serem importados, nesse caso o diretório atual (.). Exemplo:

qldebugger msg send myqueue "test message"
PYTHONPATH=. qldebugger run myrun