AWS: python으로 작성한 lambda 함수를 로컬에서 돌리고싶습니다.
조회수 886회
안녕하세요.
개발환경은 아래와 같습니다.
- windows 10
- python 3.8
이미 개발된 함수가 고장나서 수리하려다 일어난 일입니다. 이 함수 코드를 쓴 개발자는 mac 사용자였습니다 ㅠㅠ
물론 로컬에서 py filename.py
로 파일을 실행해 매개변수 없이 함수가 돌아가게 하면 돌아갑니다.
aws lambda를 구성하는 매개변수 event를 사용하려면 그저 로컬에서 python 파일구동으로는 부족해서 찾아나온 패키지가 python-lambda-local입니다. 패키지에서 시키는대로 event.json
파일을 쓰고 콘솔에 명령어를 입력해줬습니다.
python-lambda-local -l ./ -f handler -t 5 filename.py event.json
하지만 매뉴얼에 나온 예상 결과인
[root - INFO - 2018-11-20 17:10:53,352] Event: {'answer': 42}
[root - INFO - 2018-11-20 17:10:53,352] START RequestId: 3c8e6db4-886a-43da-a1c7-5e6f715de531
(...)
[root - INFO - 2018-11-20 17:10:53,359] END RequestId: 3c8e6db4-886a-43da-a1c7-5e6f715de531
[root - INFO - 2018-11-20 17:10:53,360] REPORT RequestId: 3c8e6db4-886a-43da-a1c7-5e6f715de531 Duration: 2.17 ms
[root - INFO - 2018-11-20 17:10:53,360] RESULT:
과 달리 아래와 같은 메시지가 찍혔습니다.
[root - INFO - 2019-10-22 12:18:03,798] Event: {'queryStringsParameters': {'datasetId': '6a9d03d7-5204-41b0-9e34-03c45b1224d7'}}
[root - INFO - 2019-10-22 12:18:03,798] START RequestId: 1134c088-32c4-495e-9ed2-b3580451a8d7 Version:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:\users\administrator\appdata\local\programs\python\python38\lib\multiprocessing\spawn.py", line 116, in
spawn_main
exitcode = _main(fd, parent_sentinel)
File "c:\users\administrator\appdata\local\programs\python\python38\lib\multiprocessing\spawn.py", line 126, in
_main
self = reduction.pickle.load(from_parent)
ModuleNotFoundError: No module named 'request-1134c088-32c4-495e-9ed2-b3580451a8d7'
그래서 이 패키지에서는 좀 찾아보니 아쉽게도 윈도우에서는 돌릴 방법이 없나봅니다. 혹시라도 윈도우에서 python으로 작성한 람다함수를 돌려볼 수 있는 방법을 아는 분이 계시면 답변 부탁드리겠습니다.
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
lambda 가 특이한 것이 아닙니다.
def lambda_handler(event, context):
위와같이 생긴 함수(이름은 지정하기 나름)를 대신 실행해주는 겁니다.
결국 event, context 가 무엇인지만 알면 됩니다.
event 는 dict 이고 context 는 아래링크에서 확인하면 됩니다.
https://docs.aws.amazon.com/en_pv/lambda/latest/dg/python-context-object.html
즉 로컬에서 lambda 실행이라는 것은 위의 파라미터값으로 함수를 실행시키면 그만이라는 이야깁니다.
보통 lambda 를 사용할 때 핸들러 안에 로직을 구현하기 보다 delegation 을 해서 다른 펑션에서 구현하여 커플링을 방지하세요.
물론 lambda 에서 다른 aws 서비스를 호출해야 한다면 local 에서 실행이 필요할 수도 있긴 합니다.
이때는 SAM 을 사용하면 docker 를 사용해서 로컬PC에서 디버깅등의 환경을 구축할 수 있습니다.
댓글 입력