Terraform aws_ssm_parameter null/empty 与 ignore_changes
Terraform aws_ssm_parameter null/empty with ignore_changes
我有一个如下所示的 Terraform 配置:
resource "random_string" "foo" {
length = 31
special = false
}
resource "aws_ssm_parameter" "bar" {
name = "baz"
type = "SecureString"
value = random_string.foo.result
lifecycle {
ignore_changes = [value]
}
}
想法是,第一个 terraform apply
bar
资源将根据 foo
的值存储在 SSM 的 baz
中,然后在后续调用 apply
我将能够引用 aws_ssm_parameter.bar.value
,但是我看到它在第一个 运行 上工作,存储新创建的随机值,然后在后续 运行s aws_ssm_parameter.bar.value
为空。
如果我创建了一个可以正确提取值的 aws_ssm_parameter
数据源,但它在第一个 apply
尚不存在时不起作用。如何修改此配置,以便我可以在 SSM 中获取存储在 baz
中的值,并在同一配置中创建值?
(抱歉没有足够的人缘来评论)
要解决先有鸡还是先有蛋的问题,您可以将 depends_on = [aws_ssm_parameter.bar]
添加到数据资源中,但这会带来一些尴尬(尤其是当您需要在工作流程中经常调用 destroy
时)。不是特别推荐(参见here)。
不过,它返回空值并没有什么意义,所以我想知道您是否遇到了其他错误。值 实际上 是否已发布到 SSM(即当您 运行 aws ssm get-paramter ...
时可以看到它)?
编辑 - 我刚刚测试了上面的示例代码:
output "bar" {
value = aws_ssm_parameter.bar.value
}
它似乎工作正常。也许您需要更新 tf 或插件?
哦,我忘记了这个问题,但事实证明我确实找到了问题。
问题是我在另一个模块中使用的模块中创建了 ssm 参数。问题是因为我没有输出与此参数相关的任何内容,因此它似乎在创建后的后续重新计划中被 Terraform 从状态中删除。将其公开为模块上的输出解决了这个问题。
我有一个如下所示的 Terraform 配置:
resource "random_string" "foo" {
length = 31
special = false
}
resource "aws_ssm_parameter" "bar" {
name = "baz"
type = "SecureString"
value = random_string.foo.result
lifecycle {
ignore_changes = [value]
}
}
想法是,第一个 terraform apply
bar
资源将根据 foo
的值存储在 SSM 的 baz
中,然后在后续调用 apply
我将能够引用 aws_ssm_parameter.bar.value
,但是我看到它在第一个 运行 上工作,存储新创建的随机值,然后在后续 运行s aws_ssm_parameter.bar.value
为空。
如果我创建了一个可以正确提取值的 aws_ssm_parameter
数据源,但它在第一个 apply
尚不存在时不起作用。如何修改此配置,以便我可以在 SSM 中获取存储在 baz
中的值,并在同一配置中创建值?
(抱歉没有足够的人缘来评论)
要解决先有鸡还是先有蛋的问题,您可以将 depends_on = [aws_ssm_parameter.bar]
添加到数据资源中,但这会带来一些尴尬(尤其是当您需要在工作流程中经常调用 destroy
时)。不是特别推荐(参见here)。
不过,它返回空值并没有什么意义,所以我想知道您是否遇到了其他错误。值 实际上 是否已发布到 SSM(即当您 运行 aws ssm get-paramter ...
时可以看到它)?
编辑 - 我刚刚测试了上面的示例代码:
output "bar" {
value = aws_ssm_parameter.bar.value
}
它似乎工作正常。也许您需要更新 tf 或插件?
哦,我忘记了这个问题,但事实证明我确实找到了问题。
问题是我在另一个模块中使用的模块中创建了 ssm 参数。问题是因为我没有输出与此参数相关的任何内容,因此它似乎在创建后的后续重新计划中被 Terraform 从状态中删除。将其公开为模块上的输出解决了这个问题。