我正在尝试创建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