yumで入れた依存モジュールをAWS Lambdaで使う方法
 
										エンジニアの内山です。最近は趣味の関係で、車で遠出することが多くなり、半年ほどで走行距離が10000kmを突破しました。
概要
本記事は、以下のような内容となっています。
- Dockerとyumdaを利用して、依存モジュールをビルド
- Serverless Frameworkでデプロイ
- 依存モジュールはLambda Layerに配置され、複数のLambda関数で利用できるようになる
DockerとServerless Frameworkをインストールしていることが前提です。
Docker
https://www.docker.com/
Serverless Framework
https://serverless.com/
Dockerとyumdaを利用して、依存モジュールをビルド
依存モジュールのビルドは、Dockerを利用します。また、Dockerのビルド作業を楽にしてくれるyumdaというツールを使います。
yumda
https://github.com/lambci/yumda
以下のように簡単にyumコマンドをDockerコンテナ上で実行することができます。
$ docker run lambci/yumda:<version> yum <yum-args><version> は、Amazon Linuxのバージョンです。
例えば、Amazon Linux 2で、Ghostscriptをインストールする場合は、以下のようなコマンドになります。
$ mkdir -p dependencies
$ docker run --rm -v "$PWD"/dependencies:/lambda/opt lambci/yumda:2 yum install -y ghostscript コマンドを実行すると dependencies ディレクトリに、Ghostscriptのモジュールがインストールされます。
Serverless Frameworkでデプロイする
インストールしたモジュールは、ディレクトリごとzipで固めます。
$ cd dependencies
$ zip -yr ../dependencies.zip .
$ cd ..また、hello-world/app.js という名前で、スクリプトを作成します。
Serverless Framework の設定は、以下のようになります。
service: yumda-example
provider:
  name: aws
  runtime: nodejs10.x
package:
  individually: true
  exclude:
    - ./**
functions:
  hello-world:
    handler: hello-world/app.lambdaHandler
    package:
      include:
        - hello-world/**
    layers:
      - {Ref: DependenciesLambdaLayer}
layers:
  dependencies:
    path: dependencies
    package:
      artifact: dependencies.ziplayers項目でLambda Layerの設定をしています。この設定により、dependencies.zipはLambda Layerに配置されます。
Lambda Layerというのは、複数のLambda関数でライブラリを共有する仕組みです。この仕組みにより、今回ではGhostscriptを複数のLambda関数から呼び出せる形となります。
デプロイコマンドは以下のようになります。
$ sls deployまとめ
yumコマンドでインストールした依存モジュールをLambda関数で利用する方法をご紹介しました。
yumのリポジトリは、yumdaライブラリで管理しているリポジトリを参照しているので、以下のファイルにリストされているモジュール以外は利用できません。
https://github.com/lambci/yumda/blob/master/amazon-linux-2/packages.txt
含まれていないモジュールを利用したい場合は、Issuesでリクエストを出すと良いようです。
MMMは、AWS LambdaとDockerコンテナに力を入れています。ぜひ以下のページをご覧ください。
・Dockerコンテナ基盤(AWS Fargate/Amazon ECS)


 
																											 
																											 
																											 
																											