[AWS Lambda] python3.8 버전에서 web request 본문

AWS/Lambda

[AWS Lambda] python3.8 버전에서 web request

최재강 2021. 11. 6. 17:37

문제 직면

람다에서 주기적으로 web에 request요청을 보내야 하는 작업을 해야했다.
기존에 python3.7 버전에서 람다를 즐겨 사용했던 나는 람다에서 리눅스 커맨드를 실행하는 방법으로 작업을 진행하려 했었다.

예시로

import os

def lambda_handler(event,context):
	os.system("curl https://naver.com")

python 내장 라이브러리인 os를 이용하여 람다에서 curl 명령어를 실행하려고 했었다.

하지만 어째서인지 아래와 같은 에러가 발생했다.

bin/sh: curl: command not found

현재 람다가 사용하는 리눅스에 curl 명령어가 없다는 메세지였다.

Stackoverflow를 통해 조금 더 공부해 보니, python3.7까지는 람다 운영체제가 Amazon Linux 버전이였던 반면 python3.8부터는 Amazon Linux2 버전으로 바뀌었다고 한다. Amazon Linux2 버전에서는 안타깝게도 curl을 실행할 수 없다고 한다..

해결 방안

우선은 python의 request 라이브러리를 통해 작업을 완료할 수 있다.
하지만 람다에 내장되어 있지 않아 Lambda Layer에 라이브러리를 배포해야 하는 번거로움이 있다.

그래서 나는 다음과 같이 python 내장 라이브러리인 urllib3을 통해 해결했다.

import urllib3

def lambda_handler(event, context):
	http = urllib3.PoolManager()
	res = http.request('GET', 'https://www.naver.com')
	response = res.data

urllib3으로 PoolManager를 호출 하고 request 명령을 내리면 웹 호출을 할 수 있다.

내장 라이브러리를 사용했으므로 다른 번거로운 작업이 없이 해결할 수 있었다.

 

참조

Comments