Estou usando o
aws_s3_bucket_website_configuration
recurso para configurar o redirecionamento do site S3 e quando referencio isso no origin
bloco do aws_cloudfront_distribution
recurso recebo o seguinte erro:
Error: creating CloudFront Distribution: operation error CloudFront: CreateDistributionWithTags, https response error StatusCode: 400, RequestID: 123456789, InvalidArgument: The parameter Origin DomainName does not refer to a valid S3 bucket.
Aqui está o código completo:
resource "aws_s3_bucket" "cf_s3_bucket" {
bucket = var.cf_s3_bucket
}
resource "aws_s3_bucket_website_configuration" "cf_s3_bucket" {
bucket = aws_s3_bucket.cf_s3_bucket.id
redirect_all_requests_to {
host_name = var.s3_redirect_destination
protocol = "https"
}
}
resource "aws_cloudfront_origin_access_control" "cf_oac" {
name = "travel"
description = "travel policy"
origin_access_control_origin_type = "s3"
signing_behavior = "always"
signing_protocol = "sigv4"
}
resource "aws_cloudfront_distribution" "s3_distribution" {
comment = var.cf_dist_comment
aliases = var.alt_domain_names
default_cache_behavior {
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
target_origin_id = local.s3_origin_id
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
viewer_protocol_policy = "redirect-to-https"
}
default_root_object = "index.html"
enabled = true
http_version = "http2"
is_ipv6_enabled = false
origin {
connection_attempts = 3
connection_timeout = 10
domain_name = aws_s3_bucket_website_configuration.cf_s3_bucket.website_endpoint
origin_access_control_id = aws_cloudfront_origin_access_control.cf_oac.id
origin_id = local.s3_origin_id
}
price_class = "PriceClass_100"
restrictions {
geo_restriction {
restriction_type = "none"
}
}
viewer_certificate {
acm_certificate_arn = var.acm_cert_arn
minimum_protocol_version = "TLSv1.2_2021"
ssl_support_method = "sni-only"
}
}
Se eu mudar
domain_name
para
domain_name=aws_s3_bucket.cf_s3_bucket.bucket_regional_domain_name
então não recebo o erro. No entanto, quando olho para o Origin no console do CloudFront, vejo esta mensagem
This S3 bucket has static web hosting enabled. If you plan to use this distribution as a website, we recommend using the S3 website endpoint rather than the bucket endpoint.
Portanto, tenho o valor de domínio de origem errado no CloudFront, o que resulta Access Denied
no meu navegador e tenho que alterá-lo manualmente no console do CloudFront para que o redirecionamento funcione.
Minha pergunta é: posso usar
domain_name = aws_s3_bucket_website_configuration.cf_s3_bucket.website_endpoint
e se não, como obtenho o valor correto para
domain_name
no origin
bloco?
Sim, você pode e deve. Mas você tem que configurá-lo com o
custom_origin_config
e ele precisa serhttp-only
.