使用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
相关产品推荐
相关产品推荐

