LoginSignup
5
2

【AWS Lambda】ローカル環境でRubyのLambda関数を作成してデプロイする

Last updated at Posted at 2023-11-09

どうもこんにちは。

今回はローカル環境でRubyコードを書いてLambdaにデプロイしたので、その方法をまとめてみました。

今回はRubyのコードをデプロイすること、RDSの接続情報を所持していること、RDSには以下のようなテーブルデータが入っていることを前提として話を進めていきます。

テーブル名: users

カラム名 ID name age
integer string integer
データ1 1 太郎 25
データ2 2 花子 23

手順

1. Gemfileを用意する

source 'https://rubygems.org'

gem 'mysql2'

2. lambda_function.rbを用意する

require 'json'
require 'mysql2'

def lambda_handler(event:, context:)
    { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end

3. Dockerfileを用意する

FROM public.ecr.aws/sam/build-ruby3.2:latest-x86_64

WORKDIR /var/task

COPY lambda_function.rb /var/task

RUN yum -y install mysql-devel

RUN gem update bundler

RUN bundle install

CMD ["/bin/bash"]

4. docker buildする

$ docker build -t ruby_test_lambda .

5. dockerコンテナを実行する

$ docker run --rm -it -v $PWD:/var/task -w /var/task ruby_test_lambda

このコマンドを実行するとbashプロンプトが実行されます。

bash-4.2#

6. bundle installを実行する

bash-4.2# bundle config set --local path 'vendor/bundle' && bundle install

Gemfileのライブラリがインストールされます。

7. lambda_function.rbを編集する

require 'json'
require 'mysql2'

def lambda_handler(event:, context:)
    user_id = event['Details']['Parameters']['Id']
    client = Mysql2::Client.new(host: <DBのホスト名>,
                                username: <DBのマスターユーザのusername>,
                                password: <DBのマスターパスワード>,
                                database: <アクセスしたいDBの名前>)

    users = client.query("SELECT users.name, users.age FROM users WHERE users.id = #{user_id} LIMIT 1;").to_a

    exe_lambda_name = context.function_name

    if users.empty?
        result = "#{exe_lambda_name}が実行されました。検索されたユーザは見つかりませんでした。"
    else
        result = "#{exe_lambda_name}が実行されました。検索したユーザは#{users[0][name]}#{users[0][age]}歳です。"
    end

    result
end

8. デプロイ用zipファイルを生成する

bash-4.2# zip -r my_deployment_package.zip .

9. Lambdaにデプロイする

以下の画面のアップロード元をクリックすると、アップロード用の画面が表示されるので、生成したzipファイルをアップロードします。

スクリーンショット 2023-11-09 11.06.28.png

スクリーンショット 2023-11-09 11.07.21.png

10. テスト

イベントJSONに以下のJSONコードを入力してテストを実行します。

{
    "Details": {
        "Parameters": {
            "Id": 1
        }
    }
}

以下の結果が出力されていたら成功です。

ruby_test_lambdaが実行されました。検索したユーザは太郎で25歳です。

まとめ

dockerコンテナを立ち上げる時に、似たようなイメージを使用してしまうとうまく動作しないので気をつけてください。

必ず、以下のイメージを使用してください。

public.ecr.aws/sam/build-ruby3.2:latest-x86_64

参考サイト

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2