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"

参考