Closed15

コンテナイメージでLambdaを使う実験メモ

とてもワクワクする発表だったので、実際に使ってみたくなった。

10GBまでのイメージを使えるようなので、50MBの上限がなくなったと言ってもよいのかな。

サンプルコードにあった amazon/aws-lambda-nodejs:12 というのをベースイメージに使うと Node.js で手軽に試せそう。

FROM amazon/aws-lambda-nodejs:12
COPY app.js package*.json ./
RUN npm install
CMD [ "app.lambdaHandler" ]

新しく発表された ECR Public を使う場合は public.ecr.aws/lambda/nodejs:12 っぽい。

https://aws.amazon.com/jp/blogs/aws/new-for-aws-lambda-container-image-support/

ECRの作成&Dockerイメージのプッシュ (Image & Repository Name: example-container-image-on-lambda)

$ aws ecr create-repository --repository-name example-container-image-on-lambda --image-scanning-configuration scanOnPush=true
$ docker tag container-image-on-lambda:latest 123412341234.dkr.ecr.us-east-1.amazonaws.com/example-container-image-on-lambda:latest
$ aws ecr get-login-password | docker login --username AWS --password-stdin 123412341234.dkr.ecr.sa-east-1.amazonaws.com
$ docker push 123412341234.dkr.ecr.us-east-1.amazonaws.com/example-container-image-on-lambda:latest

Lambda の実行

$ aws lambda invoke --function-name example-container-image-on-lambda result.json
$ cat result.json | jq
{
  "version": "v1",
  "uuid": "c444cb5c-a160-490f-bddf-09101b5f3010"
}

ソースを更新したら、Docker push して「新しいイメージをデプロイ」すれば更新できた。

latest タグを常に見てくれれば楽といえば楽なんだけど、勝手に変更されるのはそれはそれで怖いか。

AWS CLI は v2(の最新?)で対応しているようだ。

$ aws --version
aws-cli/2.1.6 Python/3.7.3 Linux/5.4.39-linuxkit docker/x86_64.amzn.2 prompt/off

コンテナイメージのアップデートは以下のコマンドでできる。

$ aws lambda update-function-code --function-name example-container-image-on-lambda --image-uri 123412341234.dkr.ecr.us-east-1.amazonaws.com/example-container-image-on-lambda:latest

ちゃんと確かめたら 2.1.6 からのようだ。

$ docker run --rm -it "amazon/aws-cli:2.1.6" lambda update-function-code help
...
       --image-uri (string)
          URI of a container image in the Amazon ECR registry.
...
$ docker run --rm -it "amazon/aws-cli:2.1.5" lambda update-function-code help
...

特にコンテナ周りの話がまとまってた。

Lambda でコンテナを実行する

https://y-ohgi.blog/entry/2020/12/02/Lambda_でコンテナを実行する

コンテナイメージが大きい場合にコールドスタートが遅くなるかどうかを検証した記事。

https://dev.classmethod.jp/articles/measure-container-image-lambda-coldstart/

結論として、コンテナイメージが大きくてもコールドスタートはほとんど遅くならない。

メモリの割当と比例して利用可能なCPUクレジットが増えた分、微妙に早くなっているように見えます。正直大量にエラーが発生することを予想していたのですが、問題なく10Gのコンテナイメージが999並列で起動できました。裏側のアーキテクチャは一体どうなってるんでしょうか?すごいですね。

本当にどうなっているんだろう・・・。
このすごい仕組みを安く提供してくれているので、規模の経済を感じる・・・。

このスクラップは2021/04/02にクローズされました
ログインするとコメントできます