问题描述
在下面的部署之前,我有两个名为“one”和“two”的 droplet 和两个 mongodb 访问列表 IP,即。 mongodbatlas_project_ip_access_list,命名为“一”和“二”。 mongodbatlas_project_ip_access_list 和 digitalocean_droplet 都使用生命周期元参数 create_before_destroy
集,并且 mongodb 访问列表依赖于 droplet。在 TF 配置文件下方
resource "mongodbatlas_project_ip_access_list" "wwww_db_accesslist" {
for_each = toset(local.droplet_names)
ip_address = digitalocean_droplet.www[each.value].ipv4_address
project_id = var.mongodbatlas_project_id
comment = format("IP address of the www DO droplet floating IP on %s",var.env)
lifecycle {
create_before_destroy = true
}
}
resource "digitalocean_droplet" "www" {
for_each = toset(local.droplet_names)
image = "docker-20-04"
name = format("%s.com.gaitup.%s.www.%s",var.env,var.app_name,each.value)
region = var.region
size = "s-1vcpu-1gb"
private_networking = true
vpc_uuid = data.digitalocean_vpc.www-vpc.id
backups = var.env == "prod" ? true : false
monitoring = true
ssh_keys = [
data.digitalocean_ssh_key.terraform_do_rsa.id
]
tags = [
"www",format("%s-%s-%s","www"),]
user_data = data.template_file.cloud-init-www.rendered
lifecycle {
create_before_destroy = true
}
provisioner "local-exec" {
command = "${path.root}/scripts/check_health.sh ${self.ipv4_address}/ping 15"
}
}
以下是部署输出的片段。因为 wwww_db_accesslist 破坏发生在一开始,我的旧液滴无法到达 mongodb 图集集群,导致应用程序关闭。
digitalocean_droplet.www["2"]: Creating...
digitalocean_droplet.www["1"]: Creating...
mongodbatlas_project_ip_access_list.wwww_db_accesslist["one"]: Destroying...
[id=ZW50cnk=:MTY1LjIyLjIyLjEyNw==-cHJvamVjdF9pZA==:NWZjMGJhOWEzNDcwMzE0NjdlOTVjZjE3]
mongodbatlas_project_ip_access_list.wwww_db_accesslist["two"]: Destroying...
[id=ZW50cnk=:MTY1LjIyLjIzLjIxMg==-cHJvamVjdF9pZA==:NWZjMGJhOWEzNDcwMzE0NjdlOTVjZjE3]
digitalocean_loadbalancer.www-lb: Modifying... [id=5a6d7617-a1cf-4bc2-80c2-e13dc24677bb]
mongodbatlas_project_ip_access_list.wwww_db_accesslist["one"]: Destruction complete after 9s
mongodbatlas_project_ip_access_list.wwww_db_accesslist["two"]: Destruction complete after 9s
digitalocean_droplet.www["2"]: Still creating... [10s elapsed]
digitalocean_droplet.www["1"]: Still creating... [10s elapsed]
digitalocean_droplet.www["2"]: Still creating... [20s elapsed]
digitalocean_droplet.www["1"]: Still creating... [20s elapsed]
尽管设置了 local.droplet_names
生命周期元参数,但在更改 create_before_destroy
的值时,为什么在开始时会发生两个 wwww_db_accesslist(“一”和“二”)的破坏?
如果 local.droplet_names 保持不变,它似乎工作正常,但其他东西是..
我期望在销毁之前首先创建 mongodb 访问列表,因为它依赖于液滴(知道它的 IP)它会等待液滴创建。最后,因为液滴也有 create_before_destroy 生命周期元参数,所以所有的创建都应该首先发生,mongodb 访问列表依赖于液滴,然后是销毁,所以我认为事情的顺序是:
droplet creation -> mongo access list creation -> droplet destruction -> mongo access list destruction
为了让我的应用始终可用,至少这是我希望发生的事情。这仅适用于 terraform 吗?如果是这样怎么办?如果没有,我可以使用哪些策略?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)