-
Serverless Framework로 AWS Lambada 배포하기💻 프로그래밍/AWS 2023. 4. 1. 22:57
안녕하세요! 오랜만에 돌아온 개발자 JAY입니다! 요즘 좀 업무에 집중하고 이것저것 하다 보니 글을 진짜 오랜만에 쓰네요 ㅋㅋ 오늘은 신규업무를 하면서 알게 된 Serverles Framework에 대해서 설명해보려고 합니다.
1. What is Serverless Framework
Severless Framework 홈페이지에 들어가게되면 대문짝만 하게 위와 같은 설명이 나옵니다. AWS 람다 앱 auto-scaling을 위한 all-in-one 개발 솔루션이라고 하네요 ㅋㅋ
serverless framework는 람다 배포를 야믈(yaml) 파일 형태로 배포할 수 있게 해주는 솔루션 입니다. 보통 람다는 AWS 콘솔에 들어가서 직접 수정할 수도 있지만 serverless framework를 이용하면 배포와 인프라 세팅을 손쉽게 할 수 있습니다.
2. AWS Lambda 배포하기
자, 이제 serverless framwork를 통해 간단한 람다 api를 만들어 보겠습니다.
📌 첫 번째로 serverless framework를 설치합니다.
npm install -g serverless
설치가 완료되면 제대로 설치되었는지 버전확인을 한번 해봅니다
serverless --version 혹은 sls --version
📌 두 번째로는 프로젝트를 생성합니다.
serverless 혹은 sls
저는 node.js 프로젝트를 생성했습니다.
📌 세 번째로 생성된 프로젝트 경로에 가서 로컬환경에서 람다함수를 실행합니다.
sls invoke local --function helloWorld
📌 네 번째로 배포를 위해 AWS 계정 세팅을 합니다.
배포 시 AWS계정을 사용하는 방법은 여러 가지가 있는데 저는 aws profile을 세팅해서 진행했습니다. 몇 가지 이유가 있는데 default로 회사계정을 사용하고 있어서 제 개인계정으로 쉽게 사용하기 위해서 aws profile 방식을 선택했습니다.
~/.aws/credentilas파일에서 아래와 같이 프로필을 세팅합니다. AWS IAM 계정을 생성하는 방법은 별도로 다루지 않겠습니다. AWS IAM 계정 생성 시 인프라 세팅을 위한 권한이 필요합니다. 저는 테스트를 위해 adminisrator 권한이 있는 IAM 계정을 사용했습니다
[profileName1]
aws_access_key_id=***************
aws_secret_access_key=***************
[profileName2]
aws_access_key_id=***************
aws_secret_access_key=***************배포 명령어는 아래와 같습니다.
serverless deploy --aws-profile devProfile
배포전 yaml파일을 살짝 수정하겠습니다. 저는 HTTP GET 호출을 사용하기 위해서 다음과 같이 events를 추가했습니다.
자 이제 배포를 해보겠습니다!
배포가 잘 되었고 api endpoint까지 공유를 해주네요!
3. serverless framework 이거 무슨 magic이야?
간단한 serverless framwork 프로젝트 생성부터 배포까지 해봤는데요. 처음 보면 되게 마법 같다고 생각하시겠지만 알고 보면 그렇지 않습니다.
배포하고 이것저것 생성된 인프라를 보니까 CloudFormation이란게 생성되어 있더라고요. CloudFormation은 aws인프라를 템플릿을 통해 생성하고 배포하는 서비스입니다.
아마도 serverless framework는 CloudeFormation을 사용해서 인프라 구성을 하는 것 같아요. 직접 CloudeFormation을 사용할 수 도 있지만 좀 더 편하게 구성할 수 있게 도와주는 것 같습니다.
CloudeFormation에 가보면 어떤 이벤트들이 있었고 어떤 리소스가 생겨났는지 한 번에 확인할 수 있습니다. 저같은 경우는 HTTP 이벤트를 사용한다고 yaml에 적었기 때문에 API Gateway까지 자동으로 생성되고 람다와 연결된걸 확인 할 수 있었습니다.
생성된 CloudeFormation 스택을 제거하면 연관된 인프라들도 자동으로 삭제가 됩니다.
4. 트러블 슈팅
serverless framework docs에 설명이 잘 되어있어서 크게 어려운 부분은 없었는데요. 다만 권한 설정하는데 시간을 많이 소비했던 것 같습니다.
배포할 때 사용할 리소스들에 대한 권한이 IAM 계정에 없으면 위처럼 에러를 뿜습니다. 위 에러는 처음에 제가 CloudFormation에 대한 권한을 주지 않아서 에러가 나더라고요 ㅎㅎ 근데 이게 일일이 사용할 인프라들에 대한 권한을 줘야 하다 보니 한 5개 추가하다가 계속 에러가 나서 그냥 administrator 권한을 줘버렸습니다 ㅎㅎ
근데 실무에서는 보안을 위해서 실제 사용하는 인프라에 대한 권한만 줘야 합니다. 회사 동료는 한 60개를 한 땀 한 땀 직접 찾아서 넣었다고 하네요...😭 저는 그냥 맛보기니까 그냥 administrator로 했...지만 ㅋㅋㅋ
5. 마치며
람다를 사용할 일이 크게 없었어서 serverless framework와 같은 서비스가 있는지 몰랐고 실제로 사용해 보니 정말 편하네요! serverless framework 말고도 AWS SAM과 같은 서비스들도 있다고 합니다.
람다를 적재적소에 잘 사용하면 좋기 때문에 여러분들도 한번 간단하게 실습을 해보시면 좋을 것 같습니다! 그럼 오늘도 좋은 하루 보내시길 바랍니다!
참고
'💻 프로그래밍 > AWS' 카테고리의 다른 글
AWS Secret Manager그리고 Lambda Extension (1) 2023.11.30 AWS 프리티어 사용량 이상 과금 청구 (2) 2017.10.05 [AWS]AWS 가입했는데 서버접속이 안된다고?![AWS 포트 설정] (0) 2017.09.06