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

使用Terraform配置aws_cloud_distribution并以EC2为源时遇创建错误的排查咨询

问题分析与解决方案

这个错误不是Terraform 0.13.6版本的问题,而是你的CloudFront源站配置遗漏了关键的自定义源参数段。

错误原因

当你只在origin块中指定domain_name和origin_id时,CloudFront会默认将该源识别为S3存储桶——这就是为什么报错提示“Origin DomainName does not refer to a valid S3 bucket”。而EC2实例属于自定义HTTP/HTTPS源,必须显式配置custom_origin_config段来告诉CloudFront如何与这个非S3源通信。

修正后的模块配置

修改你的CloudFront模块中的origin块,添加custom_origin_config配置:

origin {
  domain_name = var.domain_name
  origin_id   = var.origin_id

  # 新增自定义源配置段,适配EC2作为源站
  custom_origin_config {
    http_port              = 80          # EC2上服务监听的HTTP端口
    https_port             = 443         # EC2上服务监听的HTTPS端口(如果启用)
    origin_protocol_policy = "https-only" # 可选值:https-only、http-only、match-viewer
    origin_ssl_protocols   = ["TLSv1.2"] # 与EC2服务兼容的SSL协议版本
  }
}

关键配置说明

  • origin_protocol_policy:控制CloudFront与源站通信时使用的协议,根据你的EC2服务配置选择:
    • match-viewer:CloudFront使用与用户请求相同的协议访问源站
    • https-only:强制CloudFront用HTTPS访问源站(要求EC2配置了SSL证书)
    • http-only:强制用HTTP访问源站
  • origin_ssl_protocols:指定CloudFront与源站通信时支持的SSL协议版本,建议至少包含TLSv1.2以保证安全性
  • 端口配置要与EC2实例上运行的服务监听端口一致

额外验证步骤

确保你的EC2实例安全组允许CloudFront边缘节点访问对应端口:

  • 可以通过AWS前缀列表com.amazonaws.global.cloudfront.origin-facing来授权CloudFront的IP范围访问EC2的80/443端口
  • 或者临时开放0.0.0.0/0进行测试(不建议生产环境使用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:27:38