5
1

More than 3 years have passed since last update.

AWS Lambdaでyum installする簡単な方法

Posted at

この記事では、yumでインストールできるソフトウェアをAWS Lambdaの環境で使うための方法を解説しています。

この記事で分からない点は @ts_3156 までお気軽にご質問ください。

AWS Lambdaの環境構築

AWS Lambdaの環境には最小限のソフトウェアしかインストールされていません。例えば、lesscurlも最初はないです。

そのため、使いたいソフトウェアがある場合は、そのソフトウェアを所定のディレクトリにインストールしておき、AWS Lambdaの環境に読み込み専用でマウントする必要があります。

この記事では、yumでインストールできるソフトウェアを例に、AWS Lambdaの環境にソフトウェアをインストールする方法を解説しています。

この記事で対象とするOSはAmazon Linux 2です。Python、Ruby、nodejsのいずれであっても、最新バージョンはAmazon Linux 2の環境で動かす必要があります。

AWS lambdaレイヤー

AWS lambdaでは、追加でインストールしたソフトウェアをレイヤーという仕組みでAWS Lambdaにマウントします。レイヤーは実行可能ファイルと依存関係をひとまとめにしたzipファイルです。

zipに入れたファイルは、AWS Lambdaの/optにマウントされます。zipに/binというディレクトリを入れることで、AWS Lambdaには/opt/binというパスでマウントされます。

yumでパッケージをインストールすると、/binだけでなく/etc/lib/shareというディレクトリも作成されます。zipファイルにはこれらのディレクトリも入れる必要があります。

yumda – yum for Lambda を使う

GitHub yumda – yum for Lambda

1番簡単でおすすめの方法です。

yumのインストール先を/lambdaに変更したAmazon Linux 2をdockerで起動し、インストールしたディレクトリだけをzipに圧縮します。さらに、そのzipからレイヤーを作ることで、yumでインストールしたソフトウェアをAWS Lambdaの環境で使えるようになります。

この方法の良い点は、インストールしたソフトウェアが依存しているソフトウェアも全てzipに含まれる点です。

# インストールできるパッケージの一覧を確認する
docker run --rm lambci/yumda:2 yum list available
# ImageMagickをyumでインストールする
docker run --rm -v "$PWD"/im-layer:/lambda/opt lambci/yumda:2 yum install -y ImageMagick
# ImageMagickがインストールされたレイヤーを作成する
cd im-layer
zip -yr ../im-layer.zip .
cd ..
aws lambda publish-layer-version --layer-name im-layer --zip-file fileb://im-layer.zip --description "ImageMagick Layer"
# インタラクティブなシェルで動作確認をする
docker run -it --rm -v "$PWD"/im-layer:/lambda/opt lambci/yumda:2 /bin/bash

# インストールしたImageMagickの動作確認をする
LD_LIBRARY_PATH=/lambda/opt/lib /lambda/opt/bin/convert --version

ImageMagick for AWS Lambda を使う

GitHub ImageMagick for AWS Lambda

ImageMagickを使いたいだけなら、AWS Lambdaにそのままデプロイできるスクリプトがあります。ボタンをクリックしていくだけでデプロイできますが、このImageMagickは必要最小限の構成でビルドされているため、使いたいフォーマットがある場合は自分でコンパイルする必要があります。

コンパイルするオプション等はリポジトリのMakefileを見れば分かります。また、ImageMagickの他にもrsvg-convertなどもクリックだけでデプロイできるようになっています。

必要なパッケージを自分で集めてzipにする

AWS Lambda デプロイパッケージで Amazon Linux AMI ネイティブバイナリパッケージを使用する方法

特におすすめではないですが、公式ドキュメントに書いてある方法です。

yumdownloaderrpmdev-extractを使って、必要なパッケージの中身を1つずつコピーすることになります。この記事には、コマンドだけ書いておきます。

yumdownloaderは依存しているパッケージまで含めないため、依存しているパッケージも集めるにはさらにrepotrackも必要になります。

# yumdownloaderをインストールする
sudo yum install -y yum-utils rpmdevtools

# パッケージの中身を展開する
cd /tmp
yumdownloader unixODBC.x86_64 freetds.x86_64 libtool-ltdl.x86_64 gnutls.x86_64
rpmdev-extract *rpm

# 必要なファイルをコピーする
sudo mkdir -p /var/task
sudo chown ec2-user:ec2-user /var/task
cd /var/task
/bin/cp /tmp/*/usr/lib64/* /var/task

# zipファイルを作成する
cd /var/task
zip -r9 /tmp/MyCodeWithLibraries.zip *
5
1
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
5
1