강
[AWS Lambda] python3.8 버전에서 web request 본문
문제 직면
람다에서 주기적으로 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 명령을 내리면 웹 호출을 할 수 있다.
내장 라이브러리를 사용했으므로 다른 번거로운 작업이 없이 해결할 수 있었다.
참조
'AWS > Lambda' 카테고리의 다른 글
[AWS Lambda] 서버리스 환경에서 ML 추론 작업 수행해보기 (0) | 2022.08.18 |
---|---|
[AWS Lambda] Lambda vs Azure Function 내부 구조 비교 (2) | 2021.09.30 |
[AWS Lambda] AWS Lambda로 MapReduce 작업을 돌려보기 - 2 (0) | 2020.11.22 |
[AWS Lambda] AWS Lambda로 MapReduce 작업을 돌려보기 - 1 (0) | 2020.11.22 |
[AWS Lambda] AWS EFS를 Lambda 저장소로 사용하기 (2) | 2020.11.05 |
Comments