Cloudfront 使用 Route 53 重定向
Cloudfront Redirect using Route 53
我正在使用 Terraform 创建 Cloudfront 分布。我有它 运行,但我可以访问它的唯一方法是通过 https://<id>.cloudfront.net/
地址。我想在 Route 53 区域中使用一条记录,我必须重定向到 Cloudfront 分布。知道怎么做吗?
variable "www_domain_name" {
default = "example.com"
}
S3 存储桶用于托管静态代码。这对 public 可用,并使用允许 public 访问的策略。
resource "aws_s3_bucket" "www" {
bucket = var.www_domain_name
acl = "public-read"
policy = <<POLICY
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::${var.www_domain_name}/*"]
}
]
}
POLICY
website {
index_document = "index.html"
error_document = "404.html"
}
}
AWS Certificate Manager 用于为域创建 SSL 证书。这可能需要很长时间才能申请,并且需要您使用您的电子邮件地址进行确认。
resource "aws_acm_certificate" "certificate" {
domain_name = "*.${var.root_domain_name}"
validation_method = "EMAIL"
subject_alternative_names = [ var.root_domain_name ]
}
AWS Cloudfront 用于将网站负载分配到 Amazon 的边缘位置。
resource "aws_cloudfront_distribution" "www_distribution" {
/**
* The distribution's origin needs a "custom" setup in order to redirect
* traffic from <domain>.com to www.<domain>.com. The values bellow are the
* defaults.
*/
origin {
custom_origin_config {
http_port = "80"
https_port = "443"
origin_protocol_policy = "http-only"
origin_ssl_protocols = ["TLSv1", "TLSv1.1", "TLSv1.2"]
}
/**
* This connects the S3 bucket created earlier to the Cloudfront
* distribution.
*/
domain_name = aws_s3_bucket.www.website_endpoint
origin_id = var.www_domain_name
}
enabled = true
default_root_object = "index.html"
default_cache_behavior {
viewer_protocol_policy = "redirect-to-https"
compress = true
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
target_origin_id = var.www_domain_name
min_ttl = 0
default_ttl = 86400
max_ttl = 31536000
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
}
/**
* This sets the aliases of the Cloudfront distribution. Here, it is being
* set to be accessible by <var.www_domain_name>.
*/
aliases = [ var.www_domain_name ]
restrictions {
geo_restriction {
restriction_type = "none"
}
}
/**
* The AWS ACM Certificate is then applied to the distribution.
*/
viewer_certificate {
acm_certificate_arn = aws_acm_certificate.certificate.arn
ssl_support_method = "sni-only"
}
}
需要创建 Route 53 区域,以便其名称服务器可以指向 Cloudfront Distribution。
resource "aws_route53_zone" "zone" {
name = var.root_domain_name
}
这是重定向到 Cloudfront 分发的 Route 53 记录。
resource "aws_route53_record" "www" {
zone_id = aws_route53_zone.zone.zone_id
name = var.www_domain_name
type = "A"
alias {
name = aws_cloudfront_distribution.www_distribution.domain_name
zone_id = aws_cloudfront_distribution.www_distribution.hosted_zone_id
evaluate_target_health = false
}
}
在评论和聊天中反复讨论后,Route53 区域似乎配置错误,缺少域期望的名称服务器。
添加名称服务器记录以匹配 whois tylernorlund.com | grep "Name Server"
的输出显示的内容后,该区域再次可解析并且能够解析记录。
$ whois tylernorlund.com | grep "Name Server"
Name Server: NS-1398.AWSDNS-46.ORG
Name Server: NS-1571.AWSDNS-04.CO.UK
Name Server: NS-365.AWSDNS-45.COM
Name Server: NS-871.AWSDNS-44.NET
Name Server: ns-1398.awsdns-46.org
Name Server: ns-1571.awsdns-04.co.uk
Name Server: ns-365.awsdns-45.com
Name Server: ns-871.awsdns-44.net
$ dig tylernorlund.com any @8.8.8.8
; <<>> DiG 9.11.3-1ubuntu1.14-Ubuntu <<>> tylernorlund.com any @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31196
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;tylernorlund.com. IN ANY
;; ANSWER SECTION:
tylernorlund.com. 59 IN A 99.86.119.38
tylernorlund.com. 59 IN A 99.86.119.32
tylernorlund.com. 59 IN A 99.86.119.124
tylernorlund.com. 59 IN A 99.86.119.72
tylernorlund.com. 21599 IN NS ns-1398.awsdns-46.org.
tylernorlund.com. 21599 IN NS ns-1571.awsdns-04.co.uk.
tylernorlund.com. 21599 IN NS ns-365.awsdns-45.com.
tylernorlund.com. 21599 IN NS ns-871.awsdns-44.net.
tylernorlund.com. 899 IN SOA ns-365.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
tylernorlund.com. 599 IN MX 10 inbound-smtp.us-east-1.amazonaws.com.
tylernorlund.com. 299 IN TXT "v=spf1 include:amazonses.com ~all"
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Mar 03 10:21:44 GMT 2021
;; MSG SIZE rcvd: 402
我正在使用 Terraform 创建 Cloudfront 分布。我有它 运行,但我可以访问它的唯一方法是通过 https://<id>.cloudfront.net/
地址。我想在 Route 53 区域中使用一条记录,我必须重定向到 Cloudfront 分布。知道怎么做吗?
variable "www_domain_name" {
default = "example.com"
}
S3 存储桶用于托管静态代码。这对 public 可用,并使用允许 public 访问的策略。
resource "aws_s3_bucket" "www" {
bucket = var.www_domain_name
acl = "public-read"
policy = <<POLICY
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::${var.www_domain_name}/*"]
}
]
}
POLICY
website {
index_document = "index.html"
error_document = "404.html"
}
}
AWS Certificate Manager 用于为域创建 SSL 证书。这可能需要很长时间才能申请,并且需要您使用您的电子邮件地址进行确认。
resource "aws_acm_certificate" "certificate" {
domain_name = "*.${var.root_domain_name}"
validation_method = "EMAIL"
subject_alternative_names = [ var.root_domain_name ]
}
AWS Cloudfront 用于将网站负载分配到 Amazon 的边缘位置。
resource "aws_cloudfront_distribution" "www_distribution" {
/**
* The distribution's origin needs a "custom" setup in order to redirect
* traffic from <domain>.com to www.<domain>.com. The values bellow are the
* defaults.
*/
origin {
custom_origin_config {
http_port = "80"
https_port = "443"
origin_protocol_policy = "http-only"
origin_ssl_protocols = ["TLSv1", "TLSv1.1", "TLSv1.2"]
}
/**
* This connects the S3 bucket created earlier to the Cloudfront
* distribution.
*/
domain_name = aws_s3_bucket.www.website_endpoint
origin_id = var.www_domain_name
}
enabled = true
default_root_object = "index.html"
default_cache_behavior {
viewer_protocol_policy = "redirect-to-https"
compress = true
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
target_origin_id = var.www_domain_name
min_ttl = 0
default_ttl = 86400
max_ttl = 31536000
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
}
/**
* This sets the aliases of the Cloudfront distribution. Here, it is being
* set to be accessible by <var.www_domain_name>.
*/
aliases = [ var.www_domain_name ]
restrictions {
geo_restriction {
restriction_type = "none"
}
}
/**
* The AWS ACM Certificate is then applied to the distribution.
*/
viewer_certificate {
acm_certificate_arn = aws_acm_certificate.certificate.arn
ssl_support_method = "sni-only"
}
}
需要创建 Route 53 区域,以便其名称服务器可以指向 Cloudfront Distribution。
resource "aws_route53_zone" "zone" {
name = var.root_domain_name
}
这是重定向到 Cloudfront 分发的 Route 53 记录。
resource "aws_route53_record" "www" {
zone_id = aws_route53_zone.zone.zone_id
name = var.www_domain_name
type = "A"
alias {
name = aws_cloudfront_distribution.www_distribution.domain_name
zone_id = aws_cloudfront_distribution.www_distribution.hosted_zone_id
evaluate_target_health = false
}
}
在评论和聊天中反复讨论后,Route53 区域似乎配置错误,缺少域期望的名称服务器。
添加名称服务器记录以匹配 whois tylernorlund.com | grep "Name Server"
的输出显示的内容后,该区域再次可解析并且能够解析记录。
$ whois tylernorlund.com | grep "Name Server"
Name Server: NS-1398.AWSDNS-46.ORG
Name Server: NS-1571.AWSDNS-04.CO.UK
Name Server: NS-365.AWSDNS-45.COM
Name Server: NS-871.AWSDNS-44.NET
Name Server: ns-1398.awsdns-46.org
Name Server: ns-1571.awsdns-04.co.uk
Name Server: ns-365.awsdns-45.com
Name Server: ns-871.awsdns-44.net
$ dig tylernorlund.com any @8.8.8.8
; <<>> DiG 9.11.3-1ubuntu1.14-Ubuntu <<>> tylernorlund.com any @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31196
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;tylernorlund.com. IN ANY
;; ANSWER SECTION:
tylernorlund.com. 59 IN A 99.86.119.38
tylernorlund.com. 59 IN A 99.86.119.32
tylernorlund.com. 59 IN A 99.86.119.124
tylernorlund.com. 59 IN A 99.86.119.72
tylernorlund.com. 21599 IN NS ns-1398.awsdns-46.org.
tylernorlund.com. 21599 IN NS ns-1571.awsdns-04.co.uk.
tylernorlund.com. 21599 IN NS ns-365.awsdns-45.com.
tylernorlund.com. 21599 IN NS ns-871.awsdns-44.net.
tylernorlund.com. 899 IN SOA ns-365.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
tylernorlund.com. 599 IN MX 10 inbound-smtp.us-east-1.amazonaws.com.
tylernorlund.com. 299 IN TXT "v=spf1 include:amazonses.com ~all"
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Mar 03 10:21:44 GMT 2021
;; MSG SIZE rcvd: 402