Node.js 18.x
でコードを書いて、AWS Lambdaで稼働させたい。
AWS-SDKはランタイム搭載のAWS-SDK v3をそのまま使いたいし、コードはAWS CloudFormationのファイル内にベタ書きしてデプロイしたい(手抜き)。
CloudFormationが生成するもの
例えばCloudFormationのYAMLにベタ書きする。
# ...略...
Resources:
LambdaFunc:
Type: AWS::Lambda::Function
Properties:
Runtime: nodejs18.x
Handler: index.handler
Code:
ZipFile: |
// ベタ書きするぞおおお
// おおおお
// おおおお
# ...略...
すると、生成されるのはこれまで通りindex.js
である。
Node.jsコード側を合わせる
ということで、普段通りindex.mjs
を期待してコードを書く(ES Modules)と動かない。
// 動かない
import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3';
export const handler = async (event) => {
...;
};
奥ゆかしくindex.js
を期待してコードを書く(CommonJS)ことになる。
// 動く
const { S3Client, GetObjectCommand } = require('@aws-sdk/client-s3');
exports.handler = async (event) => {
...;
};
AWSマネージメントコンソールの挙動
AWSマネージメントコンソール上でLambda(nodejs18.x
利用)を手動でポチポチ作成開始した場合はindex.mjs
が用意されるため、「動く/動かない」の判断において混乱し易い。