2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[AWS SAM] Python外部ライブラリ(Pandas)のLayer化

Last updated at Posted at 2021-03-20

関連記事:[AWS SAM] Lambda Layerの定義(nodejs)

目的

  • Lambdaで外部ライブラリ(Pandas)を使用するためにLayer化する
  • AWS SAMでLayerをデプロイする

SAMでのLambda Layer定義 & デプロイ(2024/02)

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/building-layers.html
上記に記載されている通り、
以下のような構成、テンプレートを用意すれば良い

 ├─ lambda/
 │    └─ common_layer/
 │              └─ requirements.txt
 ├─ template.yaml
  CommonLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      ContentUri: lambda/common_layer/
      CompatibleRuntimes:
        - python3.11
      LayerName: !Sub ${StackName}_CommonLayer
    Metadata:
      BuildMethod: python3.11

AWS::Serverless::LayerVersionMetadata は必須
上記を sam build すると、.aws-sam/build/CommonLayer/python フォルダ内に
requirements.txt で指定したパッケージがインストールされる

LayerをアタッチしたLambdaは、パッケージがインストールされている体で実装すればよい

パッケージの作成 ※ 以降は旧内容

外部ライブラリをLayer化するためには

  • 外部ライブラリをまとめたzipファイルを作成する
  • 使用する外部ライブラリが参照している他の外部ライブラリも含める
  • Amazon Linux でデプロイパッケージを作成する ※Lambdaの実行環境がAmazon Linuxのため
  • Lambdaの実行環境に合わせたRuntimeで作成する

今回はEC2でAmazon Linuxのインスタンスを使用した

Amazon LinuxへのSSH接続

デフォルトのユーザ名:ec2-user
EC2からダウンロードした秘密鍵:****.pem

を使用してログインする

Python3インストール

参考:【2020年版】AWSのEC2にPython3をインストールする方法

以下でインストール(※3.7系がインストールされました)

$ sudo yum update
$ sudo yum install python3 -y

Lambda実行環境が3.8系だったため以下で3.8系をインストール

参考:AmazonLinux2でPython3環境構築

$ sudo amazon-linux-extras install -y python3.8

以下でバージョン確認

$ python3.8 -V

パッケージ作成

以下でパッケージを作成し、FTP等を使用して手元にzipファイルを転送

$ mkdir python

$ pip3.8 install -t ./python pandas
$ zip -r python.zip python

SAM環境ファイル構成

lambda-layer/
 ├─ layers/
 │    └─ pandas-layer/
 │              └─ python.zip/
 │                    └─ python/
 │                          ├─ numpy
 │                          ├─ pandas
 │                          ├─ pytz
 │                          ├─ ...
 │
 │
 └─ template.yaml # SAMテンプレート

SAMテンプレート

template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  child stack (lambda Layer)

Parameters:
  StackName:
    Type: String

Resources:

  PandasLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: !Sub ${StackName}_pandas
      ContentUri: pandas-layer/python.zip
      CompatibleRuntimes:
        - python3.8
      RetentionPolicy: Delete

Outputs:
  PandasLayerArn:
    Value: !Ref PandasLayer
2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?