【以下的问题经过翻译处理】 我是lambda和node-js的新手,想创建一个CF模板以内联方式创建lambda函数,而不是通过S3存储桶的zip文件传递lambda代码。
当我尝试以下代码时,它失败并显示报错“Cannot find module app“,因为CFT没有将其部署为node包并且app.js和nodejs目录结构在其中缺失。是否有一种方法可以创建此类lambda函数,而不手动创建zip文件并将其添加到cloudFormation模板中?在python中我很容易做到,但不确定是否对使用nodejs lambda的cloudformation 有限制。
我的CloudFormation模板:
Resources:
OnConnectFunction:
Type: "AWS::Lambda::Function"
Properties:
Description: OnConnectFunction
Handler: app.handler
MemorySize: 256
Runtime: nodejs12.x
Role: !GetAtt 'LambdaIAMRole.Arn'
Timeout: 60
Environment:
Variables:
TABLE_NAME:
Ref: TableName
Code:
ZipFile: |
const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient({ apiVersion: '2012-08-10', region: process.env.AWS_REGION });
exports.handler = async event => {
const putParams = {
TableName: process.env.TABLE_NAME,
Item: {
connectionId: event.requestContext.connectionId
}
};
try {
await ddb.put(putParams).promise();
} catch (err) {
return { statusCode: 500, body: 'Failed to connect: ' + JSON.stringify(err) };
}
return { statusCode: 200, body: 'Connected.' };
};
调用Lambda时的报错:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'app'\nRequire stack:\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module 'app'",
"Require stack:",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
]
}