4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS LambdaをRubyのコンテナで動かしてみる

Posted at

AWS Lambdaをコンテナで動かしてみました。言語は特に理由はないのですがRubyで試しました。

手順

  1. ソースコード
  2. Lambda作成
  3. Lambda実行
  4. ソースコード更新

ソースコード準備

ファイルは以下の3つを用意します。

app.rb

app.rb
module LambdaFunction
  class Handler
    def self.process(event:,context:)
      p "Hello from Ruby 2.7 container image!"
      p event
    end
  end
end

Dockerfile

FROM public.ecr.aws/lambda/ruby:2.7

# Copy function code
COPY app.rb ${LAMBDA_TASK_ROOT}

# Copy dependency management file
COPY Gemfile ${LAMBDA_TASK_ROOT}

# Install dependencies under LAMBDA_TASK_ROOT
ENV GEM_HOME=${LAMBDA_TASK_ROOT}
RUN bundle install

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.LambdaFunction::Handler.process" ]

(Rubyのバージョンが古いのが気になる。これより新しいベースイメージがない・・・)

Gemfile

source "https://rubygems.org"

Lambda作成

ECRにレポジトリ作成

$ aws ecr create-repository --repository-name lambdacontainertest

Dockerイメージ作成

$ docker build -t 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/lambdacontainertest .

dockerコマンドがAWSにアクセスできるように認証

$ $(aws ecr get-login --no-include-email)

DockerイメージをECRレポジトリにpush

$ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/lambdacontainertest

LambdaをDockerイメージから作成

$ aws lambda create-function --function-name lambdacontainertest --package-type Image --code ImageUri=123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/lambdacontainertest:latest --role arn:aws:iam::123456789012:role/SampleRole

Lambda実行

マネジメントコンソールからでも実行してみると、以下のようなログが残ります。

"Hello from Ruby 2.7 container image!"
{"key1"=>"value1", "key2"=>"value2", "key3"=>"value3"}

ソースコード更新

ソースコードを修正した場合のLambda更新までの手順です。

Dockerイメージを再作成

$ docker build -t 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/lambdacontainertest .

dockerコマンドがAWSにアクセスできるように認証(一度実行したらしばらくは覚えてくれている)

$ $(aws ecr get-login --no-include-email)

新しいDockerイメージをECRレポジトリにpush

$ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/lambdacontainertest

Lambdaを新しいDockerイメージで更新

$ aws lambda update-function-code --function-name lambdacontainertest --image-uri 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/lambdacontainertest:latest

create-functionupdate-function-codeとでパラメータの指定方法が違うのが気になる)

4
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?