Meu problema
Estou tentando criar um CDN pessoal para compartilhar arquivos estáticos com meus contatos. O design inclui um bucket S3, uma distribuição CloudFront e um subdomínio registrado via Route53, todos configurados usando o Terraform.
No entanto, posso acessar meus arquivos via S3 e Cloudfront, mas não pelo meu subdomínio ( cdn.adamatan.com
).
O que está funcionando
S3
curl http://cdn.adamatan.com.s3.amazonaws.com/index.html
CloudFront
curl https://d36tl9ayobqfgg.cloudfront.net/index.html
O que está quebrado
Não consigo obter os arquivos usando o subdomínio. Além disso, o nslookup
for cdn.adamatan.com
e adamatan.con
não funcionam. Acho que configurei mal o Route53 de alguma forma.
Configuração
Domínio
Zona hospedada
Configuração do Terraform
variable "hosted_zone" {
default = "adamatan.com"
}
variable "domain" {
default = "cdn.adamatan.com"
}
variable "aws_region" {
default = "us-east-1"
}
provider "aws" {
region = "${var.aws_region}"
profile = "personal"
version = "~> 1.1"
}
/*
The S3 bucket storing the files. It must bear the same name as the domain
pointing to it. See https://gist.github.com/danihodovic/a51eb0d9d4b29649c2d094f4251827dd,
and http://stackoverflow.com/a/5048129/2966951
*/
resource "aws_s3_bucket" "adamatan_cdn_bucket" {
bucket = "${var.domain}"
acl = "public-read"
policy = <<EOF
{
"Version":"2008-10-17",
"Statement":[{
"Sid":"AllowPublicRead",
"Effect":"Allow",
"Principal": {"AWS": "*"},
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::${var.domain}/*"]
}]
}
EOF
tags {
Description = "Origin bucket for my personal CDN"
}
}
resource "aws_route53_zone" "cdn_zone" {
name = "${var.hosted_zone}"
}
resource "aws_route53_record" "root_domain" {
zone_id = "${aws_route53_zone.cdn_zone.zone_id}"
name = "${var.domain}"
type = "A"
alias {
name = "${aws_cloudfront_distribution.adamatan_cdn_distribution.domain_name}"
zone_id = "${aws_cloudfront_distribution.adamatan_cdn_distribution.hosted_zone_id}"
evaluate_target_health = false
}
}
resource "aws_cloudfront_distribution" "adamatan_cdn_distribution" {
origin {
domain_name = "${var.domain}.s3.amazonaws.com"
origin_id = "${var.domain}"
}
enabled = true
is_ipv6_enabled = true
comment = "Permanent public file distribution"
default_root_object = "index.html"
aliases = ["${var.domain}"]
default_cache_behavior {
allowed_methods = ["GET", "HEAD", "OPTIONS"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "${var.domain}"
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
viewer_protocol_policy = "allow-all"
min_ttl = 60
default_ttl = 300
max_ttl = 86400
}
price_class = "PriceClass_All"
restrictions {
geo_restriction {
restriction_type = "none"
}
}
viewer_certificate {
cloudfront_default_certificate = true
}
}
output "domain" {
value = "${var.domain}"
}
output "cdn_domain" {
value = "${aws_cloudfront_distribution.adamatan_cdn_distribution.domain_name}"
}
Minha pergunta
Como posso mapear meu subdomínio ( cdn.adamatan.com
) para minha distribuição cloudfront ( d36tl9ayobqfgg.cloudfront.net
) usando o Terraform (de preferência com suporte SSL)?
Na Amazon Hosted Zone, você tem um conjunto de servidores de nomes diferente do registrado em seu registrador.
Nenhum dos servidores de nomes acima responde a
adamatan.com SOA
&cdn.adamatan.com
. Esses servidores de nomes não têm seu domínio configurado neles, enquanto o conjunto de servidores em sua zona tem:Vá para o gerenciamento de domínio em sua conta Gandi e altere seus servidores de nome de acordo. Os registros NS na zona pai (
.com
) devem corresponder aos da sua própria (adamatan.com
).Tenha em mente que
TTL
em ambas as zonas são172800
segundos, ou seja, 48 horas. Pode levar até dois dias para que essas alterações entrem em vigor.dig adamatan.com NS @a.gtld-servers.net.
mostra se eles foram atualizados nos servidores de nomes raiz de.com
, e é aí que a contagem realmente começa.