UEF*_*EFI 11 amazon-web-services terraform amazon-lightsail
我有两个资源:
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"
}
Run Code Online (Sandbox Code Playgroud)
和
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,
]
}
Run Code Online (Sandbox Code Playgroud)
当我第一次运行时,terraform apply这两个资源都会被创建。
如果我想aws_lightsail_instance用新版本替换,那么将aws_lightsail_instance重新部署,但不会,aws_lightsail_instance_public_ports因为端口没有更改。
然而,作为部署的一部分,aws_lightsail_instance它将公共端口更改为关闭 443 并打开 22。这意味着重新部署的最终状态aws_lightsail_instance是端口 443 被关闭。
如果我terraform apply再次运行,它将正确替换aws_lightsail_instance_public_ports打开端口 443
如何强制重新创建资源aws_lightsail_instance_public_ports以便我只需运行terraform apply一次?
Mat*_*ard 18
您可以通过使用带有or 的-replace=ADDRESS参数来强制重新创建(删除/创建或 -/+):terraform planterraform apply
terraform apply -replace=aws_lightsail_instance_public_ports.myserver-sig-public-ports
Run Code Online (Sandbox Code Playgroud)
这取代了之前的工作流程,terraform taint <resource_address>后跟 aplan和apply。如果您使用的是旧版本的 Terraform,那么您需要使用taint:
terraform taint aws_lightsail_instance_public_ports.myserver-sig-public-ports
Run Code Online (Sandbox Code Playgroud)
stw*_*ter 18
您可以使用生命周期replace_triggered_by属性来执行此操作。这是在 Terraform 1.2.0(2022 年 5 月发布)中引入的。
aws_lightsail_instance_public_ports.myserver-sig-public-ports如果要在替换时触发替换aws_lightsail_instance.myserver-sig,请将以下代码添加到 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
]
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每当更换 Lightsail 实例时,公共端口都会自动触发更换。
如果您希望始终替换公共端口,即使 Lightsail 实例尚未替换,也请添加以下配置:
resource "null_resource" "always_run" {
triggers = {
timestamp = "${timestamp()}"
}
}
resource "aws_lightsail_instance_public_ports" "myserver-sig-public-ports" {
# ...
lifecycle {
replace_triggered_by = [
null_resource.always_run
]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37198 次 |
| 最近记录: |