簡體   English   中英

如何強制 terraform 重新創建資源?

[英]How do I force terraform to recreate a resource?

我有兩個資源:

resource "aws_lightsail_instance" "myserver-sig" {
  name              = "myserver-Sig"
  availability_zone = "eu-west-2a"
  blueprint_id      = "ubuntu_20_04"
  bundle_id         = "nano_2_0"
  key_pair_name     = "LightsailDefaultKeyPair"
}

resource "aws_lightsail_instance_public_ports" "myserver-sig-public-ports" {
  instance_name = aws_lightsail_instance.myserver-sig.name
  port_info {
    protocol  = "tcp"
    from_port = 443
    to_port   = 443
  }
  port_info {
    protocol  = "tcp"
    from_port = 80
    to_port   = 80
  }
  depends_on = [
    aws_lightsail_instance.myserver-sig,
  ]
}

當我第一次運行terraform apply時,這兩個資源都被創建了。

如果我想用新版本替換aws_lightsail_instance ,則aws_lightsail_instance將重新部署,但aws_lightsail_instance_public_ports不會,因為端口沒有更改。

但是,作為aws_lightsail_instance部署的一部分,它會將公共端口更改為關閉 443 並打開 22。這意味着重新部署 aws_lightsail_instance 的結尾aws_lightsail_instance是端口 443 已關閉。

如果我再次運行terraform apply那么它將正確替換aws_lightsail_instance_public_ports打開端口 443

如何強制重新創建aws_lightsail_instance_public_ports資源,以便我只需運行一次terraform apply

您可以通過使用帶有terraform planterraform apply計划的-replace=ADDRESS參數來強制重新創建(刪除/創建或 -/+):

terraform apply -replace=aws_lightsail_instance_public_ports.myserver-sig-public-ports

這取代了之前的terraform taint <resource_address>的工作流程,然后是plan and apply 如果您使用的是舊版本的 Terraform,那么您需要改用taint

terraform taint aws_lightsail_instance_public_ports.myserver-sig-public-ports

您可以使用生命周期replace_triggered_by屬性來執行此操作。 這是在 Terraform 1.2.0(2022 年 5 月發布)中引入的。

如果要在替換 aws_lightsail_instance.myserver-sig 時觸發aws_lightsail_instance.myserver-sig aws_lightsail_instance_public_ports.myserver-sig-public-ports的替換,請將以下代碼添加到aws_lightsail_instance_public_ports.myserver-sig-public-ports配置:

resource "aws_lightsail_instance_public_ports" "myserver-sig-public-ports" {
  # ...

  lifecycle {
    replace_triggered_by = [
      aws_lightsail_instance.myserver-sig.id
    ]
  }
}

因此,每當替換 Lightsail 實例時,將自動觸發公共端口進行替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM