Python boto3을 이용하여 AWS S3과 연동하기
AWS S3는 이미지, 동영상 등 다양한 파일을 저장하기 위한 목적으로 사용할 수 있는 서비스입니다. Python에서 AWS S3에 다양한 파일을 업로드하기 위해서는 boto3라는 이름의 라이브러리를 사용해 연동할 수 있습니다. 따라서 실습을 위해 AWS S3 서비스로 이동하여 [버킷 만들기]를 진행하겠습니다.
버킷은 특정한 파일이 저장되는 루트 폴더라고 이해할 수 있습니다.

버킷의 이름은 임의대로 설정해줍니다.

다른 구성은 기본 설정대로 진행하시고 간단한 실습을 위해 [권한 설정] 탭에서는 모든 체크를 해제해주겠습니다.

결과적으로 버킷이 생성된 것을 확인할 수 있습니다.

이제 이러한 버킷에 프로그래밍을 이용해서 파일을 업로드하거나 다운로드 받을 수 있습니다. 이 때는 [내 보안 자격 증명]에 들어가시면 됩니다.

자격 증명을 생성하실 때에는 IAM Users를 이용하여 [사용자 추가]를 진행하시면 됩니다.


저는 다음과 같이 사용자 이름을 대충 설정한 뒤에 [프로그래밍 방식 액세스]에 체크했습니다.

이후에 정책으로는 [AmazonS3FullAccess]를 선택합니다. S3에 접근할 수 있는 권한이라고 이해하시면 됩니다.

결과적으로 사용자가 추가되면 [액세스 키 ID] 및 [비밀 액세스 키]를 확인할 수 있습니다.

이제 실제로 우리의 컴퓨터에서 파이썬(Python)을 이용하여 AWS S3에 파일을 올리거나 다운로드 받을 수 있습니다. 이 때 2가지 라이브러리가 사용됩니다. 바로 boto3와 awscli입니다. 따라서 두 개를 pip3를 이용하여 설치합니다.


이제 awscli가 설치 되었으므로 aws configure 명령을 이용하여 AWS 계정 연결을 수행할 수 있습니다.

이제 파이썬을 이용하여 우리 AWS 계정의 모든 버킷을 출력하도록 할 수 있습니다.
import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)

'AWS' 카테고리의 다른 글
| AWS 람다(Lambda)에서 AWS S3 서비스 이용하기 (0) | 2019.04.17 |
|---|---|
| AWS SNS로 문자 메시지(SMS) 전송하기 (PHP 구현) (1) | 2019.04.16 |
| AWS 람다(Lambda)로 Python 서버 API 구현하기 ② 나만의 API 만들기 (3) | 2019.04.10 |
| AWS EC2 인스턴스를 이미지(AMI)로 만들어 그대로 저장하기 (0) | 2019.04.09 |
| AWS 람다(Lambda)로 Python 서버 API 구현하기 ① Hello World (0) | 2019.04.09 |
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 |