首页 > 解决方案 > 与常规 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"
  }

标签: aws-lambdaserverlessaws-serverlessaws-lambda-edge

解决方案


您可以指定要单独打包的函数,并在每个函数的基础上设置包含/排除:

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

推荐阅读