ちょっと話題の記事

【速報】【アップデート】Lambdaが複数のファンクションで共有するコードを持てるようになりました(Lambda Layer) #reinvent

2018.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

サーバーレス開発部の阿部です。

New for AWS Lambda – Use Any Programming Language and Share Common Components

昨日のキーノートでServerless関連少なかったのでちょっとしょぼんとしていたのですが、非常に嬉しいLambdaアップデートがありました!

サンプルコードがあったのでやってみたブログは、別途書きますが、まずは速報をおしらせします。

Lambda Layers概要

従来のLambdaではそれぞれの関数ごとにパッケージングしてデプロイしなければならなかった、複数のLambda関数で共有するカスタムコードやライブラリをビジネスロジックから使うことができるようになります。

新しいLambda Layerのアップデートでは、共有コンポーネントを一つのZIPファイルに固めてアップロードすることができます。既存の関数は通常参照を変更する必要がありません。レイヤーはバージョンでマネージされてイミュータブルです。削除されたり許可されないバージョンへの呼び出しは拒否されます。

関数の設定においては5つのレイヤーを実行時に参照することができます。関数実行時に指定した順序で /opt にインストールされます。レイヤーの呼び出し順序には依存関係があるようです。

Lambda Layerはすでに利用可能です。

Lambda Layerでできるようになること

  • ビジネスロジックと依存関係の関心分離の強制
  • 関数のロジックをコンパクトにしてビジネスロジックに集中
  • 依存関係が切り離せるため、デプロイが早くなる
  • AWSパブリックレイヤーとしてNumPyとSciPyを提供

まとめ

この共通コンポーネントのデプロイ問題は、Lambda関数が多くなればなるほどインパクトが出てきます。概要でも書きましたが、今までそれぞれでパッケージングしなければならなかったものが共有化できるのは大きいです。

また、そもそもライフサイクルが違う共有コンポーネントとビジネスロジックのデプロイサイクルを切り離せるという点でも非常に有用だと思います。