관리 메뉴

JIHYUN JEONG

[Spotify Data Analysis/스포티파이 데이터 분석] AWS Lambda(람다) 필요한 패키지/라이브러리 올리기 (9) 본문

Data Science/Data Analysis

[Spotify Data Analysis/스포티파이 데이터 분석] AWS Lambda(람다) 필요한 패키지/라이브러리 올리기 (9)

StopHyun 2020. 3. 21. 16:50

AWS Lambda(람다) 활용법에 대해서 살펴보겠습니다.

 

AWS Lambda > 함수 생성 합니다.

 

함수 생성에서 보면 3가지 옵션 중 '새로 작성' 으로 선택

'함수 이름' 은 원하는 이름 입력하고 런타임은 파이썬 3.7로 하고 '실행 역할'은 기본 Lambda 권한을 가진 새 역할 생성으로 합니다.

 

함수를 생성하면 환경 변수가 있는데 이건 spotify 에 사용할 client_secret, client_id 값을 넣어줍니다.

 

'기본 설정 편집'에 들어가면 메모리와 제한 시간을 정의 할 수 있는데 메모리를 1024MB로 늘려주고, 제한 시간은 1분 정도로 설정합니다. 제한 시간은 해당 Lambda 함수가 실행 될 예상시간으로 그 시간이 넘어 갈 경우 에러로 간주합니다.

AWS Lambda는 서버리스 서비스로 코드를 바로 작성 할 수 있습니다. 하지만 지난 시간 EC2에서 경험했듯이 해당 Lambda에는 우리가 필요로 하는 패키지들이 설치가 되어 있지 않습니다. 따라서 해당 모듈들을 불러서 쓸 필요가 있습니다.

 

필요한 파일들은 아래와 같습니다. 우선 임의 폴더를 하나 만듭니다. top-tracks 라고 이름을 정했습니다. 아래 파일에 대해선 하나하나 설명하겠습니다.

 

AWS Lambda(람다)에서 사용할 파이썬 스크립트 코드는 lambda_function.py 입니다. 우리가 필요한 모듈은 아래와 같습니다.

import sys
import requests
import base64
import json
import logging
import os
import boto3

 

requirements.txt 파일을 만들고 requests를 입력하고 저장합니다.

 

pip3 install -r requirements.txt -t ./libs

 

t가 의미하는 것은 타겟 입니다.

 

혹시, must supply either home or prefix/exec-prefix --not both 라는 에러가 발생할 경우

 

setup.cfg 파일을 만들어서 아래와 같이 입력해주고 저장한 뒤 다시 pip3 install -r requirements.txt -t ./libs 실행합니다.

 

 

lib 폴더에 여러 파일들이 생성되었습니다. 파일내에 필요가 없는 형식인 dist-info를 아래의 명령어로 지워줍니다.

rm -r *.dist-info

 

이제 AWS command 실행을 매번 입력하기 보다는 쉘스크립트(sh)를 하나만들어서 실행시켜두는게 훨씬 편리합니다.

 

따라서 deploy.sh 파일을 하나 만들고 아래와 같이 입력해줍니다. 

 

rm은 remove라서 ./libs 삭제하고 pip3를 requirements.txt 에 있는걸 설치하고 타겟 폴더는 ./libs 입니다. 그리고 해당하는 .zip 파일들을 모두 삭제한 다음 zip명령어를 통해 top_tracks.zip으로 zip파일을 만듭니다. 

 

그 다음 s3에 버킷을 만듭니다. 버킷 이름은 top-tracks-lam으로 만들었습니다. cp 명령어는 해당 폴더에 있는 top_tracks.zip 파일을 우리가 만들어논 s3 버킷에 복사해줍니다. 마지막 코드는 우리가 이전에 만들어논 AWS lambda의 이름이 top-tracks 이고 그리고 우리가 s3 버킷에 넣었던 top-tracks-lam 해당 키는 top_tracks.zip 으로 입력해줍니다.

#!/bin/bash

rm -rf ./libs
pip3 install -r requirements.txt -t ./libs

rm *.zip
zip top_tracks.zip -r *

aws2 s3 rm s3://top-tracks-lam/top_tracks.zip
aws2 s3 cp ./top_tracks.zip s3://top-tracks-lam/top_tracks.zip
aws2 lambda update-function-code --function-name top-tracks --s3-bucket top-tracks-lam --s3-key top_tracks.zip

 

 

성공적으로 실행되면 아래와 같은 결과가 나옵니다.

그리고 다시 AWS lambda로 가면 우리가 top-tracks 폴더에 만들었던 모든 파일과 파이썬 스크립트 코드가 입력되어 있는 것을 확인 할 수 있습니다.

 

 

Comments