주기적인 모델 호출을 위해서 Sagemaker 에서 생성한 Endpoint 를 호출하는 Lambda함수를 만들어보려한다.
처음에 무식하게 해보니 오류의 연속이어서 차근차근 알아낸 방법을 정리해보겠다.
AWS Lambda는 AWS 서비스를 사용하고싶다면 따로 해당 서비스에 대한 권한을 줘야 사용이 가능하다.
권한없이 함수에서 해당 서비스를 호출하면 AccessDeniedException 오류가 발생한다ㅜㅜ
자세한 관련글은 이전 포스팅에 작성해두었다.
우선 Lambda 함수를 생성한다.
Lambda 함수에 코드를 올리는 방법은
1) 직접 코드를 작성하거나 2) 코드와 패키지를 zip파일로 업로드 3) S3에서 업로드 하는 방법
3가지가있다. 단 코드를 업로드시 50MB의 제한이 있으니 50MB가 넘는다면 zip파일말고 S3에서 업로드를 하는 방법을 사용해야한다.
Lambda IAM 권한 설정 참고포스팅
생성한 Lambda 함수에서 sagemaker endpoint를 사용하고싶다면
Lambda함수의 IAM role에 아래처럼 Sagemaker - invoke_endpoint 의 읽기 권한을 주어야한다!
또한 나는 추가적으로 S3에서 파일을 받아오고 저장하고싶어서 AmazoneS3FullAccess 권한도 추가해줬다.
Layer 추가 참고포스팅
나는 python3.7로 람다함수를 작성하였는데 pandas 와 같은 라이브러리를 임포트하려고하니 오류가 발생했다.
알고보니 람다에서는 용량때문에 자체제공해주는 라이브러리가 적었다.
그래서 원하는 라이브러리는 코드를 업로드할때 라이브러리를 설치한 환경으로 같이 업로드하던가
아니면 Lambda Layer에 추가해주고 사용해주어야한다.
자세한 설정사항은 다른 포스팅에 작성해두었으니 라이브러리를 사용할 사람은 참고하면 될것같다.
일반구성 설정
구성> 일반구성 설정에서 코드 실행 제한시간과 메모리를 늘려준다.
기존 3초였는데 이는 너무 짧아서 오류가 계속 발생하여 넉넉하게 5분으로 설정하고 메모리도 늘려주었다.
Lambda함수 작성
python3.7로 람다를 작성한다면 기본적으로 lambda_function.py 파일과 그안에 lambda_function함수가 생성되는데
이 함수가 람다함수가 실행될때 메인으로 실행되는 핸들러이다. 이를 바꾸고싶다면 람다화면 하단에 핸들러를 변경해주면 된다.
아래와 같이 엔드포이트 호출하는 로직을 작성해주면 된다.
엔드포인트 사용시 payload에 데이터를 담아서 보내는데 형식에 유의하여 보내야한다.
Lambda 크리거 생성
람다 함수 화면에서 트리거생성을 클릭하여 트리거를 만들수있다.
EventBridge(CloudWatch Events)를 이용해 트리거를 생성해주었다.
Rate나 Cron을 이용해 예약표현식을 생성할수있다. 아래와 같이 생성해주면 매일 오전10시15분에 트리거가 실행된다.
짠! 이렇게 설정을 완료하고 람다함수를 작성하면 설정한 트리거에 맞춰서 람다함수가 실행된다 ㅎㅎ
처음 AWS를 사용해보는터라 많이 헤맸지만 하나의 플로우를 완성하니 매우 뿌듯하다
https://www.sagemaker-workshop-kr.com/kr/apps/internet_facing_app/_module_4.html
'DevOps > AWS' 카테고리의 다른 글
AWS EC2서버 접속하기 - for Mac,Window (0) | 2021.09.26 |
---|---|
AWS Lambda(람다)란 (1) | 2021.08.24 |
AWS Lambda Scikit-Learn Layer생성하기 (1) | 2021.08.20 |
Lambda에서 Pandas, Numpy Layer로 사용하기 (0) | 2021.08.11 |
AWS Tensorflow 모델 배포 및 endpoint 생성하기 (0) | 2021.08.05 |
댓글