#amazon-web-services #terraform #amazon-route53 #terraform-provider-aws
#amazon-web-services #terraform #amazon-route53 #terraform-provider-aws
Вопрос:
Поскольку домен уже существовал, я импортировал зону в свою конфигурацию:
resource "aws_route53_zone" "example_hosted_zone" {
name = "example.club"
}
Запись маршрута 53:
resource "aws_route53_record" "us-battasks" {
zone_id = aws_route53_zone.example_hosted_zone.zone_id
name = "us-battasks"
type = "CNAME"
ttl = "60"
records = [aws_lb.restricted_access_lb.id]
}
resource "aws_route53_record" "us-battasksapi" {
zone_id = aws_route53_zone.example_hosted_zone.zone_id
name = "us-battasksapi"
type = "CNAME"
ttl = "60"
records = [aws_lb.restricted_access_lb.id]
}
План Terraform показывает, что он создаст ресурс, но когда я применяю, я получаю следующую ошибку:
Error: [ERR]: Error building changeset: InvalidChangeBatch: [Invalid Resource Record: FATAL problem: DomainLabelTooLong (Domain label is too long) encountered with 'arn:aws:elasticloadbalancing:us-east-1:221124075124:loadbalancer', Unparseable CNAME encountered]
status code: 400, request id: e43e5ced-957f-4bcd-83d2-1e7eaea7665b
Error: [ERR]: Error building changeset: InvalidChangeBatch: [Invalid Resource Record: FATAL problem: DomainLabelTooLong (Domain label is too long) encountered with 'arn:aws:elasticloadbalancing:us-east-1:221124075124:loadbalancer', Unparseable CNAME encountered]
status code: 400, request id: 33d3340e-f2f2-4c95-bc96-a9de1349afc4
Вот код Terraform для балансировщика нагрузки, если это поможет:
resource "aws_lb" "restricted_access_lb" {
name = "restricted-access-lb"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.swarm_node_sg.id, aws_security_group.monolaunch_instance_sg.id, aws_security_group.restricted_access_sg.id]
subnets = [aws_subnet.public_subnet_b.id, aws_subnet.public_subnet_a.id]
enable_deletion_protection = true
}
Ответ №1:
id
Ресурс aws_lb
— это ARN, поэтому вы видите ARN для балансировщика нагрузки, отображаемый в ошибке, когда он пытается создать запись Route53.
Вместо этого вы должны использовать dns_name
атрибут, который будет сопоставляться с адресом балансировщика нагрузки.
resource "aws_route53_record" "us-battasksapi" {
zone_id = aws_route53_zone.example_hosted_zone.zone_id
name = "us-battasksapi"
type = "CNAME"
ttl = "60"
records = [aws_lb.restricted_access_lb.dns_name]
}
Если вместо этого вы хотели использовать псевдоним записи A, чтобы избежать второго поиска DNS (плюс проблемы с записями apex в зоне), вы бы вместо этого использовали следующее:
resource "aws_route53_record" "us-battasksapi" {
zone_id = aws_route53_zone.example_hosted_zone.zone_id
name = "us-battasksapi"
type = "A"
alias {
name = aws_lb.restricted_access_lb.dns_name
zone_id = aws_lb.restricted_access_lb.zone_id
evaluate_target_health = true
}
}
Ответ №2:
В вашем aws_route53_record
вы используете:
records = [aws_lb.restricted_access_lb.id]
Это попытается преобразовать CNAME в ARN вашего балансировщика нагрузки. Вместо этого вы должны использовать
records = [aws_lb.restricted_access_lb.dns_name]
В идеале это также должна быть запись псевдонима, а не CNAME, как показано в документации.