You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFront Lambda@Edge无法使用Layer,如何引入第三方库?

Lambda@Edge中使用第三方库验证JWT的解决方案

Lambda@Edge不支持Layer,无法通过Layer引入jsonwebtoken、jwk-to-pem这类第三方依赖,直接引入会触发Cannot find package 'jsonwebtoken' imported from /var/task/index.mjs错误,解决核心是将依赖直接打包到Lambda部署包中,具体步骤如下:

1. 初始化项目并安装依赖

  • 创建独立项目目录,执行初始化命令:
    npm init -y
    
  • 安装JWT验证所需依赖,添加--production参数精简包体积:
    npm install jsonwebtoken jwk-to-pem --production
    

2. 编写Lambda验证代码

以index.mjs为例,示例代码如下:

import jwt from 'jsonwebtoken';
import jwkToPem from 'jwk-to-pem';

export const handler = async (event) => {
  const request = event.Records[0].cf.request;
  const authHeader = request.headers.authorization?.[0].value;

  // 校验请求头是否包含有效Token
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return {
      status: '401',
      statusDescription: 'Unauthorized',
      headers: {
        'www-authenticate': [{ key: 'WWW-Authenticate', value: 'Bearer' }]
      }
    };
  }

  const token = authHeader.split(' ')[1];
  // 替换为你的实际JWK数据(可从授权服务器接口获取)
  const jwk = {
    alg: 'RS256',
    e: 'AQAB',
    kid: 'your-jwk-kid',
    kty: 'RSA',
    n: 'your-jwk-modulus'
  };
  const pem = jwkToPem(jwk);

  try {
    // 验证Token有效性
    jwt.verify(token, pem, { algorithms: ['RS256'] });
    return request;
  } catch (err) {
    return {
      status: '403',
      statusDescription: 'Forbidden'
    };
  }
};

3. 打包部署包

  • 将index.mjs和node_modules文件夹直接压缩为ZIP包
  • 注意:ZIP包根目录必须直接包含这两个内容,不能嵌套在外层文件夹中
  • 建议在Linux环境或WSL中打包,避免Windows路径分隔符、权限问题导致Lambda执行异常

4. 上传并配置Lambda@Edge

  • 在AWS Lambda控制台创建Node.js函数(选择Lambda@Edge支持的版本,如Node.js 18.x)
  • 上传打包好的ZIP包
  • 配置函数执行角色,确保拥有Lambda@Edge所需权限(如cloudfront:UpdateDistribution)
  • 将函数关联到CloudFront分配的Viewer Request事件类型

额外注意事项

  • 部署包体积限制:Viewer Request阶段的Lambda@Edge函数压缩后不能超过1MB,需确保依赖精简
  • 冷启动优化:可提前缓存JWK数据,避免每次请求重复转换,减少冷启动耗时
  • 运行时兼容性:安装依赖的Node.js版本需与Lambda函数选择的运行时版本一致,避免兼容性问题

内容的提问来源于stack exchange,提问作者ivi333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:52:28