ブロックチェーン・AI・システム開発の株式会社INDETAIL

話題の AWS Lambda Layers を試してみたら、予想以上に便利だった。

2018.12.11
seki

※本記事は、INDETAIL Advent Calendar 2018の一環として投稿しています。

Advent Calendar 2018 11日目担当の seki です。

昨年に引き続き、2回目のAdvent Calendar参加となります。

 

AWS re:Invent 2018 で発表された「AWS Lambda Layers」が、最近ちょっと話題になっています。

AWS Lambda は Alexa のスキル開発で良く使っているので、どんな物なのか実際に試してみました。

AWS Lambda Layers とは?

元々 AWS Lambda で関数を作成する際は、単一パッケージに必要なコードや依存モジュールを全て含める必要があります。

今回追加された AWS Lambda Layers は、コードやライブラリをLayerとして用意し、Lambda関数の外部から注入するための機能です。

 

AWS Lambda Layers については、公式サイトに詳しく書かれています。
https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

AWS Lambda Layers を使うと何が便利なの?

例えば、Alexaのスキル開発で見てみましょう。

現在は ASK(Alexa Skills Kit) SDK V2 (以後、ASK SDK) を用いた開発がスタンダードです。

Lambda側の開発を開始するためには、毎回以下の作業を行う必要があります。(リンクはNode.jsの場合)
https://ask-sdk-for-nodejs.readthedocs.io/ja/latest/Setting-Up-The-ASK-SDK.html#id2

  1. プロジェクト作成
  2. ASK SDKセットアップ
  3. スキルコード記述
  4. スキルパッケージ作成
  5. AWS Lambda へのアップロード

ちょっとしたアプリを作るだけでも毎回この作業をしなくてはいけないので、ひとことで言えば面倒です。

そこで、AWS Lambda Layers の出番となります。

ASK SDKを取り込んだパッケージを予めLayerとして用意しておけば、最初にこのLayerをLambda関数に追加するだけで、後は AWS Lambda コンソールエディタ で即Lambda関数の開発が始められるわけです。

 

また、他にも下記のように色々な用途で使うことができます。

  • 開発によく使うパッケージを予めLayerとして用意し、初期セットアップの簡略化
  • よく使う自作の共通処理(決まった形式のログ処理等)を組み込んだLayerを作成し、各Lambda関数の処理を共通化
  • 汎用部分をLayerに委譲することで、デプロイの効率化

 

ただ、関数に追加できるLayerは5つまでなので、あまりLayerを細かく作ってしまうと追加しきれなくなるため注意が必要です。

その他、制限事項はこちらのページを参照してください。
https://docs.aws.amazon.com/lambda/latest/dg/limits.html

AWS Lambda Layers の使い方

では、実際にAWS Lambda Layersを使ってみましょう。

AWS Lambda Layersを使うには3つのステップを踏む必要があります。

  1. パッケージ作成
  2. Layer作成
  3. Lambda関数へのLayer追加

パッケージ作成

まずは、Layerを作成するためのパッケージを用意する必要があります。

パッケージは公式サイトのルールに従い、下記の構成で作成します。
https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path

xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk

 

先ほど例に出したASK SDKですと、このような作業になります。

Layer作成

次に、このパッケージを使ってLayerを作成します。

 

 

項目 設定値
名前 Layer名です。
Layerのバージョン管理はこの名前の単位で行われます。
説明 Layerの説明です。
バージョン毎にそれぞれ変更可能です。
コードエントリタイプ コードのアップロード元で、ローカルかAmazon S3を選択できます。
互換性のあるランタイム Layerの互換性です。
今回は実行環境に合わせNode.js 8.10に設定しています。
ライセンス ライセンスの記載が必要な場合は、対象ページのURLを設定します。

ASK SDKの取り込まれたLayerが作成されました。

Lambda関数へのLayer追加

最後に、Lambda関数にLayerを追加します。

  

これで、Lambda関数からASK SDKが参照できるようになりました。

色々試してみた

Lambda関数にLayerを追加した状態で色々操作したらどうなるのかやってみました。

複数のLayerを追加した場合

それぞれのLayerがリストで表示されます。

Layer毎にマージ順が設定できるので、使用者の想定する形での適用が可能となっています。

Layerを更新した場合

自動的に新しいバージョンが発行されるようになっています。

Lambda関数にLayerを取り込むときにバージョンも指定しているため、Layerをバージョンアップしても既存のLambda関数には影響ありません。

Layerを削除した場合

Lambda関数から参照されているこのLayerを削除してみます。

Layerの一覧からは消えています。

内部ではバージョンごとにスナップショットを持っているので、こちらも既存のLambda関数には影響ありません。

最後に

このように、AWS Lambda Layersは利便性や開発効率をかなり向上させてくれます。

今後は必須の機能になるのではないでしょうか。

みなさんもぜひ使ってみてください!

seki

リラックマが好きなエンジニアです。 最近は良くAlexaで遊んでいます。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。