2017-09-26 4 views
1

EC2 인스턴스를 만들지 만 Route53 레코드를 추가하면 DNS가 복제되고 인식되도록 최대 60 초가 소요됩니다.EC2 인스턴스의 Terraform Route53 레코드 지연

resource "aws_instance" "zk-host" { 
    ami    = "ami-30041c53" # Amazon Linux Image 
    count    = "${var.count}" 
    associate_public_ip_address = false 

    connection { 
    user = "ec2-user" 
    } 

    provisioner "remote-exec" { 
    inline = [ 
     ... install things here... 
     #"sudo service zookeeper-server start ... after some delay ?" 
    ] 
    } 
} 

// Make a DNS entry for each host while we're here. 
resource "aws_route53_record" "route53-record-zk" { 
    zone_id = "${var.route53-zone-id}" 
    count = "${var.count}" 
    name = "${var.host-name-prefix}${count.index}.dwh.local" 
    type = "A" 
    ttl  = "30" 

    records = [ 
    "${element(aws_instance.zk-host.*.private_ip, count.index)}" 
    ] 
} 

문제는 내가 그 동료를 찾기 위해 DNS에 의존 내 EC2 인스턴스에서 서비스를 시작하기 위해 원격 간부 제공자를 사용하고있다.

EC2 인스턴스를 만들기 전에 DNS 항목을 구성 할 수없는 것처럼 보입니다.

EC2 인스턴스를 사후 처리하고 나중에 서비스를 시작할 수있는 방법이 있습니까? 아니면 DNS 항목이 존재할 때까지 서비스 시작을 지연시키는 기술이 있습니까?

+0

'sleep 120'과 같이 remote-exec에 래퍼 스크립트를 추가해야합니다. – BMW

+0

제안에 감사하지만 그다지 효과가 없습니다. 문제는 * aws_route53_record *에 대한 상호 의존성 인 것 같습니다. aws_instance에 따라 IP가 달라집니다. 잠을 자면 aws_instance의 완료가 지연됩니다. 어떻게 든 백그라운드에서 포크 할 필요가 있다고 생각합니다. – Exie

답변

0

null_resource을 사용하면 프로비저와 인스턴스 자원을 분리 할 수 ​​있습니다. 나는 그것이 배율이 자동 그룹에서 실행 등의 작업에 올 때 옵션을 제한하기 때문에하지만 여기에 DNS 검색에 의존 약간주의 할 것

resource "aws_instance" "zk-host" { 
    ami    = "ami-30041c53" # Amazon Linux Image 
    count    = "${var.count}" 
    associate_public_ip_address = false 
} 

// Make a DNS entry for each host while we're here. 
resource "aws_route53_record" "route53-record-zk" { 
    zone_id = "${var.route53-zone-id}" 
    count = "${var.count}" 
    name = "${var.host-name-prefix}${count.index}.dwh.local" 
    type = "A" 
    ttl  = "30" 

    records = [ 
    "${element(aws_instance.zk-host.*.private_ip, count.index)}" 
    ] 
} 

resource "null_resource" "zk-host_provisioning" { 
    count = "${var.count}" 

    connection { 
    user = "ec2-user" 
    host = "${element(aws_instance.zk-host.*.public_ip, count.index)}" 
    } 

    provisioner "remote-exec" { 
    inline = [ 
     ... install things here... 
     #"sudo service zookeeper-server start ... after some delay ?" 
    ] 
    } 
} 

(: 귀하의 경우

그것과 같을 것 인스턴스가 부족하여 자신의 DNS 레코드를 작성하고 시작시 프로비저닝) 사육사 클러스터 내에서 서비스 검색을위한 다른 옵션을 고려할 수 있습니다. This blog post은 S3를 사용하여 모든 노드 목록을 제공 할 수 있다고 제안하지만 다른 질문을하고 싶습니다.

+0

고마워. 걱정 마세요. 우리는 POC에서 벗어나 프로덕션 및 기타 환경을 위해이 패키지를 패키지화 할 때이 모든 것을 올바르게 정리할 것입니다. 이것은 정말로 도움이되지만 우리가 앞으로 나아갈 수 있도록 도와줍니다. 건배. – Exie