Lambda Layersで最新バーションのAWS SDKを利用できるようにする
はじめに
Lambdaで最新バージョンのAWS SDKを利用したい場合に、Lambda Layersを用いた方法を記載します。
AWS SDKのバージョンを確認する
利用されているAWS SDKのバージョンを確認しておきます。
- Lambda Execution Roleの作成
$ aws iam create-role \ --role-name lambda-ex \ --assume-role-policy-document \ file://trust-policy.json
trust-policy.jsonの内容は以下の通り。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
作成したIAM Roleに「AWSLambdaBasicExecutionRole」ポリシーをアタッチします。
$ aws iam attach-role-policy \ --role-name lambda-ex \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
- Lambda関数の作成
関数を作成して、ファイル名をindex.jsとして保存します。
const AWS = require('aws-sdk') exports.handler = async (event) => { return AWS.VERSION }
デプロイパッケージを作成します。
$ zip function.zip index.js
Lambda関数を作成します。
$ aws lambda create-function \ --function-name get-aws-sdk-nodejs-version \ --zip-file fileb://function.zip \ --handler index.handler \ --runtime nodejs14.x \ --role <LAMBDA_EXEC_ROLE_ARN>
- Lambda関数を実行します。
$ aws lambda invoke \ --function-name get-aws-sdk-nodejs-version \ --log-type Tail \ version-before $ cat version-before "2.804.0"
Lambda Layerの作成
次に、最新バージョンのAWS SDKのLayerを作成します。
デプロイパッケージは、Lambda環境と互換性がある必要があり、Lambdaランタイムと一致するOSを利用することが推奨されているようです。
ここでは、amazonlinux2のdockerイメージを利用してデプロイパッケージを作成します。
- dockerコンテナの起動
$ docker run -it --rm -v $(pwd):/tmp/aws-sdk-layer amazonlinux
- デプロイパッケージの作成
# amazon-linux-extras install -y epel # yum -y install nodejs zip # mkdir nodejs # cd nodejs # npm install aws-sdk # zip -r /tmp/aws-sdk-layer/package.zip ../nodejs # exit
- Lambda Layerの作成
aws lambda publish-layer-version \ --layer-name aws-sdk-nodejs \ --description "aws sdk nodejs 2.868.0" \ --license-info "MIT" \ --compatible-runtimes nodejs14.x \ --zip-file fileb://./package.zip
- Lambda関数にLayerを適用する
$ aws lambda update-function-configuration \ --function-name get-aws-sdk-nodejs-version \ --layers <LAYER_ARN>
Lambda Layerの適用を確認する
- Lambda関数の実行
$ aws lambda invoke \ --function-name get-aws-sdk-nodejs-version \ --log-type Tail \ version-after $ cat version-after "2.868.0"