Lambda レイヤーにライブラリを追加する ( AWS CLI 編)
概要
Lambda から AWS CLI コマンドを利用できるようにするため、Lambda レイヤーに AWS CLI を追加します。
本記事では、デプロイパッケージの作成方法として 2 通り紹介します。
Lambda レイヤーに AWS CLI を追加するためのデプロイパッケージ作成方法と手順
方法 1: AWS CLI のインストーラーを使ってデプロイパッケージ作成する
最終的なデプロイパッケージ( zip ファイルアーカイブ)のフォルダ構成
Copied!
.
└── bin
├── aws
└── 省略(色々入ります)
作業用ディレクトリとレイヤーパスの作成
Copied!
mkdir ~/aws_cli_layer
cd ~/aws_cli_layer
mkdir aws-cli aws-bin bin
AWS CLI インストーラのダウンロードとインストール
bin
ディレクトリに AWS CLI のバイナリーファイルなどを追加します。
Copied!
cd ~/aws_cli_layer
# wget もしくは curl いづれかのコマンドで AWS CLI のインストールファイルをダウンロードします。
wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
curl -O https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
# ファイルを解凍します。
unzip awscli-exe-linux-x86_64.zip
# 作業用ディレクトリにインストールします。
./aws/install -i ~/aws_cli_layer/aws-cli -b ~/aws_cli_layer/aws-bin
# aws コマンドのバイナリーファイルなどが入ったディレクトリの中身を全てコピーします。
cp -r ./aws-cli/v2/current/dist/* ./bin
デプロイパッケージ化 ( zip ファイルアーカイブ )
Copied!
cd ~/aws_cli_layer
zip -r9 aws_cli_layer.zip bin
方法 2: aws-lambda-layer-awscli リポジトリを使ってデプロイパッケージ作成する
以下の aws-lambda-layer-awscli
という AWS 公式のリポジトリに AWS CLI を含めた Lambda レイヤーを作成するためのブランチがあります。
aws
コマンドだけでなく、jq
コマンドなども含まれています。
aws-lambda-layer-awscli リポジトリのクローンとデプロイパッケージ作成 ( zip ファイルアーカイブ )
Copied!
# aws-lambda-layer-awscli リポジトリのクローンします。
git clone https://github.com/aws-samples/aws-lambda-layer-awscli.git
cd aws-lambda-layer-awscli
# ブランチを awscli-v2-python37 に切り替えます。
git checkout awscli-v2-python37
# ビルドの実行をします。
# ビルドが完了すると、カレントディレクトリに layer.zip が作成されます。これがデプロイパッケージとなります。
make
Lambda レイヤーの作成
デプロイパッケージを使用した Lambda レイヤーの作成手順はこちらにまとめてあります。
動作確認
作成した Lambda レイヤーを使用する Lambda 関数を作成し、テスト実行してみます。
使用するカスタムランタイムはなんでもいいですが、本記事ではカスタムランタイムである Amazon Linux 2 を使用します。
特にエラーが発生せず、実行結果のログに AWS CLI のバージョンの表示と、指定した S3 バケットにファイルが転送されていれば成功です。
方法 1 で作成した Lambda レイヤーの場合
Copied!
function handler () {
EVENT_DATA=$1
aws --version
aws s3 cp ./bootstrap s3://xxxxxxxxxxxxxx
RESPONSE="{\"statusCode\": 200, \"body\": \"Hello from Lambda!\"}"
echo $RESPONSE
}
方法 2 で作成した Lambda レイヤーの場合
Copied!
function handler () {
EVENT_DATA=$1
/opt/awscli/aws --version
/opt/awscli/aws s3 cp ./bootstrap s3://xxxxxxxxxxxxxx
RESPONSE="{\"statusCode\": 200, \"body\": \"Hello from Lambda!\"}"
echo $RESPONSE
}
参考文献
個人開発したサービス