首页 > 解决方案 > 如何使用 inlineCode 在无服务器中定义 lambda 函数?

问题描述

考虑一段无服务器代码:

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是空文件。但是为什么在指定时我需要一个 zip 文件inlineCode?有没有办法inlineCode仅使用参数禁用打包和部署 nodejs 功能?

标签: javascriptnode.jsaws-lambdaserverless-framework

解决方案


解决方法是将 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);
            };

推荐阅读