使 Terraform 忽略从服务返回的列表项的顺序

MLu*_*MLu 5 amazon-web-services terraform terraform-provider-aws

我正在创建一个 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",
          ]
...
Run Code Online (Sandbox Code Playgroud)

现在,在随后的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
      ]
    }
Run Code Online (Sandbox Code Playgroud)

AWS 无法预测它返回的顺序,它每次都会改变。我可以忽略该订单吗?理想情况下,不要使用生命周期/ignore_changes忽略整个policy块。

Lor*_*tti 4

这是 terraform-provider-aws 的问题(使用提供商版本 v4.23.0 修复),请参阅 https://github.com/hashicorp/terraform-provider-aws/issues/22274