기타/Problem Solve

Lambda Python Teams http request error

Nowon9159 2023. 8. 28. 13:10
반응형

오늘은 회사에서 Lambda 를 이용해 sns 메시지를 가공해서 Teams 메시지를 전송하는 작업을 진행했다.

Python 코드 작성 중 해당 에러가 나왔고, 코드 상 다른 부분은 문제가 없는데 하위의 에러가 발생 했다.

28:20.466Z	Request failed: 500 Internal Server Error

 

500 에러가 발생해서 뭔가 timeout이나 config 설정 중 문제가 있겠거니 생각을 하고 config를 먼저 확인 했는데 별 다른 문제가 없었다.

그렇다면 뭐가 문제일까??

뭔가 직감적으로 http 통신을 하는 과정에서 json req를 잘못 보내거나 통신 상 문제가 발생한다고 생각했고, json 형식의 파일을 POST로 날리지 않아서 그런것은 아닌가 생각이 들었다. (Slack 전송 코드를 가져와서 Teams로 전송하는 걸로 변경했기 때문에 API 가 다를수도 있다고 생각함)

 

( https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=dotnet )

 

Teams 의 docs를 확인 해보니 HTTPS POST로 날려야 하는 것을 알 수 있었다.

 

req = Request(HOOK_URL, json.dumps(slack_message).encode('utf-8'))
    try:
        response = urlopen(req)
        response.read()
        logger.info("Message posted to %s", slack_message['channel'])
    except HTTPError as e:
        logger.error("Request failed: %d %s", e.code, e.reason)
    except URLError as e:
        logger.error("Server connection failed: %s", e.reason)

 

이전 코드는 이렇게 구성 되어 있었는데 try 부분을 http.request 메소드를 이용해서 POST method를 명시 해주었다.

 

 try:
        resp = http.request("POST", TEAMS_URL, body=encoded_msg)
        logger.info("Message posted")
        return {"status": "200 OK"}

 

위 코드를 이용해서 정상적으로 Teams 메시지가 전송 되었다. (보안상 캡쳐 못함!)

반응형