S3 Trigger를 이용한 이미지 리사이징 솔루션 구축하기

AWS SAR(Serverless Application Repository) 개념

AWS Serverless Application Repository는 서버리스 애플리케이션용 관리형 리포지토리입니다. 이를 사용하여 팀, 조직 및 개인 개발자는 재사용 가능한 애플리케이션을 저장 및 공유하고, 강력하고 새로운 방식을 통해 서버리스 아키텍처를 손쉽게 어셈블 및 배포할 수 있습니다. Serverless Application Repository를 사용하면 배포 전에 소스 코드를 AWS에 복제, 빌드, 패키징 또는 게시할 필요가 없습니다. 대신 서버리스 아키텍처의 Serverless Application Repository로부터 사전 빌드된 애플리케이션을 활용할 수 있으며, 이를 통해 팀의 중복된 작업을 줄이고, 조직의 모범 사례를 보장하고, 출시 시간을 단축하는 데 도움이 됩니다.

각각의 애플리케이션은 사용되는 리소스를 정의하는 AWS SAM(Serverless Application Model) 템플릿과 함께 패키징됩니다. 공개적으로 공유되는 애플리케이션에는 애플리케이션의 소스 코드에 대한 링크도 포함되어 있습니다. Serverless Application Repository 사용에는 추가 요금이 없으며, 배포하는 애플리케이션에서 사용된 AWS 리소스에 대해서만 요금을 지불하면 됩니다.


실습 목표

이번 실습에서는 AWS Serverless Application Repository에서 제공되는 샘플 람다 애플리케이션을 배포하여 손쉽게 서버리스 솔루션을 구축하는 방법에 대해 알아 봅니다.


이미지 리사이징 솔루션 구축하기

  1. AWS 콘솔 창에서 Amazon S3 화면으로 이동한 후, Create bucket 버튼을 클릭하여 버킷을 생성합니다.

  2. 버킷명은 {사용자이름}-changed-images로 입력한 뒤, 리전은 ap-northeast-2로 지정한 후, 버킷을 생성합니다. S3 버켓명은 전세계적으로 유일해야 생성할 수 있습니다.

이어지는 실습에서 해당 S3 버킷명을 사용하기에 생성한 버킷명을 꼭 기억해두세요!

  1. AWS 콘솔 창에서 AWS Lambda 화면으로 이동 후, Functions 클릭 > Create function을 클릭하여 람다 함수 생성 작업을 시작합니다.

  2. AWS SAR에 이미 공개되어 있는 애플리케이션을 사용하기 위해 Browse serverless app repository를 선택한 후, 아래의 검색 창에서 resize를 입력합니다. 입력 결과로 아래와 같이 이미지를 리사이징하는 함수가 나오면 클릭합니다.

  3. destBucket에 방금 생성한 버킷명을 인자 값으로 입력합니다. 그 다음, sourceBucket에 리사이징할 이미지를 저장할 버킷명(SAR를 통해 자동으로 생성되는 버킷)을 입력합니다. 이때, sourceBucket에 입력하는 버킷명도 전세계적으로 유일해야 합니다.

  4. 배포가 완료될 때까지 기다립니다. 그 후, 왼쪽 사이드바에서 Applications를 클릭하면 방금 생성한 애플리케이션을 확인할 수 있습니다.

    또한, 해당 애플리케이션의 구성 요소인 람다 함수도 생성된 것을 확인할 수 있습니다.

    이때, 배포 작업 흐름을 파악하고 싶다면 AWS CloudFormation 콘솔 창에 들어가 해당 스택을 클릭 > Events 탭을 클릭하면 배포 과정을 확인할 수 있습니다.

  5. 3번 작업을 반복하여 이번에는 이미지를 업로드하는 애플리케이션을 생성합니다. 이때, 검색 창에 uploader를 입력한 후, uploader 함수를 선택하여 배포합니다.

  6. destBucket에 5번 작업에서 sourceBucket으로 입력한 버킷명을 인자 값으로 넣은 후, 배포합니다.

  7. 두 함수를 배포한 결과는 아래와 같습니다.

  8. Functions 메뉴에서 uploader 함수를 클릭합니다.

    해당 페이지에서 Function overview에 있는 API Gateway를 클릭합니다. 또한, 해당 화면을 통해 uploader 함수는 API Gateway에 의해 트리거되는 함수임을 파악할 수 있습니다.

    아래와 같은 화면에서 API Gateway 하이퍼링크를 클릭합니다.

  9. API Gateway 콘솔창에서 Settings에서 이미지의 바이너리 파일이 처리될 수 있도록 화면과 같이 설정합니다. 이미 */*의 값이 적혀있다면 추가 작업을 할 필요 없습니다.

  10. 그 다음 Resources 항목에서 Actions 클릭 > Deploy API를 클릭합니다.

    해당 작업을 통해, API를 배포하여 외부에서 접근이 가능하도록 설정합니다.

  11. 외부에서 해당 함수에 접근할 URL(Invoke URL)을 클릭합니다.

    웹 브라우저에서 아래와 같은 화면을 확인할 수 있습니다.

  12. 해당 웹 브라우저에서 본인의 컴퓨터에서 JPG 이미지 파일을 드래그하여 **Drop files here!**에 놓습니다. 만약 준비한 사진이 없다면 아래의 사진을 우클릭하여 저장한 후, 작업을 수행합니다.

    작업이 성공적으로 수행되면 아래와 같이 업로드한 파일명이 표시됩니다.

  13. S3 콘솔로 이동하여 {사용자이름}-input-images 버킷을 선택하면 웹 브라우저에서 드래그한 파일이 S3 버컷에 저장된 것을 확인할 수 있습니다.

    드래그한 파일이 리사이징된 것을 확인할 수 있습니다.

  14. API Gateway 콘솔로 다시 돌아와 GET 및 POST 요청시 실행되는 Lambda 함수를 확인합니다.

  15. 아래의 화면에서 해당 함수가 작동하는 로직에 대해 파악할 수 있습니다.

  16. Lambda 함수의 성능 모니터링을 위해, Configuration 탭 클릭 > Monitoring and operations tools 클릭 > Edit 버튼을 클릭합니다.

    아래의 화면에서 Active tracing 토글 버튼을 활성화한 후, Save 버튼을 클릭합니다.

    위의 작업을 uploader 함수resize 함수 모두 적용합니다.

  17. 다시 API Gateway 콘솔로 돌아와 X-Ray Tracing을 활성화합니다.

  18. 웹 브라우저에서 다시 한번 이미지를 넣습니다.

  19. 위의 작업을 통해, POST API 요청이 수행된 것입니다. 각 요소들의 성능을 확인하기 위해 X-Ray 콘솔로 이동합니다. Service map 메뉴에서 로직의 흐름 및 성능을 확인할 수 있습니다.

    Traces 메뉴에서 람다 함수의 성능을 파악할 수 있습니다.

이로써 SAR를 통한 이미지 리사이징 솔루션 구축 실습을 완료하였습니다. 추후, 비용이 부과되지 않기 위해, 5. 실습 리소스 정리 페이지로 이동하여 자원을 삭제합니다.