gpt4 book ai didi

terraform - 获取 terraform 以忽略已停止实例的 "associate_public_ip_address"状态

转载 作者:行者123 更新时间:2023-12-04 12:18:28 28 4
gpt4 key购买 nike

我有一个带有 vpc、公共(public)子网、路由和安全组的简单 AWS 部署。运行 terraform apply将启动一个 AWS 实例,我将该实例配置为关联一个公共(public) IP。创建实例后,我运行 terraform plan它正确地说一切都是最新的。到目前为止没有问题。

我们有一个管理节点,如果它在一段时间内未使用,作为节省成本的措施,它将关闭该实例。

问题是:一旦该实例关闭,当我运行 terraform plan 时,aws 提供程序看到所有配置正确,但由于公共(public) IP 已被释放,associate_public_ip_address 的值不再与 terraform 配置中的配置相匹配,因此 terraform 想要删除并重新创建该实例:
associate_public_ip_address: "false" => "true" (forces new resource)

有没有办法让 terraform 忽略那个参数?

这个问题与https://github.com/hashicorp/terraform/issues/7262略有关系.但就我而言,我不想设置预期状态,我只想告诉 terraform 忽略该参数,因为它现在没有关联就可以了,只要将其配置为关联时即可开始。

(我在写这个问题时想到了这一点:我没有尝试配置子网以自动关联其中启动的实例的公共(public) ip。可以想象,通过使子网自动执行此操作,并从“aws_instance”中删除选项,我可能会能够使 terraform 不注意该值...但我对此表示怀疑。)

最佳答案

您可以使用 lifecycle blockignore certain attribute changes .

使用它,资源最初是使用为该属性提供的值创建的。在随后的计划、应用等操作中,Terraform 将忽略对该属性的更改。

如果我们为 associate_public_ip_address 添加一个忽略在生命周期块中,停止的实例将不再触发新资源。

请注意,如果您更改需要新实例的任何其他参数,则停止的参数将被终止并替换。

基于 Terraform aws_instance example code 的示例:

provider "aws" {
region = "us-west-2"
}

data "aws_ami" "ubuntu" {
most_recent = true

filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]
}

filter {
name = "virtualization-type"
values = ["hvm"]
}

owners = ["099720109477"] # Canonical account ID
}

resource "aws_instance" "web" {
ami = "${data.aws_ami.ubuntu.id}"
instance_type = "t2.micro"
associate_public_ip_address = "true"
tags {
Name = "HelloWorld"
}

lifecycle {
ignore_changes = ["associate_public_ip_address"]
}
}

关于terraform - 获取 terraform 以忽略已停止实例的 "associate_public_ip_address"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52519463/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com