티스토리 뷰
이번에는 Jets을 AWS Lambda에 배포해보겠습니다.
- 배포 전 간단 예시작업
1. 아주 간단하게 scaffold 하나를 만들어보겠습니다.
jets g scaffold post title content:text
2. routes.rb 에서 메인 페이지를 posts#index 로 변경하겠습니다.
## config/routes.rb
Jets.application.routes.draw do
root "posts#index"
resources :posts
any "*catchall", to: "jets/public#show"
end
3. Jets DB의 LOCAL DB가 아닌 다른 호스트에 있는 상태입니다.
DB를 Remote Connect 하겠습니다.
참고 AWS Lambda에서는 Local DB 사용이 안됩니다.
default: &default
adapter: postgresql
encoding: utf8
host: localhost
database: <%= ENV["DB_NAME"] %>_<%= Jets.env %>
username: <%= ENV["USER_NAME"] %>
password: <%= ENV["USER_PASSWD"] %>
pool: 5
reconnect: true
development:
<<: *default
test:
<<: *default
production:
<<: *default
host: <%= ENV["DB_HOST"] %>
- Jets 프로젝트를 AWS Lambda에 자동배포
Jets의 배포는 아주 간단합니다.
1. 터미널에 아래 명령어를 입력해주세요.
# jets deploy [ENVIRONMENT]
# jets deploy development
# jets deploy test
# jets deploy production
jets deploy production
위 명령어 한번만 입력하면 바로 자동으로 배포가 시작됩니다.
저는 production 모드로 배포해보겠습니다.
명령어 한줄만으로 간단하게 jets가 배포되고 있습니다.
2. 중간에 Lambda Layer에 Gem 파일들이 전송되는것에 동의하느냐는 내용이 나오게 되는데, Y 로 대답해주세요.
3. 약 5분정도 되면 모든 배포가 끝납니다.
- AWS Lambda 배포 및 서비스 확인
잘 배포가 되었는지, 잘 돌아가는지 한번 확인해야겠죠.
0. 사실 터미널에서 Deploy 작업이 끝나면 보여지는 URL 링크로 바로 가서 확인할 수 있긴 하나, 저는 직접 AWS 페이지를 통해 확인하는 방법으로 확인해보겠습니다.
1. AWS Lambda 서비스 페이지로 이동합니다.
Lambda 페이지로 가면 저같은 경우는 벌써 뭔가 10개의 Lambda 함수가 만들어졌다고 합니다.
2. 좌측 메뉴에 보이는 함수 메뉴를 클릭해보세요.
그럼 Ruby on Jets에서 만들어냈던 scaffold 구성의 내용들이 보입니다.
3. posts_controller-index 함수를 클릭해주세요.
4. API 게이트웨이를 클릭합니다.
5. API 게이트웨이를 클릭 후 조금만 아래로 내려가면 뭔가 있습니다.
▶ 아이콘을 클릭해서 메뉴를 활성화 해주세요.
6. API 엔드포인트가 보입니다!
바로 접속을 하게 되면 Post Controller의 Index 페이지로 바로 들어가볼 수 있습니다.
7. 반응속도도 정말 괜찮습니다.
진짜 페이지 이동이 일반 서버에서 도라다니는 것 같아요.
- 람다 함수 기본 동작시켜보기
람다는 기본적으로 함수 내에서 코드를 가동시키는 기능입니다.
간단하게 Lambda 함수를 동작시켜보도록 해보겠습니다.
1. AWS Lamabda 서비스 페이지로 이동합니다.
2. 함수 생성 버튼을 클릭합니다.
3. Lambda 함수 이름 및 Runtime 언어를 선택합니다. (저는 Ruby 2.5로 선택했습니다.)
4. 약 20초 뒤면 함수 생성이 완료됩니다.
5. 함수 페이지 내에서 하단에 조금만 내려가면 코드입력기가 보입니다.
여기서 규칙을 잠깐 설명해보겠습니다.
1) 핸들러
핸들러는 코드를 가동시킬 메소드를 가리킵니다.
예를들어, lambda_function.lambda_handler 가 작성되어 있다면,
lambda_function.rb 의 lambda_hander 메소드를 의미합니다.
2) Code entry type
현재는 기본적으로 내부 IDE에서 코드를 입력되게 되어있지만, 이 방법 외에도 zip 파일 업로드 혹은 AWS S3 내에 저장되어있는 파일을 가져와서 사용하는 방법도 존재합니다.
참고 파일 업로드 방법에 있어, 만약 용량이 너무 클 경우 인라인 편집 기능이 안됩니다.
저는 여기서 예제 코드를 그대로 사용해보겠습니다.
require 'json'
def lambda_handler(event:, context:)
# TODO implement
{ statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end
6. 페이지 상단에 보이는 SAVE 버튼을 눌러서 코드를 최신화 해주세요.
7. 이어서 SAVE 바로 왼쪽에 보이는 테스트 버튼을 클릭해주세요.
첫 테스트일 시, 위와같이 새로운 테스트 이벤트를 생성하라곤 하는데 저는 그냥 기본 테스트 타입으로 확인을 합니다.
이벤트 이름은 그냥 여러분들 스타일에 맞게 지어주세요.
이벤트 생성 준비가 끝났다면 생성 버튼을 클릭해주세요.
8. 다시 테스트 버튼을 클릭해주세요.
그럼 아래 같이 응답결과를 잘 받아낼 수 있습니다.
이것이 람다의 기본 동작 반응 예시입니다.
- AWS Lambda 둘러보기
1. 환경변수 설정
Ruby on Jets의 루트 디렉터리에 위치한 .env 파일에 등록해놨던 환경변수가 자동으로 Lambda에 입력된 채로 배포됩니다.
참고 Ruby on Jets : 환경변수 등록
2. 메모리/타임아웃 설정
부록
1) Ruby on Jets : Job 별로 Timeout 설정법
Lambda 함수를 돌릴 때 메모리를 얼마나 돌릴 것이고, Timeout 시간을 정할 수 있습니다.
최대 메모리 : 3008MB
최대 제한시간 : 15분
3. VPC 설정
람다는 유동IP 타입입니다.
하지만 VPC를 활용해서 고정IP로서 함수가 돌아가게 할 수 있습니다.
- 관련자료
1. AWS Lambda Deploy [클릭]
'프로그래밍 공부 > Ruby on Jets : 서버리스 프레임워크' 카테고리의 다른 글
Ruby on Jets : AWS Lambda Project 제거 (0) | 2020.01.21 |
---|---|
Ruby on Jets : Lambda 스케쥴링 Job (0) | 2020.01.20 |
Ruby on Jets : Jets 구조, 기본/핵심기능 사용 (0) | 2020.01.20 |
Ruby on Jets : Jets 설치 (2) | 2020.01.20 |
Ruby on Jets : 소개 (2) | 2020.01.19 |