Terraform не может создать источник CloudFront со статической конечной точкой веб-сайта S3 - PullRequest
1 голос
/ 07 марта 2019

У меня есть план, который использует два модуля: bucket-website и cloudfront-website

Помимо прочего (политики и тому подобное) внутри модуля корзины, существует следующий ресурс для создания корзины и ее использования в качестве веб-сайта:

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 имеет ресурс со всеми этими свойствами облачного фронта (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, т.е. получал статическую веб-конечную точку сегмента ( отличную от стандартной конечной точки сегмента ) и использовал ее в качестве источника 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}, поэтому я, честно говоря, не понимаю, в чем дело.

1 Ответ

0 голосов
/ 07 марта 2019

Только что нашел решение.При обслуживании веб-сайта S3 через CloudFront в раздел origin должен быть добавлен следующий код, хотя в других местах это не указано.

    custom_origin_config {
      http_port              = "80"
      https_port             = "443"
      origin_protocol_policy = "http-only"
      origin_ssl_protocols   = ["TLSv1", "TLSv1.1", "TLSv1.2"]
    }
...