#amazon-web-services #aws-lambda #aws-lambda-layers #aws-lambda-containers
Вопрос:
мне было трудно заставить эту штуку работать правильно, я пытаюсь локально вызвать Лямбду, которая работает в контейнере docker, но у меня следующая проблема
Файл Docker
FROM public.ecr.aws/lambda/python:3.8
COPY myfunction.py ./
CMD ["myfunction.lambda_handler"]
Файл Python
myfunction.py
import json
import sys
def lambda_handler(event, context):
print("Hello AWS!")
print("event = {}".format(event))
return {
'statusCode': 200,
}
Шаг 1:
docker build --tag custom .
выход
C:Userss.shahIdeaProjectsYoutubeVideosLearn>docker build --tag custom .
[ ] Building 0.5s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 31B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for public.ecr.aws/lambda/python:3.8 0.5s
=> [internal] load build context 0.0s
=> => transferring context: 35B 0.0s
=> [1/2] FROM public.ecr.aws/lambda/python:3.8@sha256:d5a4b8f3f7394358bfe2cb51677f3d14af59c08adf831332cb4501f56dfd64cc 0.0s
=> CACHED [2/2] COPY myfunction.py ./ 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:6a339ad8416cd93632ae4418e89409dae2e8a684de7990746b613b223a974899 0.0s
=> => naming to docker.io/library/custom
Шаг 2:
docker run -p 9000:8080 random-letter:latest
выход
INFO[0000] exec '/var/runtime/bootstrap' (cwd=/var/task, handler=)
Шаг 3:
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
{"errorMessage": "Unable to unmarshal input: Expecting value: line 1 column 1 (char 0)", "errorType": "Runtime.UnmarshalError", "stackTrace": []}
INFO[0057] extensionsDisabledByLayer(/opt/disable-extensions-jwigqn8j) -> stat /opt/disable-extensions-jwigqn8j: no such file or directory
WARN[0057] Cannot list external agents error="open /opt/extensions: no such file or directory"
START RequestId: d49a7179-7ec5-4122-933f-be04abfed953 Version: $LATEST
Traceback (most recent call last):able to unmarshal input: Expecting value: line 1 column 1 (char 0)
END RequestId: d49a7179-7ec5-4122-933f-be04abfed953
REPORT RequestId: d49a7179-7ec5-4122-933f-be04abfed953 Init Duration: 0.23 ms Duration: 65.39 ms Billed Duration: 100 ms Memory Size: 3008 MB Max Memory Used: 3008 MB
Любая помощь была бы очень кстати
Комментарии:
1. Ваша проблема, вероятно, в том, что вы работаете в Windows, а не в Linux/macOS. Обратите внимание на разницу между тем, что вы
curl
указываете в своем вопросе, и вашим ответом. Если вы на самом деле не потребляетеmsg
значение, вы можете опустить его, напримерcurl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d "{}"
. … Ключом являются двойные кавычки вокруг{}
, а не одинарные кавычки в вашем вопросе/документах AWS.2. Правильно! Возникла та же проблема, и она работает, как описано выше.
Ответ №1:
Ответ
https://github.com/lambci/docker-lambda/issues/208 завиток -XPOST «http://localhost:9000/2015-03-31/functions/function/invocations» -d «{«»»msg»»»:»»»привет»»»}»
это работает
Комментарии:
1. В Windows вам действительно просто нужно заменить одинарные кавычки
{}
двойными кавычками, так что да, этот ответ работает, но msg/hello не нужны.