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 从状态中删除。将其公开为模块上的输出解决了这个问题。