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管理コンソール上で、ソースが確認出来なくなる事もありそうですので、ご注意ください。