【问题标题】:Make Terraform ignore the order of list items returned from the service使 Terraform 忽略从服务返回的列表项的顺序
【发布时间】:2021-10-22 12:04:14
【问题描述】:

我正在创建一个 AWS IAM 策略,该策略将资源访问权限授予多个远程账户。我在一个列表中列出了这些帐户 - 都很好。但是,当 TF 检查后续 plan 的当前状态时,它会以不同的顺序返回,并且 TF 认为必须对其进行更正。如何忽略列表顺序?

这是我的资源:

resource "aws_ecr_repository_policy" "repo" {
  policy = jsonencode({
    Statement = [
      {
        Principal = {
          AWS = [ 
              "arn:aws:iam::123456789012:root",
              "arn:aws:iam::567890123456:root",
              "arn:aws:iam::987654321098:root",
          ]
...

现在在随后的 terraform plan 运行中,我得到了一些变化:

~ {
    ~ Principal = {
      ~ AWS = [
        + "arn:aws:iam::987654321098:root",    <<< swapped order
          "arn:aws:iam::123456789012:root",
          "arn:aws:iam::567890123456:root",
        - "arn:aws:iam::987654321098:root",    <<< and here
      ]
    }

AWS 的返回顺序是不可预测的,每次都会改变。我可以以某种方式忽略订单吗?理想情况下,不要忽略带有生命周期/ignore_changes 的整个 policy 块。

【问题讨论】:

  • 或许可以使用ignore_changes 排除所有原则,但不会仅限于对订单的更改。
  • @Marcin 我该怎么做,因为校长在 jsonencode() 里面?
  • 这让我很困惑。我有一个 ECR 政策,它也明确地允许我们组织中的某些帐户,就像您在这里一样,但我们没有看到重新排序帐户时出现任何差异流失。我看到的唯一区别是我们的只是一个静态列出帐户 ID 的heredoc,而不是使用jsonencode(它早于jsonencode 的一系列修复/添加,允许这样做)。相反,如果您修改策略以使用 aws_iam_policy_document data source 是否有效?
  • aws_iam_policy_document

标签: amazon-web-services terraform terraform-provider-aws


【解决方案1】:

这是 terraform-provider-aws 的问题(目前开放),请参阅 https://github.com/hashicorp/terraform-provider-aws/issues/22274

如果您愿意,您可以导航到那里并按照说明对其进行投票,以帮助社区和维护人员优先考虑此请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 2021-08-31
    • 2013-01-10
    • 2019-05-08
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    相关资源
    最近更新 更多