MMMブログ

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コンテナ上で実行することができます。

1
$ docker run lambci/yumda:<version> yum <yum-args>

<version> は、Amazon Linuxのバージョンです。

例えば、Amazon Linux 2で、Ghostscriptをインストールする場合は、以下のようなコマンドになります。

1
2
$ mkdir -p dependencies
$ docker run --rm -v "$PWD"/dependencies:/lambda/opt lambci/yumda:2 yum install -y ghostscript

コマンドを実行すると dependencies ディレクトリに、Ghostscriptのモジュールがインストールされます。

Serverless Frameworkでデプロイする

インストールしたモジュールは、ディレクトリごとzipで固めます。

1
2
3
$ cd dependencies
$ zip -yr ../dependencies.zip .
$ cd ..

また、hello-world/app.js という名前で、スクリプトを作成します。

Serverless Framework の設定は、以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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.zip

layers項目でLambda Layerの設定をしています。この設定により、dependencies.zipはLambda Layerに配置されます。

Lambda Layerというのは、複数のLambda関数でライブラリを共有する仕組みです。この仕組みにより、今回ではGhostscriptを複数のLambda関数から呼び出せる形となります。

デプロイコマンドは以下のようになります。

1
$ sls deploy

まとめ

yumコマンドでインストールした依存モジュールをLambda関数で利用する方法をご紹介しました。

yumのリポジトリは、yumdaライブラリで管理しているリポジトリを参照しているので、以下のファイルにリストされているモジュール以外は利用できません。

https://github.com/lambci/yumda/blob/master/amazon-linux-2/packages.txt

含まれていないモジュールを利用したい場合は、Issuesでリクエストを出すと良いようです。

MMMは、AWS LambdaとDockerコンテナに力を入れています。ぜひ以下のページをご覧ください。

サーバーレスアーキテクチャ(AWS Lambda)

Dockerコンテナ基盤(AWS Fargate/Amazon ECS)

このエントリーをはてなブックマークに追加

お問い合わせ

見積もり依頼や詳しいご相談など、クラウド・AWSに関する困りごとをお気軽にご相談ください。
以下のお問い合わせ先から受け付けています。

お問合わせはこちら

※通常1営業日内にご回答いたします。