如何使用CloudFormation内联创建Nodejs Lambda函数?

0

【以下的问题经过翻译处理】 我是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", ] }

profile picture
专家
已提问 5 个月前30 查看次数
1 回答
0

【以下的回答经过翻译处理】 您的Handler属性应该是:index.handler。请参见[这里](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#cfn-lambda-function-code-zipfile).

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则