与常规lambda函数结合使用时,Cloudfront事件函数的大小太大

问题描述

我已经创建了一个S3网站,并使用了'@ silvermine / serverless-plugin-cloudfront-lambda-edge'插件连接了一些Cloufront事件,它们均按预期工作:

functions:
  origin_request:
    handler: handler.origin_request
    memorySize: 128
    timeout: 1
    lambdaAtEdge:
      distribution: 'StaticSiteCloudfront'
      eventType: 'origin-request'
  viewer_request:
    handler: handler.viewer_request
    memorySize: 128
    timeout: 1
    lambdaAtEdge:
      distribution: 'StaticSiteCloudfront'
      eventType: 'viewer-request'

我现在想介绍常规的lambda @ edge函数,该函数仅用于处理网站上的联系表。

functions:
  ...
  hello:
    handler: mail.send_mail
    timeout: 10
    memorySize: 256
    events:
      - http:
          path: mail
          method: post

现在发生的是,部署时出现以下错误

An error occurred: StaticSiteCloudfront - The function code size is larger than the maximum allowed size for functions that are triggered by a CloudFront event: 2908922 Max allowed: 1048576 Function: arn:aws:lambda:us-east-1:12345678001:function:myywebsite-dev-viewer_request:15

我认为这是因为我的邮件功能具有一些我想与邮件功能一起部署的依赖关系,但与我的查看者请求和原始请求功能无关,但是这些(我认为!)与它们一起部署-导致文件过大。 Cloudfront事件函数没有依赖性。如何分隔依赖关系,以便仅捆绑和部署所需的依赖关系?

作为参考(如果有用),我的package.json看起来像这样:

  "devDependencies": {
    "@silvermine/serverless-plugin-cloudfront-lambda-edge": "^2.1.1","serverless-s3-sync": "^1.15.0"
  },**** only the following deps are needed for the "mail" function ****
  "dependencies": {
    "mailgun-js": "^0.22.0","validator": "^13.1.17"
  }

解决方法

您可以指定要单独打包的功能,并使用以下功能在每个功能的基础上设置包含/排除:

package:
  individually: true
  exclude:
    - node_modules/**

结果是:

functions:
  origin_request:
    handler: handler.origin_request
    memorySize: 128
    timeout: 1
    # specify exclusions
    package:
      individually: true
      exclude:
        - node_modules/**
    lambdaAtEdge:
      distribution: 'StaticSiteCloudfront'
      eventType: 'origin-request'
  viewer_request:
    handler: handler.viewer_request
    memorySize: 128
    timeout: 1
    # specify exclusions
    package:
      individually: true
      exclude:
        - node_modules/**
    lambdaAtEdge:
      distribution: 'StaticSiteCloudfront'
      eventType: 'viewer-request'
  mail:
    handler: mail.send_mail
    timeout: 10
    memorySize: 256
    events:
      - http:
          path: mail
          method: post