Tenho cinco horas tentando fazer com que uma função Lambda retorne uma resposta com sucesso, usando uma imagem Docker, e falhando miseravelmente.
Dockerfile
FROM python:3.9.6-buster
WORKDIR /app
COPY . /app
CMD ["python", "/app/lambda_handler.py"]
Arquivos Python p.py
def c(a1, a1, a1):
result = {
"a1": a1,
"a2": a2,
"a3": a3,
}
return result
lambda_handler.py
import json
from p import c
def lambda_handler(event, context):
arg1 = event["a1"]
arg2 = event["a2"]
arg3 = event["a3"]
result = classify(arg1, arg2, arg3)
response = {"statusCode": 200, "body": result}
return json.dumps(response, indent=4, default=str)
Eu recebo um erro inútil de
{ "errorType": "Runtime.InvalidEntrypoint", "errorMessage": "RequestId: 330fa2c3-f68b-4225-a53c-96f2409f186d Erro: exec: "lambda_function.lambda_handler": arquivo executável não encontrado em $ PATH" }
Eu tentei:
- compactando os arquivos e enviando para a função lambda que funciona
- leia este link que sugere o uso de algo como CMD [ "lambda_function.handler" ] então eu configurei o CMD de substituição para combinações de app.lambda_function.lambda_handler, lambda_function.lambda_handler com e sem aspas
- Eu tentei definir o ENTRYPOINT para python e, em seguida, tentar apontar o CMD para /app/lambda_handler
- em vez de usar CMD exclusivamente usando a substituição de ENTRYPOINT
python, /app/lambda_handler.py
Qualquer ajuda seria muito apreciada.
O erro parece ser um problema de configuração com a função AWS Lambda.
Se você verificar a mensagem, ela diz
Error type: Runtime.InvalidEntrypoint ... Error: exec: "lambda_function.lambda_handler"
Por padrão o Entrypoint do AWS Lambda no console é
lambda_function.lambda_handler
e de acordo com a documentação este éNo seu caso, seu arquivo python é nomeado
lambda_handler.py
em vez delambda_function.py
ser o motivo pelo qual o AWS Lambda não consegue encontrar seu manipulador e gera o erro InvalidEntrypoint.Tente alterar o nome do seu arquivo para
lambda_function.py