Serverless Framework 및 AWS Lambda with Ruby 환경에 gem 설치

Serverless Framework 및 AWS Lambda with Ruby 환경에 gem 설치

2022-10-06 last update

5 minutes reading 람다 루비 ServerlessFramework AWS
gem 설치가 필요한 AWS Lambda의 Ruby 스크립트를 Serverless Framework에 배포하는 방법입니다.

절차 개요



플러그인을 넣으면 쉽게 할 수 있습니다.
  • 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



    링크


  • (Python 버전) Serverless Framework 및 AWS Lambda with Python 환경에 pip 설치