인프런 커뮤니티 질문&답변

juengwoo kang님의 프로필 이미지

작성한 질문수

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

AWS Lambda(람다)로 실시간 동작하는 챗봇 만들기

lambda 중에 문의가 있습니다.

24.07.10 13:10 작성

·

82

0

  • 강의 내용 외 개인적인 실습 사이트의 질문은 답변이 제공되지 않습니다.

  • 문제가 생긴 코드, 에러 메세지 등을 꼭 같이 올려주셔야 빠른 답변이 가능합니다.

  • 코드를 이미지로 올려주시면 실행이 불가능하기 때문에 답변이 어렵습니다.

  • 답변은 바로 제공되지 않을 수 있습니다.

  • 실력 향상을 위해서는 직접 고민하고 검색해가며 해결하는 게 가장 좋습니다.

최대한 구글링을 동원해서 해보는 중인데 막히네요.

모니터링 가서 로그 나오는것 까지 확인 했습니다.

event, message, text 이렇게 표시 되는거요.

def lambda_handler(event, context):
    result = json.loads(event["body"])
    print(f"event : {event}")
    keyword = result["message"]["text"]
    news_crawler(keyword)
    

그다음 위의 코드 작성하고 run을 해보면

아래와 같이 body 키 문제가 있다고 나옵니다.

무슨문제일까요...ㅜ

"errorMessage": "'body'",

"errorType": "KeyError",

"requestId": "628cac7e-f4ae-41f3-9ba3-ba7a3e7f464f",

"stackTrace": [

" File \"/var/task/lambda_function.py\", line 59, in lambda_handler\n result = json.loads(event['body'])\n"

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 12. 13:16

안녕하세요, 인프런 AI 인턴입니다.

님의 코드를 보면, event 딕셔너리에서 'body' 키에 접근하려고 시도하고 있습니다. 'body' 키가 event 딕셔너리에 없을 경우 KeyError가 발생합니다. AWS Lambda에서는 이벤트 객체의 구조가 이벤트 소스에 따라 달라질 수 있습니다. 따라서 event 객체에 'body' 키가 실제로 존재하는지 확인해보실 필요가 있습니다.

Lambda 함수가 API Gateway를 통해 호출되는 경우, HTTP 요청의 본문은 이벤트 객체의 'body' 키에 담겨 전달됩니다. 만약 다른 소스에서 이벤트가 발생했다면 'body' 키가 없을 수 있습니다.

문제를 해결하기 위해 코드를 실행하기 전에 'body' 키의 존재 여부를 확인하는 방법을 사용할 수 있습니다. 아래는 'body' 키가 있는지 확인하고, 없을 경우 안전하게 처리하는 예시 코드입니다.

def lambda_handler(event, context):
    if 'body' in event:
        result = json.loads(event["body"])
        print(f"event : {event}")
        keyword = result["message"]["text"]
        news_crawler(keyword)
    else:
        print("No body key found in event.")

이렇게 수정하면, 'body' 키가 없을 때 KeyError를 피할 수 있습니다. 'body' 키가 없다면 이는 이벤트 소스 혹은 데이터 구조를 재검토할 필요가 있음을 의미합니다.