代码之家  ›  专栏  ›  技术社区  ›  user20208419

Terraform:如何使用AWS ARN值的变量?

  •  0
  • user20208419  · 技术社区  · 2 年前

    我的代码如下:

    data "aws_arn" "stateful-rulegroup" {
      arn =  "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup"
    }
    
     24     stateful_rule_group_reference {
     25       priority     = 21
     26       #resource_arn = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup/AbusedLegitBotNetCommandAndControlDomainsStrictOrder"
     27       resource_arn = join("/", [data.aws_arn.stateful-rulegroup, "AbusedLegitBotNetCommandAndControlDomainsStrictOrder"])
     28     }
    

    26号线工程。但27号线出现故障。我的错误如下。如何为resource_arn创建一个变量,如resource_arn=var.resource_arn?

    │   on fw_policy.tf line 27, in resource "aws_networkfirewall_firewall_policy" "anfw_policy":
    │   27:       resource_arn = join("/", [data.aws_arn.stateful-rulegroup, "AbusedLegitBotNetCommandAndControlDomainsStrictOrder"])
    │     ├────────────────
    │     │ while calling join(separator, lists...)
    │     │ data.aws_arn.stateful-rulegroup is object with 7 attributes
    │
    │ Invalid value for "lists" parameter: element 0: string required.
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   ishuar    2 年前

    在错误消息中提到了该问题的提示, data.aws_arn.stateful-rulegroup is object with 7 attributes .

    当您使用 data.aws_arn.stateful-rulegroup 实际上,您使用的是整个对象,而不是它的一个属性, join 函数通过连接指定的所有元素来生成字符串 字符串列表 使用指定的分隔符。

    为了获得单个属性,特别是 arn 正如预期的那样 data.aws_arn.stateful-rulegroup.arn 应在中使用 join 作用

    Terraform代码供参考

    variable "region" {
      type        = string
      description = "(optional) describe your variable"
      default     = "eu-central-1"
    }
    
    data "aws_arn" "stateful-rulegroup" {
      arn = "arn:aws:network-firewall:${var.region}:aws-managed:stateful-rulegroup"
    }
    
    locals {
      ## Correction is Here ## 
      resource_arn = join("/", [data.aws_arn.stateful-rulegroup.arn, "AbusedLegitBotNetCommandAndControlDomainsStrictOrder"])
    }
    
    output "resource_arn" {
      value = local.resource_arn
    }
    

    计划/输出

    data.aws_arn.stateful-rulegroup: Reading...
    data.aws_arn.stateful-rulegroup: Read complete after 0s [id=arn:aws:network-firewall:eu-central-1:aws-managed:stateful-rulegroup]
    
    Changes to Outputs:
      + resource_arn = "arn:aws:network-firewall:eu-central-1:aws-managed:stateful-rulegroup/AbusedLegitBotNetCommandAndControlDomainsStrictOrder"
    

    希望这能有所帮助:)