使用相同的值更新aws_cloudfront_public_key encoded_key强制替换



我正在尝试创建aws_cloudfront_public_key使用下面提到的代码在terraform中的资源

resource "aws_cloudfront_public_key" "key" {
name        = "my-cf-pubkey"
encoded_key = file("${path.module}/abcd.pem")
}

如果terraform apply第一次被执行,那么它被成功创建。但所有的地形应用post它试图重新创建aws_cloudfront_public_key也就是说,即使没有更改公钥,它也会被销毁并重新创建,这是错误的行为。

如何克服这个问题?

计划输出为:

# aws_cloudfront_public_key.documents-signing-key must be replaced
-/+ resource "aws_cloudfront_public_key" "documents-signing-key" {
~ caller_reference = "terraform-20221218060345896500000002" -> (known after apply)
~ encoded_key      = <<-EOT # forces replacement
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
EOT
~ etag             = "E1PKWHEWOCNZS4" -> (known after apply)
~ id               = "K15GFD3XARNT0X" -> (known after apply)
name             = "my-cf-pubkey"
+ name_prefix      = (known after apply)
# (1 unchanged attribute hidden)
}

您可以尝试使用生命周期块来阻止Terraform再次尝试重新创建资源,如下所示

resource "aws_cloudfront_public_key" "key" {
name        = "my-cf-pubkey"
encoded_key = file("${path.module}/abcd.pem")

lifecycle {
create_before_destroy = true
}
}

让我知道这是否对你有帮助。

如果资源的encoded_key属性在Terraform运行之间没有变化,那么您可以使用ignore_changes属性告诉Terraform不要尝试检查更改。

例如:

resource "aws_cloudfront_public_key" "key" {
name        = "my-cf-pubkey"
encoded_key = file("${path.module}/abcd.pem")
ignore_changes = ["encoded_key"]
}

@JatinPanchal

只要在pem文件的末尾添加新行(回车键)就可以工作了。

-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKj34GkxFhD90vcNLYLInFEX6Ppy1tPf
9Cnzj4p4WGeKLs1Pt8QuKUpRKfFLfRYC9AIKjbJTWit+CqvjWYzvQwECAwEAAQ==
-----END PUBLIC KEY-----

Ref: https://github.com/hashicorp/terraform-provider-aws/issues/20081

最新更新