현우의 개발노트

AWS Lambda 와 API Gateway 를 이용한 Image Resizing - 1

2018-02-08

  1. AWS lambda 에 들어가서 ‘함수생성’ 을 해줍니다.lambda_tutorial_1

  2. 1번 화살표에는 생성할 함수명을 작성해주고, 2번 화살표에는 Node.js 버전을 설정하는 것인데 건드릴 필요가 없습니다. 3번 화살표에는 뒤에 설명할 역할이라는 것을 설정하는 것인데 일단 처음은 ‘사용자 지정 역할 생성’ 을 누릅니다.lambda_tutorial_2

  3. 새로운 화면이 뜨면 ‘허용’ 을 누릅니다.lambda_tutorial_3

  4. 다시 원래화면으로 돌아오면 1번 화살표에 ‘lambda_basic_execution’ 을 선택하고 2번 화살표에 따라 함수생성을 눌러 완료합니다.lambda_tutorial_4

  5. 1번 화살표처럼 ‘코드 인라인 편집’ 을 통해 직접 코드를 입력하여 편집하거나 2번 화살표가 가리키는 ‘.ZIP 파일 업로드’ 를 통해 파일을 통째로 올리는 방식을 통해서 실행시킬 함수를 구현합니다. 저 같은 경우 이상하게 ‘Loading your function’ 만 떠서 로컬에서 작업한 코드를 npm install 까지 마친후 node module 과 package.json, js 파일을 *압축하여 업로드하였습니다.

    맥에서 파일을 압축시 불안정하게 압축이 되어 Lambda 실행이 잘 안될수 있습니다. (Error: Cannot find module ‘/var/task/index) 따라서 압축을 할때에는 터미널을 통해 압축하고자하는 파일경로로 들어가 ‘zip -r ../yourfilename.zip *’ 명령어를 사용하여 압축하면 해결가능합니다.

    lambda_tutorial_5

  6. 아래로 스크롤 하다보면 ‘실행 역할’ 과 ‘기본 설정’ 이 보입니다. 기본 설정에서 시간은 30초 정도로 설정해주고(제가 알기론 Lambda 가 최대 30초까지 지원한다고 합니다.) 그다음 실행 역할을 설정해주어야 합니다. 실행 역할이란 Lambda 에 IAM 역할을 설정해주는 것인데 권한을 부여한다고 생각하시면 됩니다. 앞으로 연동할 S3에 접근 가능한 권한, Gateway에 접근할수 있는 권한을 부여하는 것입니다. 권한은 접근하고자 하는 플랫폼에만 권한을 줄 수 있지만, 우리는 예제이기에 모든 권한을 부여하도록 하겠습니다.lambda_tutorial_6

  7. AWS 의 IAM 에 들어가서 1번 화살표가 가리키는 ‘역할’ 을 누릅고 ‘역할 만들기’ 를 통해 새로운 역할을 만듭니다.lambda_tutorial_7

  8. Lambda 에 권한을 줄 것이기에 ‘Lambda’ 를 하고 ‘다음’ 을 누릅니다.lambda_tutorial_8

  9. 최상단에 보이는 ‘AdministratorAccess’ 를 클릭하면 모든 서비스에 대한 권한을 부여받게 됩니다. 테스트용이기에 편의상 선택하고 ‘다음’ 을 눌러 넘어갑니다.lambda_tutorial_9

  10. ‘역할 이름’ 에 원하는 이름을 작성하고 ‘역할 만들기’ 를 눌러 역할 만들기를 완료합니다.lambda_tutorial_10

  11. 다시 Lambda(createThumbnailFunction) 로 돌아와서 설정하지 못했던 ‘실행 역할’ 에 방금 전 만들었던 역할을 선택합니다.lambda_tutorial_11

  12. 역할까지 선택을 다하면 함수 코드를 다시 한번 잘 등록되었는지 확인하고(역할 만들러 가는 순간 화면이 전환된다면 코드가 지워집니다.) ‘저장’ 버튼을 눌러 꼭! 저장을 합니다.lambda_tutorial_12

  13. 저장이 완료되면 위 그림에서 화살표가 가리키고 있는 ‘Amazon CloudWatch Logs’ 가 ‘모든’ 으로 바뀌는 것을 볼수 있을 것입니다.(역할 설정을 모든 역할로 설정하였기 때문) 이젠 S3 를 연동하기 위해 ‘S3’ 를 클릭하여 ‘왼쪽 목록에서 트리거 추가’ 를 해주어야 하지만 그전에 S3 를 먼저 생성하도록 하겠습니다.lambda_tutorial_13

  14. AWS S3 로 이동하여 새로운 버킷을 만들어줍니다. 버킷 이름을 작성하고 별다른 설정없이 ‘다음’ 을 누르다 ‘버킷 만들기’ 를 통해 S3 를 만듭니다.lambda_tutorial_14lambda_tutorial_15

  15. 이렇게 만든 S3 bucket 은 메인으로 두고 thumbnail 을 저장하기 위한 서브 bucket 을 같은 방식으로 하나 더 만들어 줍니다. 서브 bucket 의 이름은 반드시 메인 bucket 이름 뒤에 ‘-resized’ 가 붙은 이름으로 생성합니다. Lambda 에서 찾아갈 서브 bucket 이름을 그렇게 설정해놓았기 때문에 이름이 바뀌면 제대로 된 실행이 불가합니다.

  16. 메인 bucket 에 들어가서 ‘images’ 라는 이름의 폴더를 만듭니다. 폴더 이름 또한 Lambda 가 찾아갈 경로로 설정해놓았기 때문에 틀리면 안됩니다.lambda_tutorial_16

  17. 이제 모든 준비는 끝났습니다. 다시 Lambda(createThumbnailFunction) 로 돌아가서 S3 를 클릭하여 트리거에 추가합니다.lambda_tutorial_17

  18. 아래로 스크롤하여 ‘이벤트 유형’ 과 ‘접두사’ 를 설정하고 ‘추가’ 를 클릭하여 S3 설정을 완성합니다. 이벤트 유형의 경우 S3 에서 발생하는 이벤트 종류를 선택하여 해당 이벤트가 발동시 Lambda 로 트리거가 발동되어 함수를 실행시키기 위해 필요한 설정입니다. S3 에 image 가 추가되거나 삭제되는 등 구체적인 이벤트를 설정할 수 있으나 편의상 ‘모두’ 로 설정합니lambda_tutorial_18

  19. S3 를 추가하였으면 ‘저장’ 을 눌러 모든 설정을 마칩니다. 이제 S3 와 Lambda 의 설정을 마쳤으니 S3 의 메인 bucket 으로 가서 용량이 어느정도 큰 이미리를 로드시켜 테스트를 해봅시다. 서브 bucket 에 resizing 된 thumbnail image 가 자동 생성된다면 Lambda 기능구현을 완성하게 됩니다.lambda_tutorial_20

Tags: AWS
후원

이 포스트가 도움이 되었다고 생각하시면, 위의 버튼을 클릭하여 후원해주세요.

이 포스트를 공유하려면 QR 코드를 스캔하세요.