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

AWS Lambda与S3静态文件自定义域名路由配置求助

听起来你是卡在了CloudFront的路由规则和源映射上,这是无服务器多源整合的常见痛点。我帮你梳理一套完整的可落地步骤,从架构到具体配置,应该能解决你的问题:

整体架构思路

咱们用CloudFront作为单一入口,把自定义域名的流量统一导入,再根据不同路径转发到对应的S3静态资源桶或API Gateway(关联Lambda)。这样既统一了HTTPS配置,又能灵活管理路由,比直接用Route53分发给不同源要靠谱得多。

具体配置步骤

1. 准备S3静态资源桶

你需要两个独立的S3桶:

  • 桶A:存放根路径/的HTML/CSS/JS,推荐用**CloudFront Origin Access Identity(OAI)**访问(更安全),也可以配置静态网站托管。
  • 桶B:存放/backend/路径的静态资源,同样配置OAI或者静态托管。

注意:如果用OAI,一定要在S3桶策略里添加允许CloudFront OAI访问的权限,避免公开桶内容。示例桶策略如下:

{
  "Version": "2008-10-17",
  "Id": "PolicyForCloudFrontPrivateContent",
  "Statement": [
    {
      "Sid": "1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity YOUR-OAI-ID"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
    }
  ]
}

2. 配置API Gateway关联Lambda

把你的三个Lambda函数分别绑定到API Gateway的对应资源上:

  • 创建/api/people资源,绑定处理人员数据的Lambda;
  • 创建/api/dogs资源,绑定处理狗狗数据的Lambda;
  • 创建/stats资源,绑定统计功能的Lambda;
    部署API到一个阶段(比如prod),拿到API的Invoke URL(类似https://xxx.execute-api.us-east-1.amazonaws.com/prod)。

推荐用HTTP API(比REST API更轻量便宜),路径转发逻辑更简单。

3. 配置CloudFront分发(核心步骤)

这是你之前可能没配置对的地方,重点在行为规则的顺序和路径映射:

3.1 添加源

在CloudFront分发里添加三个源:

  • 源1:指向桶A(根路径静态资源);
  • 源2:指向桶B(/backend/静态资源);
  • 源3:指向API Gateway的Invoke URL(只填域名部分,比如xxx.execute-api.us-east-1.amazonaws.com,不要带https://和阶段路径)。

3.2 配置行为规则(按优先级从高到低排序)

CloudFront会按顺序匹配路径,所以把更具体的路径放在前面:

  • 行为1:路径模式填/backend/*,源选择桶B,缓存策略选CachingOptimized(适合静态资源),路径转发设置为Forward all,确保静态资源能正确加载。
  • 行为2:路径模式填/api/people/*,源选择API Gateway,路径转发设置为Customize,把/api/people/*替换为/prod/api/people/$1(这里的prod是你的API阶段名,$1是匹配的路径参数)。同时缓存策略选CachingDisabled(API请求是动态的,避免返回旧数据)。
  • 行为3:路径模式填/api/dogs/*,源选择API Gateway,路径转发替换为/prod/api/dogs/$1,同样禁用缓存。
  • 行为4:路径模式填/stats/*,源选择API Gateway,路径转发替换为/prod/stats/$1,禁用缓存。
  • 默认行为:路径模式填/*,源选择桶A,处理根路径的静态资源,缓存策略用CachingOptimized。

3.3 自定义域名与SSL

在CloudFront的“自定义域名”里添加你的域名,然后选择AWS Certificate Manager(ACM)里的SSL证书——注意证书必须在us-east-1(弗吉尼亚北部)区域申请,CloudFront只认这个区域的证书,不管你的资源在哪个区域。

4. Route53解析配置

在Route53里创建一条A记录,类型选“别名”,目标指向你的CloudFront分发域名(比如d123456abcdef.cloudfront.net),这样自定义域名的流量就会转到CloudFront了。

常见坑点排查
  • 路径映射错误:比如API Gateway的资源是/people而不是/api/people,那CloudFront的/api/people/*要转发到/prod/people/$1,别搞错了路径层级。
  • 缓存问题:API请求一定要禁用缓存,否则会返回旧的Lambda执行结果。
  • S3桶权限:用OAI的话,必须确保桶策略允许OAI访问,不然CloudFront会返回403。
  • 证书区域:再次强调,CloudFront的SSL证书必须在us-east-1区域,别在其他区域申请了白忙活。

现在按这个步骤走,应该就能把所有路径都正确整合到自定义域名下了,记得每一步配置完后等CloudFront分发部署完成(大概10-15分钟)再测试哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:17