2017-09-26 118 views
1

我正在創建EC2實例,但是當我添加Route53記錄時,DNS需要60秒才能進行復制並得到識別。Terraform EC2實例的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)}" 
    ] 
} 

問題是,我正在使用remote-exec provisioner在我的EC2實例中啓動依賴於DNS查找其對等方的服務。

我似乎無法在創建EC2實例之前配置DNS條目。

有沒有辦法可以後期處理我的EC2實例並在以後啓動服務?還是有一種技術可以延遲服務啓動,直到DNS條目存在?

+0

您需要在remote-exec中添加包裝腳本,例如'sleep 120'。 – BMW

+0

感謝您的建議,但沒有奏效。這個問題似乎是* aws_route53_record *的相互依賴關係。它取決於aws_instance獲取它的IP。添加睡眠只會延遲aws_instance的完成。我想我需要以某種方式在背景中分叉它。 – Exie

回答

0

您可以使用null_resource來解決此問題,以便將供應商與實例資源分開。

在你的情況下,它看起來是這樣的:

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發現這裏雖然因爲當它涉及到的東西像自動縮放組中運行限制你的選擇的(因爲實例沒有制定出自己的DNS記錄並在啓動時進行配置),因此您可能需要考慮Zookeeper集羣內部的其他服務發現選項。 This blog post建議您可以使用S3提供所有節點的列表,但您可能想要提出另一個有關該問題的問題。

+0

謝謝你。不用擔心,當我們移出POC並將其封裝到生產環境和其他環境中時,我們將整理好這一切。這雖然有幫助,並有助於我們繼續前進。乾杯。 – Exie