Bom, para prossegui com o projeto, devo realizar o processamento dos vídeos, isso incluíra:
- Pré-processamento
- Extração de características
- Detecção de faixas
- Rastreamento de faixas
Para isso, pensei em usar Lambda para o processamento dos vídeos.
O LocalStack possui algumas limitações quanto a isso, por exemplo, não consegui criar uma Lambda com LocalStack usando uma imagem de container. Precisarei fazer com o arquivo zipado.
Vou mostrar o passo a passo, com duas formas, uma usando a interface da LocalStack e a outra via AWS-CLI com awslocal.
Passo 1 - Criando um scrip python
Vamos salvar um arquivo chamado app.py
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': f"test ok"
}
Vamos zipar ele, usei o terminal para isso:
zip app.zip app.py
Passo 2 - Entender alguns itens do Lambda
Function name
Function name é o nome da função Lambda, aqui usei test1 como nome
Vamos usar ele sempre que quisermos:
invocar a função, ver logs, atualizar código, configurar eventos, etc.
Runtime
Runtime indica qual versão da linguagem será usada para rodar o código.
Usei aqui o python3.11 (poderia ser o 3.10, 3.12 …)
Outros exemplos de runtimes disponíveis:
- nodejs
- java
- go (Golang é uma ótima linguagem, fica a dica)
Role
Esse é o ARN da role IAM (permissões) que a Lambda usaria na AWS real. No LocalStack, não é validado de verdade, mas precisa seguir o formato certo.
Usamo aqui: arn:aws:iam::000000000000:role/lambda-role
Na AWS, essa role define o que a Lambda pode acessar, como:
- buckets S3
- bancos de dados
- logs do CloudWatch
Formato obrigatório:
arn:aws:iam::<ID>:role/<nome-da-role>
Handler:
Esse campo diz para o AWS Lambda qual função chamar dentro do seu código.
No teste usado foi app.lambda_handler, sendo
- app: o nome do arquivo.
- lambda_handler: a função dentro do arquivo que quero executar.
Formato geral: <nome-do-arquivo>.<nome-da-função>
Passo 3a - Criar o Lambda - usando interface
Vamos acessar o painel da LocalStack: https://app.localstack.cloud/inst/default/resources, já tinha falado dele no post Criando a primeira API para upload de vídeos - S3 e SQS
E buscar pelo recurso “lambda”

Ao acessar, clicar em criar

E preencher as insformações:

- Function name: test1
- Runtime: python3.11
- Role: arn:aws:iam::000000000000:role/lambda-role
- Handler: app.lambda_handler
- Upload zip file
e pronto, só salvar
Será exibido os dados da Lambda

E via painel, podemos invocar a chamada dela

Segue o resultado, deu tudo certo!!!

Passo 3b - Criar o Lambda - usando AWS-CLI
No terminal, no diretório onde salvamos o arquivo app.zip
awslocal lambda create-function \
--function-name test1 \
--runtime python3.11 \
--handler app.lambda_handler \
--role arn:aws:iam::000000000000:role/lambda-role \
--zip-file fileb://app.zip
Teremos o seguinte output
# output
{
"FunctionName": "test1",
"FunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:test1",
"Runtime": "python3.11",
"Role": "arn:aws:iam::000000000000:role/lambda-role",
"Handler": "app.lambda_handler",
"CodeSize": 302,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2025-07-06T09:38:23-03:00",
"CodeSha256": "a6W95W7SVJfZwMi1N4uipIaTroHwDsOwp3NMZlXyMMM=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "3a016d90-dbbe-4c0c-a406-1ef34d25d42f",
"State": "Pending",
"StateReason": "The function is being created.",
"StateReasonCode": "Creating",
"PackageType": "Zip",
"Architectures": [
"x86_64"
],
"EphemeralStorage": {
"Size": 512
},
"SnapStart": {
"ApplyOn": "None",
"OptimizationStatus": "Off"
},
"RuntimeVersionConfig": {
"RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1"
},
"LoggingConfig": {
"LogFormat": "Text",
"LogGroup": "/aws/lambda/test1"
}
}
Para invocar via AWS-CLI
awslocal lambda invoke \
--function-name test1 \
/dev/stdout
# output
{"statusCode": 200, "body": "test ok"}{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
/dev/stdout faz a impressão no terminal.
Para salvar em um arquivo:
awslocal lambda invoke \
--function-name test1 \
/dev/stdout >> arquivo.txt