我正在使用terraform在AWS Parameter Store中创建参数。
resource "aws_ssm_parameter" "username" {
name = "username"
type = "SecureString"
value = "to_be_defined"
overwrite = false
}
provider "aws" {
version = "~> 1.53"
}
当我terraform apply
第一次运行时,如果该参数不存在,terraform将创建该参数。但是,如果我再次运行它(通常使用不同的值),则会收到错误消息
ParameterAlreadyExists:参数已存在。要覆盖此值,请将请求中的overwrite选项设置为true
如果我正确理解,那是由于AWS Cli的行为(并非特定于提供程序)。
当前行为overwrite = false
是
如果该参数不存在,则创建它
如果该参数存在,则抛出异常
我想要实现的是
如果参数不存在,则创建它
如果参数存在,则不执行任何操作
我没有在AWS CLI文档中找到实现所需行为的方法。
我想知道是否有任何方法可以使用Terraform(或直接通过AWS CLI)实现所需的行为
我同意@ydaetskcoR,您也应该保持terraform状态的值。
但是,如果您坚持忽略存在SSM密钥的情况下要更新的值,则可以使用生命周期ignore_changes
(https://www.terraform.io/docs/configuration/resources.html#ignore_changes)
因此,您可以将代码更新为
resource "aws_ssm_parameter" "username" {
name = "username"
type = "SecureString"
value = "to_be_defined"
overwrite = false
lifecycle {
ignore_changes = [
value,
]
}
覆盖-(可选)覆盖现有参数。如果未指定,则在未通过terraform创建资源以避免覆盖现有资源的情况下将默认设置为false,否则将默认为true(
terraform lifecycle rules should then be used to manage the update behavior
)。
顺便说一句,SecureString
用terraform管理SSM密钥/值不是一个好的设计,因为它的tfstate文件未加密。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句