让terraform忽略”的意思;关联“公共ip地址”;已停止实例的状态
我有一个简单的AWS部署,带有vpc、公共子网、路由和安全组。运行让terraform忽略”的意思;关联“公共ip地址”;已停止实例的状态,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我有一个简单的AWS部署,带有vpc、公共子网、路由和安全组。运行terraformapply将启动一个AWS实例,我已将该实例配置为关联公共IP。创建实例后,我运行TerraformPlan,它正确地表示一切都是最新的。到目前为止没有问题 我们有一个管理节点,如果该实例在一段时间内未使用,它将关闭该实例,以节省成本 问题是:一旦该实例关闭,当我运行terraform plan时,aws提供程序会看到所有配置都正确,但由于公共IP已被释放,associate_public_IP_address的
terraformapply
将启动一个AWS实例,我已将该实例配置为关联公共IP。创建实例后,我运行TerraformPlan
,它正确地表示一切都是最新的。到目前为止没有问题
我们有一个管理节点,如果该实例在一段时间内未使用,它将关闭该实例,以节省成本
问题是:一旦该实例关闭,当我运行terraform plan
时,aws提供程序会看到所有配置都正确,但由于公共IP已被释放,associate_public_IP_address的值不再与terraform配置中配置的值匹配,所以terraform想要删除并重新创建该实例:
关联公共ip地址:“false”=>“true”(强制新资源)
有没有办法让terraform只忽略这一个参数
这个问题与我们的关系不大。但在我的例子中,我不想设置预期的状态,我只想告诉terraform忽略这一个参数,因为它现在没有关联是正常的,只要它被配置为在启动时关联
(我在写这个问题时想到了这一点:我没有尝试过将子网配置为自动关联在其中启动的实例的公共ip。可以想象,通过使子网自动执行此操作,并从“aws_实例”中删除该选项,我也许可以让terraform不注意这个值……但我怀疑。)你可以使用
使用该属性,资源最初是使用为该属性提供的值创建的。在后续计划、应用等时,Terraform将忽略对该属性的更改
如果我们在lifecycle块中添加一个ignore forassociate_public_ip_address
,停止的实例将不再触发新资源
请注意,如果更改任何其他需要新实例的参数,则停止的实例将被终止并替换
基于以下内容的示例:
谢谢我在示例中看到了生命周期,但误解了它的用途。你的回答起了作用,使我更加了解它。
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"]
}
}