Lambdaのレイヤーってなに??
こんにちは。クラウドソリューショングループのnakamura.tです。
今回はAWS Lambdaのレイヤーについて一緒に見ていきたいと思います。
目次
レイヤー?
さっそくAWSのデベロッパーガイドを一緒に見ていきましょう。
Lambdaレイヤーは、補足コードまたはデータを含む .zip ファイル アーカイブです。通常、レイヤーにはライブラリの依存関係、カスタムランタイム、または構成ファイルが含まれます。
引用:AWSデベロッパーガイド
ふむ。
もう読むのをやめたいですね。
とはいえここで退いては負けた気がするので先に進みます。
「カスタムランタイム」わからない言葉が出てきましたね
ランタイムというのは広義にプログラムの実行に必要な環境のことです。
例えばPythonであればPythonのランタイムが必要になりますし、JavaであればJavaのランタイムを用意する必要があります。
LambdaはPythonやJavaなどの言語のランタイムはサポートしていますので、ランタイムは特に意識せず使用できます。
ただサポートされていない言語やバージョンに関して「カスタムランタイム」という形で作成する必要があるわけです。
なので最初の説明を言い換えると
Lambdaレイヤーとはzip圧縮したライブラリ依存関係やカスタムランタイムを置く場所
みたいですね。
そうすることで、実際に実行したい処理をまとめた関数コードをLambdaに置いて、関数依存関係をレイヤーに置くという状態になります。
最大5つまで?
関数ごとに最大 5 つのレイヤーを含めることができます。
どうやらレイヤーには最大で5つまで作成出来るようです。
そしてレイヤーに配置できる最大の合計サイズは250MB(非圧縮時)だそうです。
10 MB より大きいファイルの場合は、Amazon S3を使用したアップロードを検討してください。
圧縮後のアーカイブファイルをアップロードする際、10MBを超えていると上記のような推奨が表示されますが、アップロード自体は正常にできます。
いつ使うの?
概要は分かりましたが、どんな場合に使用するんでしょうか。
デベロッパーガイドにこんな記載があります。
・デプロイパッケージのサイズを小さくするため。
・コア関数ロジックを依存関係から分離するため。
・複数の関数間で依存関係を共有するため。
・Lambdaコンソールのコードエディターを使用するため。
ふむふむ。。
また挫けかけましたね。
一度立ち向かったのなら最後まで行きましょう。
まず、「デプロイパッケージのサイズを小さく」とはどういう意味でしょうか。
依存関係ファイルはレイヤーにいるため、デプロイのパッケージには関数コードのみが含まれることになり、小さく整理された状態になるよねという考えです。
「コア関数ロジックを依存関係から分離」とは、
関数コードと依存関係を別管理しているため、どっちか片方だけ更新することができるという考えです。
「複数の関数間で依存関係を共有」とは、
1つのアカウント内に複数関数を持っていた場合、そのすべてに同様の依存関係ファイルを適用できるという意味になります。
レイヤーに置いていない場合すべての関数がそれぞれに依存関係ファイルを持つ必要があります。
最後に「Lambdaコンソールのコードエディターを使用」です。
コードエディターとは、関数コードの更新を素早くテストするための便利ツールのことです。
しかし、展開パッケージのサイズが大きすぎる場合は、使用できないという制限があります。
一つ目のデプロイパッケージのサイズを小さくのところで触れましたが、レイヤーを使用することで、パッケージのサイズが小さくなり、コードエディターを使用できるようになります。
使わなくてもいいの?
当然ですが、上記の用途に合っているからと言って必ずしも使用しなくてもLambdaは使えます。
その場合は関数コードと依存関係ファイルもすべて含めたzipアーカイブをLambdaに直接アップロードすることになります。
ただ展開パッケージのサイズが大きくなると先ほども紹介した通りLambdaコンソールのコードエディターが↓のように触れなくなるなど不都合が出てくることがあるので、最初の内は不都合が出たらレイヤーの使用を検討してみるでいいんだと思います。
Lambdaレイヤー概要まとめ
はぁ、、、
お疲れ様でした。。
大した量読んでいないのにこの疲労感は一体何なんでしょうか、、
クラウドは学ばなくてはならないことがたくさんあって大変ですが、少しずつ学んで行きましょう!!