如何使用inlineCode在无服务器中定义lambda函数?

时间:2019-12-05 16:24:57

标签: javascript node.js aws-lambda serverless-framework

考虑一段无服务器代码:

functions:
  MyFunc:
    handler: index.handler
    name: "my_name"
    runtime: nodejs12.x
    memorySize: 512
    timeout: 30
    inlineCode: |
      exports.handler = function(event, context) {
          console.log("ok");
      };
    description: description 

这将导致打包源文件夹中的所有内容。我不能禁用它。如果我添加事件:

package:
  artifact: dummy.zip

部署失败,因为dummy.zip是空文件。但是为什么在指定inlineCode时需要压缩文件?有没有办法仅使用inlineCode参数来禁用打包和部署nodejs功能?

2 个答案:

答案 0 :(得分:0)

inlineCode支持AWS::Serverless::Function参数的概念,但serverless-framework不支持。您粘贴的YAML不是1:1映射到AWS::Serverless::Function,而是特定于sls本身。

将代码存储在文件/目录中,直到sls团队添加对inlineCode的支持。我没有看到任何功能要求。我相信他们会很高兴从您这里得到一个。

答案 1 :(得分:0)

解决方法是将lambda函数定义定义为普通的cloudformation资源,如下所示:

resources:
  Resources:
    MyFunc:
      Type: AWS::Lambda::Function
      Properties:
        FunctionName: "my_name"
        Handler: index.handler
        Runtime: nodejs10.x
        Role: !GetAtt LambdaRole.Arn # do not forget to define role by hand :(
        Code:
          ZipFile: |
            exports.handler = function(event, context, callback) {
            console.log(event);
                const response = {
                    statusCode: 200,
                    body: JSON.stringify('Hello Node')
                };
                callback(null, response);
            };