On the journey of

[AWS 사전공인교육] 4. AWS의 서비스 종류 본문

Experiences & Study/AWS

[AWS 사전공인교육] 4. AWS의 서비스 종류

dlrpskdi 2023. 10. 11. 23:54

4-1. Lambda Trigger

1. HTTP API vs REST API

: 결론부터 말하자면 아래와 같다. 그렇다면 HTTP API부터, AWS가 어떻게 서비스를 제공하는지 살펴보자. 

HTTP API

1) 트리거 추가

2) API Gateway 선택

3) 구성 설정

4) Security & CORS 설정

생성된 API endpoint 링크를 클릭하면 기존에 만들었던 Lambda 함수가 실행된다. 

 

Rest API

이후 저 트리거 추가에서

그리고 이때 API NAME 은 http api 의 name 과 다르게 정해야 한다!

그러면 API Endpoint가 생성된 것을 확인할 수 있다 :)


그리고 저 트리거 추가에서, Scheduler가 필요하면 EventBridge를 검색해 추가하면 된다. 

구성은 아래 화면과 같다. 

  • rate(5 minutes) 와 같음.
  • 예약 표현식 공식 설명은 여기 참고, 예제는 여기 참고하면 좋다 :)
  • 상황에 맞게 스케줄을 입력하고 "추가"
cron 표현식 예제 (우측부터 역순으로 가면 됨)
  1. 매일 3시 30분에 실행: 30 3 * * ? *
  2. 매주 월요일 5시에 실행: 0 5 * * 1 *
  3. 매주 금요일 9시 30분에 실행: 30 9 * * 5 *
  4. 매월 15일 10시에 실행: 0 10 15 * ? *
  5. 매년 1월 1일 12시에 실행: 0 12 1 1 ? *
  6. 매시간 30분마다 실행: 0 0/30 * * * ?
  7. 매일 새벽 1시에 실행: 0 1 * * ? *
  8. 매일 오후 3시에 실행: 0 15 * * ? *
  9. 매월 마지막 날 9시에 실행: 0 9 L * ? *
  10. 매주 일요일 8시에 실행: 0 8 * * 0 *

Lambda - from Zip 의 lambda function 으로 실행 테스트

    • 로그를 확인해 보니, 5분마다 실행
  •  

이를 갖고 Python OCR API 기능을 lambda를 통해 구현해보자.

수정) 구현해보고자 하였으나, 아래 제약조건으로 인해 결국 불가하다는 결론이 나왔다. 

제약조건이 있다. 소스용량은 10MB 이내, 처리 시간은 15분 이내여야만 하며, 그렇지 않으면 library 사용이 불가하다. 

import json
import requests
from PIL import Image
import easyocr


def lambda_handler(event, context):
    try:
        body = json.loads(event['body'])
        print(body['image_url'])
        im = Image.open(requests.get(body['image_url'], stream=True).raw)

        reader = easyocr.Reader(['ch_sim', 'en'])
        result = reader.readtext(im)
        return {
            'statusCode': 200,
            'body': result
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'body': str(e)
        }

위와 같이 lambda_function.py 파일을 작성, 저장한다. 

#python library download
!pip install requests Pillow easyocr -t .

#zip
zip -r lambda.zip .
Trouble
  • .zip 파일 업로드 사이즈 제한

S3 파일 업로드 사이즈 제한 : 생성한 zip 파일의 크기가 320MB 이기 때문에 불가

4-3. Usecase

위의 경우가 실패했으니까 다른 usecase로 넘어오자. 

CarryShot : 골프 자세를 의미한다. 
  • Serverless
  • Android App

Carryshot 관련 유튜브 동영상 재생 목록을, Youtube API를 사용하여 조회 및 갱신해보자. 

C. AWS Korea

  • app main 접속 시 youtube api 호출
  • Fail Point
    • 사용자 증가
    • 무료로 제공되는 건수의 제한
  • 1차 개선
    • 일주일에 한번 로컬에서 python 스크립트를 실행하여 json 파일을 생성함
    • 생성된 json 파일을 github 에 업로드 함
    • App 에서는 고정된 github raw file 을 load

여기서 2차 개선을 진행하였다. 

  • Scheduler → EventBridge 로 자동화
  • Script 실행 → AWS Lambda 에서 Python 실행
    • youtube api 호출
    • github file upload 호출
  •  

로또 앱 : 매주 로또 당첨 번호 및 통계 갱신 
  • 같은 방식으로 개선 완료
  • 매주 토요일 밤 한번 크롤링 → 당첨번호 data를 file로 업로드
  • 제약사항 중 lambda의 실행 시간은 최대 15분임에 주의