
Serverless Framework 및 AWS Lambda with Ruby 환경에 gem 설치
2022-10-06 last update
5 minutes reading 람다 루비 ServerlessFramework AWSgem 설치가 필요한 AWS Lambda의 Ruby 스크립트를 Serverless Framework에 배포하는 방법입니다.
절차 개요
나머지는 보통 배포하면 마음대로 여러가지 해준다
절차 상세
(Python 버전) Serverless Framework 및 AWS Lambda with Python 환경에 pip 설치
절차 개요
플러그인을 넣으면 쉽게 할 수 있습니다.
serverless plugin install -n serverless-ruby-layer
Gemfile
생성 절차 상세
Serverless Framework 서비스 만들기
$ serverless create --template aws-ruby
Serverless: Generating boilerplate...
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v2.16.1
-------'
Serverless: Successfully generated boilerplate for template: "aws-ruby"
Serverless: NOTE: Please update the "service" property in serverless.yml with your service name
세 개의 파일이 생성됩니다.
.gitignore
handler.rb
serverless.yml
플러그인 설치
serverless-ruby-layer
라는 플러그인을 설치합니다.
$ serverless plugin install -n serverless-ruby-layer
다음 파일과 디렉토리가 증가합니다.
node_modules
package.json
package-lock.json
Serverless Framework가 Node.js에서 구현되었으므로 Ruby의 프로젝트이지만 node_modules
또는 package.json
가 존재하는 것 같습니다.
소스 코드
serverless.yml
serverless.yml
는 다음과 같이 합니다. plugins
의 기술은 플러그인을 설치하면 마음대로 추기되어 있습니다.
service: sample
frameworkVersion: '2'
provider:
name: aws
runtime: ruby2.7
region: ap-northeast-1
functions:
hello:
handler: handler.hello
plugins:
- serverless-ruby-layer
Gemfile
Gemfile
를 작성해, 이하의 내용으로 합니다.
gem의 샘플로서 holiday_japan
를 사용해 보겠습니다. 일본의 공휴일을 판정하는 gem입니다.
source "https://rubygems.org"
gem 'holiday_japan'
Ruby 소스 코드
handler.rb
require 'json'
require 'holiday_japan'
def hello(event:, context:)
holidayName = HolidayJapan.name(Date.new(2021, 8, 8))
puts(holidayName) # CloudWatch に "山の日" と書き出される
end
배포
지금까지 만든 다음 serverless
명령으로 배포하면 Lambda 본체뿐만 아니라 serverless
명령이 자동으로 gem 설치한 이미지를 생성하여 AWS Lambda의 Layer로 업로드합니다.
$ serverless deploy -v
실행
배포 결과를 AWS Management Console에서 보면 다음과 같이 보입니다.
람다

레이어

실행 결과의 CloudWatch Logs

링크
$ serverless create --template aws-ruby
Serverless: Generating boilerplate...
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v2.16.1
-------'
Serverless: Successfully generated boilerplate for template: "aws-ruby"
Serverless: NOTE: Please update the "service" property in serverless.yml with your service name
.gitignore
handler.rb
serverless.yml
$ serverless plugin install -n serverless-ruby-layer
node_modules
package.json
package-lock.json
service: sample
frameworkVersion: '2'
provider:
name: aws
runtime: ruby2.7
region: ap-northeast-1
functions:
hello:
handler: handler.hello
plugins:
- serverless-ruby-layer
source "https://rubygems.org"
gem 'holiday_japan'
require 'json'
require 'holiday_japan'
def hello(event:, context:)
holidayName = HolidayJapan.name(Date.new(2021, 8, 8))
puts(holidayName) # CloudWatch に "山の日" と書き出される
end
$ serverless deploy -v