LoginSignup
17
18

More than 3 years have passed since last update.

AWS Lambdaでコンテナデプロイする方法

Posted at

はじめに

随分前になりますが、AWS Lambdaでコンテナデプロイがサポートされました。
AWS Lambda now supports container images as a packaging format

今回は、AWS Lambdaにコンテナのイメージをデプロイする方法について紹介します!

対象

  • AWS Lambdaの新機能について知りたい人
  • コンテナデプロイの流れを知りたい人

YouTube動画

動画で確認したい方は、こちらを利用ください!
*撮影は1ヶ月以上前のものですが、大きく変わったところはありません。
【YouTube動画】実践! Lambdaでコンテナデプロイをする方法!!
実践! Lambdaでコンテナデプロイをする方法!!

コンテナのデプロイ条件

Lambdaに、コンテナデプロイがサポートされましたが、コンテナなら何でも良いという訳ではありません。
AWSが提供しているLambda用のRuntime APIに準拠している必要があり、以下のいずれかの方法でコンテナを作る必要があります。

方法1: AWS提供のベースイメージを使う
方法2: Runtime APIが入っているイメージを使う

以下のサイトから使いたいランタイムを選択して、利用できます。
Runtime support for Lambda container images

具体例

今回はベースイメージを利用して、実際にLambdaにコンテナデプロイしてみます。
まず、簡単なNode.jsのサンプルを確認して、次に実践的なRubyのサンプルを見ていきます。

Node.jsのサンプル

簡単なサンプルを書くとこのようになります。

# ベースイメージの取得
FROM public.ecr.aws/lambda/nodejs:12

# Lambda関数を定義しているapp.jsをLambda実行時のルートディレクトリに置く
COPY app.js ${LAMBDA_TASK_ROOT}

# app.jsのhandler関数を実行
CMD [ "app.handler" ]

Rubyのサンプル

このサンプルはLambdaからMySQLに接続するためのLambda関数を作ります。
コンテナをサポートする前は、native extenstion関連で面倒な手順が必要でしたが、コンテナをサポートしたことで簡単に使えるようになりました。

FROM amazon/aws-lambda-ruby:2.7

WORKDIR ${LAMBDA_TASK_ROOT}

# MySQL関連で依存しているものをインストール
RUN yum install -y mysql-devel gcc-c++ make

COPY . ${LAMBDA_TASK_ROOT}

RUN bundle config --global silence_root_warning 1
RUN bundle config set path 'vendor/bundle'
RUN bundle install

CMD ["app.App::Handler.process"]

ローカルでLambdaを動かす

コンテナ化したことで、ローカルで実際に試すことができます。

9000番ポートを開放して試したい場合は次のようにします。

docker run -p 9000:8080 <image name>

そして、以下のようにPOSTすることで、実際に確認できます。
ここでの、/2015-03-31/functions/function/invocations"は固定です。

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" \
-d '{"payload":"hello world!"}'

デプロイ

まずはコンテナイメージをAmazon ECRにデプロイする必要があります。
今回は割愛します。以下が詳しいです。
Docker イメージをプッシュする

Lambdaの関数の作成方法を確認すると、コンテナイメージという項目ができているので、そちらを選択して使います。
_2020-12-07_20.20.44.png

まとめ

今回はAWS Lambdaにコンテナをデプロイする方法について解説しました。
この記事を通してざっくり理解していただくと、自分で設定する時にスムーズだと思います。

また、AWS Lambdaでコンテナを使った場合は、最初の起動で2 ~ 5秒程度かかってしまいますが、それ以降はスムーズに起動します。
AWS Lambdaの利用の幅が広がる新機能なので、ぜひ遊んでみてください!

17
18
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
17
18