Amazon web services AWS:对于查看器事件,Lambda函数的最大压缩大小不能超过1 MB

Amazon web services AWS:对于查看器事件,Lambda函数的最大压缩大小不能超过1 MB,amazon-web-services,aws-lambda,aws-sam,Amazon Web Services,Aws Lambda,Aws Sam,我用SAM创建了一个lambda函数。非常小。它实际上并没有做任何事情,我部署它只是为了测试 这是处理程序(Nodejs): 然后,我有了这个模板。yaml: AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > simple lamdga test Globals: Function: Timeout: 3 Resources:

我用SAM创建了一个lambda函数。非常小。它实际上并没有做任何事情,我部署它只是为了测试

这是处理程序(Nodejs):

然后,我有了这个模板。yaml:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  simple lamdga test
  
Globals:
  Function:
    Timeout: 3

Resources:

  LambdaEdgeFunctionRole:
    Type: "AWS::IAM::Role"
    Properties:
      Path: '/'
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Sid: "AllowLambdaServiceToAssumeRole"
            Effect: "Allow"
            Action: 
              - "sts:AssumeRole"
            Principal:
              Service: 
                - "lambda.amazonaws.com"
                - "edgelambda.amazonaws.com"

  TestLambda:
      Type: AWS::Serverless::Function
      Properties:
        CodeUri: lambdaTest/
        Description: 'test func'
        Handler: app.lambdaHandler
        Runtime: nodejs12.x
        MemorySize: 128
        Timeout: 1
        Role: !GetAtt LambdaEdgeFunctionRole.Arn
        AutoPublishAlias: live
正在使用SAM本地调用测试函数。。。效果很好

我部署了它,可以看到S3存储桶的大小是1.2MB。当我转到AWS中的lambda控制台时,我尝试添加所需的CloudFront触发器,但是,我得到以下错误:

我怎样才能克服这个错误?我认为这样一个最小的函数应该很容易被允许部署为lambda边缘函数

我怎样才能克服这个错误

这就是我现在学到的:

我进入S3,在SAM上传的包中添加了一个
.zip
扩展名,以便能够解压缩它,它显示了以下内容:

因此,看起来单是节点_模块就有2.8MB。我试图找出如何告诉SAM不要包含节点单元模块和任何不必要的内容

因此,如果我进入并从package.json文件中删除依赖项,并让它们保持如下状态:

...
  "devDependencies": {
    
  },
  "optionalDependencies": {

  }
...
它起作用了。 我能够创建包并部署到lambda@edge. 这个包裹大约1K,超小。该功能在连接到cloudfront触发器后即可工作


如果不手动删除这些依赖项,如何确保这些依赖项不会包含在包中?

您可能正在打包AWS-SDK和/或其他节点模块。使用npm i-D aws SDK安装SDK将解决此问题。Lambda@edge最大只能为1MB。你必须精简你的功能。也可以尝试使用python,也许它会比使用nodejs更小?我尝试了npm I-D aws sdk,但没有帮助。仍然是1.3MB。然后我编辑了package.json依赖项,使其不包含任何内容。仍然超过1MB。
...
  "devDependencies": {
    
  },
  "optionalDependencies": {

  }
...