微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置空资源以在Terraform

如何解决设置空资源以在Terraform

resource "aws_route53_record" "record" {
    zone_id = data.aws_route53_zone.selected.zone_id
    name    = "${var.sfs_instance_name}.example.com"
    type    = "A"
    ttl     = "60"
    records = ["${aws_eip.sfs.public_ip}"]
  }

resource "null_resource" "sfs-ssl-certs" {

  connection {
    type        = "ssh"
    user        = "centos"
    host        = aws_eip.sfs.public_ip
    private_key = file("../keys/${var.sfs_instance_name}.pem")
  }

  provisioner "remote-exec" {
    inline = [
      "set -x","sudo certbot --Nginx -d ${var.sfs_instance_name}.example.com --register-unsafely-without-email --agree-tos --force-renewal --non-interactive > /home/centos/get_cert.log"
    ]
}

动态为域名"${var.sfs_instance_name}.example.com"创建Nginx ssl,该条目会在执行结束时添加,因此certBox ssl证书创建失败,我该如何克服它,我可以等待{{ 1}}创建条目还是有其他解决方法

解决方法

我认为解决方案是添加depends_on

resource "null_resource" "sfs-ssl-certs" {

  depends_on = [aws_route53_record.record]

  connection {
    type        = "ssh"
    user        = "centos"
    host        = aws_eip.sfs.public_ip
    private_key = file("../keys/${var.sfs_instance_name}.pem")
  }

  provisioner "remote-exec" {
    inline = [
      "set -x","sudo certbot --nginx -d ${var.sfs_instance_name}.example.com --register-unsafely-without-email --agree-tos --force-renewal --non-interactive > /home/centos/get_cert.log"
    ]
}
,

您可以通过在资源中正确插值来避免使用depends_on

resource "aws_route53_record" "record" {
    zone_id = data.aws_route53_zone.selected.zone_id
    name    = "${var.sfs_instance_name}.example.com"
    type    = "A"
    ttl     = "60"
    records = [aws_eip.sfs.public_ip]
  }

resource "null_resource" "sfs-ssl-certs" {

  connection {
    type        = "ssh"
    user        = "centos"
    host        = aws_eip.sfs.public_ip
    private_key = file("../keys/${var.sfs_instance_name}.pem")
  }

  provisioner "remote-exec" {
    inline = [
      "set -x","sudo certbot --nginx -d ${aws_route53_record.record.name} --register-unsafely-without-email --agree-tos --force-renewal --non-interactive > /home/centos/get_cert.log"
    ]
}

Terraform仅在无法通过将资源的值内插到其他资源来直接告诉其他资源有关依赖关系链时,才需要depends_on参数。通常,如果您可以避免使用它并坚持直接进行资源插值,那么它将使事情变得更好。作为另一个积极的方面,它避免了您必须在两个地方通过字符串串联来构建DNS记录名称。

Terraform documentation around resource dependencies还建议避免使用depends_on,除非绝对必要:

配置中的大多数资源没有任何特殊要求 关系,并且Terraform可以更改几个不相关的 并行资源。

但是,某些资源必须在其他特定资源之后进行处理 资源;有时,这是因为资源的工作方式,以及 有时资源的配置只需要信息 由另一种资源生成。

大多数资源依赖关系是自动处理的。地貌 分析资源块中的任何表达式以查找对 其他对象,并将这些引用视为隐式排序 创建,更新或销毁资源时的要求。以来 在行为上也依赖于其他资源的大多数资源 引用这些资源的数据,通常无需手动 指定资源之间的依赖关系。

但是,某些依赖项无法在隐式识别 组态。例如,如果Terraform必须管理访问控制 政策并采取要求这些政策必须存在的行动, 访问策略和资源之间存在隐藏的依赖关系 它的创作取决于它。在这些罕见的情况下,depends_on 元参数可以显式指定依赖项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。