AWS 람다(Lambda)로 Python 서버 API 구현하기 ② 나만의 API 만들기
우리는 일반적으로 파이썬(Python)의 다양한 라이브러리를 이용하여 프로그램을 작성합니다. 하지만 AWS Lambda는 파이썬의 기본 라이브러리만 제공합니다. 머신러닝(Machine Learning)이나 크롤링 등을 이용하기 위해서는 추가적인 라이브러리를 사용해야 하므로 별도의 작업이 필요합니다.
AWS Lambda는 라이브러리 파일을 통째로 압축해서 올려서 사용할 수 있도록 제공하고 있습니다. 따라서 한 번 크롤링을 위한 bs4 라이브러리를 이용한 파이썬 예제가 있다고 가정해 보도록 하겠습니다.
아래의 소스코드를 구동시키면 bs4 라이브러리를 이용하여 구글(Google) 메인 페이지에 존재하는 모든 <a> 태그의 텍스트 부분을 크롤링하여 출력하게 됩니다.
import urllib.request
from bs4 import BeautifulSoup
url = "https://www.google.com"
soup = BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")
a_tags = soup.find_all("a")
result_list = []
for i in a_tags:
result_list.append(i.get_text())
print(result_list)
이러한 동작을 하는 API를 AWS Lambda를 이용하여 구현하고 싶다면 어떻게 하면 될까요? 방법은 매우 간단합니다. 먼저 bs4 라이브러리가 사용되므로 이 라이브러리를 패키지 형태로 압축해야 합니다.
한 번 위와 같이 하나의 폴더를 만든 뒤에 명령 프롬프트(CMD)를 이용하여 해당 경로에 들어가 보겠습니다. 이후에 bs4를 설치하되 현재 폴더 위치에 설치하도록 -t 옵션을 붙입니다.
pip3 install bs4 -t .
이제 현재 폴더의 위치에 있는 모든 파일을 압축하여 bs4.zip 라는 압축 파일을 만듭니다.
그러면 bs4.zip 파일이 생성되어 있는 것을 확인할 수 있습니다.
이제 우리의 AWS Lambda 프로젝트를 확인합니다.
이제 [.zip 파일 업로드] 유형을 선택한 뒤에 우리의 bs4.zip 파일을 업로드하면 됩니다.
우리가 업로드 한 파일은 말 그대로 bs4 라이브러리를 통째로 압축한 파일이므로 lambda_function.py 파일이 존재하지 않는다고 출력되는 것을 확인할 수 있습니다. 왜냐하면 AWS Lambda의 Python 프로젝트의 기본 핸들러는 lambda_function 파일의 lambda_handler로 설정되어 있기 때문입니다.
따라서 [File] 탭을 열어서 하나의 파이썬 파일을 작성하면 됩니다. lambda_function.py라는 이름으로 짓습니다.
import json
import urllib.request
from bs4 import BeautifulSoup
def lambda_handler(event, context):
url = "https://www.google.com"
soup = BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")
a_tags = soup.find_all("a")
result_list = []
for i in a_tags:
result_list.append(i.get_text())
return {
'statusCode': 200,
'body': json.dumps(result_list)
}
이제 위와 같이 소스코드를 작성합니다. 기본적인 핸들러 함수는 lambda_handler이므로 함수의 이름을 이와 같이 지어줍니다. 매개변수 또한 차례대로 event, context를 넣어주세요. 람다 함수는 어떠한 결과 데이터를 return하는 방식으로 작성해주시면 됩니다.
결과적으로 이렇게 만들어진 람다 함수를 테스트하기 위해 [저장] 버튼을 누르시면 됩니다.
테스트 결과 실제로 크롤링 결과가 잘 출력되는 것을 확인할 수 있습니다.
'AWS' 카테고리의 다른 글
AWS SNS로 문자 메시지(SMS) 전송하기 (PHP 구현) (1) | 2019.04.16 |
---|---|
Python boto3을 이용하여 AWS S3과 연동하기 (1) | 2019.04.10 |
AWS EC2 인스턴스를 이미지(AMI)로 만들어 그대로 저장하기 (0) | 2019.04.09 |
AWS 람다(Lambda)로 Python 서버 API 구현하기 ① Hello World (0) | 2019.04.09 |
AWS S3 사용 방법 및 Cloud Front 적용해보기 (1) | 2019.04.01 |