【问题标题】:Terraform aws_ssm_parameter null/empty with ignore_changesTerraform aws_ssm_parameter null/empty with ignore_changes
【发布时间】:2021-09-17 08:53:16
【问题描述】:

我有一个如下所示的 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,但我看到的是它在第一次运行时工作,存储新创建的随机值,然后在后续运行aws_ssm_parameter.bar.value 为空。

如果我创建一个可以正确提取值的aws_ssm_parameter 数据源,但它在第一个apply 尚不存在时不起作用。如何修改此配置,以便我可以在 SSM 中获取存储在 baz 中的值并在同一配置中创建值?

【问题讨论】:

  • 您是否尝试将值存储在您的状态中?
  • 奇怪的是,当我拉取状态时,我实际上看到了存储在其中的值,但是当它被使用时,它是空的/null。
  • 您运行 Terraform 的 IAM 用户/角色是否有权使用 kms:Decrypt 操作和用于加密此 SecureString 参数的 KMS 密钥?有关于需要什么的信息in the SSM documentation
  • 我查了一下,我使用的角色确实有kms:Decrypt

标签: terraform terraform-provider-aws ssm


【解决方案1】:

(对不起,没有足够的业力来评论)

要解决鸡蛋问题,您可以将depends_on = [aws_ssm_parameter.bar] 添加到数据资源中,但这会带来一些尴尬(特别是如果您需要在工作流程中经常调用destroy)。不是特别推荐(见here)。

不过,它返回空并没有什么意义,所以我想知道你是否遇到了不同的错误。值实际上是否会发布到 SSM(即,当你运行 aws ssm get-paramter ... 时你能看到它吗)?

编辑-我刚刚测试了上面的示例代码:

output "bar" {
  value = aws_ssm_parameter.bar.value
}

它似乎工作正常。也许您需要更新 tf 或插件?

【讨论】:

  • 我想过尝试添加depends_on,但似乎没有帮助,但我可以尝试。它确实正确发布到 SSM,主要问题是在后续运行中 bar 资源的值是空的,而我可以从 baz 的 SSM 数据源中提取值。
  • 我应该补充一点,我试过这个,但很遗憾,它没有帮助。
【解决方案2】:

哦,我忘记了这个问题,但事实证明我确实发现了问题。

问题是我在另一个模块中使用的模块内创建了 ssm 参数。问题是因为我没有输出与此参数相关的任何内容,因此在创建后的后续重新计划中,Terraform 似乎从状态中删除了它。将其公开为模块上的输出解决了该问题。

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多