どうもこんにちは。
今回はローカル環境で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ファイルをアップロードします。
10. テスト
イベントJSONに以下のJSONコードを入力してテストを実行します。
{
"Details": {
"Parameters": {
"Id": 1
}
}
}
以下の結果が出力されていたら成功です。
ruby_test_lambdaが実行されました。検索したユーザは太郎で25歳です。
まとめ
dockerコンテナを立ち上げる時に、似たようなイメージを使用してしまうとうまく動作しないので気をつけてください。
必ず、以下のイメージを使用してください。
public.ecr.aws/sam/build-ruby3.2:latest-x86_64
参考サイト