我有一个计划,使用两个模块:bucket-website
和 cloudfront-website
在 bucket 模块中,除了策略和其他内容之外,还有以下资源用于创建并将其作为网站提供服务的对象:
resource "aws_s3_bucket" "bucket-website" {
bucket = "${var.bucket_name}"
region = "${var.region}"
website {
index_document = "index.html"
}
tags = "${local.common_tags}"
}
此模块还具有以下输出:
output "website_endpoint" {
value = "${aws_s3_bucket.bucket-website.website_endpoint}"
}
cloudfront-website
模块拥有一个包含所有CloudFront属性(IP地址、缓存等)的资源,但相关部分如下:
resource "aws_cloudfront_distribution" "distribution" {
.....
origin {
domain_name = "${var.domain_name}"
origin_id = "${var.domain_name}"
}
.....
}
在计划中调用云前缀模块时,将传递以下参数:
domain_name = "${module.bucket-website.website_endpoint}"
我可以确认该值是正确的,因为在
terraform apply
的日志中可以看到: origin.123456.domain_name: "" => "foo.s3-website-eu-west-1.amazonaws.com"
origin.123456.origin_id: "" => "foo.s3-website-eu-west-1.amazonaws.com"
如果我只使用AWS控制台进行设置,即获取Bucket的静态Web端点(与标准Bucket端点不同)并将其用作Cloudfront的源,则我将使用相同的端点。
但是,由于某种原因,Terraform对域名提出了抱怨:
* aws_cloudfront_distribution.distribution: error creating CloudFront Distribution: InvalidArgument: The parameter Origin DomainName does not refer to a valid S3 bucket.
我已经没有更多的想法了。一切看起来都很好,端点也是正确的。我检查了其他示例,它们也使用${aws_s3_bucket.<BUCKET_RESOURCE_NAME>.website_endpoint}
,所以我真的不明白问题出在哪里。