Ank*_*kit 5 aws-cli terraform ssm terraform-provider-aws
我正在使用 terraform 在 AWS Parameter Store 中创建一个参数。
resource "aws_ssm_parameter" "username" {
name = "username"
type = "SecureString"
value = "to_be_defined"
overwrite = false
}
provider "aws" {
version = "~> 1.53"
}
Run Code Online (Sandbox Code Playgroud)
当我terraform apply
第一次运行时,如果参数不存在 terraform 创建参数。但是,如果我再次运行它(通常使用不同的值),我会收到错误
ParameterAlreadyExists:参数已经存在。要覆盖此值,请将请求中的覆盖选项设置为 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,
]
}
Run Code Online (Sandbox Code Playgroud)
覆盖 - (可选)覆盖现有参数。如果未指定,如果资源尚未由 terraform 创建,则默认为 false 以避免覆盖现有资源,否则默认为 true (
terraform lifecycle rules should then be used to manage the update behavior
)。
顺便说一句,SecureString
用 terraform管理SSM 密钥/值并不是一个好的设计,因为它的 tfstate 文件没有加密。
归档时间: |
|
查看次数: |
6546 次 |
最近记录: |