LoginSignup
14
8

More than 5 years have passed since last update.

AWS SAM内にLambda Layersを定義する方法(Python言語編)

Posted at

概要

2018年の11月末に、AWS Lambdaに新しい機能 Lambda Layers が追加されましたが、
SAMで使うにはどうすればいいのということで、その方法を書いていきます。

SAM内にLayersを定義することの利点ですが、
LayersをSAMで管理することによって、他のLambda関数と同時にAWSにデプロイすることができるようになります。
また、ローカルでのSAMのテスト等で、開発中のLayerを使用することができるようになります。

ファイル構成・記述内容

ファイル構成

構成はこのようにします。

XXXXXX(任意のフォルダ名)
├ template.yaml  → SAMテンプレート
├ regist_record  → Lambda関数用フォルダ
│  └ app.py      → Lambda関数用のPythonソース
└ layer          → レイヤー格納用フォルダ
   └ python      → Python言語のレイヤーであることを示すフォルダ(名前は必ずpythonにすること)
      ├ XXXX_util.py       → python用の共通処理
      └ XXXX_settings.py   → 同上

記述内容

SAM Template

SAMテンプレートは以下のように記述します。

template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
 A serverless application of XXXXXXX

Resources:
 RegistRecord:
   Type: AWS::Serverless::Function 
   Properties:
     CodeUri: regist_record/
     Handler: app.lambda_handler
     Runtime: python3.7
     FunctionName: regist-record
     Role: arn:aws:iam::(アカウント名):role/(ロール名)
     Environment: 
       Variables:
         ENV: dev
         XXXXXX_TABLE_NAME: xxxx_record_t
         XXXXX_URL: https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXXX/YYYYYYYYYY
     Events:
         (省略)
     Layers:
     - !Ref CommonLayer
 CommonLayer:
   Type: AWS::Serverless::LayerVersion
   Properties:
     LayerName: XXXX_common-layer
     Description: Common Application Resource Layer
     ContentUri: layer

続いて解説です。
RegistRecord の中に、Layersという項目がありますが、そこにLayerの情報を定義することによってLambdaFunctionからLayerを参照させることが可能になります。
!Refの値はLayerのリソース名(ここではCommonLayer)に合わせてください。
また、ContentUriには、実際にLayerを格納しているフォルダ名(layer)に合わせてください。

EventsはLambdaの呼び出し元に応じて設定してください。

Pythonファイルからの呼び出し方

結論からですが、同じディレクトリ階層にあるものとして、Pythonソース内からimportします。

以下のような感じです。

regist_record/app.py
from XXXX_util import XXXX_util
from XXXX_settings import XXXX_settings

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8