Terraform 地形aws\u ssm\u参数为空/空,忽略更改
我有一个地形配置,如下所示:Terraform 地形aws\u ssm\u参数为空/空,忽略更改,terraform,terraform-provider-aws,ssm,Terraform,Terraform Provider Aws,Ssm,我有一个地形配置,如下所示: 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] } } 其想法是,在
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
上,基于foo
的值,bar
资源将存储在SSM中的baz
,然后在后续调用apply
时,我将能够引用aws_SSM_参数.bar.value
,但我看到它在第一次运行时起作用,存储新创建的随机值,然后在后续运行时aws\u ssm\u parameter.bar.value
为空
如果我创建了一个aws\u ssm\u参数
数据源,该参数可以正确提取值,但在第一个apply
参数尚不存在时,该参数不起作用。如何修改此配置,以便获得存储在SSM中baz
中的值,并在同一配置中创建值?(抱歉,没有足够的业力进行评论)
要解决鸡蛋问题,可以将dependens\u on=[aws\u ssm\u parameter.bar]
添加到数据资源中,但这会带来一些尴尬(特别是当您需要在工作流中经常调用destroy
时)。这不是特别推荐的(请参阅)
但是,它返回为空是没有意义的,所以我想知道您是否遇到了另一个bug。该值是否实际被传递到SSM(即,当您运行aws SSM get parameter…
时,您是否可以看到它)
编辑-我刚刚使用以下工具测试了您的示例代码:
output "bar" {
value = aws_ssm_parameter.bar.value
}
而且似乎效果不错。也许您需要更新tf或插件?您是否尝试将值存储在您的状态中?奇怪的是,当我拉动状态时,我实际上看到了存储在其中的值,但是当它被使用时,它是空的/空的。您运行Terraform作为的IAM用户/角色是否有权使用此
SecureString
参数加密的kms密钥使用kms:Decrypt
操作?有关于所需内容的信息。我检查了,并且我使用的角色确实有kms:Decrypt
。我想尝试添加取决于,但似乎没有帮助,但我可以尝试。它确实被正确地发布到SSM,主要问题是在后续运行中,bar
资源的值为空,而我可以从SSM数据源中为baz
提取该值。我应该补充一点,我尝试了这个方法,但不幸的是,它没有帮助。