Node.js
AWS
lambda
aws-sdk

Lambda実行環境(AWS)上のSDKのバージョンについて

Lambda実行環境(AWS)上のSDKのバージョンについて

node_modulesに、sdkを含めた場合と含めない場合に、使用されるsdkのバージョンがどうなるのかを確認してみました。

sdkのVERSIONをログに出力するLambdaを作成

'use strict';

const AWS = require('aws-sdk');

module.exports.handler = (event, context, callback) => {
  console.info(AWS.VERSION);
  // TODO implement
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
  };
  callback(null, response);
};

含めない場合 Lambdaがサポートするデフォルトのバージョン2.290.0(検証した時点)が使用される

START RequestId: fc958f2e-e09c-11e8-bf95-c18a822dd3f9 Version: $LATEST
2018-11-05T01:49:09.871Z    fc958f2e-e09c-11e8-bf95-c18a822dd3f9    2.290.0
END RequestId: fc958f2e-e09c-11e8-bf95-c18a822dd3f9
REPORT RequestId: fc958f2e-e09c-11e8-bf95-c18a822dd3f9  Duration: 27.24 ms  Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 33 MB  

含めた場合 node_modulesに、2.348.0を含めてデプロイすると、2.348.0が使用される

START RequestId: 1f77eb6b-e09d-11e8-879c-43b0c47d9c8a Version: $LATEST
2018-11-05T01:50:07.770Z    1f77eb6b-e09d-11e8-879c-43b0c47d9c8a    2.348.0
END RequestId: 1f77eb6b-e09d-11e8-879c-43b0c47d9c8a
REPORT RequestId: 1f77eb6b-e09d-11e8-879c-43b0c47d9c8a  Duration: 0.52 ms   Billed Duration: 100 ms     Memory Size: 1024 MB    Max Memory Used: 35 MB  

まとめ

使用したいバージョンのsdkをnode_modulesに含めデプロイすれば、そのバージョンを使用可能でした。

公式では、Lambdaでサポートするバージョンが謳われているので、それ以外のバージョンを使用するのは微妙ではありますが、bigfixが入ったバージョンを使用する必要性がある場合致し方ありません・・・
https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
(英語版が最新です。)

The underlying AWS Lambda execution environment includes the following software and libraries.

AWS SDK for JavaScript – 2.290.0

備考

この記事のきっかけになったのは、sdkが標準で持つリトライ機能でした。
中でも、リトライ対象となるべき「TooManyRequestsException」が漏れていたバグが
v2.348.0にマージされていたのでした。
https://github.com/aws/aws-sdk-js/pull/2246

sdkをデプロイパッケージに含めると、サイズが大きくなり過ぎて、Lambda管理コンソール上で、ソースが確認出来なくなる事もありそうですので、ご注意ください。