[検証]LambdaのLayer機能を早速試してみた #reinvent

どうも、先ほどre:playから帰ってきた岡です。
本日Keynoteで発表されたLambdaのLayer機能を早速試してみたのでご紹介したいと思います。

Layerの概要については速報記事の方で載せてありますのでご覧ください。

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

試してみた

簡単に動作を試すためにPythonで外部ライブラリ requests を使ってslackにメッセージを飛ばす処理を作ってみます。

なのでAWSに作るものはこの2つです。

  • requestsを含んだLayer
  • slackにメッセージを飛ばすLambda

ZIPの作成

まずLayer化するZIPをローカルで作成します。 pythonの場合、zip化する構成は

  • python/(依存ライブラリ)
  • python/lib/python3.7/site-packages/(依存ライブラリ)

である必要があります。

$ mkdir python
$ pip install -t ./python requests
$ zip -r requests.zip python

Layerの作成

  • Lambdaのコンソールに行くと、既に関数の下に「Layer」が追加されています。

  • Layerの作成をクリック

  • 任意の名前を入力して先ほど作成したZIPをローカルから選択してアップします。

  • Layerが作成されるとバージョンが割り振られます。
  • ちなみにバージョンを更新しても既に関数に設定しているLayerのバージョンは切り替わらないので、手動で関数の設定を変える必要があります。

Lambda Functionの作成

- python3.7で作成

  • レイヤーを選択してレイヤーの追加をクリック

  • ランタイムと互換性のあるレイヤーを選択 で先程作成したLayerを選択して接続

レイヤーが接続できたら、コードを実装します。

import os
import logging
import boto3
import json
import requests

# URLの設定
webhook_url = 'ここにslackのwebhookURL'
# ログ設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)


def lambda_handler(event, context):

    slack_message = {
        'text': 'Layer Test.'
    }

    requests.post(webhook_url, json.dumps(slack_message).encode('utf-8'))

テスト

テストを実行してみるとメッセージが飛びます。

まとめ

今までは、こんな簡単な処理でも外部ライブラリを使う場合はzip化する必要がありましたが、Layer化しておけば簡単に外部ライブラリをインポートできるようになりました!

参考