はじめに
先日初めて Lambda に入門しました。その時にいくつか躓きポイントがあったので、紹介します。
作り方が3種類ある
Console から Lambda を作るとき、最初に3つの選択肢から選ぶ必要があります。
この選択によって、それ以降で設定する項目が結構かわるので、後回しにできません。
それぞれの選択肢をざっくり説明するとこんな感じです。
- Author from scratch
- ゼロから作る場合に選択します。
- Use a blueprint
- AWS が用意した設計図を使って作成する場合に選択します。
- 使ったことがないのでわからないですが、実装したい内容とマッチする設計図が用意されている場合は使ってもいいかもしれないです。
- Container image
- コンテナイメージを元に作成する場合に選択します。
この選択がデプロイ方法につながるので、注意しましょう。Author from scratchを選んだ場合は、Console 上で編集するか、Zip ファイルをアップロードしてデプロイすることになります。しかも変更できないので、後からコンテナイメージにしたい場合は最初から作り直す必要があります。
最初は Author from scratch
でプロトタイプを作りながらいろいろ触ってみて、その後本番を Container image
で作るのがおすすめです。
使う言語(ランタイム)は?
Lambda の関数の中身をどの言語で書くか決める必要があります。
1人で開発する分には好きな言語で問題ないですが、複数人で開発する場合や、作った後に別の人に引き継ぐ場合などは慎重に選びましょう。また、選んだ言語に AWS SDK のライブラリがあるか確認しておくと良いでしょう。 Lambda から別の AWS のリソースを操作する場合に AWS SDK は便利です。
x86_64 と arm64 どっち?
arm64 の方が安いので、基本 arm64 でいいと思います。コンテナイメージでLambdaを作る場合は、arm64 で動くイメージをビルドする必要があります。
詳細はこちら:
Lambda のバージョン管理どう管理する?
Lambda の関数のバージョンは、デプロイのたびに 1, 2, 3...のように増えていく整数になっています。 また、 $LATEST
という最新を指すバージョンもあります。
バージョンとは別に エイリアス というものがあります。
エイリアスにはバージョンを指定できるので、エイリアスをうまく活用すると、運用しやすくなる場合があります。例えば、何らかのリソースから Lambda を呼び出す時は常に特定のエイリアスに固定しておき、エイリアスに紐づくバージョンを変更することで新しいバージョンをリリースできるようにする、といった方法が可能です。
動作確認ってどうするの?
Console の Testタブから、Lambda に渡す引数を指定して実行できます。
コンテナイメージの場合、ローカルでテストする方法がドキュメントに記載されています。
docker run
でコンテナを起動しておき、以下のように curl などで Lambdaを invoke することができます。
$ curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
その他
- タイムアウト
- デフォルトは実行時間が3秒を超えるとタイムアウトします。
- 最大は 900秒 = 15分です。15分を超える処理はできないので、分割するか、別の手段に変えましょう。
- Lambda 関数のタイムアウトを設定する - AWS Lambda
- メモリ
- 128 MB~10,240 MB です。大きくするほど料金が増えるので注意。
- Lambda 関数のメモリを設定 - AWS Lambda
- エフェメラルストレージ
- 512 MB から 10,240 MB です。大きくするほど料金が増えるので注意。
- Lambda 関数のエフェメラルストレージを設定する - AWS Lambda