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
提取该值。我应该补充一点,我尝试了这个方法,但不幸的是,它没有帮助。